Skip to main content
Glama
devag7

LinkedIn MCP

πŸ”— LinkedIn MCP

LinkedIn for AI assistants β€” structured data via a real, stealth browser session

CI npm version MIT License TypeScript MCP Glama score

Structured LinkedIn reads for MCP clients β€” profiles, jobs, companies and inbox data, with guided offline setup and explicit safety limits.

22 tools Β· local browser reads Β· five explicitly confirmed writes Β· persisted safety limits and operation journals.

This is an unofficial LinkedIn integration and accounts can be restricted. Review Account safety and SECURITY.md before use.


Guided first run

3.0.0 is released: 22 tools, guided local setup and manual Chrome login. This is a local stdio tool; Glama's generic β€œDeploy Server” or browser-hosting controls are not supported installation instructions. No hosted service is required. Verified publication receipts cover npm, GitHub Packages, the official MCP Registry and the GitHub release.

Start with the quick start and setup guide. Setup reports local issues, client configuration and exact next steps without contacting LinkedIn. Merge the generated entry into your existing client file. See the synthetic setup demonstration: real published package, disposable fixtures, no login or LinkedIn request.

research_jobs is not included; its job-research brief remains in draft PR #5. The execution plan tracks first use, privacy, future features and measured distribution outcomes.

Related MCP server: mcp-linkedin

What it does

The server uses Patchright to open a persistent Google Chrome profile and makes Voyager requests from its authenticated page. Results are shaped into JSON for MCP clients. Some discovery tools fall back to page data. Undocumented endpoints, query IDs, browser behavior and response shapes can change.

Useful starting workflows are profile research, job/company research and inbox triage. Alpha writes are disabled by default. When enabled they require a reviewed server-issued preview token and confirm:true, consume conservative attempt budgets, and return a status including unknown when completion cannot be established.

Verification status

3.0.0 introduces breaking safety and client requirements; read the migration guide. Hosted source/package/browser checks cover Node20/22 across Linux, macOS and Windows. Exact core-only candidate/head results are recorded in release readiness. One explicitly consented macOS maintainer health/own-profile read also passed with partial metadata; scope and evidence do not establish fresh-user or broader live compatibility. The exact published 3.0.0 artifact is independently verified; native-client first-use cohorts and broad live-provider compatibility remain unverified. See execution progress and the linked evidence.

Area

Current evidence

HTTP boundary, checkpoints, write accounting

Offline regression and MCP protocol fixtures

Account identity, profile ownership, shared budgets

Production tool fixtures plus independent Node-process contention/crash tests

Setup diagnostics and cold saved sessions

Offline platform/path fixtures and production runtime fixtures

Packed artifact

Isolated install, version/doctor checks and compiled MCP smoke; no LinkedIn request

Profiles, feed, jobs, companies and inbox

Registered tools; repository notes contain historical live claims. Current live availability is unknown.

Five write tools

Conservative classifiers and transaction fixtures. No live writes were sent in this implementation. New-thread messaging remains experimental.

Official OAuth provider

Not connected to the active MCP runtime

Local checks and CI configuration are evidence of the cases they exercise, not a guarantee of current provider compatibility or account safety.


πŸš€ Quick start

Use Node.js 20 or later and Google Chrome. The commands below pin the published 3.0.0 package. Setup is offline; login and subsequent reads are deliberate account actions. For a stable installation path and Windows commands, see the setup guide.

1. Diagnose offline:

npm install --prefix "$HOME/.local/share/linkedin-mcp" linkedin-mcp-tools@3.0.0
node "$HOME/.local/share/linkedin-mcp/node_modules/linkedin-mcp-tools/dist/index.js" --setup cursor

Also accepts claude-desktop or vscode. Resolve the reported local issues, then merge the generated entry into your existing client file. Setup performs no login or account request. Use a stable local installation and regenerate its entry after upgrades; the report pins its installed build rather than a temporary path.

2. Log in once (opens a real Chrome window β€” sign in, solve any captcha/2FA):

node "$HOME/.local/share/linkedin-mcp/node_modules/linkedin-mcp-tools/dist/index.js" --login

Needs Google Chrome installed (or run npx patchright install chrome once). Your session β€” Cloudflare clearance and all β€” persists to ~/.linkedin-mcp/profile/.

3. Configure your client. Prefer the generated entry above. For clients accepting mcpServers, this version-pinned example is an alternative:

{
  "mcpServers": {
    "linkedin": {
      "command": "npx",
      "args": ["-y", "linkedin-mcp-tools@3.0.0"]
    }
  }
}

Start with whoami for local status. When you deliberately authorize an account read, try "Read my own profile once and report its returned status and any partial metadata, then close the session. Do not retry or write." Stop at a checkpoint. Current provider availability is uncertain; preserve empty, partial and error statuses. First-use results across Claude Desktop, Cursor and VS Code have not yet been measured.

git clone https://github.com/devag7/linkedin-mcp.git
cd linkedin-mcp
npm ci
npm run setup:browser     # installs the Chrome patchright drives
npm run login             # manual account login; only with your deliberate consent
npm run spike             # live own-profile request; requires separate authorization
npm run build             # produces dist/
node dist/index.js --doctor # local setup checks; no browser or network
npm run verify:package     # install/test the packed artifact offline against LinkedIn

MCP config: "command": "node", "args": ["/absolute/path/to/dist/index.js"].

Diagnose this source checkout

npm run build
node dist/index.js --doctor

The report shows package/Chrome availability, profile accessibility and ownership, safety-state validity, selected transport and next steps. It omits cookies, tokens, profile content and private paths. It does not open Chrome or contact LinkedIn.

After you have logged in and stopped other processes using the profile, explicitly select a live identity read with node dist/index.js --doctor --live. The probe has a 30-second deadline followed by browser cleanup; a deadline does not prove that an already-started read was cancelled. No write is part of diagnosis.

whoami reports sessionState: "not_checked" and loggedIn: null on a cold runtime. health_check deliberately opens the saved session and performs a live API check. A saved profile or cookie alone is not reported as a healthy API.

Headful login needs a local display. The normal server defaults to headless Chrome. Remote browser/profile deployment and profile copying are not verified here.


Local HTTP clients

Stdio remains the default. HTTP is an explicit, loopback-only option for a local MCP client that can send an Authorization header. Remote hosts, reverse proxies, browser CORS clients, and serverless deployment are unsupported.

Generate a local secret and start the server from this checkout:

npm run build
export LINKEDIN_HTTP_TOKEN="$(node -e 'console.log(require("node:crypto").randomBytes(32).toString("hex"))')"
node dist/index.js --transport http --port 3000

Configure your client with URL http://127.0.0.1:3000/mcp and the header Authorization: Bearer <the same LINKEDIN_HTTP_TOKEN value>. Keep the secret in your client's protected configuration; do not put it in a URL or commit it. The token must contain 32–256 letters, digits, underscores, or hyphens. Generate it randomly; length validation cannot prove a token is unpredictable.

  • Every endpoint, including GET /health, requires the token. Missing or invalid credentials return 401. Health reports listener status, not LinkedIn login.

  • HTTP binds to 127.0.0.1. Host must be 127.0.0.1:<port> or localhost:<port>; an Origin, if present, must exactly match http://<Host>. Invalid hosts/origins return 403. No CORS access is granted.

  • POST /mcp accepts uncompressed JSON up to 1 MiB. Body upload has a 10-second deadline; responses have a 180-second deadline. There are at most 16 active HTTP requests and 32 TCP connections. Excess requests return 503.

  • Protocol connections share one browser, queue, pacer, budget tracker, and circuit breaker in this process. Closing a client does not close the browser; shutting down the listener closes the shared runtime.

  • A timeout or disconnect does not prove an action was cancelled. Long pacing waits may outlast the response deadline. Check LinkedIn before retrying a write; HTTP does not retry it automatically. Prefer stdio for long-running workflows.

Browser profile ownership and account budget transactions are shared across local processes. A second owner is refused before Chrome opens. These controls do not establish account safety. See SECURITY.md.


πŸ›‘οΈ Account safety

Read this. Automating LinkedIn violates its User Agreement and can get your account restricted or banned β€” no tool can prevent that, including this one. The built-in safety features (daily caps, human pacing, warmup, circuit breaker) reduce risk; they do not eliminate it.

Defaults err conservative:

  • Connections 20/day, messages 50/day, likes+comments 50/day combined, follows 30/day β€” combined write cap 150/local day.

  • Profile views 80/day, searches 30/day.

  • Conservative warmup limits, a pending-invite ceiling, and acceptance-rate pauses. The first verified use starts a persisted warmup clock. Week 1 blocks messages; weeks 2 and 3 gradually permit them. This measures local tool use, not LinkedIn account age.

  • Reads paced 4–12s apart, writes 45–150s, with long breaks and a working-hours gate.

  • A persistent circuit breaker blocks further automated calls after an observed checkpoint URL, HTTP 999, challenge HTML from a JSON endpoint, or supported challenge-page signal. It never tries to solve a checkpoint. Already in-flight requests cannot be undone.

Review platform rules and decide whether the integration is appropriate for your account. Caps and pacing cannot prevent restrictions. Resolve challenges manually; never treat the safety layer as a compliance or evasion guarantee.


Recovering from a checkpoint

CHECKPOINT_REQUIRED means a challenge was observed; CIRCUIT_OPEN means the stored stop is still active. health_check reports blocked without probing LinkedIn while stopped. whoami and close_session remain available.

  1. Stop every server/probe using the profile.

  2. Run linkedin-mcp --login, complete the checkpoint manually in Chrome, and open your LinkedIn feed.

  3. Restart the server only after login reports that both the session and API were verified. A cookie alone, restarting, or --logout does not clear the stop.

Breaker state is stored beside the profile: <LINKEDIN_PROFILE_DIR>.circuit.json (default ~/.linkedin-mcp/profile.circuit.json). A successful interactive recovery clears the hard stop and preserves action cooldowns. Invalid/unreadable state fails closed; restore the state or repair storage rather than deleting it to resume automation.

Normal login expiry returns AUTH_REQUIRED without a hard trip. Opaque redirects hide their destination, so they are reported as authentication required rather than guessed to be checkpoints. Detection uses bounded response/page signals; it does not establish live compatibility with every LinkedIn challenge variant.


Write outcomes and operation IDs

All five alpha write tools require LINKEDIN_ENABLE_WRITES=true and confirm:true. With confirmation omitted/false they return a local preview without opening Chrome. Review its target, content, audience and route; after explicit human approval, use the returned operation ID as operation_id and token as preview_token. Tokens expire after five minutes, are bound to the exact action, target and content, and are consumed on submission. Missing or changed proofs are refused before dispatch. The token proves that the server issued a preview; it cannot prove human consent. Starting new message threads also requires LINKEDIN_ENABLE_EXPERIMENTAL_MESSAGES=true and has no current live success evidence. Supply a unique operation_id (8–128 letters, digits, _ or -) before the approved call. For example:

{
  "text": "The draft you reviewed",
  "visibility": "PUBLIC",
  "confirm": true,
  "operation_id": "<operationId returned by the reviewed preview>",
  "preview_token": "<token returned by that same preview>"
}

The placeholders above must be replaced with the actual preview values; the example is not a submission to copy unchanged.

The result includes operationId, replayed, status, ok, and httpStatus. Repeating the same tool, ID, and inputs retrieves the stored outcome without submitting again, including after restart. Changed inputs with the same ID are rejected. A preview can generate an ID when omitted; every new submission must include that preview ID and its token. Previously journaled outcomes can be looked up with identical tool/ID/inputs after expiry or restart without a fresh token. Never generate a replacement ID to retry an uncertain submission.

unknown means the request may have reached LinkedIn: a disconnect, timeout, server error, unreadable body, or unrecognized success response cannot establish whether it completed. Inspect the target manually. The server never automatically retries; the same ID remains a lookup. A bare HTTP 409 is failed unless its body provides an explicit duplicate/already-connected signal. Quota and account restriction outcomes activate the corresponding action cooldown.

Safety limits count every reserved attempt, including known failures and unknown outcomes. Only confirmed connections increment sent/pending invitation analytics. Uncertain invitations also count conservatively toward invitation safety gates across days. health_check includes journaled attempted, successful, and uncertain totals; historical counts from older versions remain in actions.used and are not guessed to be successful.

The journal is part of ~/.linkedin-mcp/budgets.json, alongside existing counters. It retains IDs, input hashes, action buckets, dates, and status codes; it does not store message/post text or raw response details. Replays return stored status/code with a generic explanation. Corrupt or unreadable state blocks startup; save failures stop further data/action work until storage is repaired. The file is replaced atomically with owner-only permissions. The journal stops new writes at 10,000 entries or an 8 MiB state file; IDs are never automatically discarded. Deleting the state erases both safety counts and replay protection.

The runtime derives a hashed account key from authenticated /me identity; it does not use a cookie, profile path or public username as the account key. Different profiles for the same member share the global budget/journal file. Identity is reverified on browser launch and before writes. A changed member stops the runtime with ACCOUNT_CHANGED; restart only after reviewing the account. Missing or ambiguous identity returns ACCOUNT_UNRESOLVED before submission.

Budget reserve/commit reload and save under a shared local filesystem lock. Failed read attempts count toward metered read limits. Existing default counts remain an unattributed conservative allowance reduction; they are not assigned to a new member or invented as successful writes. Unattributed legacy operation IDs return unknown rather than asserting they belong to the verified member. On a fresh runtime, a hard checkpoint prevents the identity read required for journal lookup.

Profile ownership uses <canonical-profile>.owner.lock; shared budget transactions use <canonical-budget-file>.lock. close_session and idle closing retain profile ownership while the process can relaunch Chrome. Stop the server to release it. Locks are never stolen by timeout or PID guessing. After a crash, stop all users and associated Chrome processes, preserve safety files, then manually repair only the orphaned lock directory. Never delete budgets or journals to resume automation. Local filesystems are the supported state-sharing boundary; network filesystems and power-loss durability are not certified.

See write evidence and account/ownership evidence.


βš™οΈ Configuration

Variable

Default

Description

LINKEDIN_PROVIDER

browser

Official mode is unavailable and refuses before browser creation.

LINKEDIN_HEADLESS

true

Server runs headless. --login always opens a real window regardless. Set false to watch the browser.

LINKEDIN_CHROME_PATH

β€”

Explicit Chrome binary path (else patchright's).

LINKEDIN_PROFILE_DIR

~/.linkedin-mcp/profile

Persistent browser profile.

LINKEDIN_IDLE_TIMEOUT_MS

300000

Close the browser after this idle time (0 disables).

LINKEDIN_CONCURRENCY

1

Only serial execution is supported.

LINKEDIN_ENABLE_WRITES

false

Deliberate opt-in for alpha browser writes; per-call approval still required.

LINKEDIN_ENABLE_EXPERIMENTAL_MESSAGES

false

Separate opt-in for unverified new-thread messaging.

TRANSPORT

stdio

stdio (primary) or local-only http.

LINKEDIN_HTTP_TOKEN

β€”

Required random bearer secret for HTTP; unused by stdio.


Tool contracts and verification

22 registered tools. Native contract version 1 returns structuredContent and identical JSON text, with fetchedAt, source, partial and status metadata. Full route and verification inventory.

Group

Tools

Session

whoami, health_check, close_session

Reads

get_my_profile, get_profile, get_feed, get_notifications, search_people, search_jobs, get_inbox, get_job_details, search_companies, get_company, get_company_posts, get_company_employees, get_pending_invitations, get_conversation

Opt-in alpha writes

connect_with_person, send_message, create_post, react_to_post, comment_on_post

Offline walkthrough

Build this checkout, then run npm run demo:offline. It makes real local MCP calls with synthetic inputs and a persisted stop: cold status, capabilities, a reviewable draft preview, blocked read and clean close. It opens no browser and sends no LinkedIn request. Dated sample output is labeled synthetic; a real first-read recording remains a consented validation step.

Bounded workflows and setup

Job/company research, profile comparison and inbox triage contain explicit call limits and source-link rules. Client setup separates locally exercised MCP transport from untested client applications. Privacy and deletion explains retained safety history. Roadmap coverage tracks every acceptance requirement. Official-provider pilot describes the app/scopes and integration evidence still needed. Docker files are an experimental Linux recipe; no container build, display/login or runtime has been verified locally.

πŸ›  Development

npm run dev          # run from source (stdio)
npm run typecheck
npm test             # vitest (safety layer + smoke)
npm run build

πŸ“„ License

MIT β€” see LICENSE. Missing files caused by cloud synchronization were recovered from the committed revision with maintainer authorization. The 3.0.0 core scope and destination receipts are tracked in release readiness. Not affiliated with LinkedIn.

linkedin-mcp MCP server

Made by Dev Agarwalla

Available Tools

22 tools
close_sessionA

Close the browser context and release resources (kills the Chrome process).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the destructive action of killing the Chrome process, which is important. However, with no annotations provided, it lacks further behavioral context such as idempotency, whether it can be called multiple times, or side effects on other sessions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is a single, concise sentence with no extraneous information. Every word adds value, clearly stating the action and the key behavioral consequence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, no output schema), the description is mostly complete. It explains the purpose and the main effect. However, it could mention if there is any return value or success indication, but that is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Tool has no parameters (0 params, schema coverage 100%). According to the guideline, baseline for 0 params is 4. The description adds no parameter info, but that is acceptable since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action (close browser context) and the specific effect (kills Chrome process). Verb 'close' and resource 'browser context' are specific, and the tool name aligns. No sibling tools have similar functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool or alternatives. Since there are no sibling tools for session management, it is implied for cleanup after automation, but the description does not state prerequisites or typical workflow placement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comment_on_postA

[ALPHA, write] Comment on a post. Gated: requires confirm:true. Returns a structured status.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_urnYesThe post ACTIVITY urn, e.g. urn:li:activity:7472… (not the share urn)
textYesComment text
confirmNoMust be true to actually execute. Omit/false = refuse (safety).

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool is write-oriented ('write'), requires confirmation gate, and returns a structured status. However, it omits details like auth requirements, rate limits, or what happens on error.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, containing only essential information: purpose, gating, and return. It is front-loaded with meta info. While not verbose, it is appropriately sized for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 params, no output schema), the description covers purpose, gating, and return type. Combined with the schema's parameter descriptions, it provides sufficient context for an agent. No major gaps identified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with descriptions. The description merely restates the confirm gating, adding no new semantic information beyond what the schema already provides (e.g., post_urn format, text length). Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Comment on a post' with the verb and resource. It distinguishes from siblings like 'react_to_post' and 'create_post' by the action, though no explicit comparison is made. The 'ALPHA, write' prefix adds context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes the gating requirement ('requires confirm:true'), but does not explicitly advise when to use this tool versus alternatives like reacting or messaging. Usage is implied but not fully guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connect_with_personA

[ALPHA, write] Send a connection request. Gated: requires confirm:true. Returns a structured status (ok | duplicate | already_connected | restricted | quota_exhausted | failed). Counts against the daily connect cap.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYesThe fsd_profile id (the ACoAA… part of the profile URN)
messageNoOptional note (max 300 chars)
confirmNoMust be true to actually execute. Omit/false = refuse (safety).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses write nature, gating, possible return statuses (ok, duplicate, etc.), and quota impact. No annotation provided, so description covers key aspects, though not exhaustive (e.g., no mention of success effect).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two brief sentences with no redundancy. Front-loaded with key action and constraints. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers core: action, gating, returns, and rate limit. Lacks explanation of post-connection behavior (e.g., pending state), but given no output schema and no annotations, it's reasonably complete for a simple connect action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all 3 parameters (100% coverage). Description adds value by explaining confirm's role as safety gate and listing possible return statuses, which are not in schema. This justifies above baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Send a connection request' which is specific and differentiates from sibling tools like send_message (for messaging) or comment_on_post. The verb and resource are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit gating instruction: 'requires confirm:true' and mentions daily cap. However, lacks explicit when-not-to-use or alternatives, but context is clear for intended use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_postA

[ALPHA, write] Publish a text post to your feed. Gated: requires confirm:true. Returns a structured status.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesPost text
visibilityNoAudiencePUBLIC
confirmNoMust be true to actually execute. Omit/false = refuse (safety).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It labels the tool as '[ALPHA, write]', indicating it is an alpha stage write operation, and mentions it returns a structured status. While it lacks details on rate limits or authentication, the core behavior is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences, front-loading the purpose and key constraint. Every phrase adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (3 parameters, no nested objects, no output schema), the description covers the essential behavior: posting text with visibility and confirm flag. It mentions return value (structured status) even without an output schema, which is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds little beyond the schema. It only reinforces that confirm must be true to execute, which is already documented in the schema description. No additional semantics are provided for the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Publish a text post to your feed,' which is a specific verb+resource combination. It clearly distinguishes the tool from siblings like comment_on_post or react_to_post by focusing on creating a new post.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance that the tool requires confirm:true to execute ('Gated: requires confirm:true'), indicating when the tool actually performs the action. However, it does not mention when not to use or suggest alternatives to other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_companyB

Get a company by its LinkedIn URL slug (e.g. "google", "microsoft"). Returns name, description, website, industry, size, HQ.

ParametersJSON Schema
NameRequiredDescriptionDefault
universal_nameYesCompany URL slug, e.g. "google"

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior. It only lists return fields; it does not mention error handling (e.g., missing slug), authentication requirements, or rate limits. The read-only nature is implicit but not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with a clear verb and resource, front-loaded with the purpose. No unnecessary words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description mentions return fields, it lacks details on response format, error cases, or pagination. No output schema exists, so more context would be beneficial. Adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes the parameter as 'Company URL slug'. The description adds 'LinkedIn URL slug' and provides more examples, but the added value is modest given 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a company by its LinkedIn URL slug, listing specific return fields. It distinguishes from siblings like search_companies (search-based) and get_company_employees (related data).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 search_companies or get_company_employees. The description does not specify prerequisites or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_employeesA

List employees LinkedIn surfaces for a company (by URL slug). Returns name, headline, and public identifier (feed the slug to get_profile). Prospecting core.

ParametersJSON Schema
NameRequiredDescriptionDefault
universal_nameYesCompany URL slug, e.g. "anthropicresearch"
countNoEmployees to return (default 10)

TDQS

A3.8/5.0
Behavior3/5

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 discloses that the tool returns name, headline, and public identifier, but does not mention safety (read-only), rate limits, authentication needs, or that the list may be limited to what LinkedIn surfaces. The behavioral transparency is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no superfluous words. It front-loads the action ('List employees'), specifies the input method, and summarizes return fields and use case. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no output schema, the description tells the agent what fields to expect (name, headline, identifier). It does not explain count parameter behavior (e.g., pagination) or error handling, but the schema already provides the count default and limits. The description is largely complete for its purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers both parameters with descriptions (universal_name: URL slug; count: employees to return, default 10). The description adds minor context by noting the slug can be fed to get_profile, but does not significantly enhance understanding beyond the schema. Baseline of 3 for 100% coverage is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists employees for a company, specifies the input as a URL slug, and details the returned fields (name, headline, public identifier). It also provides a usage hint for the next step (get_profile). This distinguishes it from sibling tools like get_company or get_profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for prospecting and hints at a workflow (feed slug to get_profile), but it does not explicitly state when to use this tool versus alternatives like search_people or when not to use it. No exclusion criteria or alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_postsA

Get a company's recent posts by its LinkedIn URL slug (e.g. "google"). Returns post text + a short meta line.

ParametersJSON Schema
NameRequiredDescriptionDefault
universal_nameYesCompany URL slug, e.g. "google"
countNoPosts to return (default 10)

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully explain behavior. It mentions returning post text and a meta line, but does not disclose error handling (e.g., what if the company slug is invalid), data ordering (chronological vs. algorithmic), rate limits, or that it is a read-only operation. This is insufficient for a data-retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the main purpose. There is no wasted text; every word adds value. It is concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and few parameters, the description covers the basics (input, output). However, it lacks details on ordering, pagination, error cases, and the scope of 'recent'. While adequate for a simple tool, it leaves some important context undefined.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds minimal value beyond the schema: it gives an example URL slug and states the default count. It does not clarify the meaning of 'recent' or any other nuance. Thus, it meets but does not exceed the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: getting a company's recent posts by LinkedIn URL slug. It provides an example ('google') and specifies the return content ('post text + a short meta line'), which distinguishes it from sibling tools like get_company (company info) and get_feed (personal feed).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by giving the input format (URL slug), but does not explicitly state when to use this tool versus alternatives or provide prerequisites. There is no guidance on when not to use it or known limitations, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_conversationA

Read messages in a LinkedIn conversation by its URN (get the URN from get_inbox).

ParametersJSON Schema
NameRequiredDescriptionDefault
conversation_urnYesFull urn:li:msg_conversation:(...) from a get_inbox result

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It indicates 'Read messages', which implies a read-only operation without destructive side effects, but lacks details on permissions, rate limits, or result format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that conveys the essential information without extraneous words. It is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 or nested objects, the description sufficiently covers the action and input source. It could mention what is returned (messages), but it is implied by 'Read messages'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter. The description adds value by specifying the URN format as 'Full urn:li:msg_conversation:(...) from a get_inbox result', which provides helpful context beyond the schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Read messages in a LinkedIn conversation by its URN', specifying a specific action and resource. It distinguishes from sibling tools like get_inbox (which lists conversations) and send_message (which sends messages).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context by noting that the URN should come from get_inbox, implying a sequential usage pattern. However, it does not explicitly state when not to use or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_feedB

Get recent posts from your LinkedIn home feed (author + post text).

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of posts (default 10)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and description does not disclose behavioral traits beyond a basic read operation. Does not mention read-only nature, rate limits, authentication requirements, or behavior when feed is empty.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no wasted words. Front-loaded with key information (verb, resource, output fields).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one parameter and no output schema, description is minimal but adequate for a simple list tool. However, it lacks details on pagination, ordering, date range, or definition of 'recent'. Could be more complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with description for the single parameter 'count' ('Number of posts (default 10)'). Description adds no additional meaning beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'Get', resource 'recent posts from your LinkedIn home feed', and specifies returned fields 'author + post text'. This distinguishes it from sibling tools like get_company_posts or get_inbox.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. Does not mention that for company-specific posts one should use get_company_posts, or that it only returns home feed posts. Usage context is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_inboxA

List your recent LinkedIn messaging conversations (title, last activity, unread count).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It states it lists conversations, implying read-only behavior, and lists return fields. However, it lacks details on ordering, pagination, or what 'recent' means.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no wasted words. Front-loaded with purpose and output details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with no parameters and no output schema, the description adequately covers what the tool does and returns. Missing details like 'list format' or 'sort order' are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0 parameters, so coverage is 100%. Description adds meaning by specifying the output fields, which is useful context beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list' and the resource 'recent LinkedIn messaging conversations', and specifies the returned fields (title, last activity, unread count). It distinguishes from siblings like get_conversation and send_message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for getting an overview of recent conversations but does not explicitly state when to use it vs alternatives like get_conversation for a specific thread. No exclusions or when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_job_detailsA

Get full details for a job posting by its numeric id (the digits in /jobs/view/ or from search_jobs jobUrn).

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesNumeric job id, e.g. "4423697734"

TDQS

A4/5.0
Behavior2/5

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 mentions 'full details' but does not disclose what that entails, whether it is read-only, or any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no extraneous words. It efficiently conveys the tool's purpose and parameter sourcing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple input (one parameter) and no output schema, the description is sufficient for an agent to invoke the tool correctly. It could mention that it returns full details but not errors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes the job_id parameter as a numeric string. The description adds value by explaining where to find the id (URL or search_jobs), which aids correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('job posting'), and explains how to obtain the numeric id. It clearly distinguishes from sibling tools like search_jobs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool (when you have a numeric id) and provides sources for the id. It implies not to use it for searching, as search_jobs is a sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_profileA

Get the authenticated user's own LinkedIn profile (experience, education, headline, summary).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral traits. It correctly suggests a read operation but lacks specifics on authentication, permissions, or rate limits. For a simple profile retrieval, this is adequate but not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence is concise, front-loaded with key information, and contains no unnecessary content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description provides essential purpose but could be slightly more complete by noting it returns the entire own profile. However, it suffices for a simple retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist in the schema, so the description does not need to add parameter information. Baseline 4 applies as per guidelines for zero parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool returns the authenticated user's own LinkedIn profile with specific fields (experience, education, headline, summary). It distinguishes from sibling tools like 'get_profile' (for other profiles) and 'whoami' (basic info).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage for retrieving own profile but does not provide explicit when-to-use or when-not-to-use guidance. No alternatives are mentioned despite siblings like 'get_profile'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_notificationsB

Get your recent LinkedIn notifications (headline, time, read state).

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of notifications (default 20)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description should disclose behavioral traits. It states it's a read operation but lacks details on ordering (e.g., most recent first), pagination, or error conditions. Adequate but could improve.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence of 10 words, no redundancy. Efficiently conveys the tool's purpose and key fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single optional parameter and no output schema, the description covers purpose and return fields. Lacks mention of error handling or ordering, but nearly complete for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema describes the count parameter fully (range, default, description). The tool description adds no additional semantic value beyond the schema, so baseline is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'Get' and resource 'your recent LinkedIn notifications' with specific fields (headline, time, read state). Does not explicitly differentiate from siblings like get_feed or get_inbox, but the resource is distinct enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 such as get_feed or get_inbox. No mention of prerequisites or rate limits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pending_invitationsA

List your pending connection invitations β€” received (inbound, with the urn/sharedSecret to accept later) and sent (outbound). Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
directionNoWhich queue to return (default both)both
countNoMax per direction (default 50)

TDQS

A4.1/5.0
Behavior4/5

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 explicitly states 'Read-only', indicating it is a safe operation. It also mentions the inclusion of urn/sharedSecret for received invitations. Lacks details on pagination boundaries beyond count parameter, but is otherwise transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using a single sentence with a dash. It is front-loaded with the main action and includes key details without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the basic purpose and mode (read-only), but does not describe the full output structure beyond the urn/sharedSecret for received invitations. Given the absence of an output schema, more details about return fields (e.g., timestamps, sender info) would improve completeness for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are already documented. The description does not add new meaning beyond the schema; it only mentions the two queues. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list' and the resource 'pending connection invitations', distinguishing between received and sent. It is specific and distinct from sibling tools like connect_with_person.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by explaining that received invitations include an urn/sharedSecret for later acceptance. However, it does not explicitly state when not to use this tool or mention alternatives, though the sibling tool connect_with_person implies usage for sending.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_profileA

Get a LinkedIn profile by public identifier (the slug in the profile URL, e.g. "satyanadella").

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesLinkedIn public identifier / vanity slug, e.g. "williamhgates"

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It states the action but does not disclose behavioral traits such as read-only nature, error handling for missing profiles, rate limits, or return format. Without an output schema, the agent lacks information on expected response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise, and front-loaded with the key action. Every word earns its place, with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 1-parameter tool, the description is adequate but minimal. It lacks details about output format, error scenarios, or behavior when the profile is private. Still, it meets the minimum viable standard for a basic read operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% coverage with a clear description of the 'username' parameter. The description adds an example but does not significantly expand beyond what the schema already provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets a LinkedIn profile by public identifier, with an example. It distinguishes from sibling tools like 'get_my_profile' and 'get_company' by specifying the input type (slug).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have a public identifier, but does not explicitly state when to use this tool versus alternatives like 'get_my_profile' or 'get_company'. No guidance on when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

health_checkA

Deep health check: cookie login state, a LIVE Voyager probe (confirms the API actually answers, not just that a cookie exists), and today's safety-budget headroom (per-action used/cap/remaining + pending invites).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses the tool checks cookie login, API liveness, and safety budget. It does not mention side effects or rate limits but is transparent about its read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that packs essential information without wasted words. It is front-loaded with the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and no output schema, the description provides sufficient context for a health check tool. It covers key aspects but could hint at return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the description does not need to explain them. Baseline score of 4 applies as no additional parameter meaning is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs a deep health check including cookie login state, a LIVE Voyager probe to confirm API responsiveness, and safety-budget headroom details. It is specific and well-differentiated from sibling tools like whoami.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives. It implies usage for pre-operation verification but lacks explicit guidance on when to call health_check vs other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

react_to_postA

[ALPHA, write] React to a post. Gated: requires confirm:true. Returns a structured status.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_urnYesThe post ACTIVITY urn, e.g. urn:li:activity:7472… (not the share urn)
reactionNoLIKE
confirmNoMust be true to actually execute. Omit/false = refuse (safety).

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates a write operation ('[write]') and a safety gate ('requires confirm:true'), and mentions it returns a structured status. However, it lacks details on side effects (e.g., whether reactions can be removed) or authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences that front-load the purpose. Every sentence adds valueβ€”the first states the action, the second explains the gate and return type. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with 3 parameters and no output schema. The description mentions the return type ('structured status'), which is helpful, but does not specify the structure or handle edge cases (e.g., invalid post URN, duplicate reactions). It is minimally adequate for a straightforward write endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has descriptions for 2 of 3 parameters (67% coverage), so the baseline is 3. The main description adds no further meaning beyond listing the tool's action. The schema already provides the reaction enum and the confirm flag semantics. The description does not compensate for the missing reaction description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'React to a post' which identifies the verb and resource. It distinguishes itself from sibling tools like 'comment_on_post' or 'create_post' by specifying the action. The '[ALPHA, write]' prefix clarifies the state and maturity, adding context without confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that the tool is 'Gated: requires confirm:true', which provides a necessary usage constraint. However, it does not explicitly state when to use this tool versus alternatives, nor does it list any exclusions or prerequisites beyond the confirm flag.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_companiesA

Search LinkedIn companies by keywords. Returns name + universalName slug (pass that to get_company for full details).

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordsYesSearch keywords, e.g. "fintech bangalore"
countNoResults (default 10)

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for behavioral disclosure. It only states that the tool returns name and universalName, but does not mention side effects, rate limits, authentication, or pagination. For a search tool, more detail on potential limitations would be helpful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence of 15 words, immediately clarifying purpose and providing a key usage hint. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (2 parameters, no output schema), the description is mostly complete. It explains what the tool does and what it returns, and how to proceed. It does not cover pagination or error handling, but for a search tool with a maximum count of 25, this may be acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (both parameters have descriptions in the schema). The description adds minimal additional meaning, only hinting at the relationship between the search result and get_company. The schema already covers the parameters adequately, so the description does not need to add much.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Search' and resource 'LinkedIn companies by keywords', clearly differentiating it from sibling tools like get_company (which gets details) and search_people. It also tells the agent to pass the slug to get_company for full details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the purpose and hints at the workflow (search then get_company). It does not explicitly state when not to use, but the context is clear given the simple search function.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_jobsA

Search LinkedIn jobs by keywords (and optional location). Returns title, location, posted time.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordsYesJob search keywords, e.g. "software engineer"
location_geo_idNoOptional LinkedIn geo URN id to scope the location
countNoResults (default 10)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses the return fields but omits details like pagination, sorting, rate limits, or authentication requirements. It implies a read operation but does not confirm. This is minimally adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: first states purpose, second lists return fields. No unnecessary words, front-loaded effectively.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the basic purpose and output structure but lacks details on result count, sorting, pagination, or the location_geo_id format. For a simple search tool with no output schema or annotations, it is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so each parameter already has descriptions. The tool description only recaps 'by keywords (and optional location)', adding no extra semantic information beyond the schema. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Search', the resource 'LinkedIn jobs', and the scope 'by keywords (and optional location)'. It also lists the return fields (title, location, posted time), which distinguishes it from sibling tools like get_job_details and search_people.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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: for keyword-based job search with optional location. It does not explicitly mention when not to use it or suggest alternatives, but the context is sufficient for an agent to differentiate from other search tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_peopleA

Search LinkedIn people by keywords. Returns name, headline, location, and public identifier (pass that to get_profile for full details).

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordsYesSearch keywords, e.g. "recruiter at Google"
countNoResults (default 10)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden. It discloses basic return fields but does not mention whether the operation is read-only, any authentication requirements, rate limits, or potential side effects. The disclosure is adequate for a simple search but lacks comprehensive behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loads the core purpose, and every word is informative. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema and annotations, the description adequately explains the return values and suggests the next step. However, it omits details on result ordering, error cases, and pagination, leaving minor gaps for a complex agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% as both parameters have descriptions. The description adds a concrete example for keywords ('e.g. "recruiter at Google"') and restates the default for count, providing slight additional value over the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it searches LinkedIn people by keywords and specifies the returned fields (name, headline, location, public identifier). It distinguishes from sibling tools like search_companies and search_jobs by naming the target resource (people).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context on when to use this tool (searching people by keywords) and suggests a follow-up action: passing the public identifier to get_profile for full details. However, it does not explicitly state when not to use it or mention alternatives for specific lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_messageA

[ALPHA, write] Send a message. Pass thread_id / conversation_urn to REPLY into an existing conversation (verified); otherwise a new thread is started to recipient_urn (best-known). Gated: requires confirm:true. Returns a structured status. Counts against the daily message cap.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipient_urnNoRecipient member URN (urn:li:fsd_profile:ACoAA…). Required when starting a NEW thread.
thread_idNoExisting thread id (2-…) or full msg_conversation urn to reply into (preferred over recipient_urn).
messageYesMessage body (multiline supported)
confirmNoMust be true to actually execute. Omit/false = refuse (safety).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description covers full burden. Discloses write operation, gated execution (confirm needed), returns structured status, and counts against daily cap. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with clear structure: alpha note, action, two modes, gating, return type, side effect. No unnecessary words, front-loaded with key info.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all essential aspects of a complex tool with 4 parameters, two modes, and a gating mechanism. Missing detailed return format, but 'structured status' suffices given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. Description adds value by explaining the dual-mode behavior (reply vs new thread) and the confirm gate, which goes beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool sends a message, distinguishes between replying to an existing conversation and starting a new one, and identifies key resources (thread_id, recipient_urn). It stands out from sibling tools like comment_on_post or connect_with_person by focusing on direct messaging.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance on when to use thread_id/conversation_urn vs recipient_urn, and the requirement for confirm:true to execute. Mentions daily message cap, helping the agent understand constraints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiA

Report server version, browser/login status, and capabilities.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It correctly indicates a read-only, status-reporting behavior (no mutation hints), though it omits explicit safety flags. The reported items are clear enough for an agent to infer no side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence that conveys all necessary information without wasted words. It front-loads the primary action and lists outputs briefly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, so the description must explain return values. It lists three distinct categories (version, status, capabilities), which is adequate. However, 'capabilities' is somewhat vague and could benefit from examples. Overall, it covers the core functionality.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters (empty schema with 100% coverage). The description appropriately does not need to add param information, earning the baseline score of 4 for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Report' and lists concrete items: server version, browser/login status, capabilities. It clearly distinguishes from sibling tools like health_check (which likely just checks connectivity) and profile tools (which have parameters).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool is for checking current session and server info, but does not explicitly state when to use it versus alternatives like health_check or get_my_profile. No exclusions or prerequisites are given.

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.

  1. 22 tool updatesv2.0.3
    • First observedclose_session
    • First observedcomment_on_post
    • First observedconnect_with_person
    • First observedcreate_post
    • First observedget_company
    • First observedget_company_employees
    • First observedget_company_posts
    • First observedget_conversation
    • First observedget_feed
    • First observedget_inbox
    • First observedget_job_details
    • First observedget_my_profile
    • First observedget_notifications
    • First observedget_pending_invitations
    • First observedget_profile
    • First observedhealth_check
    • First observedreact_to_post
    • First observedsearch_companies
    • First observedsearch_jobs
    • First observedsearch_people
    • First observedsend_message
    • First observedwhoami

TDQS

A3.9/5.0

Scored across 22 tools

Disambiguation5/5

Each tool targets a distinct LinkedIn resource or action. Reads (get_*) are clearly separated from writes (create, comment, connect, etc.), and search tools are dedicated to people, companies, and jobs. No two tools overlap in purpose.

Naming Consistency4/5

Most tools follow a verb_noun pattern (e.g., get_profile, search_people, create_post). A few exceptions like health_check and whoami break the pattern, but overall the naming is predictable and readable.

Tool Count5/5

22 tools is well-scoped for a LinkedIn integration. Each tool covers a distinct operation without overloading the surface, covering profiles, companies, jobs, messaging, feed, and account management.

Completeness4/5

Core CRUD and lifecycle operations for LinkedIn are present: profile reading, search, connection management, messaging, and feed interactions. Minor gaps like profile editing or post deletion exist but do not hinder typical workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables AI assistants to interact with LinkedIn data through the Model Context Protocol, allowing profile searches, job discovery, messaging, and network analytics.
    28
    70 npm
    90
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Post 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.
    9
    70 npm
    2
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Live tech-hiring intelligence for AI agents. Search 130K+ open jobs collected daily from ~500 tech companies' own career sites Ҁ” plus company hiring profiles, tech stacks, salary benchmarks, and skill trends. Five tools work with no account.
    31
    94 npm
    MIT