linkedin-mcp
Click on "Install 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-mcppost an update about our new feature to my LinkedIn profile"
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 · Claude Code plugin
A local MCP server (TypeScript + Playwright) that lets Claude manage your own LinkedIn account and the Company/showcase Pages you admin — post, schedule, read the feed, and read/reply to comments — by driving a real local Chrome under your existing logged-in web session.
Ships as a Claude Code plugin: the MCP server, six slash commands, and a skill that teaches Claude the safe-use rules. Install with two commands — see Install.
⚠️ Read this first — Terms of Service & risk
This automates the LinkedIn website. It does not use the official LinkedIn API.
Automating LinkedIn web browsing violates the LinkedIn User Agreement and can get your account rate-limited, restricted, or banned.
Use it for your own account, at low volume, for actions you initiate. Do not bulk-post, scrape, or run it across many accounts.
Run it locally only — your own machine, your own residential IP, a headed (visible) browser. Never run it in the cloud, in Docker, or on a datacenter IP: that fingerprint is exactly what LinkedIn flags.
Provided as-is, no warranty. You accept the risk.
Related MCP server: linkedin-mcp-server
Requirements
Node.js ≥ 22.5 (uses the built-in
node:sqlite— no native build step).Google Chrome installed (Playwright drives your system Chrome via
channel: "chrome"; no separate browser download).
Install as a Claude Code plugin
The repo is its own single-plugin marketplace:
/plugin marketplace add HDHNezherParking-cum-Y638-Intl-Ltd/linkedin-mcp
/plugin install linkedin@linkedin-mcpThen, in order:
/linkedin:setup # installs npm deps + compiles src/ → dist/ (once, ~30s)
/linkedin:login # opens Chrome; you sign in by hand/linkedin:setup is optional — the server bootstraps itself on its first tool call — but running
it up front keeps that first call from stalling behind an npm install.
If Chrome isn't found, either install Google Chrome, or run
npx playwright install chromiumand delete thechannel: 'chrome'option insrc/browser.ts.
Slash commands
Command | What it does |
| Install dependencies and build the bundled server. Idempotent. |
| Check the session; open a browser to sign in if needed. |
| Draft a post, show it for approval, publish to your profile or a Page. |
| Queue / list / cancel scheduled posts. |
| Read comments on a post and draft replies. |
| Diagnose runtime, build, session, and selector drift. |
The bundled linkedin-account skill loads automatically when a conversation turns to
LinkedIn: tool ordering, the approve-before-publishing rule, the local-scheduler caveat, volume
limits, and where to repair selectors.
Or: register the server directly (no plugin)
Claude Desktop (claude_desktop_config.json) or a project .mcp.json, after
npm install && npm run build:
{
"mcpServers": {
"linkedin": {
"command": "node",
"args": ["/absolute/path/to/linkedin-mcp/dist/index.js"]
}
}
}First run — log in once
Run
/linkedin:login(or call thelinkedin_logintool). A real Chrome window opens.Log in by hand (2FA, email, and device checkpoints all work — you're driving).
Your session is saved to
~/.linkedin-mcp/session/and reused on later runs.linkedin_session_statusconfirms you're logged in.
Re-run linkedin_login whenever the session expires (LinkedIn's li_at cookie lasts weeks to
months; there's no fixed TTL).
Tools
Tool | What it does |
| Open a headed browser and wait for you to log in manually. No password stored. |
| Report whether you're logged in; warn if page selectors have drifted. |
| Publish a text post to your personal profile. |
| Publish later, via LinkedIn's native scheduler or the local queue — you pick. |
| List locally queued posts and their status. |
| Cancel a still-pending locally queued post. |
| List your recent posts (their refs feed |
| Read comments on a post (URL or activity/share URN). |
| Reply to a comment. |
| List Company/showcase Pages surfaced to your account. |
| Publish a post as a Page you admin. |
| Light snapshot of your home feed. |
Scheduling — two modes, you choose
schedule_post takes a required scheduler argument and has no default. Claude asks you
which one before scheduling anything.
|
| |
Who holds the post | LinkedIn (composer → clock icon) | This server, in |
Machine asleep at the due time | Publishes anyway | Publishes late, on the next poll after restart |
List / cancel from here | No — do it on linkedin.com | Yes |
Browser runs | Now, to place the schedule | At the due time |
Time granularity | LinkedIn's own picker (fixed slots, limited horizon) | Any future instant |
The local scheduler fires only while this server process is running. If your machine is off at the scheduled time, the post goes out on the next poll after the server is back. Native scheduling is the one to use when the send time has to hold.
Either way scheduledAt is an ISO-8601 instant (2026-07-23T14:30:00Z); for native scheduling it
is converted to this machine's local wall-clock time, which is what LinkedIn's picker expects.
Configuration
All optional — set as environment variables, or in a .env file. Two are loaded, later wins:
~/.linkedin-mcp/.env (use this when installed as a plugin — a plugin's own directory is a cache
that updates overwrite) and ./.env (repo-local, for development). See
.env.example.
Env | Default | Meaning |
|
| Root for session + scheduler state. |
|
| Persistent Chrome profile (your logged-in session). |
|
| Scheduler database. |
|
| Run non-login actions headless. Login is always headed. |
|
| How long login waits for you. |
|
| Scheduler poll interval. |
|
| Randomized delay between UI steps ( |
Security & secrets
No password is ever read, stored, or logged — login is interactive in a real browser.
Your session cookies and the scheduler DB live in
~/.linkedin-mcp/, outside the repo and outside the plugin cache (so a plugin update never wipes your login, and no project directory ever ends up holding your cookies). Treat~/.linkedin-mcp/session/like a password — anyone with it can act as you on LinkedIn..gitignorecoverssession/,data/,.env,*.sqlite,dist/,node_modules/.
Selector maintenance (expect this)
LinkedIn's markup changes constantly. Every LinkedIn selector lives in one file:
src/linkedin/selectors.ts. When a tool errors with
"update src/linkedin/selectors.ts", or linkedin_session_status warns that a selector drifted,
fix the locator there — nowhere else. The comment / feed / page selectors are best-effort and
may need a live tuning pass against your account the first time you use those tools.
Known limitations
The exact URL of a new post isn't always captured (LinkedIn doesn't reliably expose it).
read_feed,list_pages, and comment parsing are best-effort and sensitive to DOM changes.Replying as a Page isn't supported (LinkedIn doesn't reliably expose the identity switcher in reply boxes).
Text posts only — no media/video upload.
Not the official API; no analytics, messaging, or connection management.
Development
npm run typecheck # tsc --noEmit
npm run build # compile to dist/
npm test # node:test — scheduler + validation + plugin manifests (no browser, no network)
npm run smoke # boot the server in-memory and list tools (no LinkedIn contact)
npm run dev # run from source via tsxThe scheduler is unit-tested with the browser mocked (the worker takes an injectable poster).
test/plugin.test.ts guards the packaging: the manifests parse, the paths they reference exist,
and every MCP tool pre-allowed in a command is one the server actually registers.
Live LinkedIn flows are verified manually — never in CI (needs a real session and would violate ToS).
Plugin layout
Path | Role |
| Plugin manifest (name, version, author). |
| Makes this repo a single-plugin marketplace. |
| Registers the bundled stdio server via |
| Bootstrap: installs + compiles if missing or stale, then starts the server in-process. |
| The |
| Safe-use rules Claude loads on LinkedIn topics. |
A marketplace install is a plain git clone — no node_modules, no dist/ — which is why
launch.mjs builds on first run. It compares the newest mtime under src/ against dist/, so a
plugin update rebuilds automatically. All its output goes to stderr; stdout is the MCP channel.
Opening this repo as a Claude Code project will surface the root
.mcp.jsonas a project server. Decline it —${CLAUDE_PLUGIN_ROOT}only expands in plugin scope. Registerdist/index.jsby absolute path instead (see above).
License
MIT — see LICENSE.
Available Tools
12 toolscancel_scheduled_postCancel a scheduled postA
Cancel a still-pending post in the LOCAL queue by id. Natively scheduled posts must be canceled in LinkedIn's own scheduled-posts view.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already show readOnlyHint: false, indicating mutation. The description adds the critical scope detail (local queue vs. native) and the limitation ('still-pending'), which is useful. However, it doesn't mention side effects, irreversibility, or what happens if the post has already been published.
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, front-loaded with the action. The second sentence earns its place by clarifying scope. No unnecessary words or repetition.
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 tool with one parameter and no output schema, the description covers the essential context: what is canceled (pending local post) and what is out of scope (native posts). It lacks some detail like error conditions or whether cancellation is reversible, but these are less critical for this simple operation.
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%, and the description only says 'by id', which essentially restates the parameter name. It doesn't explain what the id refers to (e.g., the id from list_scheduled_posts) or how to obtain it, so it adds little meaning beyond the schema's bare integer+exclusiveMinimum.
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 action ('Cancel a still-pending post') and the resource ('in the LOCAL queue by id'). It distinguishes from siblings by explicitly noting that natively scheduled posts are out of scope, so the purpose is unambiguous.
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 clear context: this tool is for local queue posts, and it explicitly excludes natively scheduled posts, which must be canceled elsewhere. Although it doesn't name an alternative tool, the exclusion is specific and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_page_postPost as a PageA
Publish a text post AS a Company/showcase Page you admin. page is the Page name or id from list_pages.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page name or id (from list_pages) to post as. | |
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, so the tool is known to be a write operation. The description adds the admin requirement and page source from list_pages, but doesn't discuss side effects, visibility, or failure modes. This is moderate value beyond annotations.
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 sentences, front-loaded with purpose, then a helpful pointer to list_pages. No wasted 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 simple two-parameter action, the description is quite complete: it covers prerequisite (being admin), parameter source, and action. The lack of output schema means return value isn't specified, but that's acceptable for low complexity.
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 repeats the schema's page description and implies text is the post content, but doesn't explicitly define text beyond the schema constraints. With 50% schema coverage, the description partially compensates but doesn't fully clarify text semantics.
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 the tool publishes a text post as a Company/showcase Page, distinguishing it from sibling tools like create_post and schedule_post. The verb 'publish' and resource 'Page' are specific.
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?
Provides context that it applies to Pages the user administers and directs to list_pages for valid page identifiers. While it doesn't explicitly name alternatives, the distinction from create_post (likely for personal posts) is clear from the title and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_postCreate a postA
Publish a text post to your personal LinkedIn profile, now. For a future time use schedule_post (which first asks the user native vs local scheduler).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Post body. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint is false, which aligns with 'Publish' indicating a mutation. The description adds context that it acts immediately and targets the personal profile, but it doesn't disclose potential prerequisites like login state or side effects such as immediate visibility. However, the annotation already signals a write operation, so the description's added value is modest. No contradiction exists.
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 two focused sentences: the first states the action and scope, the second provides an alternative. Every word earns its place with no filler, making it highly efficient and front-loaded.
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 mutation tool, the description covers the core purpose, immediate execution, and points to the scheduling alternative. It doesn't mention return values, but with no output schema and a straightforward action, this is not a significant gap. The context is sufficient for an agent to select and invoke the tool correctly.
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 fully describes the only parameter 'text' with type, min/max lengths, and description. The description adds no parameter-specific details, but given 100% schema coverage, the baseline 3 applies. The description does not hinder parameter understanding.
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 uses a specific verb 'Publish' and identifies the exact resource: a text post to the user's personal LinkedIn profile. It clearly distinguishes from sibling tools by noting it does this 'now' versus scheduled posts, making the tool's purpose unambiguous.
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 explicitly instructs when to use this tool over the alternative: use schedule_post for future times, and even notes that schedule_post asks about native vs local scheduler. This gives clear guidance on when to choose create_post versus a specific sibling, which is exemplary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_loginLog in to LinkedInA
Open a real Chromium window and wait for you to log in manually (including 2FA / security checkpoints). The session is saved locally and reused; your password is never read or stored. Run once, or again if the session expires.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the readOnlyHint annotation: it opens a real browser, requires manual interaction, supports 2FA, saves the session locally, and never reads/stores passwords. These details help the agent set expectations and invoke safely.
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 (3 sentences) and front-loaded with the key behavior. Every sentence adds value: browser opening, manual login, session persistence, password handling, and rerun guidance. No 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 zero-parameter, no-output-schema tool, the description covers the essential semantics: what it does, how the session is stored, and when to rerun. It doesn't explicitly describe the return value or timeout behavior, but the interactive nature is well explained.
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 zero parameters, so schema coverage is trivially 100% and the description correctly omits parameter details. Baseline for 0 params is 4, and the description doesn't need to add anything beyond what's already clear.
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 states a specific verb ('Open a real Chromium window and wait') and clear resource ('log in to LinkedIn'), and distinguishes from sibling content tools by describing the login process. It clearly explains what the tool accomplishes.
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 context on when to use: 'Run once, or again if the session expires.' It implies usage before other tools that require authentication, but does not explicitly reference alternatives or exclusions. Still, the timing guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linkedin_session_statusCheck LinkedIn sessionARead-only
Report whether the saved LinkedIn session is still logged in, and warn if core page selectors have drifted (a maintenance signal).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds useful behavioral context by mentioning the maintenance warning about core page selectors. It does not contradict the annotation and provides value beyond the structured metadata, though it does not detail the exact output format.
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 a single, front-loaded sentence that conveys both the primary function and a secondary maintenance feature. Every word earns its place with no redundancy.
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 zero-parameter, read-only status-check tool, the description fully covers what the agent needs to know: what the tool reports and an additional insight (selector drift). The lack of an output schema is not a gap because the description effectively defines the expected informational outcome.
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 zero parameters, so there are no parameter semantics to document. The baseline of 4 applies here since no parameter information is needed in the description.
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 uses a specific verb ('Report whether') and identifies the resource ('saved LinkedIn session'), plus a distinct maintenance signal ('warn if core page selectors have drifted'). This clearly distinguishes it from sibling tools like linkedin_login, since it checks session status rather than creating one.
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 clearly indicates the tool is used to check if the saved LinkedIn session is still logged in and to detect selector drift. However, it does not explicitly state when to use it over alternatives or exclude any cases, so it lacks full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_postsList my recent postsARead-only
List your recent posts (their refs can be passed to read_post_comments).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true, the safety profile is already disclosed. The description adds that the output contains refs for use with read_post_comments, which is useful, but it does not elaborate on ordering or pagination behavior. This is acceptable but not rich.
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 a single, front-loaded sentence that earns its place. It states the main action and a valuable usage hint in just 12 words, with no 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 read-only list tool with one optional parameter and no output schema, the description provides adequate context: it identifies the resource scope and a follow-up use case. Missing details about sorting/limits are minor given the tool's simplicity.
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%, and the description does not explain the 'limit' parameter. While the parameter name is intuitive, the description should have stated that 'limit' controls the maximum number of posts returned. This omission leaves the agent without full parameter clarity.
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 starts with 'List your recent posts', which is a specific verb+resource that clearly identifies the tool's function. It also distinguishes from siblings like 'read_feed' or 'list_scheduled_posts' by explicitly scoping to the user's own posts.
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 a use case by noting that refs can be passed to 'read_post_comments', which helps the agent understand a chaining scenario. It does not explicitly exclude alternatives, but the 'your recent posts' phrasing provides contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesList PagesARead-only
List Company/showcase Pages surfaced to your account. Best-effort — may include followed (non-admin) companies; verify admin rights before posting as a Page.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint, but the description adds value by disclosing 'best-effort' behavior and the potential inclusion of followed non-admin companies. This goes beyond the annotation and helps the agent understand the reliability and scope of the results.
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 primary action and resource. It uses an em-dash to append essential caveats without redundancy. Every sentence/part earns its place, and it's easy to parse quickly.
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, parameter-free list tool with a read-only annotation, the description covers the essential aspects: what is listed, the scope, the best-effort nature, and a caution about posting. The lack of an output schema is not a gap because the description doesn't need to explain return values for this type of 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?
The tool has zero parameters, so the baseline is 4. The description adds meaning by defining the scope of the list ('surfaced to your account'), which effectively acts as a conceptual parameter even though there are no formal inputs.
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 lists Company/showcase Pages surfaced to the account, using a specific verb ('List') and resource ('Pages'). It also distinguishes itself from sibling list tools by specifying 'Pages' and the 'surfaced to your account' 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 provides clear context for when to use the tool: to see pages available to the account. It includes a caveat that results may include non-admin companies and advises verifying admin rights before posting. However, it does not explicitly name alternative tools or state when not to use this one, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scheduled_postsList scheduled postsARead-only
List queued/scheduled posts and their status. LOCAL queue only — posts handed to LinkedIn's native scheduler are held by LinkedIn and only visible on linkedin.com.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes a safe read, but the description adds the key behavioral constraint that only local queue posts are shown, not those in LinkedIn's native scheduler. It also mentions that status is included in the output, which is useful. No contradictions with the annotation.
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 two concise sentences with the core purpose front-loaded and the important limitation immediately following. 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?
For a simple list tool with one optional parameter and no output schema, the description covers the core functionality and the main boundary condition. It doesn't describe sorting or pagination, but these are minor for this scope.
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 does not mention the optional 'status' parameter or that it can filter results, and schema description coverage is 0%. The enum in the schema provides some meaning, but the description fails to compensate for the lack of parameter documentation.
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 uses a specific verb ('List') and resource ('queued/scheduled posts') and adds a clear scope differentiator ('LOCAL queue only'), distinguishing it from siblings like list_my_posts. The caveat about LinkedIn's native scheduler further clarifies what this tool does and does not cover.
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?
It clearly states when this tool applies: local queue only, and notes that native scheduler posts are 'only visible on linkedin.com', which guides an agent away from using this tool for those posts. It doesn't explicitly name an alternative sibling tool, but the boundary is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_feedRead home feedARead-only
Read a light snapshot of your home feed (best-effort; feed layout changes often).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already signals a safe read, and the description adds valuable behavioral context: 'light snapshot' indicates possibly incomplete data, and 'best-effort' plus 'layout changes often' warn of variability. This goes beyond the annotation and helps calibrate expectations.
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 a single, front-loaded sentence that conveys purpose and key caveats without filler. Every word earns its place, making it highly concise and clear.
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 tool is simple with one optional parameter and a read-only annotation, but there is no output schema. The description tells what the tool does and warns about its limitations, yet it doesn't describe the return format or contents, leaving a minor gap for a 'snapshot' 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?
The description does not mention the 'limit' parameter at all, and schema description coverage is 0%. The parameter exists in the schema with min/max constraints, but the description offers no guidance on how to choose the limit, leaving the agent without added meaning.
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 uses the specific verb 'Read' and clearly identifies the resource as the 'home feed', which distinguishes it from siblings like create_post and list_my_posts. The phrase 'light snapshot' adds useful nuance, though it doesn't explicitly contrast with similar read tools.
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 for lightweight, best-effort reads but does not explicitly state when to use this tool versus alternatives like list_my_posts. The caveat about layout changes hints at suitability but no exclusions or sibling comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_post_commentsRead comments on a postARead-only
Read comments on a post. post is a post URL or an activity/share URN.
| Name | Required | Description | Default |
|---|---|---|---|
| post | Yes | Post URL or activity/share URN. | |
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes the safe read-only nature, and the description does not contradict it. It adds limited context by specifying that post can be a URL or activity/share URN, but it does not disclose pagination, ordering, response shape, or rate limits.
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 brief and front-loaded with the core purpose. The second sentence about 'post' is redundant with the schema but not verbose; overall there is no wasted text.
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 read-only tool with two parameters and no output schema, the description covers the essential purpose and the 'post' input format. However, it omits any statement about the return value, default/optional behavior of 'limit', or relationship to sibling tools, so it is only minimally complete.
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 no meaning beyond the input schema: the only parameter guidance it gives ('post is a post URL or an activity/share URN') exactly duplicates the schema description. The 'limit' parameter is entirely undocumented in both the description and schema, leaving its semantics to inference from the name and bounds.
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 action ('Read') and the resource ('comments on a post'), making the purpose unmistakable. It distinguishes this tool from siblings like reply_to_comment (writing) and read_feed (reading feed) by specifying comments on a post.
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 when comments on a post are needed, but it provides no explicit when/when-not guidance or alternatives. For example, it does not mention that reply_to_comment should be used for writing comments or that read_feed covers feed-level reads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_commentReply to a commentA
Reply to a comment (use commentRef from read_post_comments).
| Name | Required | Description | Default |
|---|---|---|---|
| post | Yes | ||
| text | Yes | ||
| asPage | No | Not supported: replying under a Page identity is not reliably exposed by LinkedIn. | |
| commentRef | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is minimal beyond the annotation readOnlyHint=false. It only mentions the operation and a parameter source, but does not disclose side effects, authentication needs, or response behavior. The added commentRef hint is more about parameter sourcing than behavioral transparency.
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 a single, tightly scoped sentence with a useful parenthetical. Every word earns its place; there is no 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?
With no output schema and a sparse description, the agent is left without information on what happens after replying, potential errors, or authentication prerequisites. The only extra context is the commentRef source, which is not enough for a write operation.
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 only 25% (asPage). The description clarifies commentRef's source but does not explain post or text semantics. This partial compensation is insufficient for a tool with three undocumented required parameters.
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 uses a specific verb 'Reply' with a clear resource 'a comment', and the parenthetical 'use commentRef from read_post_comments' adds precision about the required input. It clearly distinguishes this tool from siblings like create_post and read_post_comments.
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 guidance by telling the agent to use commentRef from read_post_comments, establishing a clear prerequisite for usage. However, it does not state exclusions or compare with alternative tools, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_postSchedule a postA
Publish a post at a future time, through ONE of two schedulers. There is no default — ask the user which one they want BEFORE calling this, and state the trade-off:
"native": LinkedIn schedules it itself (composer -> clock icon). Fires at the requested time even if this machine is asleep or Claude is closed, but the queued post then lives on linkedin.com and this server can neither list nor cancel it. Drives the browser now, so the session must be live and the text is final at that moment.
"local": queued in this server's SQLite queue, so list_scheduled_posts and cancel_scheduled_post keep working. But it fires ONLY while this server process is running; if the machine is off at the scheduled time, it posts on the next tick after the process is running again — late.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| asPage | No | Page name or id (from list_pages) to post AS. Omit for personal profile. | |
| scheduler | Yes | Which scheduler publishes it: 'native' (LinkedIn's own) or 'local' (this server's queue). Required — ask the user, do not pick for them. | |
| scheduledAt | Yes | ISO-8601 future time, e.g. 2026-07-23T14:30:00Z. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation only says readOnlyHint=false; the description adds substantial behavioral detail: the native scheduler fires even if the machine is asleep but the post cannot be listed/canceled via this server, while the local scheduler only fires while the server runs and may post late. It also notes session liveness and text finality for the native scheduler. This goes far beyond the annotations and is critical for safe use.
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 longer than average but every sentence earns its place. It is front-loaded with the core purpose, then organizes the two scheduler trade-offs in an easy-to-scan bulleted list. The length is justified by the complexity of the decision the user must make, and there is no redundant or extraneous content.
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's complexity (two modes with different operational guarantees), no output schema, and only a minimal annotation, this description is remarkably complete. It covers prerequisites (session live for native), failure modes (late posting for local), and cross-references to related tools for cancellation/listing. An agent has everything needed to invoke the tool correctly and advise the user appropriately.
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 75% with good descriptions for scheduledAt, asPage, and scheduler. The description adds crucial semantic depth to the scheduler parameter by explaining the real-world consequences of 'native' vs 'local,' which the enum alone cannot convey. It doesn't add detail for 'text' but the schema's maxLength/minLength suffices. Overall, the description enriches parameter understanding beyond the structured 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 explicitly states 'Publish a post at a future time, through ONE of two schedulers,' which clearly differentiates it from immediate posting (create_post) and specifies the action, resource, and temporal scope. This is a distinct, well-defined purpose that distinguishes it from sibling tools.
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 explicit usage guidance: 'There is no default — ask the user which one they want BEFORE calling this, and state the trade-off.' It then details the two scheduler options and their trade-offs, including when each is appropriate. It also references sibling tools (list_scheduled_posts, cancel_scheduled_post) that work only with the 'local' scheduler, clarifying operational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct action/resource: authentication, session status, immediate post, scheduled post, queue management, post listing, comment reading/reply, page listing/page post, and feed reading. No two tools overlap in purpose.
Most tools follow a clear verb_noun pattern (create_post, schedule_post, list_scheduled_posts, cancel_scheduled_post, list_my_posts, read_post_comments, reply_to_comment, list_pages, create_page_post, read_feed). The exceptions are linkedin_login and linkedin_session_status, which use a prefix style that deviates from the rest.
12 tools cover the core LinkedIn automation domain—auth, posting (immediate and scheduled), scheduling queue management, comments, pages, and feed—without excess. This is a well-scoped count for the server's purpose.
The posting lifecycle is well covered (create, schedule, list, cancel), along with comments and page posts. Missing operations like editing or deleting posts are minor gaps; agents can work around them, but they are noteworthy for a complete LinkedIn content management surface.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
LinkedIn outreach, commenting, scheduling, and data via Claude and human approval gates.
LinkedIn outreach, commenting, scheduling, and data via Claude and human approval gates.
Give AI agents the LinkedIn tools to find, qualify, engage, and follow up with prospects.
Full LinkedIn access for AI agents: leads, messaging, and campaigns with safe limits built in.
Related MCP Servers
- AlicenseAqualityDmaintenancePost to LinkedIn from Claude — create posts, upload images, edit/delete posts, and manage company pages via natural language. Uses the official LinkedIn REST API with OAuth 2.0.92142MIT
- AlicenseAqualityDmaintenanceEnables Claude Desktop to manage your LinkedIn profile and company pages, including posting, reading posts, and fetching profile information.72144MIT
- AlicenseAqualityDmaintenanceEnables Claude to interact with LinkedIn for posting, commenting, sharing media, and viewing feed and profile.92143MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude AI to interact with LinkedIn through browser automation, including profile reading, people and job search, company research, post publishing, and profile editing.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/HDHNezherParking-cum-Y638-Intl-Ltd/linkedin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server