Erweiterbarkeit der Cortex Code CLI¶
Die Cortex Code CLI kann um benutzerdefinierte Verhaltensweisen, spezielle Agenten, Lebenszyklus-Hooks und externe Tool-Integrationen erweitert werden. Unter diesem Thema werden die vier wichtigsten Erweiterbarkeitsmechanismen behandelt:
- Skills
Markdown-Dateien, die domänenspezifisches Wissen und Anweisungen in Konversationen einbringen. Nutzen Sie Skills, um Cortex Code über die Best Practices Ihres Unternehmens, Codierungsstandards oder spezielle Workflows zu informieren.
- Subagenten
Autonome, spezialisierte AI-Agenten, die bestimmte Aufgaben eigenständig erledigen. Subagenten ermöglichen die parallele Ausführung, gezieltes Fachwissen und komplexe mehrstufige Workflows.
- Hooks
Skripte, die das Verhalten von Cortex Code an wichtigen Punkten des Lebenszyklus abfangen und anpassen. Verwenden Sie Hooks, um Tool-Eingaben zu validieren, Vorgänge zu protokollieren oder Richtlinien durchzusetzen.
- MCP (Model Context Protocol)
Ein offener Standard für die Verbindung von Cortex Code mit externen Tools und Datenquellen wie GitHub, Jira und Datenbanken.
Skills¶
Skills erweitern Cortex Code um domänenspezifisches Wissen und Fähigkeiten, indem sie spezielle Anweisungen einfügen und zusätzliche Tools aktivieren.
Was sind Skills?¶
Skills sind Markdown-Dateien, die Folgendes enthalten:
Domänenspezifische Anweisungen und Best Practices
Wann das Skill verwendet werden soll
Beispiel-Workflows
Optionale Toolkonfigurationen
Wenn Sie ein Skill aufrufen, werden ihre Anweisungen in den Konversationskontext eingefügt.
Verwenden von Skills¶
Führen Sie /skill list aus, um die verfügbaren Skills aufzulisten, und rufen Sie diese nach Namen auf, um das Skill in die Konversation zu laden.
Skills-Speicherorte¶
Skills werden aus mehreren Speicherorten geladen, die nachfolgend von der höchsten zur niedrigsten Priorität aufgeführt sind:
Location |
Path |
Bereich |
|---|---|---|
Projekt |
|
Projekt |
Benutzer |
|
Benutzer |
Global |
|
System |
Sitzung |
Vorübergehend hinzugefügt |
Sitzung |
Remote |
Geklont von git |
Cache |
Im Paket enthalten |
In Cortex Code integriert |
System |
Erstellen von kundenspezifischen Skills¶
Skills sind Verzeichnisse, die eine SKILL.md-Datei mit Anleitungen für Skills sowie optionalen Beispiele und Vorlagen enthalten. Sie können Skills an einem der folgenden Orte erstellen:
Bereich |
Path |
|---|---|
Projekt |
|
Global |
|
Benutzer |
|
So beginnen Sie mit dem Erstellen eines kundenspezifischen Skills:
Erstellen Sie das Skill-Verzeichnis. In diesem Beispiel wird am Projektspeicherort ein Skill-Verzeichnis namens „my-skill“ erstellt:
mkdir -p .cortex/skills/my-skill
Erstellen Sie
SKILL.mdin diesem Verzeichnis und fügen Sie Anleitungen für Skills hinzu. Dieses Beispiel zeigt die Grundstruktur:--- 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]
Überprüfen Sie anhand des Befehls
$$, ob das Skill in der Liste angezeigt wird:> $$
Wenn Ihre Skills aufgeführt sind, wurden sie korrekt geladen und können verwendet werden.
Ihre Skills in einer Konversation nutzen:
> $my-skill Test it out
Kundenspezifische Skill-Einstellungen¶
Die Optionen für die einzelnen Skills werden im YAML-Frontmatter oben in SKILL.md definiert. Folgende Optionen werden unterstützt:
Option |
Beschreibung |
|---|---|
Name: <skill name> |
Erforderlich: Eindeutiger Bezeichner |
Beschreibung: <description> |
Erforderlich: Gezeigt in $$-Freigabeangebot |
Tools: |
Optional: Tools, die in diesem Skill aktiviert werden sollen |
- tool_name_1 |
|
- tool_name_2 |
Dieses Beispiel zeigt ein Skill, das zwei Tools verwendet:
---
name: database-admin
description: Database administration tasks
tools:
- snowflake_sql_execute
- snowflake_object_search
---
Best Practices für Skills¶
Um effektive Skills zu schreiben, befolgen Sie diese Richtlinien:
Seien Sie konkret: Klare Anweisungen führen zu besseren Ergebnissen
Geben Sie Beispiele an: Zeigen Sie erwartete Eingaben und Ausgaben
Schließen Sie Grenzfälle ein: Behandeln Sie häufige Fehler und Ausnahmen
Bleiben Sie konzentriert: Ein Skill entspricht einer Domäne oder Fähigkeit
Verwalten von Skills¶
Schrägstrich-Befehl |
Beschreibung |
|---|---|
|
Interaktiver Skill-Manager |
|
Alle Skills auflisten |
|
Mit globalem Standort synchronisieren |
|
Remote-Skill hinzufügen |
Skill-Konflikte¶
Wenn dasselbe Skill an mehreren unterstützten Speicherorten vorhanden ist und sich die Inhalte unterscheiden, tritt ein Konflikt auf, und ein Konfliktindikator wird im Skill-Freigabeangebot angezeigt. Verwenden Sie /skill sync, um Konflikte zu lösen, indem der lokale Bereich mit dem globalen Bereich synchronisiert wird.
Entwerfen von Skills¶
Kundenspezifische Skills können auf andere Skills verweisen oder Skills mit dem Dateikontext kombinieren:
> $code-review Review @src/auth.py following $security-guidelines
Remote-Skills¶
Sie können Remote-Skills aus Git-Repositorys hinzufügen. Ein Repository kann eine beliebige Anzahl von Skills enthalten. Das Layout der Remote-Skills sollte mit der lokalen Skills-Struktur übereinstimmen.
/skill add https://github.com/org/my-skills.git
Remote-Skills werden lokal zwischengespeichert. Verwenden Sie zum Aktualisieren /skill sync.
Skill-Befehlsreferenz¶
CLI-Befehle:
cortex skill list
cortex skill add <path>
cortex skill remove <path>
Schrägstrich-Befehle:
/skill list
/skill add <path>
Problembehandlung für Skills¶
- Skill wird nicht aktiviert
Bestimmte Sprache verwenden, die sich auf den Zweck des Skills bezieht
Erwähnen Sie das Skill explizit: „Use semantic-view-optimization“
Verfügbarkeit prüfen:
/skill list
- Unerwartetes Verhalten
Geben Sie mehr Kontext zu Ihrem Ziel an
Versuchen Sie es mit einer genaueren Anfrage
Feedback übermitteln:
/feedback
Subagenten¶
Subagenten sind autonome, spezialisierte AI-Agenten, die bestimmte Aufgaben eigenständig erledigen. Sie ermöglichen eine parallele Ausführung, konzentriertes Fachwissen und komplexe mehrstufige Arbeitsabläufe.
Subagenten:
nehmen die Ausführung unabhängig von der Hauptkonversation vor
haben eigenen Kontext und eigenen Tool-Zugriff
können im Vordergrund oder im Hintergrund ausgeführt werden
sind auf bestimmte Domänen oder Aufgaben spezialisiert
Integrierten Type von Subagenten¶
general-purpose¶
Agent für allgemeine Zwecke mit Zugriff auf alle Tools. Am besten geeignet für:
Komplexe Forschungsaufgaben
Mehrstufige Codeänderungen
Aufgaben, die mehrere Tools erfordern
explore¶
Spezialisiert auf schnelle Codebase-Exploration. Am besten geeignet für:
Suchen von Dateien nach Mustern
Durchsuchen von Code nach Schlüsselwörtern
Verstehen der Struktur der Codebasis
Schnelle Erkennung
Sie können festlegen, wie gründlich der Explorer-Agent sucht:
"quick": Grundlegende Suche"medium": Moderate Erkundung"very thorough": Umfassende Analyse
plan¶
Entwirft und skizziert komplexe Implementierungspläne. Am besten geeignet für:
Entwerfen von Implementierungsstrategien
Identifizieren kritischer Dateien
Evaluierung von architektonischen Kompromissen
Erstellen von Schritt-für-Schritt-Plänen
feedback¶
Strukturierte Feedback-Sammlung. Am besten geeignet für:
Sammeln von Benutzereingaben
Strukturierte Fragen
Sitzungsfeedback
Ausführen von Subagenten¶
Cortex Code delegiert bei Bedarf automatisch an Subagenten. Die folgende Abfrage wird zum Beispiel an einen Explore-Agenten delegiert:
> Find all files that import the authentication module
Sie können bestimmte Typen von Subagenten auch explizit über den Namen anfordern:
> 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
Sie können auch anfordern, dass mehrere Subagenten parallel ausgeführt werden, um verschiedene Aspekte einer Aufgabe anzugehen:
> In parallel, search for all test files and all config files
Agenten können im Hintergrund ausgeführt werden, während Sie weiterarbeiten:
> Run a background agent to refactor all the test files
Der Agent startet sofort und gibt eine Agenten-ID für die Verfolgbarkeit zurück. Wenn der Agent fertig ist, können Sie seine Ausgabe anhand seiner ID abrufen:
> Get the output from agent abc1234
Um den Status aller laufenden Subagenten zu überwachen, verwenden Sie den /agents-Befehl (oder drücken Sie Strg+B), um den Hintergrund-Prozessbetrachter zu öffnen. Sie können einen laufenden Agenten mit seiner ID oder über die /agents-Schnittstelle anhalten:
> kill agent abc1234
Beendete Agenten werden nicht mehr ausgeführt, behalten aber ihren Kontext auf unbestimmte Zeit bei. Sie können einen beendeten Agenten anhand seiner ID fortsetzen:
> Resume agent abc1234 and continue from where it left off
Typen von Agenten¶
- Autonom
Ein autonomer Agent wird ohne Benutzerinteraktion ausgeführt. Der Agent:
schließt seine Ausführung eigenständig ab
blockiert niemals für Fragen
ist für genau definierte Aufgaben geeignet
- Nicht autonom
Ein nicht autonomer Agent kann die Ausführung pausieren, um dem Benutzenden Fragen zu stellen. Der Agent:
kann klärende Fragen stellen
kann Berechtigungen interaktiv anfordern
ist für Aufgaben geeignet, die eine Anleitung benötigen
- Kundenspezifisch
Kundenspezifische Agenten sind benutzerdefinierte Subagenten mit speziellen Prompts und Konfigurationen. Sie erstellen Agenten, die auf bestimmte Domänen oder Workflows in Markdown-Dateien zugeschnitten sind, ähnlich wie bei kundenspezifischen Skills.
Erstellen von kundenspezifischen Subagenten¶
Kundenspezifische Subagenten werden in Markdown-Dateien mit YAML-Frontmatter definiert. Das Frontmatter gibt den Namen des Agenten, die Beschreibung, den Zugriff auf die Tools und das Modell an. Der Haupttext enthält den System-Prompt, der das Verhalten des Agenten steuert.
Sie können Markdown-Dateien für kundenspezifische Agenten an einem von drei Orten speichern:
Bereich |
Path |
|---|---|
Projekt |
.cortex/agents/ oder .claude/agents/ |
Global |
~/.snowflake/cortex/agents/ |
Benutzer |
~/.claude/agents/ |
Das Format einer Agentendefinition ist unten dargestellt:
---
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.
Beispiel: Test Runner-Agent¶
Die folgende Markdown-Datei definiert einen kundenspezifischen Test Runner-Agenten, der Tests ausführt und die Ergebnisse zusammenfasst:
---
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
Agentenkonfiguration¶
Die Konfiguration eines kundenspezifischen Agenten wird im YAML-Frontmatter der Markdown-Datei angegeben.
- Tool-Zugriff
Agenten können angeben, auf welche Tools sie Zugriff haben:
tools: - "*" # All tools - Bash # Specific tools - Read - Write
- Modellauswahl
Sie können ein Modell für einen bestimmten Agenten auswählen. Dies überschreibt das Standardmodell der Sitzung.
model: claude-sonnet-4-5 # Specific model model: auto # Cost-optimized
Arbeitsstrukturisolierung¶
Agenten können in isolierten Git-Arbeitsstrukturen oder Branches ausgeführt werden. Wenn Sie die Isolation der Arbeitsstruktur anfordern, erstellt Cortex Code CLI eine separate Git-Arbeitsstruktur, in der der Agent operieren kann. So können mehrere Agenten parallel ausgeführt werden, ohne dass Änderungen kollidieren, und die Änderungen sind anschließend leicht zu bereinigen. Isolierte Arbeitsstrukturen sind besonders nützlich für Erkundungen und Experimente. Der vom Agenten erstellte Git-Zweig heißt agent/<Agenten-ID>.
Um die Arbeitsstrukturisolierung zu verwenden, fügen Sie sie einfach in Ihren Prompt ein:
> Run a background agent with worktree isolation to implement feature X
Schwarmmuster¶
Sie können einen Schwarm von Agenten starten, um verschiedene Aspekte einer komplexen Aufgabe parallel anzugehen. Jeder Agent arbeitet eigenständig, und die Ergebnisse werden zusammengefasst, sobald alle Agenten beendet sind. Alle Arten von Agenten können an einem Schwarm beteiligt sein.
Schwarm-Anwendungsfälle:
Code-Analyse: Mehrere Agenten analysieren unterschiedliche Aspekte
Umstrukturierung: Parallele Agenten verarbeiten verschiedene Dateien
Testen: Agenten führen verschiedene Testsuiten aus
Dokumentation: Agenten dokumentieren verschiedene Komponenten
Um einen Schwarm zu erstellen, beschreiben Sie einfach die verschiedenen Agenten, die Sie starten möchten:
> 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
Best Practices für Subagenten¶
Verwenden Sie Subagenten für:
Komplexe Aufgaben: Aufteilen in Unteraufgaben zur parallelen Ausführung
Erkundung: Verwenden Sie den Explore-Agenten zum Suchen in der Codebasis
Planung: Verwenden Sie den Plan-Agenten vor größeren Änderungen
Hintergrundarbeit: Zeitintensive Aufgaben, die keine Aufmerksamkeit erfordern
Subagenten sind möglicherweise nicht ideal für:
Einfache Abfragen: Direkte Tools sind schneller
Änderungen an einzelnen Dateien: Der Hauptagent ist effizienter
Interaktives Arbeiten: Wenn Sie sofortiges Feedback benötigen
Detaillierte Prompts sind im Allgemeinen effektiver:
Gut |
Find all Python files that contain database queries and list them with line numbers. (Deutsch: „Suche alle Python-Dateien, die Datenbankabfragen enthalten, und liste sie mit Zeilennummern auf“) |
|---|---|
Besser |
Use the Explore agent (very thorough) to find all Python files containing database queries. (Deutsch: „Verwende den Explore-Agenten (sehr gründlich), um alle Python-Dateien zu finden, die Datenbankabfragen enthalten.“) Extrahieren Sie für jede Datei die Abfragemuster, und identifizieren Sie potenzielle SQL-Injektionsrisiken. |
Anzeigen von aktiven Subagenten¶
- Befehl
/agents Geben Sie den Befehl
/agentsin einer Cortex Code-Sitzung aus, um den interaktiven Agentenbetrachter zu öffnen. In dieser Oberfläche werden alle aktiven Agenten, ihre Typen, die Status und die Vorschau der Ausgabe angezeigt.- Hintergrund-Prozessbetrachter
Drücken Sie in einer Cortex Code CLI-Sitzung die Tastenkombination Strg+B, um Folgendes anzuzeigen:
Alle Hintergrundprozesse
Agentensitzungen
Bash-Prozesse
Einschränkungen bei Agenten¶
Die folgenden Einschränkungen gelten für Subagenten in Cortex Code CLI:
Maximal 50 gleichzeitige Hintergrundagenten
Agenten erben Sitzungsberechtigungen
Hintergrundagenten können keine anderen Hintergrundagenten erzeugen
Hooks¶
Hooks ermöglichen Ihnen, das Verhalten von Cortex Code an wichtigen Punkten des Lebenszyklus abzufangen und anzupassen. Ein Hook ist ein Prompt oder ein Shell-Skript, das als Reaktion auf ein Ereignis eine Ausführung vornimmt:
Vor Tool-Verwendung: Tool-Eingaben validieren oder ändern
Nach Tool-Verwendung: Kontext oder Protokollergebnisse hinzufügen
Bei Benutzereingabe: Sitzungskontext einfügen
Bei Sitzungsereignissen: Initialisieren oder Bereinigen
Hook-Ereignisse¶
Die folgenden Ereignisse können Hooks auslösen:
Ereignis |
Beschreibung |
Kann blockieren |
|---|---|---|
PreToolUse |
Vor Tool-Ausführung |
Ja |
PostToolUse |
Nach Tool-Ausführung |
Nein |
PermissionRequest |
Wenn Berechtigung erforderlich |
Ja |
UserPromptSubmit |
Wenn der Benutzende einen Prompt übermittelt |
Nein |
SessionStart |
Wenn Sitzung beginnt |
Nein |
SessionEnd |
Wenn Sitzung endet |
Nein |
PreCompact |
Vor der Kontextkomprimierung |
Nein |
Beenden |
Wenn der Benutzende Claude beendet |
Nein |
SubagentStop |
Wenn der Subagent beendet wird |
Nein |
Benachrichtigung |
Bei Systembenachrichtigungen |
Nein |
Setup |
Während der Initialisierung |
Nein |
Konfigurieren von -Hooks¶
Hooks werden in Einstellungsdateien konfiguriert, die sich in einem beliebigen Konfigurationsverzeichnis befinden können (nachfolgend von der höchsten zur niedrigsten Priorität aufgeführt):
Location |
Path |
|---|---|
Gebietsschema |
|
Projekt |
|
Benutzer |
|
Global |
|
Hooks werden im JSON-Format unter Angabe des Ereignisses, des Tool-Matchers und der Hook-Aktionen definiert. Ein einfaches Beispiel für einen Hook vor Tool-Verwendung finden Sie unten:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/validate-bash.sh",
"timeout": 60
}
]
}
]
}
}
Es werden zwei Hook-Typen unterstützt: Befehls-Hooks und Prompt-Hooks.
Befehls-Hooks führen Shell-Befehle oder Skripte aus.
{ "type": "command", "command": "bash /path/to/script.sh", "timeout": 60, "enabled": true }
Prompt-Hooks werden als Prompts in natürlicher Sprache für ein Sprachmodell ausgewertet.
{ "type": "prompt", "prompt": "Is this command safe? $ARGUMENTS", "timeout": 30 }
Um den Hook nur für bestimmte Tools auszuführen, platzieren Sie die Tool-Namen oder -Muster im Feld matcher. Verwenden Sie zum Beispiel zum Abgleichen aller SQL-Tools "matcher": "SQL*". Sie können reguläre Ausdrücke verwenden, um mehreren Tools abzugleichen.
Muster |
Übereinstimmungen |
|---|---|
|
Alle Tools |
|
Nur Bash |
|
Bearbeiten oder Schreiben |
|
Alle MCP-Tools |
|
NotebookEdit, NotebookExecute |
Schreiben von Hook-Skripten¶
Hook-Skripte akzeptieren JSON-Eingaben mittels der Standardeingabe und geben JSON-Ausgaben über die Standardausgabe zurück. Die Ausgabe enthält ein Feld, das angibt, ob der Vorgang zulässig oder unzulässig ist. Optional kann das Hook-Skript eine geänderte Version der Tool-Eingabe zurückgeben.
Beispieleingabe:
{
"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"
}
}
Beispielausgabe:
{
"decision": "allow",
"systemMessage": "Note: This operation was validated.",
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"updatedInput": {
"command": "ls -la --color=never"
}
}
}
Der Rückgabecode gibt an, ob der Vorgang blockiert werden soll:
0: Nicht blockieren
2: Blockieren
Diese Informationen können auch als Teil der JSON-Ausgabe zurückgegeben werden, wie unten gezeigt.
{
"decision": "block",
"reason": "Operation not allowed"
}
Die folgenden Umgebungsvariablen sind in Hook-Skripten verfügbar:
Variable |
Beschreibung |
|---|---|
|
Pfad zum Projektverzeichnis |
|
|
|
Persistenter env-Dateipfad |
Hook-Beispiele¶
Die folgenden Beispiele veranschaulichen die mögliche Ausgabe für häufige Hook-Anwendungsfälle.
Tool-Eingabe ändern¶
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"updatedInput": {
"command": "modified command"
}
}
}
Kontext hinzufügen¶
{
"hookSpecificOutput": {
"hookEventName": "PostToolUse",
"additionalContext": "Note: File was recently modified."
}
}
Systemmeldungen anzeigen¶
{
"systemMessage": "Warning: This operation may take a while."
}
Berechtigungsentscheidungen¶
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "allow",
"permissionDecisionReason": "Auto-approved by policy"
}
}
Remote-Hooks¶
Sie können Skripte in Git-Repositorys referenzieren, wie unten gezeigt:
{
"type": "command",
"command": "bash",
"source": {
"source": "github:org/hooks-repo/scripts/validate.sh",
"ref": "main"
}
}
Best Practices für Hooks¶
Hooks sollten schnell sein: Das Timeout beträgt standardmäßig 60 Sekunden
Fehler sollten optimal gehandhabt werden: „exit 0“ zurückgeben, wenn nicht sicher
Protokolle für Debugging: Zur Problembehandlung in Dateien schreiben
Matcher verwenden: Auf bestimmte Tools abzielen, nicht auf alle
Gründlich testen: Hook-Manager verwenden, um das Verhalten zu überprüfen
Model Context Protocol (MCP)¶
Sie können Cortex Code CLI anhand des Model Context Protocol (MCP) mit externen Tools und Datenquellen verknüpfen. MCP ist ein offener Standard für die Verknüpfung von AI-Agenten mit externen Tools wie GitHub, Jira und Datenbanken. Sobald sie konfiguriert sind, stellen MCP-Server Cortex Code den Zugriff auf gehostete Tools zur Verfügung, die über die integrierten Funktionen hinausgehen.
Transporttypen¶
Cortex Code unterstützt drei MCP-Transporttypen:
Typ |
Anwendungsfall |
Verbindung |
|---|---|---|
stdio |
Lokale Tools, CLI-Wrapper |
Subprozesse mit stdin/stdout |
http |
Webservices, APIs |
HTTP-Anforderungen |
sse |
Echtzeitdienste |
Vom Server gesendete Ereignisse |
Sie können OAuth für die Authentifizierung bei HTTP MCP-Servern verwenden. Wenn Sie zum ersten Mal eine Verbindung zu einem -Server herstellen, der für OAuth konfiguriert ist, öffnet Cortex Code CLI ein Browserfenster, in dem sich der Benutzer authentifiziert. Das resultierende Token wird in ~/.snowflake/cortex/mcp_oauth/ gespeichert und bei Bedarf automatisch aktualisiert. Nachfolgenden sehen Sie ein Beispiel für eine OAuth-Konfiguration:
{
"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"
}
}
Verwalten von MCP-Servern¶
Sie können den Befehl /mcp in einer interaktiven Cortex Code CLI-Sitzung ausgeben, um einen interaktiven MCP-Statusbetrachter zu öffnen. Verwenden Sie den Befehl cortex mcp, um MCP-Serverkonfigurationen über die Befehlszeile zu verwalten.
Befehl |
Beschreibung |
|---|---|
Befehlszeile |
Beschreibung |
cortex mcp add |
Neuen Server hinzufügen (siehe unten) |
cortex mcp list |
Konfigurierte Server auflisten |
cortex mcp get <server> |
Details eines bestimmten Servers abrufen |
cortex mcp remove <server> |
Einen Server entfernen |
cortex mcp start <server> |
Status des Servers und verfügbare Tools prüfen |
Hinzufügen eines Servers¶
Der Befehl cortex mcp add akzeptiert Optionen zum Konfigurieren von Servern.
cortex mcp add <name> <command> [args...]
Optionen:
--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
Bemerkung
MCP-Tools werden, um Konflikte zu vermeiden, unter Verwendung des folgenden Namespaces zugeordnet:
mcp__{server-name}__{tool-name}
Beispiel: Ein Tool mit dem Namen search vom github-Server erhält den Namen mcp__github__search.
MCP-Konfiguration¶
Die MCP-Serverkonfiguration wird in ~/.snowflake/cortex/mcp.json unter dem Schlüssel mcpServers gespeichert. Das folgende Beispiel zeigt die Struktur einer Konfigurationsdatei mit einem einzelnen MCP-Server:
{
"mcpServers": {
"server-name": {
"type": "stdio",
"command": "command-to-run",
"args": ["arg1", "arg2"]
}
}
}
Umgebungsvariablen¶
Verwenden Sie die Syntax ${VAR} oder $VAR, um die Werte von Umgebungsvariablen in die Konfigurationsdatei einzufügen.
{
"mcpServers": {
"my-server": {
"type": "http",
"url": "https://api.example.com",
"headers": {
"Authorization": "Bearer ${MY_API_TOKEN}"
}
}
}
Wichtig
Best Practice ist es, Umgebungsvariablen für Anmeldeinformationen zu verwenden. Nehmen Sie niemals eine Hartcodierung von Token in mcp.json vor. Fügen Sie dem Profil Ihrer Shell eine Zeile hinzu, z. B. ~/.bashrc oder ~/.zshrc, und zwar wie folgt:
export GITHUB_TOKEN="your_token_here"
Konfiguration über die Befehlszeile¶
Verwenden Sie zum Hinzufügen eines MCP-Servers über die Befehlszeile den Befehl cortex mcp add. Beispiel:
Aktion |
Befehl |
|---|---|
stdio-Server hinzufügen |
|
HTTP-Server hinzufügen |
|
Mit Umgebungsvariablen hinzufügen |
|
Mit Headern hinzufügen |
|
Verwenden von MCP-Tools¶
Sobald sie konfiguriert sind, stehen MCP-Tools automatisch in Cortex Code CLI-Sitzungen zur Verfügung. Sie rufen sie anhand von Befehlen in natürlicher Sprache auf:
Show me recent GitHub pull requests
Create a Jira ticket for this bug
Query the PostgreSQL database for user activity
Bei der erstmaligen Verwendung werden Berechtigungen angefordert. Konfigurieren von Standards in ~/.snowflake/cortex/permissions.json:
{
"allow": ["mcp__github__read_file", "mcp__github__list_repos"],
"deny": ["mcp__github__delete_repo"]
}
MCP-Beispielkonfigurationen¶
Die folgenden Beispiele veranschaulichen MCP-Serverkonfigurationen für gängige Anwendungsfälle.
Git-Server (stdio)¶
{
"mcpServers": {
"git": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-server-git", "--repository", "/path/to/repo"]
}
}
}
HTTP API mit OAuth¶
{
"mcpServers": {
"my-api": {
"type": "http",
"url": "https://api.example.com/mcp",
"oauth": {
"client_id": "my-client-id",
"redirect_port": 8585,
"scope": "openid mcp"
}
}
}
}
SSE-Server mit Headern¶
{
"mcpServers": {
"realtime": {
"type": "sse",
"url": "https://realtime.example.com/events",
"headers": {
"Authorization": "Bearer ${API_TOKEN}",
"X-Custom-Header": "value"
},
"timeout": 30000
}
}
}
Sourcegraph-Integration¶
{
"mcpServers": {
"sourcegraph": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@sourcegraph/mcp-server"],
"env": {
"SRC_ACCESS_TOKEN": "${SOURCEGRAPH_TOKEN}",
"SRC_ENDPOINT": "https://sourcegraph.company.com"
}
}
}
}
Problembehandlung für MCP¶
- Server stellt keine Verbindung her
Überprüfen Sie
/mcpwährend einer Sitzung, um sicherzustellen, dass es aufgeführt ist.Verwenden Sie
cortex mcp start <-Server>, um die Konnektivität zu testen.Stellen Sie sicher, dass die Anmeldeinformationen in den Umgebungsvariablen korrekt festgelegt sind.
Sehen Sie sich
cat ~/.snowflake/cortex/logs/mcp.logauf Hinweise an.
- Tools werden nicht angezeigt
Führen Sie
cortex mcp listaus, um die Konfiguration zu prüfen.Stellen Sie sicher, dass die Tool-Namen gültig sind (nur alphanumerische Zeichen, Unterstriche und Bindestriche enthalten).
Prüfen Sie, ob die Tool-Namen kürzer als 64 Zeichen sind.
- Probleme mit OAuth
Zwischengespeicherte Token löschen:
rm ~/.snowflake/cortex/mcp_oauth/{server}*Erneut verbinden, um neuen OAuth-Fluss auszulösen
Prüfen Sie, ob der Umleitungport verfügbar ist (Standard 8585)
- Umgebungsvariablen werden nicht erweitert
${VAR}-Syntax (mit Klammern) anstatt$VARverwendenSicherstellen, dass die Variable in der Shell festgelegt ist (
echo $VAR)Prüfen Sie auf Rechtschreibfehler in Variablennamen
Best Practices für MCP¶
Verwenden Sie beschreibende Servernamen: Machen Sie den Namespace des Tools deutlich
Legen Sie die entsprechenden Timeouts fest: Die Standardeinstellung ist 10 Minuten für das Freigabeangebot des Tools
Sichere Anmeldeinformationen: Verwenden Sie Umgebungsvariablen, keine hartcodierten Geheimnisse
Verbindungen testen: Verwenden Sie
cortex mcp start, bevor Sie sich auf einen Server verlassen.