Tools/KI-Agenten

MCP-Referenzserver: was sie zeigen und was sie auslassen

Ein Review von modelcontextprotocol/servers: sieben Referenzserver, was jeder einzelne lehrt, die SDK-Versionen dahinter und warum keiner in die Produktion gehört.

Art
Protocol tooling
Preis
MIT

··9 Min. Lesezeit

  • MCP
  • Reference servers
  • Tool protocol
  • Server SDKs
Sieben Referenzserver, die von einem einzigen MCP-Client über Stdio ausgefächert werden

Das Wichtigste in Kürze

  • Sieben Referenzserver liegen unter src/, vier in TypeScript und drei in Python; das README bezeichnet sie selbst als Lehrbeispiele, nicht als Produktionscode.
  • Die Python-Server verlangen weiterhin mcp >=1.29.0 und <2, während die Python-SDK seit dem 2. Oktober 2026 bei 2.3.0 steht — wer sie kopiert, lernt die 1.x-API.
  • Das Repositorium ist ausdrücklich nicht für Schwachstellmeldungen vorgesehen; SECURITY.md verweist Funde an die SDK-Repositorien.
  • Pakete werden aus CI per OIDC Trusted Publishing mit Provenance-Attestaten veröffentlicht, ganz ohne Registry-Tokens.
  • Der Pfad-Whitelist des Filesystem-Servers ist die einzige Sandbox der Sammlung, und der Client kann sie zur Laufzeit über Roots ersetzen.

modelcontextprotocol/servers ist die Referenzsammlung für das Model Context Protocol: sieben kleine Server, die von der MCP-Steuerungsgruppe gepflegt werden und von denen jeder einen Teil des Protokolls demonstriert, nicht etwa einen Job gut erledigt. Als Produkt gelesen ist es Lehrmaterial mit einem ungewöhnlich ehrlichen README, und die hier vertretene Position lautet: lesen und lokal ausführen, aber niemals ausrollen — das Repositorium sagt wortwörtlich, dass die Server keine Produktionslösung sind, und die Sicherheitsrichtlinie lehnt Schwachstellmeldungen dagegen ab. Gut ist die Sammlung darin, im lauffähigen Code zu zeigen, was ein Server implementieren muss, geschrieben von den Verfassern der Spezifikation.

Sie steht zwischen der Spezifikation auf modelcontextprotocol.io und den zehn offiziellen SDKs und konkurriert nicht mit der MCP Registry, in der veröffentlichte Server zum praktischen Gebrauch gelistet sind. Nichts hier ersetzt einen Suchindex, ein Browser-Werkzeug oder eine Ticket-Integration. Die Sammlung löste ein früheres Sammelsurium einzelner Beispiele ab, von denen die meisten in einem separaten Archivrepositorium liegen und weiterhin in alten Anleitungen auftauchen.

Was es ist

Ein npm-Workspace mit sieben Paketen unter src/, veröffentlicht auf npm als @modelcontextprotocol/server-* und auf PyPI als mcp-server-*. Vier Server sind TypeScript, drei sind Python, und jeder isoliert ein anderes Protokollmerkmal: Zugriffskontrolle, Prompts und Ressourcen, ein Wissensgraph, ein Werkzeug, das seine eigene Ausgabe umschreibt, Web-Abruf, Repository-Operationen, Zeitzonen.

  • Rund 91.100 Stars und 11.800 Forks Anfang Oktober 2026, mit 4.194 Commits auf main.
  • Sieben Referenzserver in src/: everything, fetch, filesystem, git, memory, sequentialthinking und time.
  • Dreizehn eingestellte Server, darunter GitHub, Slack, PostgreSQL, SQLite, Puppeteer und Brave Search, zogen nach servers-archived; den Brave-Server betreut nun Brave selbst.
  • Das README verweist jetzt jeden, der einen sucht, an die MCP Registry und behält das Repositorium nur für die Referenzimplementierungen.
  • Lizenz: Apache-2.0 für neue Beiträge, älterer Code weiterhin unter MIT, wie die LICENSE-Datei erklärt.
  • Serverpakete verwenden Kalenderversionen: 2026.8.31 für die TypeScript-Pakete, 2026.8.18 für die Python-Pakete.
  • Veröffentlicht wird aus einer geschützten CI-Workflow per OIDC Trusted Publishing mit Provenance-Attestaten; im Release-Pfad gibt es keine Registry-Tokens.

Das Repositorium, Server für Server

Das Layout ist bewusst flach: ein Verzeichnis pro Server unter src/, ein package.json im Hauptverzeichnis, das sie als npm-Workspaces verdrahtet, und einige Betriebsdokumente auf oberster Ebene. Ein Server-Verzeichnis von oben nach unten zu lesen ist der schnellste Weg, das Protokoll zu lernen, weil jedes einzelne in einer Sitzung durchzubekommen ist.

ServerSpracheWas er demonstriertVeröffentlicht als
everythingTypeScriptPrompts, Tools, Ressourcen, Sampling, Elicitation, Fortschritt, Logging und Tasks@modelcontextprotocol/server-everything
fetchPythonURL-Abruf, Readability-Extraktion, Markdown-Umsetzung, robots.txtmcp-server-fetch
filesystemTypeScriptPfad-Whitelist und Verzeichniskontrolle über Roots@modelcontextprotocol/server-filesystem
gitPythonZwölf Repository-Werkzeuge: Status, Diff, Log, Commit, Branch, Showmcp-server-git
memoryTypeScriptEntitäten, Relationen und Beobachtungen als Wissensgraph@modelcontextprotocol/server-memory
sequentialthinkingTypeScriptEin einziges Werkzeug, das frühere Schritte seiner eigenen Argumentation überarbeitet@modelcontextprotocol/server-sequential-thinking
timePythonget_current_time und convert_time über IANA-Zonenmcp-server-time

Neben src/ liegen im Hauptverzeichnis ADDITIONAL.md für Frameworks und Clients aus der Community, RELEASING.md für den Weg der Pakete in die Registries, SECURITY.md, CLAUDE.md, eine .mcp.json für die eigene Tooling-Kennung und ein scripts-Verzeichnis. Der everything-Server bildet die Ausnahme von der Flachheit: Er trägt ein docs-Verzeichnis mit Architektur-, Feature- und Erweiterungspunkten und verhält sich mehr wie eine Konformitäts-Prüfvorrichtung denn wie eine Vorlage.

SDKs und Sprachversionen

Das README listet zehn offizielle SDKs auf — C#, Go, Java, Kotlin, PHP, Python, Ruby, Rust, Swift und TypeScript — und stellt klar, dass die Referenzserver darauf aufbauen. In der Praxis sind die TypeScript-Pakete aktuell, während die Python-Pakete eine Hauptversion zurückliegen; das README des time-Servers sagt das in einem Satz.

PaketVersionVeröffentlichtEinschränkung
@modelcontextprotocol/sdk, TypeScript1.32.15. Oktober 2026Serverpakete binden es als ^1.x
mcp, Python2.3.02. Oktober 2026Die Python-Server verlangen <2
@modelcontextprotocol/server-memory2026.8.3131. August 2026@modelcontextprotocol/sdk ^1.30.0
mcp-server-git, fetch und time2026.8.1818. August 2026mcp >=1.29.0 und <2

Der time-Servers begründet die Lücke ungeschminkt: SDK 2.0 hat die von ihm genutzten APIs umbenannt, und der Port läuft. Das ist der ehrliche Preis einer Referenzsammlung — die Beispiele folgen der Spezifikation eng, die Python-Hälfte folgt den SDK-Hauptversionen weniger eng. Wer heute einen Python-Server kopiert, liest lauffähigen Code gegen die 1.x-API: gut zum Studium, eine Falle für neue Arbeit.

Wie ein Server tatsächlich läuft

Ein Client, der mit einem Stdio-Server konfiguriert ist, startet ihn als Kindprozess und spricht newline-delimitiertes JSON-RPC über stdin und stdout. Es lauscht kein Port. Beim initialize-Handshake erklären beide Seiten ihre Fähigkeiten: Der Server meldet, welche Tools, Ressourcen und Prompts er implementiert, der Client meldet, ob er Roots, Sampling und Elicitation annimmt — und alles danach ist Anfrage, Antwort oder Benachrichtigung.

How a reference server runsAt the top a box holds the MCP client, such as Claude Desktop, an IDE or an agent. A solid arrow labelled initialize and then JSON-RPC over stdio points down to a wide box for the reference server, a child process started from an npm or PyPI package. A dashed arrow returns from the server to the client, labelled roots and list_changed, because the client supplies the directory allowlist. Three boxes hang below the server: tools, which the model calls; resources, which the application reads at a URI; and prompts, which the user picks. A band at the bottom states that the process runs with the privileges of the user who started it and that the allowlist is a path check rather than a sandbox.How a reference server runsstdio subprocess, no open portMCP clientClaude Desktop, IDE, agentinitialize, thenJSON-RPC over stdioroots/listlist_changedReference serverchild process from an npm or PyPI packagetoolsthe model calls themfilesystem: read and writegit: twelve operationsresourcesthe application reads themmemory://knowledge-graphaddressed by URIpromptsthe user picks themtemplates with argumentseverything: four promptsruns with the invoking user's privileges, and the allowlist is a path check, not a sandbox
Die Fähigkeitsverhandlung bei initialize entscheidet, was jede Seite anfragen darf; die drei Primitive darunter sind es, was Modell und Anwendung tatsächlich sehen.

Die drei Primitive sind nicht austauschbar. Ein Tool ist etwas, das Modell aufruft; eine Ressource liegt an einer URI für die Anwendung oder den Nutzer; ein Prompt ist eine Vorlage, die der Nutzer wählt. Der everything-Server implementiert alle drei dazu Sampling, Elicitation, Fortschrittsbenachrichtigungen, strukturierte Tool-Ausgabe und die neuere Task-Erweiterung — deshalb ist es das eine Verzeichnis, das sich zu lesen lohnt, wenn ein Protokollmerkmal unklar ist.

Erste Schritte

Nichts muss kompiliert werden. Ein Server ist ein Paket auf npm oder PyPI, und die Konfiguration unten ist die gesamte Installation: Der Client führt den Befehl aus, der Befehl antwortet über stdout, und das Modell erhält eine Tool-Liste.

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/files"]
    },
    "git": {
      "command": "uvx",
      "args": ["mcp-server-git", "--repository", "/path/to/repo"]
    },
    "memory": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-memory"]
    }
  }
}

Einen selbst zu schreiben, ist kaum schwerer. Das TypeScript-SDK stellt ein Serverobjekt mit registerTool, registerResource und registerPrompt bereit, dazu einen Transport. Der Snippet unten ist ein vollständiger Server mit einem einzigen Tool und hat dieselbe Form wie die Beispiele filesystem und memory.

import { readFile } from "node:fs/promises";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({ name: "wordcount", version: "0.1.0" });

server.registerTool(
  "count_words",
  {
    title: "Count words",
    description: "Count the words in a UTF-8 text file",
    inputSchema: { path: z.string() },
  },
  async ({ path }) => {
    const words = (await readFile(path, "utf8")).split(/\s+/).filter(Boolean).length;
    return { content: [{ type: "text", text: String(words) }] };
  },
);

await server.connect(new StdioServerTransport());

Sicherheitslage

Die Sammlung sagt ungewöhnlich klar, was sie nicht ist. Der Warnblock des README besagt, dass die Server Features und SDK-Nutzung demonstrieren, dass Entwickler ihre eigenen Sicherheitsanforderungen prüfen müssen und dass die Server nicht produktionsreif sind. SECURITY.md stellt dann fest, dass gegen dieses Repositorium gar keine Schwachstellmeldungen angenommen werden — das deutlichste Signal für den Status: Die SDKs werden unterstützt, die Beispiele nicht.

  • Jeder Server ist ein lokaler Kindprozess mit den Rechten des Nutzers, der ihn gestartet hat; Tool-Aufrufe des Modells werden dadurch zu Datei-, Netzwerk- und Repository-Operationen in diesem Konto.
  • Der Filesystem-Server ist der einzige mit Zugriffskontrolle: eine Verzeichnis-Whitelist aus Kommandozeilenargumenten oder zur Laufzeit ersetzt vom Client über Roots — und ein Pfad-Check ist kein Prozess-Sandbox.
  • Der Fetch-Server setzt Seiten in Markdown um, respektiert robots.txt und bietet einen konfigurierbaren User-Agent und Proxy, soweit die Sammlung überhaupt auf ausgehende Netzwerk-Hygiene achtet.
  • Memory speichert einen Wissensgraph in einer lokalen JSON-Datei ohne Authentifizierung, und git schreibt in das übergebene Repository-Pfadverzeichnis; keiner davon ist für ein Netzwerk gedacht.
  • Releases laufen als manueller Workflow-Dispatch in eine geschützte GitHub-Umgebung mit erforderlichem Reviewer, veröffentlicht nach npm und PyPI mit Provenance-Attestaten und ohne Registry-Tokens.

Wo es hakt

Sieben Server sind eine kleine Stichprobe, und keiner davon ist ein Dienst. Ein Authentifizierungsmodell zum Kopieren gibt es nicht, weil Stdio per Konstruktion lokal ist und die HTTP-Routen im everything-Server Entwicklungstransporte sind; ebenso wenig gibt es Rate-Limiting, eine Support-Aussage oder eine Deployment-Geschichte jenseits eines docker run im README. Die archivierten Server sind weiterhin aus Jahren von Tutorials verlinkt, wer einer alten Anleitung folgt, landet also in einem bewusst umgezogenen Repositorium. Und die Python-Hälfte der Sammlung hinkt dem SDK hinterher, das sie zeigen soll.

OptionWas es istSupportWofür geeignet
ReferenzserverSieben Beispiele der Steuerungsgruppe unter src/Community und MCP-Steuerungsgruppe, ohne SchwachstellannahmeProtokoll lernen und eigenen Server schreiben
servers-archivedDreizehn eingestellte Beispiele, darunter GitHub, Slack und PostgreSQLHier nicht gepflegt; Brave und Slack zogen zu ihren AnbieternGeschichte lesen, keine neuen Konfigurationen
MCP RegistryKatalog veröffentlichter Server auf registry.modelcontextprotocol.ioAutoren der einzelnen Server, Registrierung erforderlichEinen Server zum Ausführen finden
FastMCPPython-Framework für Server und Clients, 4.0.11 auf PyPIDer PaketbetreuerEinen Server ausliefern, ohne Protocol-Plumbing anzufassen

Der ehrliche Vergleich fragt nicht, welche dieser vier gewinnt, sondern was jede lehrt. Ein Framework bringt einen Server schneller ans Laufen und versteckt die Teile, die zwischen Spezifikationsversionen wechseln. Die Registry liefert Code, den jemand anderer geschrieben hat, mit der Prüfung, die dieser Autor vorgenommen hat. Die Referenzserver sind die einzige Option, deren Quellcode von den Verfassern der Spezifikation stammt — und genau deshalb lohnt sich das Lesen, nicht das Ausliefern.

Fazit

Nutze es als Dokumentation, die ausführt. Empfohlen für alle, die einen MCP-Server bauen, für alle, die einen prüfen, und für alle sehen wollen, wie Tools, Ressourcen und Sampling auf dem Draht aussehen; nicht empfohlen als Basis-Repositorium, als Quelle produktiver Tools oder als Liste von Servern für den eigenen Client.

  1. Lies src/, bevor du einen Server schreibst: filesystem für Zugriffskontrolle, everything für die volle Protokollfläche, memory für ein nicht triviales Tool-Design.
  2. Führe die Referenzserver lokal aus, um das Protokoll zu lernen oder einen Client zu testen, und behandle ihre Tool-Listen als Testfixtures, nicht als Produkt.
  3. Pinne Paketversionen in jeder Konfiguration, die du behältst, statt des -y-Flags aus den README-Beispielen.
  4. Keinen Referenzserver auf ein geteiltes Konto ausrollen: keine Authentifizierung, keine Rate-Limits, keine Schwachstellannahme.
  5. Protokoll-Funde an die SDK-Repositorien senden, und wenn es um einen ausführbaren Server geht, die Registry statt dieses Repositoriums verwenden.
The servers in this repository are intended as reference implementations to demonstrate MCP features and SDK usage. They are meant to serve as educational examples for developers building their own MCP servers, not as production-ready solutions.

Quellen

  1. MCP-Referenzserver-Repositorium
  2. README und Serverliste des Repositoriums
  3. Sicherheitsrichtlinie
  4. Release-Prozess und Trusted Publishing
  5. README des Filesystem-Servers
  6. Feature-Liste des Everything-Servers
  7. MCP Registry
  8. Archivierte Referenzserver
  9. Dokumentation des Model Context Protocol
  10. TypeScript-MCP-SDK
  11. Python-MCP-SDK
  12. FastMCP auf PyPI

Häufige Fragen

Sind die MCP-Referenzserver für die Produktion sicher?

Nein, und das Repositorium sagt das selbst. Das README bezeichnet sie als Lehrbeispiele, die nicht produktionsreif sind, und SECURITY.md stellt klar, dass Schwachstellmeldungen gegen dieses Repositorium gar nicht angenommen werden. Lokal ausführen, um zu lernen oder einen Client zu testen; hinter ein echtes Konto gehört ein gepflegter Server.

Welchen Referenzserver lese ich zuerst?

Filesystem, wenn es um Zugriffskontrolle geht: sein Verzeichnis-Whitelist und die Roots-Behandlung sind das wiederverwendbarste Design der Sammlung. Everything, wenn es um den Umfang des Protokolls geht: es implementiert Sampling, Elicitation, Fortschritt, strukturierte Ausgabe und Tasks neben den drei Kernprimitive.

Wohin sind die GitHub-, Slack- und PostgreSQL-Server verschwunden?

Nach modelcontextprotocol/servers-archived. Dreizehn Server wurden aus der Referenzsammlung entfernt; Brave Search wurde durch einen Server ersetzt, den Brave selbst pflegt, und den Slack-Server betreut jetzt Zencoder.

Worin unterscheidet sich dieses Repositorium von der MCP Registry?

Die Registry ist ein Katalog veröffentlichter Server, den jede registrieren kann — dort sucht man einen Server zum Ausführen. Dieses Repositorium enthält nur die sieben Implementierungen der MCP-Steuerungsgruppe, und das README weist Registry-Besucher dorthin weiter.

Klingt nach dem, was du suchst?

Erzähl mir von deinem Projekt oder deiner Stelle – ich freue mich, von dir zu hören.