Production MCP server exposing LinkedIn actions via Composio, for personal single-user use.
Server exposes 26 tools with significant definition gaps. Static utility tools (ping, health, version, list_tools) have minimal descriptions (10-50 chars, below 20-char floor for 4 tools). The 22 Composio LinkedIn tools lack visible input parameter schemas in source, schemas are discovered at runtime from Composio API, making validation impossible. No parameter descriptions visible for any LinkedIn tool. Output schemas undocumented. Error handling converts exceptions to generic text responses without recovery guidance. Tool naming follows Composio's UPPERCASE_SNAKE_CASE convention (non-standard for MCP), making intent parsing harder for LLMs. No tool annotations (readOnlyHint, destructiveHint) despite clear risk stratification (READ_ONLY, WRITE, DESTRUCTIVE). Composition is weak: tools like LINKEDIN_DELETE_LINKED_IN_POST and LINKEDIN_DELETE_POST appear duplicative.
Create an article or URL share on LinkedIn
Create a comment on a LinkedIn post
Create a LinkedIn post
Delete a LinkedIn post
Delete a LinkedIn post
Delete a user-generated content post on LinkedIn
Input schemas for 22 Composio LinkedIn tools are not visible in source code, discovered at runtime from Composio API. Cannot validate parameter types, required fields, or constraints. Per HARD SCORING RULE, schema score for these tools MUST be 0.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | <=2025-11-25 | v2 |
Get ad targeting facets from LinkedIn
Get audience counts from LinkedIn
Get company information from LinkedIn
Get an image from LinkedIn
Get images from LinkedIn
Get current user information from LinkedIn
Get network size from LinkedIn
Get organization page statistics from LinkedIn
Get person information from LinkedIn
Get post content from LinkedIn
Get share statistics from LinkedIn
Get videos from LinkedIn
Initialize image upload on LinkedIn
List reactions on LinkedIn
Register image upload on LinkedIn
Search ad targeting entities on LinkedIn
Server, LinkedIn connection, and Composio reachability status.
List every LinkedIn action currently available via Composio.
Liveness check; returns 'pong'.
Report the running server version.
Static utility tools have descriptions under 50 characters (ping: 'Liveness check; returns pong.' = 30 chars; version: 'Report the running server version.' = 34 chars). Per HARD SCORING RULE, descriptions under 20 chars score 0-20. These fall below the 10-1024 char baseline and lack context for LLM selection.
Tool naming uses UPPERCASE_SNAKE_CASE (LINKEDIN_CREATE_LINKED_IN_POST) instead of lowercase verb_noun convention (create_linkedin_post). MCP baseline shows 90% of A+ tools start with lowercase action verbs. This non-standard naming makes intent parsing harder for LLMs and violates Arcade pattern conventions.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification in metadata (READ_ONLY, WRITE, DESTRUCTIVE). Agents cannot distinguish safe vs. destructive operations without annotations. LINKEDIN_DELETE_LINKED_IN_POST and LINKEDIN_DELETE_POST should be marked destructiveHint=true.
Duplicate/overlapping tools: LINKEDIN_DELETE_LINKED_IN_POST and LINKEDIN_DELETE_POST both delete posts. LINKEDIN_DELETE_UGC_POST is a third variant. LLMs will waste reasoning cycles deciding between them. Consolidate into one canonical delete_post tool with clear parameter documentation.