LinkedCtl MCP provides 28 tools covering LinkedIn operations with consistent naming patterns (verb_noun: auth_*, post_*, comment_*, etc.). However, definition quality has significant gaps: while tool descriptions are present and reasonably clear (avg ~80-120 chars), parameter descriptions are sparse or missing for many tools. Input schemas are visible but lack detail, most parameters lack explicit type constraints (enums, min/max for numerics, formats for dates). Output schemas are not documented anywhere in the provided source, making it impossible for LLMs to predict response structure for chaining. Error handling is not evident. Security practices show concerns: profile parameter is passed throughout but credentials/tokens are not visible in params (good), but no evidence of rate limiting, input validation guidance, or permission gates for destructive operations. Composition is well-organized (one action per tool, clear separation of concerns), but tools lack pagination metadata in descriptions and output documentation prevents proper chaining.
Initiate OAuth2 login flow for LinkedIn
Logout and clear stored credentials
Refresh the access token
Revoke LinkedIn API access tokens
Setup OAuth2 credentials for LinkedIn API
Check current authentication status
Get the current access token
Create a comment on a LinkedIn post
No output schemas documented. LLMs cannot predict response structure, breaking composition patterns and forcing speculation about field names for chaining tools.
Parameter descriptions lack constraint details. 'visibility' in post_create lacks enum documentation (PUBLIC or CONNECTIONS). 'count' and 'start' in list operations lack min/max bounds. 'from_date' and 'to_date' in stats operations lack format specification (ISO 8601 stated but not enforced). 'poll_duration' lacks valid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 23 | - | v1 |
Delete a comment
Get a specific comment by ID
List comments on a LinkedIn post
Upload a document for use in LinkedIn posts
Upload an image for use in LinkedIn posts
Upload a video for use in LinkedIn posts
Get the follower count of an organization
Get details of a LinkedIn organization by ID
List organizations the authenticated user manages
Create a new LinkedIn post
Delete a LinkedIn post
Get a LinkedIn post by ID
List LinkedIn posts
Update an existing LinkedIn post
Create a reaction on a LinkedIn post or comment
Delete a reaction
List reactions on a LinkedIn post or comment
Get analytics for authenticated user's profile
Get analytics for an organization
Get analytics for a LinkedIn post
Pagination parameters (count, start) present in list operations but no documentation of default values, maximum results cap, or whether next_cursor/total_count is returned. Baseline pattern requires returning pagination metadata.
Destructive operations (post_delete, comment_delete, reaction_delete, auth_revoke) lack confirmation/dry-run guidance. No evidence of confirmation request patterns or undo capabilities.
No error handling strategy documented. No guidance on retryable vs fatal errors, no recovery hints (e.g., 'if post not found, try post_list to discover available posts'), no actionable error messages shown.
Parameters like 'reaction_type' in reaction_* tools claim to accept '(LIKE, EMPATHY, INTEREST, APPRECIATION, PRAISE)' but no enum constraint is visible in schema. LLMs may hallucinate other values.
post_create's optional parameters (image, video, document, poll, poll_options, poll_duration) lack documentation of mutual exclusivity or required combinations. LLMs may pass conflicting parameters.
Media upload tools accept file paths (image_path, video_path, document_path) but no constraints on file size, format, or supported MIME types are documented. LLMs may attempt invalid uploads.