Configuration du serveur MCP OpenCode
MCP (Model Context Protocol) est un protocole ouvert qui vous permet de connecter des outils externes et des sources de données à OpenCode. Après avoir ajouté un serveur MCP, les outils qu'il fournit sont automatiquement répertoriés aux côtés des outils intégrés d'OpenCode, et le LLM peut les appeler directement pendant les conversations.
OpenCode prend en charge deux types de serveurs MCP :
- Local: Un processus MCP démarré via la ligne de commande sur votre machine, adapté aux outils et scripts locaux.
- Distant: Un service MCP distant connecté via HTTPS, adapté aux services cloud et aux plateformes tierces.
Rappel sur la consommation de contexte :Chaque serveur MCP consomme de l'espace de contexte dans la conversation. Plus il y a d'outils activés, plus de tokens sont consommés par conversation, et plus il est facile d'atteindre la limite de contexte du modèle. Il est recommandé de n'activer que les serveurs MCP réellement nécessaires pour la tâche en cours et de les désactiver une fois terminé. Certains serveurs (comme GitHub MCP) ont un grand nombre d'outils et consomment particulièrement beaucoup de tokens, alors faites-y particulièrement attention lorsque vous les utilisez.
Structure de configuration de base
Toutes les configurations de serveur MCP sont écrites sous leopencode.jsondemcpchamp. Chaque serveur nécessite unnom uniquecomme nom de clé, qui peut également être utilisé dans le prompt pour spécifier quel MCP appeler :
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-server": { // 服务器名称(自定义,全局唯一)
"type": "local", // 连接类型:local ou remote
// ...其他配置项
"enabled": true // 是否启用,默认为 true
},
"another-mcp-server": { // 可同时配置多个 MCP 服务器
"type": "remote",
// ...
}
}
}
vaenabledDéfini àfalsepeut désactiver temporairement un serveur sans le retirer du fichier de configuration, ce qui permet de l'activer ou de le désactiver facilement à la demande :
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-server": {
"type": "local",
"command": ["npx", "-y", "my-mcp-command"],
"enabled": false // Temporairement désactivé, configuration conservée ; il suffit de remettre sur true lorsque nécessaire
}
}
}
Serveur MCP local
Un serveur MCP local fournit des outils en exécutant un processus de commande sur votre machine. Définisseztypeà"local", et spécifiez la commande de démarrage viacommand:
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-local-mcp-server": {
"type": "local", // Type de connexion : local
"command": ["npx", "-y", "my-mcp-command"], // Tableau de la commande de démarrage :
// Le premier élément est l'exécutable,
// Les éléments suivants sont des arguments
// Peut aussi être écrit sous la forme ["bun", "x", "my-mcp-command"]
"enabled": true,
"environment": { // Variables d'environnement injectées au moment de l'exécution (facultatif)
"MY_ENV_VAR": "my_env_var_value"
}
}
}
}
Options de configuration du serveur local
| Élément de configuration | Type | Requis | Description |
|---|---|---|---|
type |
String | Oui | Type de connexion ; doit être renseigné pour les serveurs locaux"local" |
command |
Tableau | Oui | La commande et les arguments pour démarrer le serveur MCP, sous forme de tableau, par ex.["npx", "-y", "my-mcp"] |
environment |
Object | non | Variables d'environnement injectées lors de l'exécution du serveur, sous forme de paires clé-valeur |
enabled |
Boolean | non | Indique si le serveur doit être activé au démarrage ; la valeur par défaut esttrue |
timeout |
Number | non | Délai d'attente (en millisecondes) pour récupérer la liste des outils depuis le serveur MCP ; la valeur par défaut est5000(5 secondes) |
Exemple : ajout d'un serveur MCP de test
Ci-dessous se trouve un exemple d'ajout du serveur MCP de test officiel@modelcontextprotocol/server-everything, qui peut être utilisé pour vérifier si la fonctionnalité MCP fonctionne correctement :
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mcp_everything": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"]
// npx -y signifie confirmer automatiquement l'installation ; pas besoin d'exécuter manuellement npm install
}
}
}
Une fois la configuration terminée, ajoutez le nom du serveur au prompt pour permettre au LLM d'appeler les outils de ce MCP :
use the mcp_everything tool to add the number 3 and 4
Serveur MCP distant
Un serveur MCP distant se connecte aux services cloud via HTTPS. Définisseztypeà"remote", et spécifiez l'adresse du serveur viaurl:
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-remote-mcp": {
"type": "remote", // Type de connexion : distant
"url": "https://my-mcp-server.com", // Adresse du serveur distant (obligatoire)
"enabled": true,
"headers": { // En-têtes HTTP envoyés avec les requêtes (facultatif)
"Authorization": "Bearer MY_API_KEY" // Couramment utilisé pour l'authentification par clé API
}
}
}
}
Options de configuration du serveur distant
| Élément de configuration | Type | Requis | Description |
|---|---|---|---|
type |
String | Oui | Type de connexion ; doit être renseigné pour les serveurs distants"remote" |
url |
String | Oui | L'adresse HTTPS complète du serveur MCP distant |
enabled |
Boolean | non | Indique si le serveur doit être activé au démarrage ; la valeur par défaut esttrue |
headers |
Object | non | En-têtes HTTP envoyés avec chaque requête, couramment utilisés pour l'authentification par clé API |
oauth |
Objet /false |
non | Configuration de l'authentification OAuth, ou défini surfalsepour désactiver la détection automatique d'OAuth |
timeout |
Number | non | Délai d'attente (en millisecondes) pour récupérer la liste des outils depuis le serveur MCP ; la valeur par défaut est5000(5 secondes) |
Référencement des variables d'environnement
Dans le fichier de configuration,les informations sensibles telles que les clés API ne doivent pas être écrites directement en clair. OpenCode prend en charge la lecture des variables d'environnement système à l'exécution via la{env:变量名}syntaxe :
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-remote-mcp": {
"type": "remote",
"url": "https://my-mcp-server.com",
"headers": {
"Authorization": "Bearer {env:MY_API_KEY}" // Lit automatiquement la valeur de la variable d'environnement MY_API_KEY à l'exécution
// La variable d'environnement doit être définie au préalable dans le système :
// export MY_API_KEY=your_actual_key
}
}
}
}
Authentification OAuth
OpenCode dispose d'une prise en charge intégrée de l'authentification OAuth pour les serveurs MCP distants. L'ensemble du processus est presque entièrement automatique, sans avoir à gérer les jetons manuellement.
Flux d'authentification automatique
Lorsque le serveur exige une authentification OAuth, OpenCode exécute automatiquement les étapes suivantes :
- Détecte une réponse 401 (Non autorisé) du serveur
- Démarre automatiquement le flux d'autorisation OAuth et ouvre un navigateur pour vous guider tout au long de la connexion
- Lorsque le serveur le prend en charge, enregistre automatiquement l'application à l'aide de l'enregistrement dynamique du client (RFC 7591)
- Stocke de manière sécurisée le jeton obtenu dans
~/.local/share/opencode/mcp-auth.jsonMoyenne - Les requêtes suivantes transportent automatiquement le jeton ; plus besoin de se connecter à plusieurs reprises
1. OAuth automatique (aucune configuration supplémentaire requise)
Pour la plupart des serveurs MCP qui prennent en charge OAuth, il suffit de configurerurlet OpenCode vous guidera automatiquement tout au long de l'authentification lors de la première utilisation :
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp"
// Aucune configuration supplémentaire n'est nécessaire ; OpenCode gère automatiquement le flux OAuth
}
}
}
Vous pouvez également déclencher manuellement le flux d'authentification (par ex., pour vous reconnecter après l'expiration d'un jeton) :
opencode mcp auth my-oauth-server
2. Identifiants client pré-enregistrés
Si vous avez déjà obtenu un ID client et un secret fixes auprès du fournisseur de services, vous pouvez les spécifier directement dans la configuration et ignorer l'étape d'enregistrement dynamique :
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp",
"oauth": {
"clientId": "{env:MY_MCP_CLIENT_ID}", // Lire depuis les variables d'environnement pour éviter une exposition en clair
"clientSecret": "{env:MY_MCP_CLIENT_SECRET}",
"scope": "tools:read tools:execute" // Les portées d'autorisation demandées ; les valeurs spécifiques sont définies par le fournisseur de services
}
}
}
}
3. Désactivation d'OAuth (utilisation de l'authentification par clé API)
Si le serveur utilise une clé API au lieu de l'authentification OAuth, vous pouvez définiroauthàfalsepour désactiver la détection automatique d'OAuth et utiliserheaderspour passer la clé :
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-api-key-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp",
"oauth": false, // Désactiver la détection automatique d'OAuth
"headers": {
"Authorization": "Bearer {env:MY_API_KEY}" // Utiliser directement l'authentification par clé API
}
}
}
}
Options de configuration OAuth
| Élément de configuration | Type | Description |
|---|---|---|
oauth |
Objet /false |
Objet de configuration OAuth ; défini surfalsepour désactiver complètement la détection automatique d'OAuth |
clientId |
String | ID client OAuth. Si non fourni, OpenCode tentera un enregistrement dynamique du client |
clientSecret |
String | Secret client OAuth (si requis par le serveur d'autorisation) |
scope |
String | Portées de permission demandées lors de l'autorisation. Les portées multiples sont séparées par des espaces ; les valeurs spécifiques sont définies par le fournisseur de service |
Commandes de gestion de l'authentification
OpenCode fournit un ensemble d'outils en ligne de commande pour gérer l'état d'authentification MCP :
# 对指定 MCP 服务器进行身份验证(会打开浏览器完成 OAuth 授权) opencode mcp auth my-oauth-server # 列出所有已配置的 MCP 服务器及其当前认证状态 opencode mcp list # 删除指定服务器已存储的凭据(下次使用时需要重新登录) opencode mcp logout my-oauth-server # 调试指定服务器的连接和 OAuth 流程(显示认证状态、测试连接、执行 OAuth 发现流程) opencode mcp debug my-oauth-server # 查看所有支持 OAuth 的服务器的认证状态 opencode mcp auth list
Surcharge de la configuration par défaut distante
Les organisations peuvent fournir.well-known/opencodedes configurations de serveur MCP prédéfinies aux membres via des points de terminaison. Ces serveurs peuvent être désactivés par défaut. Si vous devez en activer un, ajoutez une entrée portant le même nom dans votre configuration locale et définissezenabled: truepour l'activer.La configuration locale surchargera les valeurs par défaut distantes:
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"jira": { // Correspond au nom du serveur dans la configuration distante de l'organisation
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true // Définir sur true localement pour surcharger l'état désactivé par défaut distant
}
}
}
Gestion des outils
Une fois qu'un serveur MCP est enregistré, ses outils apparaissent sous服务器名称_工具名称la forme de dans la liste d'outils d'OpenCode, et peuvent être géréstoolsvia le champ pour une gestion unifiée.
1. Désactivation globale des outils d'un MCP spécifique
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-foo": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-foo"]
},
"my-mcp-bar": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-bar"]
}
},
"tools": {
"my-mcp-foo": false // Désactiver tous les outils du serveur my-mcp-foo (le serveur démarre toujours, mais ses outils sont indisponibles)
}
}
2. Désactivation par lots avec des motifs Glob
L'utilisation de jokers Glob permet de faire correspondre et de désactiver les outils de plusieurs serveurs MCP à la fois :
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-foo": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-foo"]
},
"my-mcp-bar": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-bar"]
}
},
"tools": {
"my-mcp*": false // Motif Glob : désactiver les outils de tous les serveurs dont les noms commencent par my-mcp
}
}
3. Activation d'outils MCP spécifiques par agent
Si vous avez configuré de nombreux serveurs MCP mais que chaque agent n'a besoin que d'un sous-ensemble, vous pouvez d'abord désactiver globalement tous les outils MCP, puis les activer selon les besoins dans des configurations d'agent spécifiques. Cela permet de contrôler précisément les outils auxquels chaque agent peut accéder, en évitant de gaspiller du contexte :
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp": {
"type": "local",
"command": ["bun", "x", "my-mcp-command"],
"en: true // Le serveur lui-même reste en cours d'exécution (sinon l'agent ne peut pas non plus être utilisé)
}
},
"tools": {
"my-mcp*": false // Étape 1 : désactiver tous les outils de ce MCP afin qu'ils soient indisponibles dans les conversations
},
"agent": {
"my-mcp": {
"tools": {
"my-mcp": true // Étape 2 : l'activer dans l'agent my-mcp ; les autres agents ne sont pas affectés
}
}
}
}
Règles des motifs Glob
| Joker | Signification | Exemple |
|---|---|---|
* |
Correspond à zéro ou plusieurs caractères arbitraires | my-mcp*matchesmy-mcp_search、my-mcp_listwait |
? |
Correspond exactement à un caractère arbitraire | my-mcp?matchesmy-mcpA, mais ne correspond pas àmy-mcpAB |
| autres caractères | Correspond littéralement et exactement | my-mcp-fooNe correspond qu'aux serveurs dont les noms sont exactement identiques |
Les outils du serveur MCP sont préfixés par le nom du serveur lors de l’enregistrement. Par exemple, les outils du serveur
myserversont enregistrés commemyserver_toolname. Par conséquent, pour désactiver tous les outils d’un serveur, utilisez"myserver_*": falsepour une correspondance exacte.
Exemples de configuration
Sentry
Ajoutez le serveur MCP Sentry pour interroger les erreurs, les problèmes et les données d’événements des projets Sentry directement dans les conversations :
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sentry": {
"type": "remote",
"url": "https://mcp.sentry.dev/mcp",
"oauth": {} // Un objet vide active l’authentification automatique OAuth ; OpenCode gérera automatiquement l’intégralité du flux OAuth
}
}
}
Après avoir ajouté la configuration, exécutez la commande suivante pour terminer l’autorisation du compte (un navigateur s’ouvrira pour la connexion OAuth) :
opencode mcp auth sentry
Une fois l’authentification terminée, ajoutezuse sentryà votre prompt pour invoquer les outils Sentry :
Show me the latest unresolved issues in my project. use sentry
Context7
Ajoutez le serveur MCP Context7 pour rechercher divers documents techniques dans les conversations, aidant les LLM à obtenir les références d'API les plus récentes et précises :
Exemple
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
}
}
}
Exemple
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}" // Lire la clé API depuis une variable d'environnement
// Doit être défini à l'avance : export CONTEXT7_API_KEY=your_key
}
}
}
}
Adduse context7à votre prompt pour invoquer la fonctionnalité de recherche de documents :
Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
Vous pouvez également ajouter des règles globales dans le projetAGENTS.mdpour permettre au LLM d'utiliser automatiquement Context7 lorsqu'il doit consulter la documentation, sans avoir à le préciser manuellement à chaque fois :
When you need to search docs, use `context7` tools.
Grep par Vercel
Ajoutez le serveur MCP Grep by Vercel pour rechercher de véritables extraits de code sur GitHub directement dans les conversations, aidant les LLM à trouver la bonne utilisation des API et des références d'implémentation :
Exemple
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gh_grep": { // Serveur nommé gh_grep, référencé par ce nom dans les prompts
"type": "remote",
"url": "https://mcp.grep.app"
}
}
}
Adduse the gh_grep toolà votre prompt pour rechercher des exemples de code sur GitHub :
What's the right way to set a custom domain in an SST Astro component? use the gh_grep tool
De même, vous pouvez définir des règles globales dansAGENTS.mdpour permettre au LLM de rechercher automatiquement des exemples de code en cas de doute sur l'utilisation :
If you are unsure how to do something, use `gh_grep` to search code examples from GitHub.Autres extensions