KI & Automation16 min Lesezeit23.11.2025

Model Context Protocol: moderne MCP-Server für eigene KI-Agents bauen

Mit dem Model Context Protocol (MCP) schreiben Sie eine Tool-Schnittstelle einmal und binden sie an Claude, ChatGPT oder lokale Modelle an. Aufbau eines eigenen MCP-Servers, Code-Beispiele und Regeln für den Zugriffsschutz.

Felix Astner
Felix AstnerSoftware-Entwickler & KI-Spezialist

Ein KI-Assistent, der direkt auf Ihre Shopware-Datenbank zugreift, Bestellungen ausliest, Support-Tickets erstellt oder Analytics-Reports generiert, gesteuert per Text. Möglich macht das Model Context Protocol (MCP), ein Standard von Anthropic (Entwickler von Claude), der im November 2024 veröffentlicht wurde. Was APIs für Webdienste sind, ist MCP für Künstliche Intelligenz: ein Protokoll, das LLMs wie Claude, ChatGPT oder lokale Modelle mit externen Systemen, Tools und Datenquellen verbindet. Bei CODING 9 haben wir MCP bereits in mehreren Projekten implementiert. Dieser Guide zeigt, wie Sie moderne MCP-Server bauen und bestehende Tools anbinden.

Was ist das Model Context Protocol (MCP)?

MCP löst ein wiederkehrendes Problem der KI-Integration: Jedes LLM hat eigene APIs, Formate und Schnittstellen. Wenn Sie heute einen Chatbot mit Zugriff auf Ihre Datenbank bauen, müssen Sie ihn für Claude, ChatGPT, Gemini etc. separat entwickeln. MCP schafft einen universellen Standard: Schreiben Sie einen MCP-Server, und er funktioniert mit allen MCP-kompatiblen Clients.

Kernkonzepte

MCP folgt einem klassischen Client-Server-Modell. Der Server hält die Tools, der Client fragt die verfügbaren Tools ab und ruft sie im Auftrag des Modells auf. Vier Begriffe genügen für den Einstieg:

  • MCP Server: Stellt Tools (Funktionen) bereit, z. B. "Datenbankabfrage", "E-Mail senden", "CRM-Update"

  • MCP Client: Die KI-Anwendung (Claude Desktop, Custom ChatGPT, etc.), die diese Tools nutzt

  • Tools: Funktionen mit definierten Input/Output-Schemas (ähnlich wie OpenAPI/Swagger für REST)

  • Transports: Kommunikationswege, also HTTP/SSE (Server-Sent Events) oder stdio (lokale Prozesse)

Was MCP gegenüber Einzelintegrationen spart

1. Vendor Lock-in vermeiden

Mit MCP sind Sie nicht an ein LLM gebunden. Wechseln Sie von ChatGPT zu Claude oder einem lokalen Llama-Modell, läuft Ihr MCP-Server unverändert weiter. Das hilft bei langfristigen Projekten und bei Compliance-Anforderungen (z. B. DSGVO-konforme, EU-gehostete Modelle).

2. Wiederverwendbare Tool-Bibliotheken

Einmal gebaut, überall einsetzbar. Ein MCP-Server für "Shopware-Produktsuche" kann in Claude Desktop, Ihrer Custom-App und sogar in CI/CD-Pipelines verwendet werden.

3. Sicherheit & Zugriffskontrolle

Statt dem LLM direkten DB-Zugriff zu geben (gefährlich!), kontrollieren Sie Permissions über den MCP-Server: "Leserechte ja, Löschen nein". Damit bietet MCP eine einzige Stelle, an der Rechte definiert und Aufrufe protokolliert werden.

Praxis-Beispiel: MCP-Server für E-Commerce-Daten

Ein Beispiel aus der Praxis: ein MCP-Server, der Shopware-Blogposts durchsuchbar macht (genau so haben wir es bei CODING 9 implementiert).

Use Case: KI-gestützter Blog-Assistant

Angenommen, Sie fragen Claude: "Welche Artikel haben wir über Shopware 6 Performance geschrieben?" Ohne MCP müssten Sie manuell suchen. Mit MCP antwortet Claude direkt:

User: "Zeig mir unsere neuesten Artikel über KI im E-Commerce"
Claude: [Ruft MCP-Tool "search_blog_posts" auf]
        -> Parameter: {query: "KI E-Commerce", sortBy: "date"}
Claude: "Ich habe 3 relevante Artikel gefunden:
        1. 'KI-Data-Selector für Shopware' (Nov 11, 2025)
        2. 'Vector Search im E-Commerce' (Nov 19, 2025)
        ..."

Schritt 1: MCP-Server mit TypeScript/Node.js aufsetzen

Installation der offiziellen SDK:

npm install @modelcontextprotocol/sdk
# Oder mit Vercel Adapter für Next.js:
npm install @vercel/mcp-adapter

Basis-Server-Code (Next.js API Route):

// app/api/mcp/[transport]/route.ts
import { createMcpHandler } from '@vercel/mcp-adapter';
import { z } from 'zod';

const handler = createMcpHandler(
  (server) => {
    // Tool 1: Blog-Posts durchsuchen
    server.tool(
      'search_blog_posts',
      'Sucht Blog-Artikel nach Stichworten mit Relevanz-Scoring',
      {
        query: z.string().min(1).max(500).describe('Suchanfrage'),
        category: z.string().optional().describe('Kategorie-Filter'),
        sortBy: z.enum(['relevance', 'date', 'title']).default('relevance')
      },
      async ({ query, category, sortBy }) => {
        // Ihre Suchlogik (z.B. Elasticsearch, Vector Search, SQL)
        const results = await searchBlogPosts(query, { category, sortBy });

        return {
          content: [{
            type: 'text',
            text: JSON.stringify(results, null, 2)
          }]
        };
      }
    );

    // Tool 2: Einzelnen Post abrufen
    server.tool(
      'get_blog_post',
      'Lädt vollständigen Blog-Artikel mit Markdown-Content',
      {
        slug: z.string().regex(/^[a-z0-9-]+$/).describe('URL-Slug des Posts')
      },
      async ({ slug }) => {
        const post = await getBlogPostBySlug(slug);

        return {
          content: [{
            type: 'text',
            text: JSON.stringify(post, null, 2)
          }]
        };
      }
    );
  },
  {}, // Server-Optionen
  {
    basePath: '/api/mcp', // Wichtig für [transport]-Route!
    maxDuration: 60,
    verboseLogs: true
  }
);

export { handler as GET, handler as POST };

Schritt 2: Client-Konfiguration (Claude Desktop)

Fügen Sie Ihren MCP-Server zur Claude Desktop Config hinzu:

// ~/.config/claude/claude_desktop_config.json (macOS/Linux)
// oder %APPDATA%\Claude\claude_desktop_config.json (Windows)
{
  "mcpServers": {
    "blog-search": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://coding9.de/api/mcp/mcp"
      ]
    }
  }
}

Nach einem Neustart von Claude Desktop erscheint ein Werkzeug-Icon in der Eingabezeile. Sobald es da ist, sind Ihre Tools geladen.

Advanced: Multi-Tool MCP-Server für E-Commerce

Ein professioneller E-Commerce-MCP-Server könnte folgende Tools anbieten:

  • get_product_inventory: Lagerbestand abrufen

  • create_support_ticket: Support-Ticket in Zendesk/Jira erstellen

  • analyze_sales_data: SQL-Abfragen auf Analytics-DB (read-only!)

  • send_customer_email: Personalisierte E-Mails via SMTP/SendGrid

Beispiel-Implementation für Produktsuche mit Shopware API:

server.tool(
  'search_products',
  'Durchsucht Shopware-Produktkatalog',
  {
    query: z.string().describe('Suchbegriff'),
    limit: z.number().int().min(1).max(50).default(10)
  },
  async ({ query, limit }) => {
    const response = await fetch('https://shop.example.com/store-api/product', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'sw-access-key': process.env.SHOPWARE_ACCESS_KEY!
      },
      body: JSON.stringify({
        limit,
        filter: [{ type: 'contains', field: 'name', value: query }]
      })
    });

    const data = await response.json();

    return {
      content: [{
        type: 'text',
        text: `Gefunden: ${data.total} Produkte\n\n${
          data.elements.map((p: any) =>
            `- ${p.name} (€${p.price[0].gross}, Lager: ${p.availableStock})`
          ).join('\n')
        }`
      }]
    };
  }
);

Sicherheit & Best Practices

1. API-Key-Authentifizierung

Schützen Sie Ihren MCP-Server mit API-Keys:

export async function POST(req: Request) {
  const authHeader = req.headers.get('Authorization');
  if (authHeader !== `Bearer ${process.env.MCP_API_KEY}`) {
    return new Response('Unauthorized', { status: 401 });
  }

  return handler(req);
}

2. Input Validation mit Zod

Immer strikt validieren, denn LLMs erzeugen auch fehlerhafte Inputs:

const EmailSchema = z.object({
  to: z.string().email(),
  subject: z.string().max(200),
  body: z.string().max(5000)
});

server.tool('send_email', '...', EmailSchema, async (params) => {
  // params ist typsicher und validiert!
});

3. Rate Limiting & Logging

  • Begrenzen Sie Tool-Aufrufe (z. B. 100/Stunde pro Client)

  • Loggen Sie alle Requests (Who, What, When) für Auditing

4. Read-Only wo möglich

Präferieren Sie lesende Tools. Schreibzugriff nur mit expliziter User-Confirmation (z. B. "Soll ich wirklich alle Bestellungen stornieren?").

MCP vs. Function Calling (OpenAI/Anthropic): Was ist der Unterschied?

Beide Ansätze erlauben LLMs, externe Tools aufzurufen. Der Unterschied liegt darin, wo die Tool-Definition liegt:

  • Function Calling: Vendor-spezifisch (die OpenAI API hat ein eigenes Format, Anthropic ein anderes). Tools müssen in jeder API-Anfrage mitgesendet werden.

  • MCP: Standardisiert, vendor-agnostisch. Tools werden vom MCP-Server bereitgestellt, nicht in Prompts eingebettet. Langlebiger und wartbarer.

Empfehlung: Für Prototypen ist Function Calling ok. Für Production-Systeme setzen Sie auf MCP.

Wie MCP die Fähigkeiten von KI-Agenten in der Suche verändert

Eine klassische Suche liefert eine Ergebnisliste. Ein KI-Agent mit MCP-Zugriff geht einen Schritt weiter: Er ruft mehrere Tools nacheinander auf, verknüpft deren Ergebnisse und beantwortet die eigentliche Frage.

Ein Beispiel aus dem Shop: Auf die Frage "Welche Artikel aus der Herbstkollektion sind unter 80 Euro noch auf Lager?" ruft der Agent zuerst die Produktsuche auf, danach den Lagerbestand, und filtert das Ergebnis. Ohne MCP müsste jede dieser Abfragen für jedes KI-Tool einzeln verdrahtet werden.

Drei Dinge ändern sich damit für die Suche:

  • Sie wird mehrstufig. Der Agent darf nachschlagen, zurückfragen und die Anfrage präzisieren, statt eine einzige Query abzusetzen.

  • Sie arbeitet auf Live-Daten. Preise, Bestände und Bestellstatus liest der Agent zur Laufzeit aus dem angebundenen System aus.

  • Sie bleibt prüfbar. Welche Tools ein Agent sehen und aufrufen darf, entscheidet der Server, und jeder Aufruf lässt sich protokollieren.

Für die Suche im eigenen Datenbestand kombinieren wir MCP häufig mit einer semantischen Suche. Wie die technisch aufgebaut ist, steht im Beitrag zu Vektorsuche und Embeddings. Der MCP-Server stellt diese Suche dann als Tool bereit, das sich mit allen MCP-fähigen KI-Modellen nutzen lässt.

Real-World Use Cases aus unseren CODING 9-Projekten

1. Automatisierter E-Commerce-Support

MCP-Server mit Tools: get_order_status, cancel_order, initiate_return. Claude beantwortet Kundenanfragen wie "Wo ist meine Bestellung #12345?" eigenständig, die Zahl der Tickets ist dadurch um 70% gesunken.

2. DevOps-Assistent

Tools: deploy_to_staging, check_server_health, rollback_deployment. Entwickler können natürlichsprachlich deployen: "Deploy branch feature-xyz to staging".

3. Content-Management

MCP für Shopware CMS: create_blog_post, translate_content, optimize_seo. Marketing-Teams pflegen Inhalte ohne technisches Know-how.

MCP Ecosystem: Tools & Ressourcen

  • Offizielle SDK: @modelcontextprotocol/sdk (TypeScript/Node.js)

  • Python SDK: mcp (via pip)

  • Community Servers: GitHub, Slack, Google Drive, PostgreSQL, etc. (github.com/modelcontextprotocol)

  • Claude Desktop: Native MCP-Unterstützung (claude.ai/download)

Was MCP für Ihre Integrationen bedeutet

Das Model Context Protocol beschreibt, wie ein LLM Tools findet und aufruft. Die Tool-Definition liegt dabei im Server, nicht im Prompt. Genau wie REST-APIs Webdienste untereinander austauschbar gemacht haben, macht MCP die Anbindung von Tools zwischen Modellen austauschbar. Für Unternehmen bedeutet das:

  • Weniger Vendor Lock-in, weil sich das LLM ohne Umbau der Tools wechseln lässt

  • Tool-Bibliotheken, die im nächsten Projekt ohne Anpassung weiterlaufen

  • Kontrollierte Tool-Ausführung, weil die Rechte im Server liegen und nicht im Prompt

Bei CODING 9 konzipieren und bauen wir MCP-Server für Ihre Anwendungen, ob E-Commerce, SaaS oder interne Tools. Welche KI-Technologien dabei zum Einsatz kommen, hängt von Ihren Daten und Ihrem Hosting ab; einen Überblick gibt unsere Seite zur KI-Integration. Kontaktieren Sie uns für ein Strategiegespräch!

Haben Sie bereits MCP-Server im Einsatz? Schreiben Sie uns, welche Tools Sie angebunden haben.

Häufig gestellte Fragen

Wie beeinflusst MCP die Fähigkeiten von KI-Agenten in der Suche?

Über MCP kann ein KI-Agent mehrere Tools nacheinander aufrufen und die Ergebnisse verknüpfen, statt eine einzige Suchanfrage abzusetzen. Er liest Preise, Bestände oder Bestellstatus zur Laufzeit aus dem angebundenen System aus und beantwortet damit auch Fragen, die mehrere Datenquellen berühren. Welche Tools er dabei sehen und aufrufen darf, entscheidet der MCP-Server.

Was ist der Unterschied zwischen MCP und Function Calling?

Beim Function Calling liegt die Tool-Definition im Prompt und im Format des jeweiligen Anbieters, etwa der OpenAI API. Bei MCP liegt sie im Server und ist anbieterunabhängig. Für Prototypen reicht Function Calling, für Systeme mit längerer Laufzeit ist MCP die wartbarere Variante.

Welche KI-Modelle lassen sich per MCP anbinden?

Jeder MCP-fähige Client kann Ihren Server nutzen, darunter Claude Desktop, Claude Code und eine wachsende Zahl weiterer Anwendungen. Lokale Modelle lassen sich über MCP-Clients ebenfalls anbinden. Ein Wechsel des Modells lässt Ihren MCP-Server unverändert.

Teilen Sie diesen Artikel: