MCP server for LinkedIn Company Page management via the official Community Management API
16 tools with complete schemas and descriptions. Naming is consistent (verb_noun pattern: linkedin_*). Descriptions are adequate (100-200 chars typical) but lack actionable context for LLM selection. Parameters are typed and mostly described, but lack constraints (enums, ranges, format hints). Output schemas are not documented, LLMs cannot predict response structure. Error handling is absent from tool definitions. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, DESTRUCTIVE). Missing dependency hints and recovery guidance.
Post a comment on behalf of the company page.
Create a post on the LinkedIn company page. Supports text, articles (with URL), and media (with pre-uploaded media ID).
Delete a comment from a post.
Delete a post from the company page.
Get comments on a company page post.
Get follower demographics breakdown — location, seniority, industry, company size, job function.
No output schemas documented. LLMs cannot predict response structure, forcing them to guess what fields are returned and how to chain tools. E.g., linkedin_create_post returns a post_id, but this is not declared.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are marked with Risk levels (READ_ONLY, WRITE, DESTRUCTIVE) in metadata but not exposed to LLM via schema. LLMs cannot infer which tools are safe to retry or have side effects.
Descriptions lack actionable context. E.g., 'Get follower statistics for the company page' does not explain WHEN to call this vs linkedin_get_follower_demographics, or what fields are returned. Descriptions should be 50-200 chars and answer: what, when, why.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Get follower statistics for the company page — counts, growth, and demographics (location, seniority, industry, company size, job function).
Get company page details — name, description, industry, website, follower count, staff count.
Get page view and click statistics for the company page.
Get a single post by ID with full details.
Get engagement statistics (impressions, clicks, likes, comments, shares) aggregated across posts or for specific post URNs.
List recent posts from the company page. Returns post IDs, text, engagement counts, and timestamps.
Get reactions on a post (likes, celebrates, etc.).
Initialize an image upload to LinkedIn. Returns an upload URL and media URN. After uploading the image binary to the URL, use the media URN in linkedin_create_post.
Add a reaction to a post on behalf of the company page.
Update the text/commentary of an existing post.
Parameters lack format constraints and ranges. E.g., 'count' defaults to 10 with max 100, but no minItems/maxItems in schema. 'time_granularity' enum is clear, but 'text' has no length limit hint (LinkedIn docs say max 3000 chars, but schema does not enforce it).
No error handling guidance in tool definitions. If linkedin_create_post fails due to invalid media_id or missing article_title, the LLM has no recovery hint. Error responses should guide: 'Invalid media_id. Call linkedin_init_image_upload() first.'