LinkedIn API for AI agents — 54 MCP tools, ban-safety gates, web UI, install wizard. No Voyager posting. MIT.
14 tools with complete schemas and descriptions, but significant gaps in parameter documentation and error handling. Tool names follow verb_noun convention well (get_*, search_*, send_*, create_*). Descriptions average ~120 chars, meeting baseline. However, 6 tools lack parameter descriptions for optional fields (e.g., search_people's 'location', 'current_company'; search_jobs' 'experience_level'). No output schemas documented. Error handling is minimal, no recovery guidance, no categorization of retryable vs fatal errors. Write tools (send_connection_request, create_post) mention dry_run and quota enforcement but lack explicit confirmation patterns. Missing: per-tool error examples, field-level output documentation, and dependency hints between tools.
Publish a new LinkedIn post (text + optional local image/video file). Subject to daily quota (default 2), warm-up, business hours, jitter. Set dry_run=true to preview.
List employees at a company from the /people/ page.
Get a LinkedIn company page profile.
Read a specific messaging conversation by participant public ID or thread URN.
Get recent posts from your home feed.
List recent conversations from your LinkedIn messaging inbox.
Optional parameters lack descriptions. search_people's 'location' and 'current_company', search_jobs' 'experience_level', get_company_employees' 'keyword' have no descriptions. LLMs cannot infer when/how to use optional filters.
No output schemas documented. Tools return data but LLMs don't know field names, types, or structure. Prevents downstream tool chaining and forces LLMs to guess field names.
Error handling lacks recovery guidance. No examples of error responses, no categorization of retryable vs fatal errors, no actionable error messages. Agents cannot self-correct on failures.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | <=2025-11-25 | v2 |
Get full details for a specific job posting by its ID.
Get the authenticated user's LinkedIn profile (name, headline, summary, current position).
List sent connection invitations awaiting response.
Get a LinkedIn member's profile by their public identifier (vanity name).
Search for LinkedIn company pages by keyword.
Search for jobs by keyword, with optional location and experience filters.
Search for LinkedIn members by keyword, with optional location and company filters.
Send a connection request to a LinkedIn member, with optional personalized note. Subject to daily quota (default 20), warm-up ramp, business hours, and jitter. Set dry_run=true to preview without sending.
get_conversation has ambiguous parameter design. Accepts 'public_id' OR 'thread_urn' but neither is marked required. Schema shows neither in 'required' array. LLMs may pass both or neither, causing failures.
Write tools (send_connection_request, create_post) mention dry_run and quota enforcement in descriptions but lack explicit confirmation/approval patterns. No guidance on how LLMs should handle quota exceeded or captcha errors.