Zum Inhalt springen

Tools, Resources & Prompts

Wissen

Jeder MCP-Server kann drei Arten von Fähigkeiten bereitstellen. Diese werden Primitives genannt und bilden das Fundament jeder MCP-Integration. Jedes Primitive hat einen klaren Zweck und eine definierte Interaktionsweise.

Primitive 1: Tools

Tools sind Funktionen, die das LLM aktiv ausführen kann. Sie verändern Zustand oder führen Berechnungen durch.

Beispiele für Tools:

  • create_issue -- Erstellt ein Jira-Ticket
  • send_message -- Sendet eine Slack-Nachricht
  • run_query -- Führt eine Datenbank-Abfrage aus
  • create_branch -- Erstellt einen Git-Branch

Tool-Definition

Ein Tool wird im Server mit einem JSON-Schema definiert:

server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [
    {
      name: "create_issue",
      description: "Erstellt ein neues Issue im Projektmanagement-Tool",
      inputSchema: {
        type: "object",
        properties: {
          title: {
            type: "string",
            description: "Titel des Issues"
          },
          priority: {
            type: "string",
            enum: ["low", "medium", "high", "critical"],
            description: "Prioritaet des Issues"
          }
        },
        required: ["title"]
      }
    }
  ]
}));

Wie Tools aufgerufen werden

Der Ablauf bei einem Tool-Call:

  1. Das LLM erkennt, dass ein Tool hilfreich wäre
  2. Es sendet einen tools/call-Request mit dem Tool-Namen und Argumenten
  3. Der Server führt die Funktion aus
  4. Der Server sendet das Ergebnis zurück
  5. Das LLM verarbeitet das Ergebnis und antwortet dem Nutzer

iHuman-in-the-Loop

Bei sensiblen Tools (z.B. Daten löschen, Nachrichten senden) kann der Host den Nutzer um Bestätigung bitten, bevor der Tool-Call ausgeführt wird. Das ist eine wichtige Sicherheitsfunktion.

Primitive 2: Resources

Resources sind Daten, die das LLM lesen kann -- ohne etwas zu verändern. Sie erweitern den Kontext des LLMs.

Beispiele für Resources:

  • project://PROJ-123/status -- Aktueller Status eines Projekts
  • confluence://page/12345 -- Inhalt einer Wiki-Seite
  • git://repo/main/README.md -- Dateiinhalt aus einem Repository
  • metrics://dashboard/sales -- Aktuelle Verkaufszahlen

Resource-Definition

server.setRequestHandler(ListResourcesRequestSchema, async () => ({
  resources: [
    {
      uri: "project://current/sprint",
      name: "Aktueller Sprint",
      description: "Status und Aufgaben des aktuellen Sprints",
      mimeType: "application/json"
    }
  ]
}));

Primitive 3: Prompts

Prompts sind vordefinierte Prompt-Templates, die der Server bereitstellt. Sie helfen Nutzern, wiederkehrende Aufgaben effizient zu formulieren.

Beispiele für Prompts:

  • code-review -- Template für strukturiertes Code-Review
  • bug-report -- Template für Bug-Reports mit allen nötigen Infos
  • meeting-summary -- Template zum Zusammenfassen von Meeting-Notizen

Prompt-Definition

server.setRequestHandler(ListPromptsRequestSchema, async () => ({
  prompts: [
    {
      name: "code-review",
      description: "Strukturiertes Code-Review für einen Pull Request",
      arguments: [
        {
          name: "pr_number",
          description: "Nummer des Pull Requests",
          required: true
        },
        {
          name: "focus",
          description: "Worauf soll der Review fokussiert sein?",
          required: false
        }
      ]
    }
  ]
}));

Wie Prompts genutzt werden

Im Gegensatz zu Tools werden Prompts vom Nutzer ausgewählt, nicht vom LLM. In Claude Desktop findest du sie zum Beispiel über das /-Menü:

Nutzer: /code-review pr_number=42 focus=security

-> Der Server liefert ein vorbereitetes Prompt-Template:

"Fuehre ein Code-Review für PR #42 durch.
Fokus: Security
Prüfe auf:
- SQL Injection
- XSS-Schwachstellen
- Unsichere Abhaengigkeiten
- Fehlende Input-Validierung"

Verstehen

Unterschied zwischen Tools und Resources

AspektToolsResources
ZweckAktionen ausführenDaten bereitstellen
SeiteneffekteJa (verändern Zustand)Nein (nur lesen)
AuslöserLLM entscheidetLLM oder Nutzer
AnalogiePOST/PUT/DELETEGET

Die drei Primitives im Zusammenspiel

Ein einzelner MCP-Server kombiniert oft alle drei Primitives. Hier ein Beispiel für einen GitHub-MCP-Server:

PrimitiveBeispiele
Toolscreate_issue, merge_pr, create_branch
Resourcesrepo://owner/name/README.md, pr://123/diff
Promptscode-review, release-notes, bug-triage

Ein MCP-Server bietet Zugriff auf den aktuellen Sprint-Status in Jira. Ist das ein Tool oder eine Resource?

Anwenden

Vervollständige die MCP-Tool-Definition:

{ name: "send_message", description: "Sendet eine Nachricht an einen Slack-Channel", inputSchema: { type: "", properties: { channel: { type: "string" }, text: { type: "string" } } } }

Ordne die Beispiele dem richtigen MCP-Primitive zu:

Jira-Ticket erstellen
Code-Review-Template
Sprint-Status lesen
Slack-Nachricht senden
Tool
 
Resource
 
Prompt
 
Tool
 

Reflektieren

Tools, Resources und Prompts bilden die drei Primitives von MCP: Aktionen ausführen, Daten lesen und Templates bereitstellen. Zusammen decken sie alle Interaktionsformen ab, die ein KI-Agent mit externen Systemen braucht. Im nächsten Abschnitt baust du deinen eigenen MCP-Server.