██╗ ██╗███╗ ██╗██╗ ██╗███████╗██████╗ ██╗███╗ ██╗
██║ ██║████╗ ██║██║ ██╔╝██╔════╝██╔══██╗██║████╗ ██║
██║ ██║██╔██╗ ██║█████╔╝ █████╗ ██║ ██║██║██╔██╗ ██║
███████╗██║██║ ╚████║██║ ██╗███████╗██████╔╝██║██║ ╚████║
MCP ZERO - public-first LinkedIn intelligence
LinkedIn MCP Zero
A public-first MCP server for LinkedIn jobs, resumes, matching, alerts, exports, and opt-in read-only browser intelligence.
No Docker required · Claude Desktop ready · Claude Code ready · Low-RAM friendly · PyPI published
Install In One Command
| Client | Command |
|---|---|
| Claude Desktop | uvx --refresh-package mcp-server-linkedin-zero mcp-server-linkedin-zero --install-client claude-desktop |
| Claude Code | uvx --refresh-package mcp-server-linkedin-zero mcp-server-linkedin-zero --install-client claude-code |
| Cursor | uvx mcp-server-linkedin-zero --install-client cursor |
| VS Code | uvx mcp-server-linkedin-zero --install-client vscode |
| Any stdio client | uvx mcp-server-linkedin-zero |
uvx mcp-server-linkedin-zero --doctor
Verify after install:
uvx --refresh-package mcp-server-linkedin-zero mcp-server-linkedin-zero --verify-client claude-desktop
Browser mode:
uvx --refresh-package mcp-server-linkedin-zero mcp-server-linkedin-zero --install-client claude-desktop --with-extra browser
Tool Inventory
Default Tools: 23 Working
These work without LinkedIn login or browser setup.
| # | Tool | Feature | Risk |
|---|---|---|---|
| 1 | search_jobs |
Search public LinkedIn jobs | Public no-login |
| 2 | search_jobs_multi |
Multi-board search; LinkedIn fallback by default | Public no-login |
| 3 | get_job_details |
Full public job details | Public no-login |
| 4 | get_company_jobs |
Public jobs for a company | Public no-login |
| 5 | get_company_profile |
Company signals inferred from public jobs | Public no-login |
| 6 | search_companies |
Company discovery from public job data | Public no-login |
| 7 | get_job_salary |
Salary extraction from job detail pages | Public no-login |
| 8 | get_job_trends |
Role/location hiring trends | Public no-login |
| 9 | get_industry_insights |
Market signals for an industry | Public no-login |
| 10 | search_jobs_advanced |
Job search with filters | Public no-login |
| 11 | analyze_resume |
Local PDF/DOCX/text resume parsing | Local |
| 12 | get_resume_insights |
Local skill gaps and suggestions | Local |
| 13 | match_jobs_to_resume |
Rank public jobs against a resume | Local/public |
| 14 | compare_jobs |
Compare selected jobs | Local/public |
| 15 | export_jobs |
Export jobs to CSV/JSON/XLSX | Local |
| 16 | save_job_alert |
Save a recurring search | Local |
| 17 | get_saved_alerts |
List saved searches | Local |
| 18 | check_saved_alerts |
Run alerts and find new matches | Local/public |
| 19 | get_engine_status |
Runtime, engine, token, cache status | Local |
| 20 | get_help |
Tool documentation | Local |
| 21 | get_usage_stats |
Local response-size/token estimates | Local |
| 22 | get_tool_usage_summary |
Aggregate local usage by tool | Local |
| 23 | reset_usage_stats |
Clear local usage metrics | Local |
Browser Tools: +11
Enable with --with-extra browser or --enable-browser. These are read-only,
but they use your logged-in browser session.
| # | Tool | Feature |
|---|---|---|
| 24 | get_my_profile |
Read your profile |
| 25 | get_person_profile |
Read a public/person profile page |
| 26 | search_people |
People search through browser |
| 27 | get_my_connections |
Read your connection list |
| 28 | get_inbox |
Recent conversations list |
| 29 | get_conversation |
Read a conversation thread |
| 30 | get_feed |
Read home feed posts |
| 31 | get_notifications |
Read notifications |
| 32 | get_sidebar_profiles |
Suggested/sidebar profiles |
| 33 | get_company_employees |
Company people page |
| 34 | check_session |
Check CDP/login readiness |
Gated Private-Risk Tool: +1
| # | Tool | Feature |
|---|---|---|
| 35 | get_profile_voyager |
Voyager/private API placeholder, disabled by default |
Default mode exposes 23 usable tools: 22 core local/public tools plus
search_jobs_multi, which falls back to LinkedIn-only results unless the
multi extra is installed. Browser tools appear only with --enable-browser or
--with-extra browser in an installed client config. Voyager/private API mode is
hidden unless explicitly enabled.
Tool counts:
| Mode | Exposed Tools | Notes |
|---|---|---|
| Default | 23 | Safe local/public tools; no LinkedIn login required |
| Browser enabled | 34 | Adds 11 read-only browser tools; needs Chrome/CDP login |
| Browser + Voyager | 35 | Adds gated private-API placeholder |
Safety Model
| Mode | Label | Account Risk |
|---|---|---|
| Local resume/alerts/exports | local_zero_account_risk |
None |
| Public no-login job data | public_no_login_read_only |
No LinkedIn login required |
| Browser tools | browser_readonly_account_risk |
Opt-in account risk |
| Voyager/private API | disabled_private_api_risk |
Disabled by default |
No tool posts, likes, connects, follows, applies, or sends messages.
Browser Mode
Install browser dependencies into the isolated uvx runtime:
uvx mcp-server-linkedin-zero --install-client claude-desktop --with-extra browser
Start Chrome with remote debugging and log in manually:
google-chrome --remote-debugging-port=9222
Then call check_session from your MCP client.
Global Playwright installs do not count for uvx; use --with-extra browser.
Token Usage Tracking
Claude Desktop has no built-in per-MCP token counter. This server provides a privacy-safe tracker instead:
- Estimated tokens:
ceil(response_chars / 4), always on. - Exact-style counts: optional Anthropic
/v1/messages/count_tokens. - Full tool responses are not stored in the metrics database.
- Exact-style counting sends the counted response text to Anthropic only when
ANTHROPIC_API_KEYandLINKEDIN_MCP_EXACT_TOKEN_COUNT=trueare both set.
Enable exact-style counting:
ANTHROPIC_API_KEY=sk-ant-... LINKEDIN_MCP_EXACT_TOKEN_COUNT=true uvx mcp-server-linkedin-zero
Use a different token-count model if needed:
LINKEDIN_MCP_TOKEN_COUNT_MODEL=claude-sonnet-4-5
Usage tools:
get_usage_stats
get_tool_usage_summary
reset_usage_stats
Avoid terminal transcript logging as a token strategy; it can expose private profile, inbox, resume, or job data.
Client Config
Print without editing files:
uvx mcp-server-linkedin-zero --print-config --client claude-desktop
uvx mcp-server-linkedin-zero --print-config --client vscode
Claude Desktop and Cursor use:
{
"mcpServers": {
"linkedin-zero": {
"command": "/absolute/path/to/uvx",
"args": ["mcp-server-linkedin-zero"]
}
}
}
VS Code uses:
{
"servers": {
"linkedin-zero": {
"command": "/absolute/path/to/uvx",
"args": ["mcp-server-linkedin-zero"]
}
}
}
Doctor
uvx mcp-server-linkedin-zero --doctor
uvx mcp-server-linkedin-zero --doctor --json
Checks OS, Python, RAM, disk, Chrome, CDP URL, display state, optional extras, and recommended mode.
Development
uv sync --extra dev
uv run --extra dev ruff check .
uv run --extra dev pytest
uv build
Publish only the new version files:
UV_PUBLISH_TOKEN=... uv publish dist/mcp_server_linkedin_zero-0.2.0*
Metadata
Release files for mcp-server-linkedin-zero 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| mcp_server_linkedin_zero-0.2.0.tar.gz | 204.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcp_server_linkedin_zero-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 248.0 kB
Release files / mcp_server_linkedin_zero-0.2.0.tar.gz
| Download URL | mcp_server_linkedin_zero-0.2.0.tar.gz |
|---|---|
| Size | 204.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1a93af8ec71c23b9df22f077a7da05e44a4df02125a4c975da1270ad3805dec8
|
|
BLAKE2b-256 checksum How to use checksums |
2c2317cf68598c96bb9ac7306917be7702e910cb885cb5812861f4c16c26ce87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22.3","id":"zena","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / mcp_server_linkedin_zero-0.2.0-py3-none-any.whl
| Download URL | mcp_server_linkedin_zero-0.2.0-py3-none-any.whl |
|---|---|
| Size | 43.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5bb65028568222fd422e80b19d22509382a13a363955c2cf8501895adced0327
|
|
BLAKE2b-256 checksum How to use checksums |
29ecf42d8b01ffda29676e5f905cdafeff63778ef777e46eebbed2d5d608e670
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22.3","id":"zena","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for mcp-server-linkedin-zero 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.