Points clés
- MCP est un protocole JSON-RPC 2.0 pour les outils. Un modèle (via un client) se connecte à un ou plusieurs serveurs MCP ; chaque serveur expose des Tools (fonctions appelables), des Resources (données lisibles) et des Prompts (templates). Le format wire est identique que le client soit Claude Desktop, Goose, Cline, Continue.dev ou LM Studio.
- Ollama ne parle pas MCP directement — un client MCP enveloppe Ollama. Goose (Block) est la CLI open-source la plus simple avec support natif d'Ollama ; Cline, Continue.dev et LM Studio ont ajouté un client MCP début 2026.
- Quatre serveurs de référence couvrent la plupart des cas d'usage :
filesystem(lecture/écriture dans un répertoire isolé),sqliteetpostgres(requêtes de base, lecture seule par défaut),puppeteerouplaywright(pilotage d'un navigateur headless) etgithub(gestion de dépôts et de PRs avec un Personal Access Token). - La fiabilité des appels d'outils croît avec la taille et l'entraînement. Gemma 4 27B, GLM-5.1 32B, Qwen3 32B, Qwen3-Coder 30B et Llama 3.3 70B traitent MCP proprement en Q4_K_M. Les modèles de moins de 7B émettent régulièrement des appels malformés et bloquent la boucle.
- Le modèle de sécurité considère le LLM comme non fiable. Limitez le serveur filesystem à un seul répertoire, faites tourner la base avec un rôle en lecture seule, n'auto-approuvez jamais
execute_commandniwrite_file, et relisez le journal d'audit après les sessions longues. - MCP local vs Claude Desktop : protocole identique, écosystème de serveurs identique. La pile locale échange le modèle cloud contre un modèle hors ligne — confidentialité, zéro coût par token, pas de rate limit, en contrepartie d'un modèle un peu moins puissant et d'une configuration de sécurité dont vous êtes responsable.
- Le coût en API est de 0 €, mais les tokens sont bien réels. Une boucle d'agent peut consommer 30K–80K tokens pour une seule tâche multi-étapes. Visez un modèle 32K minimum ; 128K est confortable.
Faits rapides
- Protocole : JSON-RPC 2.0 sur stdio (sous-processus local) ou HTTP/SSE (distant). Les agents locaux utilisent presque exclusivement stdio.
- Maintenu par : Anthropic (spécification open source) ; serveurs de référence dans
modelcontextprotocol/serverssur GitHub, plus un écosystème tiers en croissance. - Clients locaux en 2026 : Goose (Block), Cline (extension VS Code), Continue.dev (VS Code/JetBrains), LM Studio (application desktop), plus plusieurs CLIs.
- Modèles Ollama compatibles : tout modèle entraîné nativement aux appels d'outils. En mai 2026 : Gemma 4 27B, GLM-5.1 32B, Qwen3 32B, Qwen3-Coder 30B, Llama 3.3 70B.
- Transports par défaut : stdio pour les processus locaux ; HTTP/SSE uniquement pour partager un serveur entre plusieurs machines ou agents.
- Configuration dans un seul fichier :
~/.config/goose/config.yaml(Goose), le bloc MCP de~/.continue/config.json(Continue.dev) oumcpServersdans l'UI de Cline. Même forme partout : nom du serveur, command, args, variables d'environnement. - Pas besoin de Claude Desktop. Le protocole précède la stratégie d'exclusivité de Claude Desktop ; tous les serveurs de référence sont sous licence MIT/Apache et tournent contre n'importe quel client conforme.
Ce que MCP débloque pour un modèle local
Un LLM local sans outils ne peut que répondre par du texte. Avec MCP, le même modèle agit sur votre machine. C'est la différence entre un chatbot et un agent.
- **« Trouve chaque TODO de ce dépôt, regroupe-les par fichier et écris un résumé Markdown dans
notes/todos.md. »** — le serveurfilesystemlit, le modèle regroupe, le même serveur écrit. Un seul aller-retour. - « Montre-moi le top 10 des clients par chiffre d'affaires ce trimestre, puis trace un graphique. » — le serveur
postgresexécute la requête (rôle en lecture seule), le modèle synthétise et écrit un CSV viafilesystempour votre outil de visualisation. - « Ouvre la une de Hacker News, trouve les trois articles IA principaux, résume-les et ajoute-les à ma liste de lecture. » — le serveur
puppeteerpilote un navigateur headless, le modèle extrait et résume,filesystemajoute. - **« Ouvre un PR draft
chore: bump depssur mon fork et lie l'exécution CI en échec. »** — le serveurgithubcrée le PR, récupère l'exécution et écrit le lien dans la description. - **« Regarde les 100 dernières lignes de
events.dbet dis-moi quels user IDs sont responsables du nouveau pic d'erreurs. »** — le serveursqliterequête, le modèle raisonne, vous lisez la réponse dans le panneau de chat. - Chacun de ces flux est un workflow phrase-vers-action qui demandait auparavant soit un modèle cloud avec des outils hébergés, soit un script à la main. MCP est la couche qui vous permet de réutiliser les mêmes serveurs entre clients et le même modèle entre serveurs.
Comparatif des quatre serveurs MCP les plus utilisés
Les serveurs de référence ci-dessous couvrent la longue traîne du « je veux que mon modèle local fasse réellement quelque chose ». Tous sont open source et tournent comme sous-processus locaux lancés par votre client MCP.
📍 En une phrase
Commencez par le serveur filesystem (5 minutes, faible risque), ajoutez SQLite pour le travail data, ajoutez un serveur navigateur seulement si nécessaire, et n'intégrez GitHub qu'une fois que vous faites confiance au modèle sur votre machine.
💬 En termes simples
Quatre serveurs couvrent 90 % de ce qu'un agent local peut faire pour vous. Le serveur filesystem lit et écrit dans un dossier que vous choisissez. Le serveur SQLite ou Postgres exécute des requêtes contre une base. Le serveur navigateur pilote une vraie fenêtre Chromium pour lire les pages qui exigent du JavaScript. Le serveur GitHub ouvre des issues et des PRs sur vos dépôts. Tous s'installent en une commande, tournent en sous-processus sur votre machine, et aucun n'appelle internet sauf si nécessaire (le navigateur le fait, les autres non).
| Serveur MCP | Capacité | Difficulté de mise en place | Niveau de risque | Idéal pour |
|---|---|---|---|---|
| Filesystem | Lire et écrire des fichiers dans un répertoire isolé | Facile (un chemin à allow-lister) | Moyen — restreindre étroitement | Automatisation personnelle, prise de notes, résumé de dépôts |
| SQLite | Requêter un fichier de base SQLite local | Facile (chemin du fichier .db) | Faible en lecture seule ; moyen avec écriture | Exploration data, analyse de logs, prototypage |
| Postgres | Requêter une base Postgres via une connection string | Moyenne (rôle + URL) | Moyen — utiliser un rôle en lecture seule | Exploration de données prod, reporting, prototypes BI |
| Puppeteer / Playwright | Piloter un Chromium headless ou visible pour navigation, scraping, remplissage de formulaires | Difficile (binaires navigateur, sélecteurs, latence) | Élevé — peut soumettre des formulaires, cliquer n'importe où | Recherche, scraping, tests de régression |
| GitHub | Lister les dépôts, lire des fichiers, ouvrir issues et PRs | Facile (PAT en variable d'env) | Moyen — restreindre le token à des dépôts précis | Workflows dev, triage, brouillons de PR |
| Custom | Tout ce qui peut s'exprimer comme outils JSON-RPC | Difficile (écrire son propre serveur) | Variable | APIs internes, systèmes de niche, glue code |
Comment les pièces s'emboîtent
Trois processus, un protocole partagé. Le modèle vit dans Ollama, le client parle MCP, et chaque serveur expose un petit ensemble d'outils. Chaque appel d'outil fait le saut client → serveur, s'exécute en local et retourne du JSON.
- Ollama tourne en service en arrière-plan sur
127.0.0.1:11434et sert le modèle via une API compatible OpenAI. Il ne sait pas ce qu'est MCP — il répond simplement aux chat completions et émet des appels d'outils quand le modèle les demande. - Le client MCP (Goose, Cline, Continue.dev, LM Studio) est le pont. Il parle à Ollama pour le modèle et aux serveurs MCP pour les outils. Quand le modèle émet un appel d'outil, le client le route vers le bon serveur, récupère le résultat et le réinjecte dans la conversation.
- Les serveurs MCP sont des sous-processus indépendants, un par capacité. Ils parlent JSON-RPC 2.0 sur stdio. Chaque serveur déclare une liste de Tools, Resources et Prompts ; le client fusionne tout en une surface d'outils unique présentée au modèle.
- Le transport stdio garde tout en local. Le serveur est lancé par le client, communique via stdin/stdout et se termine quand le client se termine. Rien ne passe par le réseau sauf si le serveur ouvre lui-même une connexion (le serveur navigateur le fait ; les serveurs filesystem et base ne le font pas).
- Le modèle voit une liste d'outils plate. Du point de vue du modèle, il n'y a pas de serveurs — juste une liste de noms comme
filesystem.read_file,sqlite.query,puppeteer.navigate. Le client gère le routage.
📌Note: L'architecture est identique à celle de Claude Desktop. Les différences sont le modèle (Ollama local au lieu de Claude) et le client (Goose/Cline/Continue.dev/LM Studio au lieu de Claude Desktop). Les serveurs MCP sont les mêmes — vous pouvez faire tourner le serveur filesystem sous Claude Desktop aujourd'hui et il fonctionnera demain sans modification sous Goose.
Configuration : Ollama + Goose en 15 minutes
Goose est en 2026 le chemin le plus court vers un agent MCP local fonctionnel. C'est une CLI open source de Block avec support natif d'Ollama, une interface de chat interactive et un seul fichier de configuration pour tous vos serveurs MCP. Continue.dev, Cline et LM Studio fonctionnent aussi — Goose a juste le coût d'installation le plus faible pour une première mise en route.
- Étape 1 — installer Ollama. Téléchargez depuis
ollama.com/download(macOS/Windows/Linux). Vérifiez que le service tourne aveccurl http://127.0.0.1:11434/api/tags. - Étape 2 — récupérer un modèle compatible tool calling. Choisissez parmi Gemma 4 27B (
gemma4:27b), GLM-5.1 32B (glm5:32b), Qwen3 32B (qwen3:32b) ou Llama 3.3 70B (llama3.3:70b). 16 Go de mémoire unifiée ou 12 Go de VRAM gèrent confortablement 27B–32B en Q4_K_M. - Étape 3 — installer Goose.
pipx install goose-ai(macOS, Linux) ou téléchargez l'installateur depuis la page Goose Releases. La CLI s'installe sous le nomgoose. - Étape 4 — configurer Ollama comme provider. Lancez
goose configure, choisissezollamacomme provider, fixez le modèle sur celui que vous avez récupéré et le host surhttp://127.0.0.1:11434. Goose écrit cela dans~/.config/goose/config.yaml. - Étape 5 — ajouter le serveur MCP filesystem. Éditez
~/.config/goose/config.yamlpour ajouter un blocmcpServers(exemple ci-dessous). Relancezgoose sessionet demandez la liste des fichiers dans votre répertoire de test. Le premier tour confirme que le serveur est bien câblé. - Étape 6 — vérifier avec une vraie tâche. Essayez
goose sessionet demandez « Fais une liste de chaque fichier Markdown dansnotes/, avec titre et nombre de mots, et écris le résultat dansnotes/index.md. » Si l'agent lit, résume et réécrit, la boucle fonctionne.
# 1. Pull a tool-calling model
ollama pull gemma4:27b
# 2. Install Goose
pipx install goose-ai
# 3. Configure Ollama as the provider
goose configure
# Provider: ollama
# Model: gemma4:27b
# Host: http://127.0.0.1:11434
# 4. Start a session — Goose reads ~/.config/goose/config.yaml
goose session💡Tip: Si vous utilisez déjà Cline ou Continue.dev, sautez Goose et utilisez-les — les deux ont ajouté le support des serveurs MCP dans leurs versions de début 2026. Le panneau « MCP Servers » de Cline installe les serveurs de référence en un clic ; Continue.dev lit mcpServers depuis ~/.continue/config.json (même forme que le bloc Goose ci-dessous). Le modèle et les serveurs sont les mêmes ; seule l'application hôte change.
Serveur filesystem : lire et écrire dans un répertoire isolé
Le serveur filesystem est le premier à installer et le plus simple à restreindre proprement. Il expose read_file, write_file, list_directory, move_file, search_files et create_directory — tous limités à un ou plusieurs chemins allow-listés.
- Installation : le serveur de référence est
@modelcontextprotocol/server-filesystem, exécuté vianpx -y(pas besoin d'install globale). Goose, Cline et Continue.dev le lancent automatiquement depuis le bloc de configuration. - Allow-lister les chemins : le serveur prend un ou plusieurs arguments de répertoire et refuse toute opération en dehors. Donnez toujours un chemin explicite et étroit — jamais
~ni/. - Outils exposés :
read_file,read_multiple_files,write_file,edit_file(remplacements ligne par ligne),list_directory,search_files,move_file,create_directory,directory_tree. Le modèle les voit commefilesystem.read_fileet ainsi de suite. - Confort :
directory_treeretourne un arbre JSON ; idéal pour que le modèle s'oriente avant de lire des fichiers précis.search_filesfait une recherche récursive façon grep. - Surface de risque : le serveur respecte l'allow-list, mais à l'intérieur il a tous les droits lecture/écriture. Traitez l'allow-list comme la seule barrière et choisissez un répertoire workspace dédié plutôt que votre home.
# ~/.config/goose/config.yaml
mcpServers:
filesystem:
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-filesystem"
- "/Users/you/agent-workspace"
env: {}⚠️Warning: N'allow-listez jamais / ni votre répertoire home. Créez un dossier agent-workspace dédié, mettez-y des copies des fichiers que l'agent doit toucher et laissez-le opérer uniquement dans ce dossier. Si l'agent dérape, le rayon de blast s'arrête à un répertoire.
Serveurs SQLite et Postgres : interroger de vraies données
Les serveurs base transforment le modèle en analyste junior capable de répondre avec de vraies données — à condition de le garder en lecture seule. Les deux serveurs de référence livrent un outil query et (optionnellement) un outil write_query.
- **Serveur SQLite (
@modelcontextprotocol/server-sqlite)** prend un chemin vers un fichier.db. Utile pour l'analyse de logs, le prototypage de schémas et l'exploration d'exports sans monter une base. - **Serveur Postgres (
@modelcontextprotocol/server-postgres)** prend une connection string. Le pattern recommandé est de créer un rôle dédié en lecture seule pour l'agent et d'utiliser sa connection string. - Outils exposés :
query(SELECT uniquement si configuré en lecture seule),list_tables,describe_table. Le serveur Postgres ajoutelist_schemas. Certains forks ajoutentwrite_query— laissez-le désactivé sauf si vous faites confiance au modèle sur cette base. - Connaissance du schéma : demandez à l'agent « liste les tables et décris les cinq plus utilisées » avant les questions analytiques — le modèle est bien plus précis quand il a appelé
describe_tableque quand il devine les noms de colonnes. - Coût : les requêtes touchent votre base directement. Un
SELECT *mal formé sur une table de 100 M de lignes est le même incident ici qu'avec un humain — gardez le rôle dans un pool de connexions séparé avec un statement timeout.
# ~/.config/goose/config.yaml
mcpServers:
sqlite:
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-sqlite"
- "--db-path"
- "/Users/you/data/events.db"
env: {}
postgres:
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-postgres"
- "postgresql://agent_ro@127.0.0.1:5432/analytics"
env:
PGPASSWORD: "${PG_AGENT_PASSWORD}"💡Tip: Créez le rôle Postgres une fois et ne donnez rien d'autre à l'agent : CREATE ROLE agent_ro WITH LOGIN PASSWORD '…'; GRANT CONNECT ON DATABASE analytics TO agent_ro; GRANT USAGE ON SCHEMA public TO agent_ro; GRANT SELECT ON ALL TABLES IN SCHEMA public TO agent_ro; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO agent_ro; Ajoutez ensuite statement_timeout = 30s au rôle. L'agent ne peut pas écrire, ne peut pas drop et ne peut pas tourner indéfiniment.
Serveur navigateur : piloter Chromium avec Puppeteer ou Playwright
Le serveur navigateur est le plus puissant et le plus dangereux des quatre. Il lance un vrai Chromium et expose la navigation, les clics, le remplissage de formulaires et les screenshots — autrement dit il peut faire tout ce que vous pouvez faire dans un navigateur, y compris soumettre des formulaires.
- Serveurs de référence :
@modelcontextprotocol/server-puppeteer(plus léger, headless par défaut) et@modelcontextprotocol/server-playwright(plus lourd, supporte plusieurs navigateurs). Pour des agents locaux, Puppeteer suffit. - Outils exposés :
navigate,screenshot,click,fill,select,evaluate(exécuter du JavaScript),get_page_content. Le modèle utiliseget_page_contentpour lire le texte structuré etscreenshotpour vérifier visuellement. - Latence : une vraie session navigateur prend 1 à 5 secondes par action. Une navigation multi-étapes consomme facilement 30 à 60 secondes et des dizaines de milliers de tokens parce que le contenu des pages est volumineux. Visez une fenêtre de contexte de 32K+.
- Sélecteurs : le modèle doit choisir des sélecteurs CSS. Les petits modèles se trompent souvent ; un modèle 27B+ entraîné aux outils gère les patterns courants de manière fiable. Cadrez les tâches — « extrais le titre et le premier paragraphe de cette URL » est bien plus fiable que « navigue le site et trouve la page contact ».
- Bons cas d'usage : recherche (ouvrir la page, résumer, ajouter aux notes), tests de régression (naviguer, cliquer, screenshot) et remplissage de formulaires sur des pages que vous contrôlez. Mauvais cas : tout ce où un mauvais clic sur le web live a des conséquences.
# ~/.config/goose/config.yaml
mcpServers:
puppeteer:
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-puppeteer"
env:
PUPPETEER_HEADLESS: "true"
# Block obviously dangerous endpoints at the OS firewall level
# rather than relying on the agent to refuse them.⚠️Warning: Ne donnez jamais d'identifiants au serveur navigateur. Si vous avez besoin d'une session authentifiée, fournissez à l'agent un profil navigateur pré-authentifié (via userDataDir) et ne le laissez jamais naviguer vers des sites à fort impact (banque, email, consoles cloud, formulaires de paiement). Le modèle n'a aucun jugement sur ce que fait un bouton — il voit du texte et clique. Traitez-le comme un stagiaire sans contexte ni recours.
Serveur GitHub : dépôts, issues et PRs depuis un modèle local
Le serveur GitHub transforme le travail en langage naturel sur dépôts en appels API. C'est le plus simple des quatre à configurer et le plus facile à restreindre via les permissions du Personal Access Token (PAT).
- Installation :
@modelcontextprotocol/server-github, exécuté avec un PAT dans la variable d'environnementGITHUB_PERSONAL_ACCESS_TOKEN. Le token est la seule auth — le serveur lui-même n'a pas de configuration séparée. - Outils exposés :
search_repositories,get_file_contents,create_or_update_file,create_pull_request,list_issues,create_issue,add_issue_comment,merge_pull_request, plus des dizaines d'autres. La surface complète est large ; la plupart des tâches utilisent 5 à 10 outils. - Restreignez le PAT. Utilisez un PAT fine-grained scopé à des dépôts précis avec les permissions minimales nécessaires (Read pour la navigation, Write pour la création de PR/issues). N'utilisez pas un PAT classique avec
repopour un agent expérimental. - Workflows réels : triage (« lis les 20 dernières issues ouvertes, regroupe-les, propose des labels »), brouillonnage (« lis le README et ouvre un PR corrigeant les fautes »), reporting (« quels PRs sont stale cette semaine »).
- Surface de risque : l'agent peut créer des issues et des PRs, commenter et (avec les droits d'écriture) pousser des commits. Désactivez les outils de merge sauf si vous faites confiance au modèle ET au workflow — un merge raté dans un dépôt avec PAT fine-grained est récupérable, mais seulement si vous le voyez vite.
# ~/.config/goose/config.yaml
mcpServers:
github:
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-github"
env:
GITHUB_PERSONAL_ACCESS_TOKEN: "${GH_AGENT_PAT}"
# Fine-grained PAT scoped to one or two test repos,
# not your personal account-wide classic token.Un modèle de sécurité qui ne fait pas confiance au modèle
Le bon modèle mental est : « le LLM est un stagiaire non fiable avec les clés que vous lui donnez ». Les capacités viennent des serveurs et des surfaces que vous allow-listez — pas du jugement du modèle.
- Limitez le serveur filesystem à un répertoire. Jamais
~ni/. Choisissez un dossieragent-workspace/et mettez-y des copies des fichiers que l'agent doit toucher. Si l'agent dérape, le pire cas est un dossier. - Faites tourner les serveurs base en lecture seule par défaut. Un rôle dédié
agent_roavec uniquement des grantsSELECTet un statement timeout de 30 secondes élimine toute une classe d'incidents. - Mettez chaque outil d'écriture ou de shell derrière une approbation explicite. Goose, Cline et Continue.dev supportent tous des règles d'approbation par outil. Auto-approuvez les outils de lecture par défaut ; exigez une approbation pour
write_file,edit_file,execute_command,create_pull_requestet toute action navigateur qui soumet un formulaire. - Utilisez le journal d'audit. Chaque client MCP loggue les appels d'outils et leurs résultats. Après une session longue, parcourez le log : vous attraperez le modèle en train d'essayer des choses inattendues (parfois inoffensives, parfois justifiant un resserrement des permissions).
- Restreignez étroitement l'accès aux services tiers. PATs GitHub limités à deux dépôts de test. Rôles Postgres en lecture seule. Sessions navigateur sans identifiants. Le modèle finira par essayer des choses que vous n'avez pas anticipées ; les limites de ce qu'il peut faire ne doivent pas dépendre de sa bonne volonté.
- Air-gap l'agent pour les données sensibles. Désactivez l'accès réseau sur l'host pendant l'exécution de l'agent (ou utilisez un network namespace) pour les données privées. La pile locale n'envoie déjà rien dehors, mais la défense en profondeur rattrape les erreurs des serveurs tiers.
- Traitez le choix d'un serveur MCP comme tout choix de dépendance. Les serveurs de référence sont bien maintenus ; beaucoup de serveurs tiers ne le sont pas. Lisez le code d'un serveur avant d'en installer un qui demande des identifiants.
📌Note: Une habitude utile de récupération : avant une tâche d'agent non triviale, git stash (ou git checkout -b agent/<task>). Après la tâche, relisez le diff, gardez ce que vous voulez et jetez le reste. C'est la même pratique qui rend les sessions Cline ou Aider longues sûres — voir le comparatif Continue.dev vs Cline vs Aider pour le pattern plus large.
MCP local vs Claude Desktop : ce qui change, ce qui reste
Le protocole et les serveurs sont identiques. Seuls le modèle et le client changent. C'est exactement la raison pour laquelle MCP compte — votre investissement outillage se porte proprement entre setups locaux et cloud.
| Couche | Claude Desktop | Ollama local + Goose |
|---|---|---|
| Modèle | Claude (Anthropic, cloud) | Gemma 4, GLM-5.1, Qwen3 ou Llama 3.3 (local) |
| Client | Application Claude Desktop | Goose, Cline, Continue.dev ou LM Studio |
| Serveurs | Mêmes serveurs MCP | Mêmes serveurs MCP |
| Protocole | MCP (JSON-RPC 2.0) | MCP (JSON-RPC 2.0) |
| Coût par requête | Coût API par token | 0 € — inférence locale |
| Confidentialité | La conversation va chez Anthropic | Reste sur la machine |
| Rate limits | Rate limits API s'appliquent | Limité uniquement par le débit hardware |
| Qualité des appels d'outils | Best-in-class | Bon avec 27B+ ; chute rapide sous 7B |
| Internet requis | Oui | Uniquement si un serveur fait des appels (ex. navigateur) |
| Temps de mise en place | 5 minutes | 15 minutes (une fois) |
Choisir un modèle compatible tool calling pour MCP local
La fiabilité des appels d'outils croît avec la taille et l'entraînement, pas avec le harness. Un modèle qui émet des appels malformés dans Cline en émettra de la même manière dans Goose.
- **Gemma 4 27B (
gemma4:27b)** — l'entraînement tool calling de Google est best-in-class pour la taille. Tient en 16 Go de mémoire unifiée ou 24 Go de VRAM en Q4_K_M. Bon raisonnement général ; un peu conservateur sur les chaînes d'appels d'outils. - **GLM-5.1 32B (
glm5:32b)** — le modèle de Zhipu a une fiabilité tool calling très forte et une fenêtre de contexte 128K d'origine. Légèrement plus lourd que Gemma 4 ; tient confortablement sur un GPU 24 Go. - **Qwen3 32B (
qwen3:32b) — bien équilibré ; le 32B dense gère MCP proprement et se sent à l'aise dans une boucle d'agent longue. Qwen3-Coder 30B (qwen3-coder:30b)** est le meilleur choix si votre travail d'agent est code. - **Llama 3.3 70B (
llama3.3:70b)** — le plafond le plus haut, mais le plus lourd. 48 Go+ de mémoire unifiée ou 2× 24 Go de GPUs en Q4_K_M. À utiliser seulement si votre matériel suit ; les modèles plus petits suffisent généralement. - À éviter pour MCP : tout ce qui est sous 7B et tout modèle généraliste sans entraînement explicite tool calling. Ils émettent des appels malformés, la boucle bloque, et vous accuserez le harness — mais le harness va bien.
- Pour des techniques de prompting structuré qui améliorent la qualité des appels d'outils sur n'importe quel modèle, voir Chain-of-Thought Prompting.
- Pour les benchmarks tête-à-tête, voir Meilleurs modèles locaux pour tool calling 2026.
MCP vs function calling classique : quelle différence
Le function calling, c'est ce que le modèle émet. MCP est le protocole qui permet aux clients et aux outils de se trouver. Ils vivent à des couches différentes et coopèrent ; l'un ne remplace pas l'autre.
- Le function calling est la capacité côté LLM : le modèle émet un objet JSON structuré décrivant le nom de l'outil et ses arguments. Les Tools OpenAI, les Tools Anthropic et l'API tool call d'Ollama partagent la même idée avec des formats wire légèrement différents.
- MCP s'ajoute au-dessus : il standardise la façon dont les outils sont décrits, découverts, invoqués et retournés, à travers les processus. Un modèle function calling seul ne sait rien de votre filesystem ; un serveur MCP rend les opérations filesystem disponibles, le client les mappe à l'API function calling du modèle, et le modèle peut alors les appeler.
- Le bénéfice est l'interop. Écrivez le serveur filesystem une fois ; Claude Desktop, Goose, Cline, Continue.dev et LM Studio l'utilisent tous sans modification. Changez de modèle Claude vers Gemma 4 ; le serveur ne change pas.
- Vous pouvez faire des agents avec du function calling brut. Vous réimplémenterez les handlers filesystem, base et navigateur par projet. Avec MCP, ce sont des dépendances out-of-the-box.
- Pour des scripts ponctuels, le function calling brut est plus simple. Pour tout ce que vous voulez réutiliser entre projets ou modèles, MCP devient le chemin moins coûteux en quelques jours.
Considérations pour les utilisateurs francophones
Pour la France, la Belgique, la Suisse et le Québec, MCP local répond directement aux préoccupations RGPD et Loi 25 que les agents cloud soulèvent. Quand le modèle, le client et tous les serveurs d'outils tournent sur la machine, aucune donnée n'est transférée à un sous-traitant tiers.
- RGPD et sous-traitance (Article 28) : un agent cloud fait du fournisseur un sous-traitant — DPA, mesures techniques et organisationnelles, évaluation de transfert hors UE, tout le dossier. Une pile MCP locale supprime ce lien contractuel pour la couche LLM, parce qu'aucune donnée à caractère personnel n'est transmise à un tiers.
- Recommandation CNIL : la CNIL a publiquement encouragé l'inférence locale pour le traitement de données sensibles dans les secteurs santé, juridique et financier. Un agent MCP local sur une station Apple M5 ou un PC RTX 4090 répond aux exigences sans engager un fournisseur cloud.
- Cabinets et PME francophones : expertise comptable, notariat, cabinets médicaux, ingénierie, RH — partout où des données client, patient ou salarié ne peuvent pas partir vers OpenAI, Anthropic ou Google. Un Mac mini M5 ou un PC workstation avec RTX 4090 fait tourner un modèle 27B–32B qui résume des dossiers, vérifie des contrats ou teste du code contre des bases internes.
- Belgique et Suisse : le RGPD belge et la nLPD suisse (en vigueur depuis septembre 2023) suivent la même logique de résidence des données. L'inférence locale satisfait les exigences sans contrat additionnel avec des fournisseurs américains.
- Québec (Loi 25) : la Loi modernisant les dispositions législatives en matière de protection des renseignements personnels impose une évaluation de facteurs relatifs à la vie privée pour tout transfert hors province. Une pile MCP locale élimine ce transfert pour la couche LLM.
- Audit et journalisation : le journal d'audit du client MCP (Goose, Cline, Continue.dev) est votre preuve principale que l'agent n'a fait que ce qui était attendu. Conservez-le sur un stockage WORM ou au minimum dans un dépôt Git que l'agent ne peut pas écraser depuis ses propres outils.
Erreurs fréquentes lors de la mise en place de MCP local
- Erreur 1 : utiliser un petit modèle généraliste. Les modèles sous 7B (et la plupart des 7B–13B généralistes sans fine-tuning tool calling) émettent des appels malformés. Utilisez un modèle 27B+ entraîné aux outils et arrêtez de vous battre contre le harness.
- Erreur 2 : allow-lister votre répertoire home. Les allow-listings « juste pour tester » de
~survivent en production. Créez unagent-workspacedédié dès le début. - Erreur 3 : laisser le serveur base en lecture/écriture. Une requête
DELETErédigée par un agent sûr de lui sur une vraie table est exactement l'incident qu'on évite ici. Faites deagent_rovotre défaut ; lancez un rôle écriture séparé uniquement pour les tâches qui en ont explicitement besoin, et seulement pour leur durée. - Erreur 4 : auto-approuver chaque outil. Le bouton « tout approuver » est pratique et dangereux. Auto-approuvez les outils de lecture (
read_file,list_directory,query) ; exigez toujours une approbation pour les outils écriture/shell/PR. - Erreur 5 : un modèle 32K contexte pour du travail navigateur multi-étapes. Le contenu des pages est volumineux ; un agent qui navigue trois pages peut épuiser 32K tokens avant même de raisonner. Utilisez un modèle 128K pour les tâches navigateur lourdes.
- Erreur 6 : supposer que l'agent a du jugement. Il n'en a pas. Le modèle n'a aucun concept de « c'est la base de production » ou « ce PR va déployer ». Les permissions sont votre seule barrière.
- Erreur 7 : installer tous les serveurs de référence dès le départ. Plus d'outils = plus gros system prompt = sélection d'outil plus lente et moins fiable. Commencez par
filesystem. Ajoutez les autres seulement quand vous avez un workflow qui les justifie.
Sources
- Spécification Model Context Protocol — Spécification officielle, schéma JSON-RPC, définitions de transport et de cycle de vie.
- Dépôt GitHub modelcontextprotocol/servers — Serveurs de référence (filesystem, sqlite, postgres, github, puppeteer, etc.) et documentation de configuration.
- Documentation du projet Goose — Installation CLI, configuration du provider Ollama, syntaxe de configuration des serveurs MCP.
- Bibliothèque de modèles Ollama — Modèles locaux disponibles, indicateurs de support tool calling et niveaux de quantification référencés dans ce guide.
- Dépôt GitHub Cline — Implémentation du client MCP pour VS Code, panneau MCP servers.
- Documentation Continue.dev — Référence du bloc de configuration
mcpServerspour le client Continue.dev.
FAQ
Qu'est-ce que MCP et pourquoi est-ce important pour l'IA locale ?
Model Context Protocol (MCP) est un protocole ouvert JSON-RPC 2.0 qui permet à un client (Goose, Cline, Continue.dev, LM Studio, Claude Desktop) de connecter un modèle de langage à des serveurs d'outils de manière uniforme. C'est important pour l'IA locale parce que cela standardise la couche qui transforme un modèle de chat en agent — écrivez un serveur d'outils une fois, utilisez-le sous n'importe quel client et n'importe quel modèle, y compris un modèle Ollama local. Sans MCP, chaque projet réinvente le tooling fichier/base/navigateur contre son propre client.
MCP fonctionne-t-il sans Claude Desktop ?
Oui. Le protocole est ouvert et entièrement indépendant de Claude Desktop. En 2026, Goose, Cline, Continue.dev et LM Studio livrent tous des implémentations client MCP qui fonctionnent avec des modèles Ollama locaux. Les serveurs de référence (filesystem, sqlite, postgres, puppeteer, github) tournent sans modification sous n'importe quel client conforme.
Quels modèles locaux supportent MCP le mieux ?
En mai 2026, les choix les plus fiables sont Gemma 4 27B, GLM-5.1 32B, Qwen3 32B (ou Qwen3-Coder 30B pour le code) et Llama 3.3 70B. Les quatre ont un entraînement tool calling explicite et émettent du JSON function calling propre que les clients MCP peuvent router. Les modèles sous 7B (et la plupart des modèles généralistes sans fine-tuning tool calling) produisent régulièrement des appels malformés.
MCP est-il sûr — l'agent peut-il supprimer mes fichiers ?
Il le peut si vous le laissez faire. La sécurité vient de la configuration des serveurs, pas du protocole. Le serveur filesystem n'opère que dans les chemins que vous allow-listez — limitez-le à un répertoire agent-workspace dédié. Le serveur base tourne en lecture seule si vous utilisez un rôle SELECT-only. Exigez toujours une approbation explicite pour les outils écriture, shell et PR ; auto-approuvez seulement les opérations de lecture. Le journal d'audit montre exactement ce que l'agent a fait après coup.
Puis-je écrire mon propre serveur MCP ?
Oui — et les SDKs rendent cela direct. Les SDKs officiels TypeScript et Python (@modelcontextprotocol/sdk et mcp) gèrent la plomberie JSON-RPC. Vous définissez des outils avec leurs JSON Schemas et une fonction handler, et le SDK les expose via stdio. Un serveur single-purpose (un ou deux outils enveloppant une API interne) tient en 50–100 lignes.
MCP fonctionne-t-il sous Windows ?
Oui. Ollama, Goose, Cline, Continue.dev et LM Studio tournent tous sous Windows. Les serveurs MCP tournent comme sous-processus Node.js ou Python ; les deux runtimes sont entièrement supportés sous Windows. Le seul piège spécifique est la gestion des chemins — utilisez des forward slashes en config ou échappez correctement les backslashes. Sinon l'expérience est identique à macOS et Linux.
Comment sandboxer les appels d'outils MCP ?
Trois couches couvrent l'essentiel du risque. D'abord, restreignez chaque serveur étroitement au niveau config : filesystem à un répertoire, base à un rôle lecture seule, GitHub à un PAT fine-grained sur des dépôts de test. Ensuite, utilisez les règles d'approbation par outil du client : auto-approbation des reads, approbation pour les writes. Enfin, gardez l'agent dans un workspace git stash-friendly pour que tout destructif soit annulable via git. Pour les tâches sensibles, exécutez sur un host sans accès réseau sauf pour les endpoints dont les serveurs ont explicitement besoin.
Les agents MCP peuvent-ils faire des requêtes HTTP ?
Oui, via des serveurs spécifiques. Le serveur navigateur (puppeteer ou playwright) pilote un vrai Chromium qui fait les requêtes vers lesquelles le modèle navigue. Plusieurs serveurs tiers exposent des outils http_get/http_post plus directement. Les serveurs filesystem et base ne font pas de requêtes réseau ; ils opèrent uniquement sur des ressources locales.
MCP fonctionne-t-il nativement avec Ollama ou ai-je besoin d'un wrapper ?
Ollama lui-même ne parle pas MCP — il sert une API chat compatible OpenAI. Vous avez besoin d'un client (Goose, Cline, Continue.dev, LM Studio) pour faire le pont entre l'API chat d'Ollama et les serveurs MCP. Le client route les appels d'outils du modèle vers le bon serveur MCP et réinjecte les résultats dans la conversation. Du point de vue utilisateur, il n'y a pas de configuration au-delà de l'installation du client et de son pointage vers Ollama.
Quelle est la différence entre MCP et function calling ?
Le function calling, c'est le LLM qui émet du JSON structuré nommant un outil et ses arguments — c'est une capacité du modèle. MCP est le protocole qui permet aux serveurs d'outils et aux clients de décrire, découvrir, invoquer et retourner ces outils à travers les processus — c'est une couche d'interop. Ils coopèrent : le client convertit les définitions d'outils MCP au format function calling du modèle, le modèle émet un function call, le client mappe l'appel vers un serveur MCP, et le serveur l'exécute. Sans MCP vous pouvez toujours faire du function calling ; vous réimplémentez les handlers filesystem/base/navigateur par projet. Avec MCP, les mêmes serveurs fonctionnent sous n'importe quel client.