Extensibilité de la CLI Cortex Code¶
La CLI Cortex Code peut être étendue avec des comportements personnalisés, des agents spécialisés, des hooks de cycle de vie et des intégrations d’outils externes. Cette rubrique couvre les quatre principaux mécanismes d’extensibilité :
- Compétences
Fichiers Markdown qui injectent des connaissances et des instructions spécifiques au domaine dans les conversations. Utilisez les compétences pour transmettre à Cortex Code les bonnes pratiques, les normes de codage ou les workflows spécialisés de votre organisation.
- Sous-agents
Agents AI autonomes et spécialisés qui gèrent des tâches spécifiques de manière indépendante. Les sous-agents permettent l’exécution parallèle, l’expertise ciblée et les workflows complexes à plusieurs étapes.
- Hooks
Scripts qui interceptent et personnalisent le comportement de Cortex Code aux points clés du cycle de vie. Utilisez les hooks pour valider les entrées des outils, enregistrer des opérations ou appliquer des politiques.
- MCP (Protocole de contexte de modèle)
Un standard ouvert pour connecter Cortex Code à des outils et sources de données externes tels que GitHub, Jira et des bases de données.
Compétences¶
Les compétences étendent Cortex Code avec des connaissances et des capacités spécifiques au domaine en injectant des instructions spécialisées et en activant des outils supplémentaires.
Que sont les compétences ?¶
Les compétences sont des fichiers Markdown qui montrent :
Des instructions et des bonnes pratiques spécifiques au domaine
Quand utiliser une compétence
Des exemples de workflows
Des configurations d’outils facultatives
Lorsque vous invoquez une compétence, ses instructions sont injectées dans le contexte de la conversation.
Utilisation des compétences¶
Exécutez /skill list pour lister les compétences disponibles, et invoquez-les par leur nom pour charger la compétence dans la conversation.
Emplacements des compétences¶
Les compétences sont chargées à partir de plusieurs emplacements, listés ci-dessous de la priorité la plus élevée à la plus basse :
Emplacement |
Chemin |
Portée |
|---|---|---|
Projet |
|
Projet |
Utilisateur |
|
Utilisateur |
Global |
|
Système |
Session |
Ajouté temporairement |
Session |
Distant |
Cloné depuis Git |
Cache |
Groupé |
Intégré à Cortex Code |
Système |
Création de compétences personnalisées¶
Les compétences sont des répertoires contenant un fichier SKILL.md avec des instructions sur les compétences, et des exemples et modèles facultatifs. Vous pouvez créer des compétences dans l’un des emplacements suivants :
Portée |
Chemin |
|---|---|
Projet |
|
Global |
|
Utilisateur |
|
Pour commencer à créer une compétence personnalisée, procédez comme suit :
Créez le répertoire de compétence. Cet exemple crée un répertoire de compétence nommé « my-skill » dans l’emplacement du projet :
mkdir -p .cortex/skills/my-skill
Créez
SKILL.mddans ce répertoire et ajoutez des instructions de compétence. Cet exemple montre la structure de base :--- name: my-skill description: Brief description of what this skill does tools: - optional_tool_name --- # When to Use - Describe when this skill should be invoked - List specific user intents or scenarios # What This Skill Provides Explain the capabilities and knowledge this skill adds. # Instructions Step-by-step guidance for the AI when this skill is active. ## Best Practices - Best practice 1 - Best practice 2 ## Common Patterns ### Pattern 1 Description and example. ### Pattern 2 Description and example. # Examples ## Example 1: Basic Usage User: $my-skill Do something Assistant: [Expected behavior] ## Example 2: Advanced Usage User: $my-skill Complex task with @file.txt Assistant: [Expected behavior]
Vérifiez que votre compétence apparaît dans la liste à l’aide de la commande
$$:> $$
Si votre compétence est répertoriée, cela signifie qu’elle a été correctement chargée et qu’elle est disponible pour être utilisée.
Utilisez votre compétence dans une conversation :
> $my-skill Test it out
Paramètres de compte personnalisés¶
Les options de chaque compétence sont définies dans l’en-tête YAML en haut de SKILL.md. Les options suivantes sont prises en charge :
Option |
Description |
|---|---|
nom : <skill name> |
Obligatoire : Identificateur unique |
description : <description> |
Obligatoire : Affiché dans la liste $$ |
outils : |
En option : Outils à activer dans cette compétence |
- tool_name_1 |
|
- tool_name_2 |
Cet exemple montre une compétence qui utilise deux outils :
---
name: database-admin
description: Database administration tasks
tools:
- snowflake_sql_execute
- snowflake_object_search
---
Bonnes pratiques en matière de compétences¶
Pour écrire des compétences efficaces, suivez les instructions suivantes :
Soyez précis : des instructions claires produisent de meilleurs résultats
Fournissez des exemples : affichez les entrées et les sorties attendues
Incluez des cas limites : gérez les erreurs et les exceptions courantes
Restez orienté : une compétence est égale à un domaine ou une capacité
Gestion des compétences¶
Commande avec barre oblique |
Description |
|---|---|
|
Gestionnaire de compétences interactif |
|
Lister toutes les compétences |
|
Synchroniser avec l’emplacement global |
|
Ajouter une compétence distante |
Conflits de compétences¶
Lorsque la même compétence existe dans plusieurs emplacements pris en charge et que le contenu diffère, un conflit se produit, et un indicateur de conflit apparaît dans la liste des compétences. Utilisez /skill sync pour résoudre les conflits en synchronisant la portée locale avec la portée globale.
Compétences compositionnelles¶
Les compétences personnalisées peuvent faire référence à d’autres compétences, ou combiner des compétences avec un contexte de fichier :
> $code-review Review @src/auth.py following $security-guidelines
Compétences distantes¶
Vous pouvez ajouter des compétences distantes depuis les référentiels Git. Un référentiel peut contenir un nombre illimité de compétences. La disposition des compétences distantes doit correspondre à la structure des compétences locale.
/skill add https://github.com/org/my-skills.git
Les compétences distantes sont mises en cache localement. Pour les mettre à jour, utilisez /skill sync.
Référence des commandes de compétences¶
Commandes CLI :
cortex skill list
cortex skill add <path>
cortex skill remove <path>
Commandes avec barre oblique :
/skill list
/skill add <path>
Résolution des problèmes liés aux compétences¶
- Compétence non active
Utilisez un langage spécifique lié à l’objectif de la compétence
Mentionnez explicitement la compétence : « Utiliser l’optimisation de la vue sémantique »
Vérifiez la disponibilité :
/skill list
- Comportement inattendu
Donnez plus de contexte concernant votre objectif
Essayez une requête plus spécifique
Soumettez des commentaires :
/feedback
Sous-agents¶
Les sous-agents sont des agents AI autonomes et spécialisés qui gèrent des tâches spécifiques de manière indépendante. Ils permettent l’exécution parallèle, l’expertise ciblée et les workflows complexes à plusieurs étapes.
Les sous-agents :
S’exécutent indépendamment de la conversation principale
Ont leur propre contexte et accès aux outils
Peuvent fonctionner au premier plan ou en arrière-plan
Se spécialisent dans des domaines ou des tâches spécifiques
Types de sous-agents intégrés¶
general-purpose¶
Agent tout usage ayant accès à tous les outils. Mieux adapté pour :
Tâches de recherche complexes
Modifications du code à plusieurs étapes
Tâches nécessitant plusieurs outils
explore¶
Spécialiste de l’exploration rapide de la base de code. Mieux adapté pour :
Recherche de fichiers par modèles
Code de recherche de mots-clés
Compréhension de la structure de la base de code
Reconnaissance rapide
Vous pouvez spécifier le niveau de recherche de l’agent Explore :
"quick": Recherche de base"medium": Exploration modérée"very thorough": Analyse complète
plan¶
Conçoit et élabore des plans de mise en œuvre complexes. Mieux adapté pour :
Conception de stratégies de mise en œuvre
Identification des fichiers critiques
Évaluation des compromis architecturaux
Création de plans étape par étape
feedback¶
Collection de commentaires structurés. Mieux adapté pour :
Rassemblement des entrées utilisateur
Questions structurées
Commentaires sur la session
Sous-agents en cours d’exécution¶
Cortex Code délègue automatiquement aux sous-agents lorsque cela est possible. Par exemple, cette requête délègue à un agent Explore :
> Find all files that import the authentication module
Vous pouvez également demander explicitement des types de sous-agents spécifiques par leur nom :
> Use an Explore agent to find all database query definitions
> Use the Explore agent to find all API endpoint definitions
> Launch a Plan agent to design the authentication refactor
Vous pouvez également demander à plusieurs sous-agents de s’exécuter en parallèle pour traiter différents aspects d’une tâche :
> In parallel, search for all test files and all config files
Les agents peuvent s’exécuter en arrière-plan pendant que vous continuez de travailler :
> Run a background agent to refactor all the test files
L’agent démarre immédiatement et renvoie un ID d’agent pour le suivi. Lorsque l’agent se termine, vous pouvez récupérer sa sortie à l’aide de son ID :
> Get the output from agent abc1234
Pour surveiller l’état de tous les sous-agents en cours d’exécution, utilisez la commande /agents (ou appuyez sur Ctrl-B) pour ouvrir la visionneuse des processus en arrière-plan. Vous pouvez arrêter un agent en cours d’exécution à l’aide de son ID, ou avec l’interface /agents :
> kill agent abc1234
Les agents arrêtés cessent de fonctionner, mais conservent leur contexte indéfiniment. Vous pouvez reprendre un agent arrêté à l’aide de son ID :
> Resume agent abc1234 and continue from where it left off
Types d’agents¶
- Autonomes
Un agent autonome s’exécute sans interaction de l’utilisateur. L’agent :
Se termine indépendamment
Ne se bloque jamais pour poser des questions
Est adapté pour les tâches bien définies
- Non autonomes
Un agent non autonome peut suspendre l’exécution pour poser des questions à l’utilisateur. L’agent :
Peut poser des questions de clarification
Peut demander des autorisations de manière interactive
Est adapté pour les tâches nécessitant des conseils
- Personnalisés
Les agents personnalisés sont des sous-agents définis par l’utilisateur avec des configurations et des invites spécialisées. Vous créez des agents adaptés à des domaines ou à des workflows spécifiques dans des fichiers Markdown, de manière similaire à des compétences personnalisées.
Création de sous-agents personnalisés¶
Les sous-agents personnalisés sont définis dans des fichiers Markdown avec un en-tête YAML. L’en-tête spécifie le nom, la description, l’accès à l’outil et le modèle de l’agent. Le corps contient l’invite du système qui guide le comportement de l’agent.
Vous pouvez stocker des fichiers Markdown d’agents personnalisés à l’un des trois emplacements suivants :
Portée |
Chemin |
|---|---|
Projet |
.cortex/agents/ ou .claude/agents/ |
Global |
~/.snowflake/cortex/agents/ |
Utilisateur |
~/.claude/agents/ |
Le format d’une définition d’agent est montré ci-dessous :
---
name: my-agent
description: What this agent specializes in
tools:
- Bash
- Read
- Write
model: claude-sonnet-4-5
---
# System Prompt
You are a specialized agent for [domain].
## Your Responsibilities
1. Task 1
2. Task 2
## Guidelines
- Guideline 1
- Guideline 2
## Output Format
Describe expected output format.
Exemple : Agent Test Runner¶
Le fichier Markdown suivant définit un agent Test Runner personnalisé qui exécute des tests et résume les résultats :
---
name: test-runner
description: Runs tests and reports results
tools:
- Bash
- Read
- Grep
---
# Test Runner Agent
You run tests and provide clear reports of the results.
## Process
1. Identify the test framework (pytest, jest, go test, etc.)
2. Run appropriate test command
3. Parse and summarize results
4. Highlight failures with relevant code context
## Output Format
## Test Results Summary
- Total: X
- Passed: Y
- Failed: Z
## Failures
### Test Name
- File: path/to/file.py
- Error: Description
- Relevant code snippet
Configuration d’un agent¶
La configuration d’un agent personnalisé est spécifiée dans l’en-tête YAML du fichier Markdown.
- Accès aux outils
Les agents peuvent spécifier les outils auxquels ils ont accès :
tools: - "*" # All tools - Bash # Specific tools - Read - Write
- Sélection de modèles
Vous pouvez choisir un modèle pour un agent spécifique. Cela remplace le modèle par défaut de la session.
model: claude-sonnet-4-5 # Specific model model: auto # Cost-optimized
Isolement de l’arborescence de travail¶
Les agents peuvent être exécutés dans des arborescences de travail Git isolées ou des branches. Lorsque vous demandez l’isolement de l’arborescence de travail, la CLI Cortex Code crée une arborescence de travail Git distincte dans laquelle l’agent peut opérer. Cela permet à plusieurs agents de fonctionner en parallèle sans modifications conflictuelles et facilite le nettoyage ultérieur. Les arborescences de travail isolées sont particulièrement utiles pour l’exploration et l’expérimentation. La branche Git créée par l’agent est nommée agent/<agentId>.
Pour utiliser l’isolement de l’arborescence de travail, il suffit de l’inclure dans votre invite :
> Run a background agent with worktree isolation to implement feature X
Modèle en essaim¶
Vous pouvez lancer un essaim d’agents pour traiter différents aspects d‘une tâche complexe en parallèle. Chaque agent fonctionne indépendamment, et les résultats sont agrégés lorsque tous les agents se terminent. Tous les types d’agents peuvent participer à un essaim.
Les cas d’utilisation des essaims comprennent :
Analyse de code : plusieurs agents analysent différents aspects
Refactorisation : des agents parallèles traitent des fichiers différents
Test : des agents exécutent différentes suites de tests
Documentation : des agents documentent différents composants
Pour créer un essaim, il suffit de décrire les différents agents que vous souhaitez lancer :
> Launch a swarm of agents:
> 1. Explore agent to find all database queries
> 2. Explore agent to find all API endpoints
> 3. Explore agent to find all test files
Bonnes pratiques en matière de sous-agents¶
Utilisez des sous-agents pour :
Tâches complexes : Décomposez des tâches en sous-tâches pour une exécution parallèle
Exploration : Utilisez l’agent Explore pour des recherches dans la base de code
Planification : Utilisez l’agent Plan avant des modifications majeures
Travail en arrière-plan : Tâches de longue durée qui ne nécessitent aucune attention particulière
Les sous-agents peuvent ne pas être idéaux pour :
Requêtes simples : les outils directs sont plus rapides
Modifications d’un seul fichier : l’agent principal est plus efficace
Travail interactif : lorsque vous avez besoin de commentaires immédiats
Les invites détaillées sont généralement plus efficaces :
Bonne |
Recherchez tous les fichiers Python qui contiennent des requêtes de base de données et répertoriez-les avec des numéros de ligne |
|---|---|
Meilleure |
Utilisez l’agent Explore (très complet) pour rechercher tous les fichiers Python contenant des requêtes de base de données. Pour chaque fichier, extrayez les modèles de requête et identifiez les risques d’injection SQL potentiels. |
Affichage des sous-agents actifs¶
- Commande
/agents Émettez la commande
/agentsdans une session Cortex Code pour ouvrir la visionneuse d’agents interactive. Cette interface affiche tous les agents en cours d’exécution, leurs types, leurs états et une prévisualisation des sorties.- Visionneuse des processus en arrière-plan
Dans une session CLI Cortex Code, appuyez sur Ctrl-B pour afficher :
Tous les processus en arrière-plan
Les sessions des agents
Les processus Bash
Les limites des agents¶
Les limites suivantes s’appliquent aux sous-agents dans le CLI Cortex Code :
Maximum de 50 agents en arrière-plan simultanés
Les agents héritent des autorisations de session
Les agents en arrière-plan ne peuvent pas générer d’autres agents en arrière-plan
Hooks¶
Les hooks vous permettent d’intercepter et de personnaliser le comportement de Cortex Code aux points clés du cycle de vie. Un hook est une invite ou un script shell qui s’exécute en réponse à un événement :
Avant l’utilisation de l’outil : valider ou modifier les entrées de l’outil
Après l’utilisation de l’outil : ajouter du contexte ou des résultats de journalisation
Sur l’entrée utilisateur : contexte de la session d’injection
Sur les événements de la session : initialiser ou nettoyer
Événements de hooks¶
Les événements suivants peuvent déclencher des hooks :
Événement |
Description |
Peut bloquer |
|---|---|---|
PreToolUse |
Avant l’exécution de l’outil |
Oui |
PostToolUse |
Après l’exécution de l’outil |
Non |
PermissionRequest |
Lorsqu’une autorisation est nécessaire |
Oui |
UserPromptSubmit |
Lorsque l’utilisateur soumet une invite |
Non |
SessionStart |
Au démarrage de la session |
Non |
SessionEnd |
Lorsque la session se termine |
Non |
PreCompact |
Avant le compactage du contexte |
Non |
Arrêt |
Lorsque l’utilisateur arrête Claude |
Non |
SubagentStop |
Lorsque le sous-agent s’arrête |
Non |
Notification |
Sur les notifications système |
Non |
Configuration |
Lors de l’initialisation |
Non |
Configuration des hooks¶
Les hooks sont configurés dans des fichiers de paramètres, qui peuvent se trouver dans n’importe quel répertoire de configuration (répertoriés ci-dessous par ordre de priorité décroissante) :
Emplacement |
Chemin |
|---|---|
Local |
|
Projet |
|
Utilisateur |
|
Global |
|
Les hooks sont définis au format JSON, spécifiant l’événement, la correspondance de l’outil et les actions de hook. Un exemple simple d’un hook avant utilisation de l’outil est présenté ci-dessous :
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/validate-bash.sh",
"timeout": 60
}
]
}
]
}
}
Deux types de hooks sont pris en charge : les hooks de commande et les hooks d’invite.
Les hooks de commande exécutent des commandes shell ou des scripts.
{ "type": "command", "command": "bash /path/to/script.sh", "timeout": 60, "enabled": true }
Les hooks d’invite sont évalués comme des invites en langage naturel pour un modèle de langage.
{ "type": "prompt", "prompt": "Is this command safe? $ARGUMENTS", "timeout": 30 }
Pour exécuter votre hook uniquement sur des outils spécifiques, placez les noms des outils ou les modèles dans le champ matcher. Par exemple, pour faire correspondre toutes les outils SQL, utilisez "matcher": "SQL*". Vous pouvez utiliser des expressions régulières pour faire correspondre plusieurs outils.
Motif |
Correspond |
|---|---|
|
Tous les outils |
|
Bash uniquement |
|
Modifier ou écrire |
|
Tous les outils MCP |
|
NotebookEdit, NotebookExecute |
Écriture de scripts de hook¶
Les scripts de hook acceptent l’entrée JSON via une entrée standard et la sortie JSON via une sortie standard. La sortie contient un champ indiquant si l’opération est autorisée ou refusée. En option, le script de hook peut renvoyer une version modifiée de l’entrée de l’outil.
Exemple d’entrée :
{
"session_id": "abc123",
"transcript_path": "/path/to/transcript.json",
"cwd": "/working/directory",
"permission_mode": "default",
"hook_event_name": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": "ls -la"
}
}
Exemple de sortie :
{
"decision": "allow",
"systemMessage": "Note: This operation was validated.",
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"updatedInput": {
"command": "ls -la --color=never"
}
}
}
Le code de retour indique s’il faut bloquer l’opération :
0 : Ne pas bloquer
2 : Bloquer
Ces informations peuvent également être renvoyées dans le cadre de la sortie JSON, comme indiqué ci-dessous.
{
"decision": "block",
"reason": "Operation not allowed"
}
Les variables d’environnement suivantes sont disponibles dans les scripts de hook :
Variable |
Description |
|---|---|
|
Chemin du répertoire de projet |
|
|
|
Chemin d’accès persistant au fichier env |
Exemples de hook¶
Les exemples suivants illustrent la sortie possible pour les cas d’utilisation courants des hooks.
Modifier l’entrée de l’outil¶
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"updatedInput": {
"command": "modified command"
}
}
}
Ajouter un contexte¶
{
"hookSpecificOutput": {
"hookEventName": "PostToolUse",
"additionalContext": "Note: File was recently modified."
}
}
Afficher les messages système¶
{
"systemMessage": "Warning: This operation may take a while."
}
Décisions d’autorisation¶
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "allow",
"permissionDecisionReason": "Auto-approved by policy"
}
}
Hooks distants¶
Vous pouvez référencer des scripts dans les référentiels Git comme indiqué ci-dessous :
{
"type": "command",
"command": "bash",
"source": {
"source": "github:org/hooks-repo/scripts/validate.sh",
"ref": "main"
}
}
Bonnes pratiques en matière de hooks¶
Maintenez la vitesse des hooks : les délais d’expiration sont de 60 secondes par défaut
Traitez les erreurs correctement : renvoyez la sortie 0 en cas d’incertitude
Journalisez le débogage : écrivez dans les fichiers pour la résolution des problèmes
Utilisez des correspondances : ciblez des outils spécifiques, et non tous les outils
Effectuez des tests avancés : utilisez le gestionnaire de hooks pour vérifier le comportement
Protocole de contexte de modèle (MCP)¶
Vous pouvez connecter le CLI Cortex Code à des outils et des sources de données externes avec le protocole de contexte de modèle (MCP). Le MCP est un standard ouvert pour connecter des agents AI à des outils externes comme GitHub, Jira et des bases de données. Une fois configurés, les serveurs MCP donnent à Cortex Code l’accès aux outils hébergés au-delà des capacités intégrées.
Types de transports¶
Cortex Code prend en charge trois types de transports MCP :
Type |
Cas d’utilisation |
Connexion |
|---|---|---|
stdio |
Outils locaux, wrappers CLI |
Sous-processus avec stdin/stdout |
http |
Services Web, APIs |
Requêtes HTTP |
sse |
Services en temps réel |
Événements envoyés par le serveur |
Vous pouvez utiliser OAuth pour vous authentifier auprès de serveurs MCP HTTP. La première fois que vous vous connectez à un serveur configuré pour OAuth, CLI Code Cortex ouvre une fenêtre du navigateur, où l’utilisateur s’authentifie. Le jeton résultant est stocké dans ~/.snowflake/cortex/mcp_oauth/ et actualisé automatiquement selon les besoins. Voici un exemple de configuration OAuth :
{
"oauth": {
"client_id": "pre-registered-client-id",
"client_name": "My Client",
"redirect_port": 8585,
"scope": "openid mcp read write",
"authorization_server_url": "https://auth.example.com"
}
}
Gestion des serveurs MCP¶
Vous pouvez émettre la commande /mcp dans une session CLI Cortex Code interactive pour ouvrir une visionneuse d’état MCP interactive. Utilisez la commande cortex mcp pour gérer les configurations de serveurs MCP à partir de la ligne de commande.
Commande |
Description |
|---|---|
Ligne de commande |
Description |
cortex mcp add |
Ajouter un nouveau serveur (voir ci-dessous) |
cortex mcp list |
Liste des serveurs configurés |
cortex mcp get <server> |
Obtenir des détails pour un serveur spécifique |
cortex mcp remove <server> |
Supprimer un serveur |
cortex mcp start <server> |
Vérifier l’état du serveur et les outils disponibles |
Ajout d’un serveur¶
La commande cortex mcp add accepte des options pour la configuration des serveurs.
cortex mcp add <name> <command> [args...]
Options :
--transport, -t Transport type (stdio, http, sse)
--type Alias for --transport
--env, -e Environment variable (KEY=value)
--header, -H HTTP header
--timeout Connection timeout in ms
Note
Les outils MCP disposent d’un espace de noms pour éviter les conflits, utilisant le format ci-dessous :
mcp__{server-name}__{tool-name}
Par exemple, un outil appelé search provenant du serveur github se voit attribuer le nom mcp__github__search.
Configuration d’MCP¶
La configuration du serveur MCP est stockée dans ~/.snowflake/cortex/mcp.json sous la clé mcpServers. L’exemple suivant montre la structure d’un fichier de configuration avec un seul serveur MCP :
{
"mcpServers": {
"server-name": {
"type": "stdio",
"command": "command-to-run",
"args": ["arg1", "arg2"]
}
}
}
Variables d’environnement¶
Utilisez la syntaxe ${VAR} ou $VAR pour insérer les valeurs des variables d’environnement dans le fichier de configuration.
{
"mcpServers": {
"my-server": {
"type": "http",
"url": "https://api.example.com",
"headers": {
"Authorization": "Bearer ${MY_API_TOKEN}"
}
}
}
Important
Il est recommandé d’utiliser des variables d’environnement pour les identifiants de connexion. Ne codez jamais en dur des jetons dans mcp.json. Ajoutez une ligne au profil de votre shell, comme ~/.bashrc ou ~/.zshrc, comme suit :
export GITHUB_TOKEN="your_token_here"
Configuration à partir de la ligne de commande¶
Pour ajouter un serveur MCP à partir de la ligne de commande, utilisez la commande cortex mcp add. Par exemple :
Action |
Commande |
|---|---|
Ajouter un serveur stdio |
|
Ajouter un serveur HTTP |
|
Ajouter avec des variables d’environnement |
|
Ajouter avec des en-têtes |
|
Utilisation des outils MCP¶
Une fois configurés, les outils MCP sont disponibles automatiquement dans les sessions CLI Cortex Code. Vous les invoquez via des commandes en langage naturel :
Show me recent GitHub pull requests
Create a Jira ticket for this bug
Query the PostgreSQL database for user activity
Les autorisations sont demandées lors de la première utilisation. Configurez les valeurs par défaut dans ~/.snowflake/cortex/permissions.json :
{
"allow": ["mcp__github__read_file", "mcp__github__list_repos"],
"deny": ["mcp__github__delete_repo"]
}
Exemples de configurations MCP¶
Les exemples suivants illustrent les configurations de serveurs MCP pour les cas d’utilisation courants.
Serveur Git (stdio)¶
{
"mcpServers": {
"git": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-server-git", "--repository", "/path/to/repo"]
}
}
}
API HTTP avec OAuth¶
{
"mcpServers": {
"my-api": {
"type": "http",
"url": "https://api.example.com/mcp",
"oauth": {
"client_id": "my-client-id",
"redirect_port": 8585,
"scope": "openid mcp"
}
}
}
}
Serveur SSE avec en-têtes¶
{
"mcpServers": {
"realtime": {
"type": "sse",
"url": "https://realtime.example.com/events",
"headers": {
"Authorization": "Bearer ${API_TOKEN}",
"X-Custom-Header": "value"
},
"timeout": 30000
}
}
}
Intégration du graphique source¶
{
"mcpServers": {
"sourcegraph": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@sourcegraph/mcp-server"],
"env": {
"SRC_ACCESS_TOKEN": "${SOURCEGRAPH_TOKEN}",
"SRC_ENDPOINT": "https://sourcegraph.company.com"
}
}
}
}
Résolution des problèmes liés au MCP¶
- Serveur qui ne se connecte pas
Vérifiez
/mcppendant une session pour s’assurer qu’il figure dans la listeUtilisez
cortex mcp start <server>pour tester la connexionVérifier que les identifiants de connexion sont correctement définis dans les variables d’environnement
cat ~/.snowflake/cortex/logs/mcp.logpour examiner le journal à la recherche d’indices
- Outils qui n’apparaissent pas
Exécutez
cortex mcp listpour vérifier la configurationAssurez-vous que les noms des outils sont valides (ils ne contiennent que des caractères alphanumériques, des tirets bas et des traits d’union)
Vérifiez que les noms des outils font moins de 64 caractères
- Problèmes OAuth
Effacez les jetons mis en cache :
rm ~/.snowflake/cortex/mcp_oauth/{server}*Reconnectez-vous pour déclencher un nouveau flux OAuth
Vérifiez que le port de redirection est disponible (par défaut, 8585)
- Variables d’environnement non développées
Utilisez la syntaxe
${VAR}(avec des accolades) plutôt que$VARAssurez-vous que la variable est définie dans votre shell (
echo $VAR)Vérifiez les fautes de frappe dans les noms de variables
Bonnes pratiques en matière de MCP¶
Utilisez des noms de serveurs descriptifs : clarifiez l’espace de noms des outils
Définissez des délais d’expiration appropriés : la valeur par défaut est de 10 minutes pour la liste des outils
Identifiants de connexion sécurisés : utilisez des variables d’environnement, et non des secrets codés en dur
Testez les connexions : utilisez
cortex mcp startavant d’utiliser un serveur