MCP server for HarvestAPI LinkedIn data — profiles, companies, posts, jobs, leads, and more
HarvestAPI MCP has 25 tools with consistent naming (verb_noun pattern: get_*, search_*) and basic descriptions. However, critical gaps undermine quality: most tools lack input schemas in the source code (only 6 of 25 have visible schema definitions), parameter descriptions are sparse or missing, and output schemas are entirely undocumented. Error handling exists but is generic. The custom zod-to-json-schema converter in index.ts is fragile and incomplete, relying on heuristics that fail for complex types. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being READ_ONLY. Descriptions are adequate (50-100 chars) but lack dependency hints and recovery guidance.
Get LinkedIn Ad by ID — requires at least one of adId or url.
Get reactions of a LinkedIn post comment by comment URL.
Get replies of a LinkedIn post comment by comment URL.
Get LinkedIn company — requires at least one of url, universalName, search.
Get LinkedIn company posts — requires at least one of company, companyId, companyUniversalName.
Get LinkedIn group — requires at least one of url or groupId.
14 of 25 tools have no visible input schema in source code. Only 6 tools (get_ad, get_company, get_company_posts, get_post, get_post_comments, get_post_reactions, get_comment_reactions, get_comment_replies, get_my_api_user, get_my_private_account_pools) show explicit schema definitions. Search tools and profile tools lack documented schemas entirely.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., user_id, channel_id) without knowing response structure. This violates pattern:tool and pattern:tool-chain.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | 2025-06-18+ | v2 |
Get LinkedIn job details — requires at least one of jobId or url.
Get details about the API user associated with the provided API key.
Get details about private account pools associated with the API user.
Get LinkedIn post details by URL.
Get comments of a LinkedIn post by post URL.
Get reactions of a LinkedIn post by post URL.
Get LinkedIn profile details
Get LinkedIn profile comments
Get LinkedIn profile posts
Get LinkedIn profile reactions
Search LinkedIn Ads
Search LinkedIn companies
Search for geographic location IDs
Search LinkedIn groups
Search LinkedIn jobs
Search LinkedIn leads
Search LinkedIn posts
Search LinkedIn profiles
Search LinkedIn services
Search tools (harvest_search_*) lack pagination parameters and limits. No page, limit, offset, or cursor parameters visible. Returning unbounded result sets risks context window exhaustion and violates pattern:paginated-result.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all 25 tools being READ_ONLY. Agents cannot distinguish safe tools from destructive ones without explicit hints. Violates pattern:tool-annotation.
Error handling in index.ts is generic (HarvestApiError, HarvestValidationError, HarvestTimeoutError) but lacks recovery guidance. Error messages do not suggest next steps or alternative tools. Violates pattern:recovery-guide.