Help us shape the future of Go! Take the 2026 Go Developer Survey

mlc_mcptester

module
v1.6.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 5, 2026 License: MIT

README

MCP-Tester

mcpcheck Referenz-Server cmd/test-server, geprüft mit task badge

mlcgo.eu — tools, libraries and manuals · Product page

Ein Command-Line Tool zum Testen, Debuggen und Validieren von Model Context Protocol (MCP) Servern nach der aktuellen Spezifikation vom 2026-07-28.

English Version

Warum MCP-Tester?

Fast täglich erscheinen neue Hosts, Harnesses und Modelle, und die MCP-Spezifikation entwickelt sich laufend weiter. Ein Server, der die Spezifikation nicht genau einhält, läuft dann oft „plötzlich“ nicht mehr sauber: Aufrufe scheitern bei strikteren Clients, Fehlermeldungen helfen dem Modell nicht weiter, oder das Modell verbrennt unnötig Tokens mit Wiederholungen. mcp-tester hilft, schnell und mit wenig Aufwand auf dem Stand der Technik zu bleiben.

Tests schreiben statt klicken

Klassische Unit-Tests (go test, pytest, npm test) rufen die Handler-Funktion direkt auf. Sie prüfen die Geschäftslogik, nicht den MCP-Protokollvertrag: Handshake, Schema-Validierung, Fehlercodes, strukturierte Ergebnisse, Fortschritt, Abbruch. Genau dort entstehen die Fehler, die erst auffallen, wenn ein echtes LLM das Tool aufruft.

Mit den deklarativen .mcp-Testskripten testet ihr den Server so, wie ein Client ihn sieht: als Blackbox über den echten Transport (stdio, SSE, Streamable HTTP), mit Variablen, Typumwandlung und Assertions, ohne Boilerplate und ohne SDK-Mocks. Die Skripte laufen als Gate in CI und Taskfile (Exit-Code, --format json).

call_tool generate_image prompt:"a red flower"
set_var size $.size
assert_equals $size "512x512"

expect_error call_tool generate_image prompt:""
assert_tool_error
Früh wissen, was die nächste Spec-Revision verlangt

mcp-tester wird regelmäßig an die neueste MCP-Spezifikation angepasst; was er zu welchem Datum prüft, steht in der Spec-Abdeckung. Wer seine Server damit testet, sieht notwendige Anpassungen, bevor Nutzer oder Hosts darüber stolpern, und erkennt auch veraltete Features, etwa eine alte Protokollversion, entfernte Methoden wie ping oder stillgelegte Fehlercodes.

Wir schreiben selbst viele MCP-Server für die unterschiedlichsten Anwendungen. Gerade dort spart mcp-tester wertvolle Zeit: Ein Lauf der Testskripte zeigt nach einem Spec- oder SDK-Update sofort, welche Server angepasst werden müssen und wo es klemmt.

Besonders bei neuen Features lohnt frühes Testen. Fehler in der Autorisierung (OAuth, Token, Header) sind nicht nur lästig, sondern können gefährlich und teuer werden. mcp-tester spielt den vollständigen OAuth-2.1-Ablauf durch und prüft mit http-check die Transportregeln von Streamable HTTP.

Fremde und Closed-Source-Server vor der Freigabe prüfen

Auch bei MCP-Servern, deren Quellcode ihr nicht kennt, ist eine Analyse sinnvoll, bevor ihr sie einem „echten“ LLM zur Verfügung stellt. inspect zeigt Protokollversion, Fähigkeiten, Tools mit Schemas und Annotations (z. B. ob ein Tool nur liest), Icons und Auffälligkeiten; http-check zeigt, wie sauber der Transport umgesetzt ist; skills --verify zeigt, welche Anweisungen (Skills) der Server dem Modell mitgibt, welche Tools sie vorab freigeben wollen (allowed-tools) und ob der Inhalt zu den veröffentlichten Digests passt.

Unser eigener, interner Harness zeigt genau solche Details an, bevor ein MCP-Server freigeschaltet wird. Für Anwender ist das eine sehr hilfreiche Entscheidungshilfe: verwenden, ja oder nein?

Findet auch Fehler im SDK

Weil mcp-tester den Server von außen gegen die Spezifikation prüft, findet er nicht nur Fehler im eigenen Code. Bei der Anpassung an Spec 2026-07-28 sind uns so auch Fehler und Lücken im verwendeten SDK aufgefallen, zum Beispiel ein Base64-kodierter Mcp-Name-Header, den das offizielle Go-SDK v1.8.0 fälschlich ablehnt.

Kern-Features

  • Echte Client-Perspektive über stdio, SSE und Streamable HTTP, mit Profilen in mcp-tester.yml.
  • Scripting Engine (.mcp): Tools, Tasks, Completion, Elicitation, Sampling, Roots und Notifications skriptbar, mit Assertions und Exit-Code für CI.
  • MCP Apps: interaktive Oberflächen eines Servers auflisten und prüfen (apps): Tool-Verknüpfung, ui://-Resources, externe Domains (CSP) und angeforderte Berechtigungen wie Kamera oder Mikrofon – wichtig vor der Freigabe.
  • Auth-Extensions: Client Credentials (Maschine-zu-Maschine) und Enterprise-Login per ID-JAG; auth-check zeigt, welche Flows ein Server anbietet.
  • Skills-Extension: Skills eines Servers auflisten und verifizieren (skills --verify): Manifest, Digests, Frontmatter, Namensregeln. Das Go-Paket pkg/mcpskills stellt Skills aus einem Verzeichnis bereit.
  • Tasks-Extension: lang laufende Tool-Aufrufe als Task starten, pollen, abbrechen, Eingaben nachreichen. Für Server-Autoren gibt es das Go-Paket pkg/mcptasks, das die Extension auf Servern mit dem offiziellen go-sdk nachrüstet.
  • Server Inspector (inspect): Spec-Abgleich, Best Practices und Quality Score; --min-score als CI-Gate, --badge für eine Status-Badge im README.
  • HTTP-Konformität (http-check): Pflicht-Header, Fehlercodes, Origin, Sessions nach Spec 2026-07-28.
  • Autorisierung: Bearer-Token, eigene Header und der OAuth-2.1-Ablauf (PKCE, Protected Resource Metadata, iss-Prüfung).
  • Strikte Ergebnisprüfung: Jedes Ergebnis wird gegen das outputSchema geprüft, so streng wie das offizielle TypeScript-SDK.
  • Aktuelle Spezifikation: Protokoll 2026-07-28 mit Rückfall auf ältere Revisionen; Abdeckung mit Datum dokumentiert.
  • Raw Mode für tiefgreifendes Debugging nicht konformer Server.

Schnellstart

  1. Installieren – im Benutzerverzeichnis, ohne sudo:
    curl -sSL https://raw.githubusercontent.com/hmsoft0815/mlc_mcptester/main/scripts/install.sh | bash   # nach ~/.local/bin
    # oder: go install github.com/hmsoft0815/mlc_mcptester/cmd/mcp-tester@latest                       # nach ~/go/bin
    
  2. Den eigenen Agents beibringen – installiert eine Skill-Datei für Claude Code, Gemini CLI, OpenCode und Codex, jeweils im Benutzerverzeichnis des Harness (--dry-run zeigt vorher, wohin):
    mcp-tester agent-skill install
    
    Nach einem Update des Testers erneut ausführen; der Skill passt immer zur installierten Version.
  3. Ersten Server prüfen:
    mcp-tester inspect -c "<Befehl, der euren MCP-Server startet>"
    
  4. Weiterlesen: Kommandos, Test-Skripte, Status-Badge, Spec-Abdeckung.

Häufige Fragen

mcp-tester meldet Fehler – was tun? Unsere Empfehlung ist klar: gegen die aktuelle Spezifikation testen und die Meldungen ernst nehmen. Die Ausgabe nennt Methode, Feld, Fehlercode und die verletzte Regel. Moderne LLMs wie Claude oder Gemini machen daraus in der Regel schnell konkrete Vorschläge zur Behebung – gebt ihnen die Ausgabe (gern mit --format json) einfach mit.

Muss ich den Quality Score auf 100/100 bringen? Nein. Der Score beruht auf unseren eigenen Erfahrungen und Bewertungen; ein Wert unter 100 muss nicht automatisch eine Änderung am MCP-Server auslösen. Wir halten die Zahl trotzdem für eine sehr hilfreiche Information, deshalb gibt es sie. Anders sind Protokollfehler (inspect) und FAIL (http-check): Das sind Verstöße gegen MUST-Regeln der Spezifikation, an denen echte Clients scheitern. Zeilen mit INFO gehen gar nicht in den Score ein: Sie beschreiben Entscheidungen, die legitim sein können, etwa ttlMs: 0 (Listen sofort veraltet) oder cacheScope: "public" bei einer Verbindung mit Zugangsdaten. Wer mit Anmeldung testet, sollte --read-resources ergänzen: Dann liest inspect die erste Resource und warnt, wenn nutzerbezogene Inhalte als public markiert sind und damit über gemeinsame Caches bei anderen Nutzern landen können.

Warum ist mcp-tester nicht selbst ein MCP-Server? Weil er vor allem in CI läuft, und dort zählen Exit-Code und --format json, nicht ein Tool-Aufruf. Agents mit Shell-Zugriff, etwa Claude Code, OpenCode oder Gemini CLI, rufen die CLI direkt auf. Wie das geht, erklärt ihnen die mitgelieferte Skill-Datei, die mcp-tester agent-skill install in das jeweilige Harness installiert: welcher Befehl wofür, wie man .mcp-Skripte schreibt und was in CI zu beachten ist. Meist wird ohnehin ein einzelner Server getestet, da bringt ein zusätzlicher Server keinen Vorteil. Hinzu kommt die Sicherheit: Ein Tool, das beliebige Prozesse startet und URLs aufruft, wäre ein großes Einfallstor, während die CLI nur mit den Rechten läuft, die ihr gebt. Für Hosts ohne Shell wäre ein Server-Modus dennoch nützlich; die Idee ist notiert, aber noch nicht geplant.


Der "Everything" Test-Server

Im Projekt ist ein Referenz-Server (cmd/test-server) enthalten, der die Möglichkeiten des MCP-Protokolls vorführt: Tools mit Output-Schemata, Resources und Templates, Prompts, Completion, Logging, Progress, Elicitation, Sampling, Roots, Notifications über subscriptions/listen, x-mcp-header, Elicitation im URL-Modus, Tool-Annotations, instructions, Cache-Hinweise und Paginierung (fünf Einträge pro Seite). task test-inspect verlangt für ihn 100/100. Mit -addr :8080 läuft er über HTTP, mit -auth zusätzlich OAuth-geschützt mit eingebautem Test-Autorisierungsserver.


Benutzung

1. Installation

Über Go (Direkt von GitHub):

go install github.com/hmsoft0815/mlc_mcptester/cmd/mcp-tester@latest

Hinweis: Stellt sicher, dass $GOPATH/bin (meist ~/go/bin) in eurem PATH liegt.

Erste Schritte: Nach der Installation könnt ihr euren ersten Server hinzufügen und sofort testen:

# Server-Profil hinzufügen
mcp-tester profile add my-server -c "npx -y @modelcontextprotocol/server-everything"

# Verfügbare Tools auflisten
mcp-tester list -p my-server

Über Curl (Linux/macOS) – installiert nach ~/.local/bin (anderes Ziel: INSTALL_DIR=…):

curl -sSL https://raw.githubusercontent.com/hmsoft0815/mlc_mcptester/main/scripts/install.sh | bash

Manueller Build:

git clone https://github.com/hmsoft0815/mlc_mcptester.git
cd mlc_mcptester
task all            # Baut den Tester und Referenz-Server in den bin/ Ordner

Ohne --recursive klonen. Das Repository verweist auf zwei Submodule (.mlcai, mlcprodweb), die auf einem internen Server liegen — interne Dokumentation und die Produktseite. Für den Bau werden sie nicht gebraucht; git clone --recursive bricht ohne Zugang zu diesem Server ab.

mcp-tester inspect und test gegen einen MCP-Server

Echte Ausgabe: der Inspektor und ein Testlauf gegen den MCP-Server von mlc OpticScript.

2. Kommandos (Auszug)
Profilverwaltung

Verwaltet verschiedene Server-Konfigurationen direkt über die CLI:

mcp-tester profile add my-server -c "npx -y @modelcontextprotocol/server-everything"
mcp-tester profile list
mcp-tester profile disable my-server
mcp-tester profile delete my-server
Geschützte Server (Autorisierung)

Für HTTP-Transporte. Statische Zugangsdaten per Flag oder Profil, sonst der OAuth-2.1-Ablauf der Spec (PKCE, Protected Resource Metadata, iss-Prüfung; Client-Registrierung per Client ID Metadata Document, vorregistriertem Client oder dynamisch):

# Bearer-Token oder beliebige Header
mcp-tester list -u https://example.com/mcp --bearer "$TOKEN"
mcp-tester list -u https://example.com/mcp -H "X-Api-Key: $KEY"

# OAuth: URL wird ausgegeben (oder mit --oauth-browser geöffnet)
mcp-tester inspect -u https://example.com/mcp --oauth
mcp-tester inspect -u https://example.com/mcp --oauth --oauth-client-id my-client

# Ohne Browser, für Autorisierungsserver ohne Nutzerinteraktion (CI, test-server -auth)
mcp-tester inspect -u http://127.0.0.1:8080/mcp --oauth --oauth-auto

# Auth-Extensions: Maschine-zu-Maschine und Enterprise-Login (ID-Token → ID-JAG)
mcp-tester list -u https://example.com/mcp --oauth-client-credentials --oauth-client-id svc --oauth-client-secret "$SECRET"
mcp-tester list -u https://example.com/mcp --oauth-enterprise --idp-issuer https://idp.example --idp-client-id app \
  --id-token "$ID_TOKEN" --oauth-client-id app

# Welche Flows bietet der Server an, und stimmen die Metadaten?
mcp-tester auth-check -u https://example.com/mcp

Im Profil: headers: und bearer:, ${VAR} wird aus der Umgebung ersetzt. ./bin/test-server -addr :8080 -auth startet einen geschützten Test-Server mit eingebautem Autorisierungsserver (statisches Token test-token).

HTTP-Konformität (http-check)

Prüft einen Streamable-HTTP-Endpunkt mit gezielt gebauten Requests gegen die Transportregeln von Spec 2026-07-28: Pflicht-Header (MCP-Protocol-Version, Mcp-Method, Mcp-Name, Base64-Werte, Mcp-Param-* aus x-mcp-header), Fehlercodes mit HTTP-Status (-32020, -32022, 404/-32601), Origin-Prüfung (403), 405 für GET/DELETE und keine Sessions. MUST-Verstöße: FAIL und Exit 1, SHOULD-Verstöße: WARN.

mcp-tester http-check -u https://example.com/mcp --bearer "$TOKEN"
mcp-tester http-check -u http://127.0.0.1:8080/mcp --format json
Server Inspektion

Analysiere einen Server auf Qualität (Metadaten, Prompts, Struktur):

# Mit Profil aus mcp-tester.yml
mcp-tester inspect --profile local

# Direktaufruf ohne Konfigurationsdatei
mcp-tester inspect -c "npx -y @modelcontextprotocol/server-everything"

# Als CI-Gate: Exit 1 bei Protokollfehlern oder Score unter der Schwelle
mcp-tester inspect -p local --min-score 90
Status-Badge für das eigene README

inspect schreibt auf Wunsch eine Badge, die andere Projekte in ihr README einbinden:

mcpcheck

mcp-tester inspect -p local --badge docs/mcpcheck.svg --badge-json docs/mcpcheck.json
[![mcpcheck](docs/mcpcheck.svg)](docs/mcpcheck.json)
  • spec 2026-07-28: die Protokoll-Revision, die der Server ausgehandelt hat. Das ist bewusst nicht das Testdatum, denn die Revision zeigt, ob der Server auf dem aktuellen Stand ist.
  • 100/100: der Quality Score von inspect. Mit --badge-no-score erscheint nur die Revision.
  • Farbe: grün; gelb bei Score unter 80 oder älterer Revision; rot („failing“) bei Protokollfehlern, unabhängig vom Score.
  • Testdatum und Tester-Version stehen im Tooltip der SVG und in der JSON-Datei. Verlinkt die Badge auf die JSON, dann ist nachvollziehbar, wann und womit geprüft wurde.
  • Die Badge wird auch bei fehlgeschlagener Prüfung geschrieben (rot), damit keine veraltete grüne Badge stehen bleibt. Die SVG ist eigenständig und braucht keinen externen Dienst. Die JSON folgt dem shields.io-Endpoint-Schema und funktioniert daher auch mit https://img.shields.io/endpoint?url=<Raw-URL der JSON>.
Tools, Resources & Prompts
mcp-tester list -p local
mcp-tester resources list --cursor "NEXT_TOKEN" -p local
mcp-tester prompts get code_review --args '{"file_path": "main.go"}' -p local
mcp-tester complete prompt:code_review file_path ma -p local
Test-Skripte (Automatisierung)

Führe komplexe Test-Szenarien aus:

./bin/mcp-tester test --script tests/03_variables_and_math.mcp --profile local

Dokumentation


Lizenz

Dieses Projekt steht unter der MIT Lizenz.


Copyright Michael Lechner - 2026-03-09

Projektdokumentation (.mlcai/)

.mlcai/ ist ein privates Git-Submodul: interne Planung, Backlog und Arbeitsnotizen, gepflegt mit dem MLC Doc Hub. Es ist nicht öffentlich zugänglich — ohne --recurse-submodules klonen; für den Build wird es nicht gebraucht. Links nach .mlcai/ funktionieren nur mit Zugriff (git submodule update --init .mlcai).

Wer ist „Claude“ in den Commits?

Einige Commits in diesem Repository sind zusammen mit Claude entstanden, dem KI-Modell von Anthropic. Es schreibt Code mit, hält Dokumentation und Backlog aktuell und sucht Fehler in der Build-Pipeline – jede Änderung wird geprüft, bevor sie übernommen wird. Wir verstecken das nicht: wie wir mit Claude arbeiten.

Directories

Path Synopsis
cmd
mcp-tester command
Package main is the entry point for the mcp-tester CLI.
Package main is the entry point for the mcp-tester CLI.
test-server command
internal
agentskill
Package agentskill carries the Agent Skill that teaches coding agents how to use mcp-tester, and installs it where each harness looks for skills.
Package agentskill carries the Agent Skill that teaches coding agents how to use mcp-tester, and installs it where each harness looks for skills.
appcheck
Package appcheck checks the server side of MCP Apps (io.modelcontextprotocol/ui, SEP-1865, stable 2026-01-26): tools that link a ui:// resource, the resources themselves (MIME type, HTML) and their security metadata (CSP domains, permissions), which is what a host shows before it renders an app.
Package appcheck checks the server side of MCP Apps (io.modelcontextprotocol/ui, SEP-1865, stable 2026-01-26): tools that link a ui:// resource, the resources themselves (MIME type, HTML) and their security metadata (CSP domains, permissions), which is what a host shows before it renders an app.
authcheck
Package authcheck discovers how an MCP server over HTTP is protected (Protected Resource Metadata, authorization server metadata) and checks it against the authorization rules of spec 2026-07-28 and the auth extensions (ext-auth: OAuth client credentials, enterprise-managed authorization).
Package authcheck discovers how an MCP server over HTTP is protected (Protected Resource Metadata, authorization server metadata) and checks it against the authorization rules of spec 2026-07-28 and the auth extensions (ext-auth: OAuth client credentials, enterprise-managed authorization).
badge
Package badge renders the "mcpcheck" status badge a project can put in its README to show that its MCP server passed mcp-tester.
Package badge renders the "mcpcheck" status badge a project can put in its README to show that its MCP server passed mcp-tester.
conformance
Package conformance checks MCP results the way a strict client checks them, so a server fails here rather than in someone's editor.
Package conformance checks MCP results the way a strict client checks them, so a server fails here rather than in someone's editor.
httpcheck
Package httpcheck probes a Streamable HTTP MCP endpoint with hand-built requests and compares the answers with the transport rules of spec revision 2026-07-28: request metadata headers, error codes and HTTP status, Origin validation and the removal of sessions and GET streams.
Package httpcheck probes a Streamable HTTP MCP endpoint with hand-built requests and compares the answers with the transport rules of spec revision 2026-07-28: request metadata headers, error codes and HTTP status, Origin validation and the removal of sessions and GET streams.
scripting
Package scripting provides a simple script runner for testing MCP tools.
Package scripting provides a simple script runner for testing MCP tools.
skillcheck
Package skillcheck lists the skills a server publishes (Skills extension, io.modelcontextprotocol/skills) and checks them against the extension and the Agent Skills format: manifests, frontmatter, digests, error codes.
Package skillcheck lists the skills a server publishes (Skills extension, io.modelcontextprotocol/skills) and checks them against the extension and the Agent Skills format: manifests, frontmatter, digests, error codes.
pkg
mcpskills
Package mcpskills serves Agent Skills over MCP (Skills extension, io.modelcontextprotocol/skills, on protocol 2026-07-28) from a server built on the official go-sdk, which does not support the extension yet.
Package mcpskills serves Agent Skills over MCP (Skills extension, io.modelcontextprotocol/skills, on protocol 2026-07-28) from a server built on the official go-sdk, which does not support the extension yet.
mcptasks
Package mcptasks adds the Tasks extension (io.modelcontextprotocol/tasks, spec 2026-07-28) to a server built on the official go-sdk, which does not support it yet.
Package mcptasks adds the Tasks extension (io.modelcontextprotocol/tasks, spec 2026-07-28) to a server built on the official go-sdk, which does not support it yet.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL