LinkedIn MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@LinkedIn MCP Serversearch for data scientist jobs posted this week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
LinkedIn MCP Server
A local Model Context Protocol server that exposes structured LinkedIn profile, company, and job data to MCP-compatible clients. It uses a persistent Patchright browser session, so you authenticate interactively instead of storing a LinkedIn password in an environment variable.
LinkedIn may restrict automated access, and use of this project may be subject to LinkedIn's terms and account limitations. Use it responsibly with your own account. This project is not affiliated with or endorsed by LinkedIn.
Features
Area | MCP tools |
People |
|
Companies |
|
Jobs |
|
Session |
|
Profile reads can include experience, education, interests, honors, languages, contact information, and posts. Company reads can include about information, posts, and jobs. Job search supports date, type, experience, workplace, Easy Apply, and sorting filters.
Connection requests are deliberately constrained: the tool accepts an exact profile slug, previews
the current state by default, requires confirm=true to write, and never includes a note.
Related MCP server: linkedin-mcp-server
Requirements
Python 3.12+
A LinkedIn account
The project uses pyproject.toml and uv.lock; a requirements.txt file is intentionally not
needed.
Setup
git clone https://github.com/aarnav-hariramani/linkedin-mcp.git
cd linkedin-mcp
uv sync --locked
uv run patchright install chromiumAuthenticate once in a visible browser:
uv run linkedin-mcp-server --loginThe default profile is stored at ~/.linkedin-mcp-server/browser-data. It contains sensitive
session cookies and must never be committed or shared.
Check or clear the saved session:
uv run linkedin-mcp-server --status
uv run linkedin-mcp-server --logoutMCP client configuration
Use the absolute path to your clone. For Codex:
codex mcp add linkedin -- uv --directory /absolute/path/to/linkedin-mcp-server run linkedin-mcp-serverEquivalent JSON configuration for clients such as Claude Desktop or Cursor:
{
"mcpServers": {
"linkedin": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/linkedin-mcp-server",
"run",
"linkedin-mcp-server"
]
}
}
}Restart the MCP client after changing its configuration.
Running directly
The recommended local transport is stdio:
uv run linkedin-mcp-serverFor local development, loopback-only HTTP is also available:
uv run linkedin-mcp-server \
--transport streamable-http \
--host 127.0.0.1 \
--port 8000Connect to http://127.0.0.1:8000/mcp. The server rejects non-loopback HTTP bindings.
Configuration
Copy the documented template only when you need to override defaults:
cp .env.example .envConfiguration precedence is CLI arguments, existing environment variables, .env.local, .env,
then defaults.
Variable | Default | Purpose |
|
|
|
|
| Loopback HTTP bind address |
|
| HTTP port |
|
| HTTP endpoint path |
|
|
|
|
| Run without a visible browser |
|
| Browser action delay in milliseconds |
|
| Browser timeout in milliseconds |
|
| Browser viewport width |
|
| Browser viewport height |
| unset | Optional Chromium executable |
| unset | Optional browser user agent |
|
| Persistent browser profile |
No username, password, cookie, API key, or token belongs in .env.
Safety model
Browser navigation is limited to HTTPS LinkedIn hosts.
Raw page HTML is not returned through MCP tools.
Persistent profiles are created with restrictive permissions and a marker used for safe logout.
HTTP transport is local-only;
stdiois preferred.All profile slugs, job IDs, and search input are validated.
Writes require explicit confirmation.
See SECURITY.md for handling local session data and reporting vulnerabilities.
Architecture
src/linkedin_mcp_server/
├── domain/ # Models, parsers, validation, and domain errors
├── ports/ # Browser, authentication, and configuration interfaces
├── application/ # Scrape, search, session, and connection use cases
├── adapters/
│ ├── driven/ # Patchright browser, profile auth, environment config
│ └── driving/ # CLI, FastMCP server, tools, serialization
└── container.py # Dependency composition rootDevelopment
uv sync --locked --group dev
uv run pre-commit install
uv run ruff check .
uv run ruff format --check .
uv run pytest
uv buildBrowser-backed integration testing requires a separately authenticated local session. Unit tests and CI must not depend on real credentials.
See CONTRIBUTING.md for the contribution workflow.
Acknowledgments
This project is built on top of eliasbiondo/linkedin-mcp-server
by Elias Biondo, which provided the original hexagonal architecture, Patchright-based browser
automation, and read-only profile, company, and job scraping tools. This fork adds the
send_connection_request write tool, additional navigation and session-safety hardening, and
test coverage on top of that foundation.
License
MIT. See LICENSE. Original copyright retained; see the LICENSE file for details.
Available Tools
8 toolsclose_browserA
Close the browser instance and release resources. Credentials are preserved.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It notes that credentials are preserved, but omits other side effects like session invalidation or resource cleanup scope. This is insufficient for safety-critical browser management.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundancy. The first sentence states the primary action, the second adds a key behavioral detail (credential preservation). Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an existing output schema, the description covers the essential purpose and a behavioral note. It does not explain return values, but the output schema covers that. Slightly limited for a cleanup tool, but adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters (schema coverage 100% trivially). Description adds no parameter information, but none is needed. Baseline 4 for zero-parameter tools applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Close the browser instance and release resources,' with a clear verb and resource. It distinguishes from sibling tools like check_session_status and logout_and_cleanup by focusing on the browser instance itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like logout_and_cleanup. The description does not indicate prerequisites, context, or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_postsB
Get recent posts from a company's LinkedIn feed.
Args: company_name: LinkedIn company name (e.g., 'google', 'stripe', 'openai')
| Name | Required | Description | Default |
|---|---|---|---|
| company_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It fails to disclose behavioral traits such as authentication requirements, result limits, pagination, or rate limits. The description is too minimal for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the purpose. However, it could include more detail without becoming verbose, given the simplicity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to explain return values. However, it lacks context about prerequisites (e.g., logged-in session) and usage scope, which are relevant given sibling tools like start_login.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema by providing example values (e.g., 'google', 'stripe', 'openai') for the company_name parameter, which has 0% schema description coverage. However, it does not explain the exact format or validity rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'get' and the resource 'recent posts from a company's LinkedIn feed'. It provides examples of company names, distinguishing it from sibling tools like get_company_profile or get_job_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives, no prerequisites or exclusions. Sibling tools are listed but not compared, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_profileA
Get a specific company's LinkedIn profile.
Args: company_name: LinkedIn company name (e.g., 'google', 'stripe', 'openai') sections: Comma-separated list of extra sections to scrape. The about page is always included. Available sections: posts, jobs Default (None) scrapes only the about page.
| Name | Required | Description | Default |
|---|---|---|---|
| sections | No | ||
| company_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions that the about page is always included and sections are extra, but does not discuss side effects, authorization needs, rate limits, or data mutability. The behavioral disclosure is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the purpose. The Args section is structured but could be slightly more compact. Overall, it efficiently conveys the key information without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not shown but present), the description need not explain return values. However, it lacks usage guidelines and behavioral transparency. For a two-parameter tool, it covers input adequately but leaves gaps in completeness regarding when to use and behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description adds clear meaning: company_name is illustrated with examples ('google', 'stripe'), and sections are explained with its possible values ('posts, jobs') and default behavior. This adds significant value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a specific company's LinkedIn profile.' It uses a specific verb ('Get') and resource ('company's LinkedIn profile'), which distinguishes it from siblings like get_job_details or get_person_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides parameter details but lacks explicit guidance on when to use this tool versus alternatives like get_company_posts. No context on prerequisites, limitations, or when-not-to-use is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_job_detailsB
Get job details for a specific job posting on LinkedIn.
Args: job_id: LinkedIn job ID (e.g., '3912045678', '4108763210')
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so description bears full burden. It only states 'get job details' without disclosing behavioral traits like auth needs, rate limits, or whether it's a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise with the main purpose front-loaded. Only two sentences plus parameter description. No wasted words, though some users may prefer slightly more structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with an output schema, the description is adequate but lacks detail about what fields are returned in the job details. Context signals show an output schema exists, reducing the need for return value explanation, but completeness is still middling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaningful information for the job_id parameter with examples of valid IDs (e.g., '3912045678'), which adds value beyond the schema's type string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'get' and resource 'job details for a specific job posting on LinkedIn'. It is specific and distinguishes from sibling tools like search_jobs and apply_for_job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., search_jobs or get_person_profile). No mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_person_profileA
Get a specific person's LinkedIn profile.
Args: linkedin_username: LinkedIn username (e.g., 'satyanadella', 'jeffweiner08') sections: Comma-separated list of extra sections to scrape. The main profile page is always included. Available sections: experience, education, interests, honors, languages, contact_info, posts Default (None) scrapes only the main profile page.
| Name | Required | Description | Default |
|---|---|---|---|
| sections | No | ||
| linkedin_username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes that the main profile is always included and sections are optional, but does not disclose potential behaviors like error handling, rate limits, or data volatility. This is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is clear and front-loaded with the purpose, but the Args section is slightly verbose. Each sentence adds value, but could be slightly more concise without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers parameters well and the tool has an output schema, so return values are not needed. It lacks behavioral or error context, but for a simple data retrieval tool, it is reasonably complete. Minor gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, meaning the schema itself provides no descriptions. The description adds significant meaning: examples for linkedin_username, a list of available sections with their behavior, and default behavior. This fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool retrieves a specific person's LinkedIn profile, using a clear verb+resource structure. It distinguishes itself from siblings like 'search_people' and 'get_company_profile' by focusing on an individual profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides parameter usage details (linkedin_username format, sections options) but does not explicitly state when to use or avoid this tool relative to alternatives. It implies use for a specific person, which is clear, but lacks direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_jobsA
Search for jobs on LinkedIn.
Returns job_ids that can be passed to get_job_details for full info.
Args: keywords: Search keywords (e.g., 'backend developer', 'devops engineer') location: Optional location filter (e.g., 'Austin', 'Singapore') max_pages: Maximum number of result pages to load (1-10, default 3) date_posted: Filter by posting date (past_hour, past_24_hours, past_week, past_month) job_type: Filter by job type, comma-separated (full_time, part_time, contract, temporary, volunteer, internship, other) experience_level: Filter by experience level, comma-separated (internship, entry, associate, mid_senior, director, executive) work_type: Filter by work type, comma-separated (on_site, remote, hybrid) easy_apply: Only show Easy Apply jobs (default false) sort_by: Sort results (date, relevance)
| Name | Required | Description | Default |
|---|---|---|---|
| sort_by | No | ||
| job_type | No | ||
| keywords | Yes | ||
| location | No | ||
| max_pages | No | ||
| work_type | No | ||
| easy_apply | No | ||
| date_posted | No | ||
| experience_level | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must cover behavioral aspects. It explains that the tool returns job IDs but does not disclose rate limits, authentication needs, or whether it reads existing data without modification. This is a basic but acceptable level.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief summary, return value note, and then a param list. It is slightly lengthy but each line adds value. Could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high parameter count (9) and many filter options, the description covers purpose, return value, and all parameters thoroughly. It lacks information about pagination or search scope but is otherwise complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description provides detailed guidance for each parameter, including example values for keywords and enumerated options for filters like job_type, experience_level, etc. This adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search for jobs on LinkedIn.' It also mentions that the return value (job_ids) can be passed to get_job_details, which differentiates it from other search tools like search_people.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (for job searching) and how to follow up with get_job_details. However, it does not explicitly state when not to use it or compare with alternatives like search_people.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_peopleB
Search for people on LinkedIn.
Args: keywords: Search keywords (e.g., 'product manager', 'ML engineer at Meta') location: Optional location filter (e.g., 'London', 'Berlin')
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | ||
| location | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It fails to mention authentication needs, rate limits, or any behavioral traits beyond the search action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, with no wasted words. It follows a docstring format, making it easy to parse, though slightly more structure could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, the description doesn't need to explain return values. However, it omits details like pagination, sorting, or result limits, leaving gaps for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by providing concrete examples for both keywords and location, adding meaningful usage context beyond the bare schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search for people on LinkedIn' with a specific verb and resource. It provides example keywords, distinguishing it from sibling tools like get_person_profile which targets a specific person.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through examples but does not explicitly state when to use or avoid this tool, nor does it mention alternatives among siblings. Basic context is present but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_connection_requestA
Preview or send a LinkedIn connection request without a note. The default confirm=false performs no write and reports whether the profile is ready, already connected, or already pending. Set confirm=true only after verifying the exact profile. This tool never adds a note.
Args: linkedin_username: Exact LinkedIn profile username/slug. confirm: Must be true to actually send the invitation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| linkedin_username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It clearly states that the default mode performs no write, reports readiness/connected/pending statuses, never adds a note, and that confirm=true is required to actually send the invitation. This gives an agent an accurate mental model of side effects and safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the purpose, then the safety-critical confirm=false behavior, then the confirmation rule. The Args section is minimal and directly maps to each parameter without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with an output schema, the description covers everything an agent needs: what the tool does, its no-write default, the conditions for actually sending, the statuses it reports, and the one constraint about notes. No critical behavioral context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must define the parameters, and it does. 'linkedin_username: Exact LinkedIn profile username/slug' adds precision beyond the bare schema, and 'confirm: Must be true to actually send the invitation' explains the distinguishing semantics of the boolean rather than relying on its default value alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Preview or send a LinkedIn connection request without a note.' It clearly distinguishes this tool from sibling search/profile tools by focusing on the connection-request action, and the 'never adds a note' qualifier removes ambiguity about the operation's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: default confirm=false performs no write and is a preview, while confirm=true should only be set 'after verifying the exact profile.' It implies the right workflow but stops short of naming a specific sibling like get_person_profile for verification, so it does not fully spell out when to use alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
close_browser - First observed
get_company_posts - First observed
get_company_profile - First observed
get_job_details - First observed
get_person_profile - First observed
search_jobs - First observed
search_people - First observed
send_connection_request
TDQS
Scored across 8 tools
Each tool targets a distinct resource (people, companies, jobs, browser lifecycle), and search vs. detail operations are clearly separated. Minor overlap exists where get_company_profile can fetch posts via sections, duplicating get_company_posts.
All tools follow a consistent snake_case verb_noun pattern: search_*, get_*, send_*, close_*. The naming is predictable and makes the resource and action immediately clear.
Eight tools is a well-scoped set for a LinkedIn API covering people, companies, jobs, and connection actions. Each tool serves a distinct purpose without bloat.
The main workflows are covered: search people, view profiles, send connection requests, search jobs, get job details, and view company info/posts. Minor gaps exist, such as no company search, no connection request with a note, and no direct 'view my profile' tool.
Maintenance
Related MCP Connectors
LinkedIn API as MCP tools to retrieve profile data and publish content. Powered by HAPI MCP.
- linkedinOAuthio.reachium
LinkedIn campaigns, content, leads and inbox from your AI client. Scoped, revocable keys.
LinkedIn: The LinkedIn Data API offers access to detailed information on individuals, companies.
Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables LinkedIn API integration for managing profiles, posts, feed, connections, and sending messages through MCP-compatible clients.1010 npmMIT
- FlicenseNot gradedqualityCmaintenanceMCP server for LinkedIn API integration. Enables authentication, profile access, connections, search, messaging, and feed management via OAuth2.-
- FlicenseNot gradedqualityCmaintenanceMCP server providing LinkedIn profile and page access via a stateless OAuth proxy, enabling Claude or MCP clients to interact with LinkedIn data.-
- AlicenseAqualityCmaintenanceEnables LinkedIn profile reads and post operations through a local-first MCP server, with OAuth token management and approval-friendly tools for OpenWorker.84 npm1MIT