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.
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-adapterBasis-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 abrufencreate_support_ticket: Support-Ticket in Zendesk/Jira erstellenanalyze_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.