Multi-tenant remote MCP server for personal LinkedIn accounts, exposing LinkedIn operations as MCP tools over Streamable HTTP with OAuth 2.1 authorization
LinkedIn MCP demonstrates solid tool design with consistent naming patterns (verb_noun), comprehensive descriptions in French, and explicit input schemas with type definitions. All 13 tools are properly registered with mcp.AddTool(). Tool descriptions average ~180 chars and explain WHAT, WHEN, and prerequisites clearly. Parameters include type info and descriptions. However, output schemas are not documented in the visible code, responses are returned via jsonResult() without schema declarations. Error handling lacks recovery guidance (no 'try X instead' patterns). Write operations implement confirmation patterns (confirm=true) which is excellent for safety, but error messages are not shown in source. Missing: pagination guidance for list_posts, structured error categorization, and explicit output field documentation.
Mêmes métriques que post_analytics mais agrégées sur toutes les publications du compte. Utile pour suivre une tendance plutôt qu'une publication.
Vérifie auprès de LinkedIn que l'autorisation tient toujours, et dit ce que le compte a le droit de faire : publier, commenter, lire ses publications, accéder aux statistiques. À appeler en premier, et dès qu'un outil échoue.
Supprime définitivement un commentaire de l'utilisateur. Demande w_member_social_feed. ÉCRITURE : sans confirm=true, l'outil renvoie seulement un aperçu et n'envoie rien à LinkedIn. Montrez l'aperçu à l'utilisateur, obtenez son accord explicite, puis rappelez l'outil avec confirm=true.
Supprime définitivement une publication. Ses réactions et ses commentaires disparaissent avec elle, et rien ne les restaure. ÉCRITURE : sans confirm=true, l'outil renvoie seulement un aperçu et n'envoie rien à LinkedIn. Montrez l'aperçu à l'utilisateur, obtenez son accord explicite, puis rappelez l'outil avec confirm=true.
Réécrit le texte d'une publication. LinkedIn n'autorise que le texte : le lien ou le média restent ceux d'origine, et la publication est marquée comme modifiée. ÉCRITURE : sans confirm=true, l'outil renvoie seulement un aperçu et n'envoie rien à LinkedIn. Montrez l'aperçu à l'utilisateur, obtenez son accord explicite, puis rappelez l'outil avec confirm=true.
Output schemas not documented. Tools return jsonResult(status/out) without declaring response field types, making it impossible for LLMs to plan downstream calls or extract specific fields reliably.
Error handling lacks recovery guidance. toolError() is called but error messages are not visible in source. LLMs receive no actionable next steps (e.g., 'Try connection_status first' or 'Requires r_member_social permission').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 79 | <=2025-11-25 | v2 |
Publications du compte, les plus récentes d'abord. Tant que la permission restreinte r_member_social n'est pas accordée, la liste ne contient que les publications faites depuis ce serveur : le champ source le dit.
Statistiques détaillées d'une publication : impressions, comptes atteints, réactions, commentaires, repartages, enregistrements, clics, abonnés gagnés et vues de profil générées. Demande la permission r_member_postAnalytics, obtenue via le formulaire Community Management de LinkedIn.
Commentaires laissés sur une publication. Passez l'URN d'un commentaire au lieu de celle d'une publication pour obtenir ses réponses. Demande r_member_social.
Nombre de réactions et de commentaires d'une publication, et si l'utilisateur l'a lui-même likée. Demande r_member_social : LinkedIn ferme la lecture de l'engagement même sur ses propres publications.
Commente une publication, ou répond à un commentaire en passant parent_comment_urn. Demande w_member_social_feed, que w_member_social ne couvre pas. ÉCRITURE : sans confirm=true, l'outil renvoie seulement un aperçu et n'envoie rien à LinkedIn. Montrez l'aperçu à l'utilisateur, obtenez son accord explicite, puis rappelez l'outil avec confirm=true.
Publie sur le profil LinkedIn de l'utilisateur : texte seul, partage de lien, ou repartage d'une publication existante. ÉCRITURE : sans confirm=true, l'outil renvoie seulement un aperçu et n'envoie rien à LinkedIn. Montrez l'aperçu à l'utilisateur, obtenez son accord explicite, puis rappelez l'outil avec confirm=true.
Ajoute ou retire une réaction sur une publication ou un commentaire. Demande w_member_social_feed, que w_member_social ne couvre pas. ÉCRITURE : sans confirm=true, l'outil renvoie seulement un aperçu et n'envoie rien à LinkedIn. Montrez l'aperçu à l'utilisateur, obtenez son accord explicite, puis rappelez l'outil avec confirm=true.
Adresse à ouvrir pour réautoriser LinkedIn, quand un outil répond « autorisation expirée » ou avant l'échéance des 60 jours.
list_posts lacks pagination documentation. No mention of total count, next_cursor, or how to handle large result sets. Description does not state result limit or pagination strategy.
Parameter descriptions use French exclusively. While internally consistent, this limits discoverability and integration with English-speaking LLM clients and documentation tools.
Confirmation pattern (confirm=true) is well-implemented for write operations, but no explicit documentation of what happens if confirm is omitted or false. LLMs may not understand the dry-run behavior without clearer guidance.