Note technique Mai 2026 Lecture · 8 min

MCP, CLI, API directe — comment choisir

Trois façons pour un agent d'accéder au monde extérieur — et un débat mal posé presque partout. Une grille de lecture honnête, exemples à l'appui.

D'abord, désempiler les niveaux

On oppose souvent MCP et CLI comme s'ils étaient deux options interchangeables. Ce sont en fait quatre niveaux d'abstraction au-dessus du même substrat : HTTP.

01
API REST brute bas niveau
L'agent fait curl ou écrit un script Python avec httpx. Le LLM lit la doc OpenAPI et tape l'endpoint directement.
02
CLI auto-générée bas niveau
Outils type Kiota ou openapi-generator. Mapping 1:1 avec l'API. Gain syntaxique seulement, rarement utile pour un agent.
03
CLI hand-crafted moyen niveau
gh, glab, kubectl, aws. Pagination résolue, auth cachée, endpoints composites, output ergonomique. C'est là que la vraie valeur s'ajoute.
04
MCP haut niveau
Protocole JSON-RPC standardisé, schémas typés, OAuth 2.1, discovery, primitives Resources et Prompts en plus des Tools.

Ces quatre niveaux tapent le même backend HTTP. La question n'est pas « lequel est le bon », mais « où la complexité est déjà absorbée ? ».

Le même geste, trois façons

Tâche concrète : lister les issues GitHub ouvertes assignées à l'utilisateur. Voilà ce que ça donne, du plus brut au plus structuré.

API brute · curl ≈ 180 tokens
# L'agent gère l'auth, l'URL, le parsing, la pagination curl -H "Authorization: Bearer $TOKEN" \ "https://api.github.com/issues?state=open&assignee=me" \ | jq '.[] | {number, title, repo: .repository.name}'
CLI hand-crafted · gh ≈ 60 tokens
# Auth déjà résolue, pagination automatique, output ergonomique gh issue list --assignee @me --state open \ --json number,title,repository
MCP · tool call ≈ 350 tokens (schéma inclus)
// Le schéma du tool est chargé en contexte avant l'appel { "method": "tools/call", "params": { "name": "list_issues", "arguments": { "state": "open", "assignee": "@me" } } }

Le verdict est net : la CLI hand-crafted l'emporte largement sur ce geste, parce que gh a déjà absorbé l'auth, la pagination et le formatage. Au passage, c'est aussi ce que le LLM connaît le mieux — il a vu gh des millions de fois dans son entraînement.

Les chiffres qui ont relancé le débat

Plusieurs benchmarks publiés début 2026 ont quantifié l'écart de manière brutale :

4–32×
Tokens consommés par MCP vs CLI
(Scalekit, 75 runs)
35×
Overhead observé sur tâches complexes
(MindStudio)
72%
Fiabilité MCP vs 100% CLI
quand la complexité augmente

L'explication est mécanique : chaque tool MCP charge son schéma JSON dans le contexte du modèle, plus sa description, plus celle de ses arguments. Avec une dizaine de tools, on a déjà mangé plusieurs milliers de tokens avant même d'avoir commencé à travailler. Et chaque schéma supplémentaire élargit la surface de décision : le modèle hésite entre plus d'options, donc raisonne moins bien.

« Adding too many MCP tools can cause the agent to work worse by increasing decision complexity. »

À l'inverse, une CLI mobilise des patterns que le modèle a vus des millions de fois pendant son entraînement (Stack Overflow, GitHub, docs). Le coût cognitif est quasi nul.

Là où MCP gagne vraiment

L'erreur du débat actuel, c'est de comparer MCP et CLI sur le terrain où CLI est de toute façon supérieure : dev local, mono-utilisateur, shell disponible. Mais MCP n'est pas un format alternatif à CLI — c'est un protocole pour des situations où CLI ne peut pas aller. Quatre cas structurels :

01
Transport remote, cross-client
Une CLI, c'est fork/exec local. Il faut un shell, un binaire installé, le bon OS. Dès que l'agent tourne dans un sandbox web, une app mobile, ou un service SaaS distant — la CLI n'existe plus. Exemple : Claude Desktop, Cursor, Zed, Continue peuvent tous consommer le même serveur MCP sans installation locale. Avec CLI, chaque utilisateur de chaque éditeur doit installer chaque outil.
02
OAuth multi-tenant déléguée
gh auth login résout l'auth du user de la machine. Pour un produit qui fait agir un agent on-behalf-of N utilisateurs distincts, chacun avec ses permissions, la CLI ne tient plus la route. Exemple : un SaaS qui automatise des workflows GitHub pour 5000 clients. MCP standardise OAuth 2.1 + Dynamic Client Registration depuis 2025. Avec CLI, il faudrait provisionner 5000 contextes d'auth — non scalable.
03
Bi-directionnalité & notifications
Une CLI, c'est strictement requête → réponse, cycle court. MCP supporte le sampling (le serveur demande au LLM de générer pendant l'exécution), les notifications (progress async, invalidation), l'elicitation (le serveur questionne l'utilisateur en cours de route). Exemple : un agent de migration de base de données qui pousse un progress update toutes les 30 secondes, ou qui demande au LLM de juger un diff en plein milieu de l'opération.
04
Primitives Resources & Prompts
CLI n'a qu'une primitive : la commande qui s'exécute. MCP en a trois. Resources = contenu exposé comme contexte (pas comme retour d'appel). Prompts = templates paramétrés exposés à l'utilisateur dans le client. Exemple : un serveur MCP de documentation peut exposer chaque page comme une resource attachable au contexte. Avec CLI tu peux faire cat, mais tu perds la sémantique « ceci est du contexte de référence, pas un résultat d'action ».

À noter : aucun de ces quatre points ne se règle en « standardisant » la CLI. C'est le modèle d'exécution qui diverge. Le seul moyen de faire une CLI remote, multi-tenant, bi-directionnelle, avec des Resources… c'est de réinventer MCP.

Le vrai critère de décision

Une seule question tranche presque tout, formulée par Scalekit dans leur benchmark :

L'agent agit pour qui ?

Le point d'inflexion, c'est quand l'agent arrête d'agir pour son utilisateur et commence à agir au nom d'autres personnes.

Automatiser son propre workflow → CLI. Un produit qui automatise des workflows pour des clients distincts, dans leurs organisations, avec leurs droits → MCP. Le surcoût en tokens est le prix d'admission de la gouvernance.

Le piège dans l'autre sens existe aussi : coller du MCP partout « parce que c'est le standard », y compris sur du dev local mono-utilisateur, c'est payer le surcoût sans bénéficier de la gouvernance. C'est ce qui produit la fatigue MCP qu'on lit en ce moment.

L'architecture qui gagne : hybride

Les équipes les plus matures en 2026 ne choisissent plus un camp. Elles utilisent :

Le fait que Google ait shippé en parallèle gws CLI et des serveurs MCP Workspace est le signal le plus clair : ce n'est pas une bataille, ce sont deux outils complémentaires pour deux périmètres différents.

En une phrase

CLI quand l'agent agit pour son utilisateur, MCP quand il agit pour quelqu'un d'autre, API directe quand il n'y a ni l'un ni l'autre — et un agent moderne sait jongler entre les trois.