A LinkedIn MCP server for AI assistants — search jobs, generate resumes/cover letters, track applications
Server has 14 tools with consistent naming (verb_noun pattern) and descriptions present for all. However, parameter descriptions are generic and lack actionable constraints. Output schemas are not documented, tools return JSON strings without specifying field structure. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Descriptions average ~80 chars, below the 194-char baseline for A+ tools. Parameter validation rules are not stated in descriptions (e.g., 'count: 1-50' should be in description, not just code).
Analyze a LinkedIn profile using AI and provide optimization suggestions.
Remove a tracked job application.
Generate a personalized cover letter for a job application.
Generate a professional resume from a LinkedIn profile using AI enhancement.
Get tracking information for a specific job application.
Get company information from LinkedIn.
Get detailed information about a specific LinkedIn job posting.
Output schemas not documented. Tools return JSON strings without specifying field structure (e.g., search_jobs returns job objects but fields are not enumerated). LLMs cannot plan downstream calls or extract specific fields.
Parameter constraints not stated in descriptions. E.g., 'count' accepts 1-50 but description says only 'Results per page (1-50, default 20)', constraint is in code, not visible to LLM. Same for 'page' (must be ≥1), 'date_posted' (enum: past-24h|past-week|past-month), 'job_type' and 'experience_level' (enums not enforced).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | <=2025-11-25 | v2 |
Retrieve a LinkedIn profile including experience, education, and skills.
Get job recommendations from LinkedIn.
List all tracked job applications, optionally filtered by status.
Search for job listings on LinkedIn with filters.
Generate a resume tailored to a specific job posting.
Track a job application locally.
Update the status of a tracked job application.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications. 'delete_application' is DESTRUCTIVE but not marked. 'search_jobs' is READ_ONLY but not annotated. Agents cannot infer safety properties.
Error handling lacks recovery guidance. ToolError exceptions are raised but do not suggest next steps (e.g., 'LinkedIn username not configured. Set LINKEDIN_USERNAME environment variable.' is good, but most errors are generic LinkedInMCPError wraps with no actionable guidance).
Destructive operations (delete_application) lack confirmation/dry-run support. Agents can delete applications without a confirmation step, risking accidental data loss.