Zum Inhalt springen

MCP-Server anbinden

Wissen

Dein Agent hat jetzt einen System Prompt und eine Tool-Definition. Aber bisher ist das Tool nur eine Beschreibung -- es tut noch nichts. In diesem Schritt verbindest du deinen Agent mit einem echten MCP-Server, sodass er reale Fähigkeiten bekommt.

Warum MCP statt eigener Tool-Implementierung?

Du könntest jedes Tool selbst implementieren -- eine Funktion schreiben, die Dateien liest, eine die APIs aufruft, eine die Datenbanken abfragt. Aber das skaliert nicht. MCP (Model Context Protocol) löst dieses Problem:

  • Wiederverwendbarkeit: Ein MCP-Server kann von jedem Agent genutzt werden, egal welches Framework
  • Standardisierung: Einheitliche Schnittstelle für alle Tools
  • Ökosystem: Hunderte fertige MCP-Server für gängige Dienste (GitHub, Slack, Datenbanken, Dateisysteme)
  • Entkopplung: Der Agent muss nicht wissen, wie ein Tool intern funktioniert

MCP-Server als Tool registrieren

Die Anbindung läuft in drei Schritten:

Schritt 1 -- MCP-Server auswählen oder starten

# Beispiel: Einen lokalen Dateisystem-MCP-Server starten
npx @modelcontextprotocol/server-filesystem /pfad/zum/projekt

Schritt 2 -- Client-Verbindung konfigurieren

# Python mit MCP Client
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

# Server-Konfiguration
server_params = StdioServerParameters(
    command="npx",
    args=[
        "@modelcontextprotocol/server-filesystem",
        "/pfad/zum/projekt"
    ]
)

# Verbindung herstellen
async with stdio_client(server_params) as (read, write):
    async with ClientSession(read, write) as session:
        # Session initialisieren
        await session.initialize()

        # Verfügbare Tools abfragen
        tools = await session.list_tools()
        print(f"Verfügbare Tools: {[t.name for t in tools.tools]}")

Schritt 3 -- Tools im Agent verfügbar machen

# MCP-Tools in das Anthropic-Format konvertieren
def mcp_to_anthropic_tools(mcp_tools):
    return [
        {
            "name": tool.name,
            "description": tool.description,
            "input_schema": tool.inputSchema
        }
        for tool in mcp_tools.tools
    ]

# Dem Agent die MCP-Tools geben
anthropic_tools = mcp_to_anthropic_tools(tools)

Verstehen

Die Konfigurationsdatei

In der Praxis konfigurierst du MCP-Server über eine JSON-Datei. Das ist derselbe Ansatz, den Claude Code, Cursor und andere Tools nutzen:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "@modelcontextprotocol/server-filesystem",
        "/pfad/zum/projekt"
      ]
    },
    "github": {
      "command": "npx",
      "args": ["@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..."
      }
    }
  }
}

Verbindung testen

Bevor du den Agent losschickst, teste immer die Verbindung:

# Schnelltest: Kann der Agent den Server erreichen?
async def test_mcp_connection(session):
    try:
        tools = await session.list_tools()
        print(f"Verbindung OK. {len(tools.tools)} Tools verfügbar:")
        for tool in tools.tools:
            print(f"  - {tool.name}: {tool.description[:60]}...")
        return True
    except Exception as e:
        print(f"Verbindung fehlgeschlagen: {e}")
        return False

Typische Fehlerquellen:

  • Der MCP-Server ist nicht gestartet oder nicht installiert
  • Fehlende Umgebungsvariablen (z.B. API-Tokens)
  • Falscher Pfad in der Konfiguration
  • Firewall blockiert die Kommunikation

Anwenden

Vervollständige die MCP-Server-Konfiguration für einen GitHub-Server:

"github": { "command": "",
"env": { "": "ghp_dein_token"

Reflektieren

Was ist der größte Vorteil von MCP gegenüber selbst implementierten Tool-Funktionen?