MCP server for LinkedIn — read profile, publish posts, explore network. Single binary, no runtime required.
linkedin-mcp has 11 tools with complete input schemas and descriptions visible in src/tools.rs. Naming follows verb_noun convention (get-, create-, delete-, search-, send-). However, descriptions are brief (10-100 chars, well below the 194-char baseline), parameter descriptions are sparse or missing, output schemas are undocumented, and error handling lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. The manage-accounts tool conflates three distinct operations (list/add/remove) into one tool, violating single-responsibility. search-people explicitly states 'not available in the standard LinkedIn API' yet remains registered, creating confusion. Parameter descriptions often omit format/constraint details (e.g., 'recipient_urn' lacks URN format guidance). No documented output structure for any tool.
Publish a long-form article to LinkedIn (appears in /recent-activity/articles/). Requires w_articles scope — re-authenticate if missing.
Publish a text post to LinkedIn.
Delete a UGC post by id or URN.
Fetch organization details by numeric organization id.
List 1st-degree connections (requires LinkedIn Partner approval for r_network).
List posts authored by the authenticated member.
Output schemas completely undocumented. No tool returns a documented structure, LLMs cannot plan downstream calls or extract required fields (e.g., post_id from create-post, connection URNs from get-connections). This forces agents to guess field names and types.
Parameter descriptions are minimal or absent. 'recipient_urn' lacks format guidance (is it 'urn:li:member:123' or 'urn:li:person:456'?). 'org_id' is undescribed. 'post_id' lacks clarification on URN vs ID format. LLMs cannot validate inputs without explicit constraints.
manage-accounts conflates three distinct operations (list, add, remove) into one tool with an 'action' enum. This violates single-responsibility, should be split into list-accounts, add-account, remove-account so agents can compose them independently.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Get the authenticated member profile (name, email, sub).
List, add, or remove stored OAuth accounts.
Search job postings by keywords (requires r_jobs scope approval).
People search is not available in the standard LinkedIn API.
Send a message to a member URN (requires Messaging API approval).
search-people explicitly states 'not available in the standard LinkedIn API' yet remains registered as a tool. This creates confusion, agents will attempt to call it and fail. Either remove it or document a workaround (e.g., 'Use get-connections and filter manually').
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. delete-post, send-message, create-post, and create-article should be marked destructive/write. get-* tools should be marked read-only. This prevents agents from reasoning about side effects.