MCP server that lets AI assistants control LinkedIn accounts and retrieve real-time data.
This server exposes 62 LinkedIn API tools with wide surface area but significant definition quality gaps. Tool names follow verb_noun convention reasonably well (send_message, get_conversation, create_post), which is a strength. However, the majority of tools lack visible input schemas in the source provided, and many descriptions are generic or incomplete. Of the 62 tools listed, only ~8 show explicit input schema definitions in the provided source (accept_invitation, admin_* tools with explicit Input properties). The remainder are inferred from file names and descriptions alone. Per the hard scoring rule: 'If you cannot see the actual tool definition in the source (only inferred): cap that tool's overall at 50.' This applies to ~54 of 62 tools. Additionally, descriptions vary widely, some are 1-2 sentences (e.g., 'Send a message to a LinkedIn connection'), while others add helpful context (e.g., accept_invitation with detailed enum and parameter notes). Average description length across visible tools: ~100 chars, below the 194-char baseline for A+ tools. Error handling and output schema documentation are not visible in the provided source snippets. The server uses Zod for validation (seen in dependencies), suggesting runtime type checking exists, but static schema visibility is poor. This is typical for production agents that wrap external APIs, the schemas exist at runtime but aren't explicitly declared in the MCP tool registration.
Accepts an incoming connection, company-follow, or newsletter-subscription invitation (st.acceptInvitation action). Set invitationType and provide only its matching URL. If this workflow is still running, do not retry this tool; retrying can queue duplicate accept attempts.
Cancel a pending connection or reconnection session.
Create a connection session to connect a new LinkedIn account. Returns a sessionId and connectionLink that must be opened in a browser.
Create a reconnection session for an account with status reconnection_required. Returns reconnectionSessionId and reconnectionLink.
Delete specific rate limits for an account. Deleted limits fall back to system defaults.
54 of 62 tools lack visible input schema definitions in source. Only accept_invitation, admin_* tools with explicit Input properties show schemas. Remaining tools inferred from file names and descriptions alone.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 32 | - | v1 |
Disconnect a LinkedIn account. This action is irreversible — the account must be reconnected from scratch.
Get all connected LinkedIn accounts and pending connection sessions.
Get connection or reconnection session status by session ID.
Get rate limits for an account.
Get system default rate limits.
Get rate limit usage for an account.
Get seat information for the account.
Get subscription status for the account.
Regenerate the API token for an account.
Reparse account information.
Reset rate limits for an account to system defaults.
Set rate limits for an account.
Set seat allocation for the account.
Check connection status with a LinkedIn profile (st.checkConnectionStatus action).
Comment on a LinkedIn post (st.commentOnPost action).
Create a post on LinkedIn (st.createPost action).
Execute a custom workflow (executeCustomWorkflow action).
Fetch detailed information about a company (st.fetchCompany action).
Fetch detailed information about a job (st.fetchJob action).
Fetch detailed information about a person (st.fetchPerson action).
Fetch detailed information about a post (st.fetchPost action).
Get API usage statistics (getApiUsage action).
Get a conversation with a LinkedIn connection (st.getConversation action).
Get inbox messages (st.getInbox action).
Get network connections (st.getNetwork action).
Get the result of a workflow (getWorkflowResult action).
Ignore an incoming invitation (st.ignoreInvitation action).
Manage a conversation with a LinkedIn connection (st.manageConversation action).
Fetch company details via LinkedIn Sales Navigator (nv.fetchCompany action).
Fetch person details via LinkedIn Sales Navigator (nv.fetchPerson action).
Get a conversation via LinkedIn Sales Navigator (nv.getConversation action).
Manage a conversation via LinkedIn Sales Navigator (nv.manageConversation action).
Search for companies via LinkedIn Sales Navigator (nv.searchCompanies action).
Search for people via LinkedIn Sales Navigator (nv.searchPeople action).
Send a message via LinkedIn Sales Navigator (nv.sendMessage action).
Sync inbox via LinkedIn Sales Navigator (nv.syncInbox action).
React to a comment on a LinkedIn post (st.reactToComment action).
React to a LinkedIn post (st.reactToPost action).
Remove a connection (st.removeConnection action).
Reply to a comment on a LinkedIn post (st.replyToComment action).
Retrieve all connections (st.retrieveConnections action).
Retrieve the LinkedIn feed (st.retrieveFeed action).
Retrieve incoming invitations (st.retrieveInvitations action).
Retrieve pending connection requests (st.retrievePendingRequests action).
Retrieve performance metrics (st.retrievePerformance action).
Retrieve profile viewers (st.retrieveProfileViewers action).
Retrieve Social Selling Index (st.retrieveSSI action).
Search for companies on LinkedIn (st.searchCompanies action).
Search for jobs on LinkedIn (st.searchJobs action).
Search for people on LinkedIn (st.searchPeople action).
Search for posts on LinkedIn (st.searchPosts action).
Send a connection request to a LinkedIn profile (st.sendConnectionRequest action).
Send feedback to the Linked API team about the service.
Send a message to a LinkedIn connection (st.sendMessage action).
Sync inbox messages (st.syncInbox action).
Sync network connections (st.syncNetwork action).
Withdraw a pending connection request (st.withdrawConnectionRequest action).
Most tool descriptions are generic and under 50 chars (e.g., 'Send a message to a LinkedIn connection'). Baseline for A+ tools is 194 chars average. Descriptions lack WHEN to use guidance, dependencies, or parameter explanations.
No output schema documentation visible in provided source. Tools return LinkedIn API responses, but structure (fields, nesting, pagination) is not declared. LLMs cannot plan downstream calls or extract required fields without this.
Tools like send_message, create_post, comment_on_post, and send_connection_request modify state but descriptions do not explicitly say so. LLMs cannot determine retry safety without knowing which calls are idempotent.
Destructive tools (remove_connection, admin_disconnect_account) lack confirmation patterns. No dry-run or pre-approval step visible. Agents can trigger irreversible actions without user consent.
Naming clarity issue: 'nv_*' prefix tools (Sales Navigator) vs standard tools. Names like 'nv_send_message' vs 'send_message' are confusingly similar. No parameter distinguishes scope. Duplicate tool responsibility without clear LLM disambiguation.
No error handling guidance visible in descriptions. How should LLMs handle 'user not found', 'connection limit reached', or 'invalid account status'? Descriptions lack recovery hints per pattern:recovery-guide.