Alle Skills

mcp-builder (anthropics/skills)

Leitet den Bau von MCP-Servern in Python oder TypeScript an, die externe Dienste als gut gestaltete Tools bereitstellen.

mcp-builder: Hebt MCP-Server von 3.6 auf 4.6/5 durch Benennung, Annotationen und Async, aber eine Ein-Satz-Checkliste erzielt 4.9 bei 68 % der Tokens

SituativSicher

Codex CLI · gpt-6-astra

21.6 / 30

Lift gegenüber ohne Skill: +1.04 · Situativ · 18 Läufe

Situativ: die Gesamtpunktzahl 21.6/30 liegt unter 22. Für „Empfohlen“ sind insgesamt 22/30, eine Ausgabequalität von 3.5 und ein Lift von +1.0 nötig.

SOTA

Bestanden

Getestet mit Codex.

Gilt für Codex, Claude Code

Codex CLI 0.166 (SOTA-Stufe): 18 bewertete Läufe. Ein Bestehen hier deckt gemäß unserer Stufenregel auch Claude Code ab; über die zweite Stufe sagt es nichts aus.

Punktzahlen

Jede Dimension reicht von 0 bis 5, und die sechs ergeben zusammen die Gesamtpunktzahl von 30. 5 ist in jeder Dimension besser. Kosten 5 bedeutet günstig und schnell. Installation 5 bedeutet einfach.

Trigger-Zuverlässigkeit
5.0
Lift gegenüber ohne Skill
3.0
Ausgabequalität
4.6
Token- und Zeitkosten
3.0
Installation und Portabilität
3.0
Sicherheit
3.0

Sicherheitsprüfung

Sicher

Statischer Scan: 8 CRITICAL / 13 HIGH / 7 MEDIUM. Manuelle Prüfung: Sicher in einer Sandbox ohne Netzwerk auszuführen (Scanner-Befunde erklärt; gebündelte Skripte nie ausgeführt). Ein sauberer Scan beweist nicht, dass ein Skill sicher ist.

Installieren

npx skills@latest add anthropics/skills --skill mcp-builder

Quelle

Fixierter Commit: ca45fc496a3436251f191354091d557da31c15b5

Getestet: 2026-11-02

Was wir getestet haben

  • Python-MCP-Server für eine Buchhandlungs-API — server.py schreiben: einen MCP-Server in Python für eine REST-API des Buchhandlungsbestands (Basis-URL aus der Umgebung, Bearer-Token aus der Umgebung). Tools: Bücher suchen, ein Buch abrufen, Bestand eines Buchs ändern, ein Buch löschen. Das offizielle MCP-Python-SDK verwenden (FastMC…
  • TypeScript-MCP-Server für eine Wetter-API — src/index.ts und package.json schreiben: einen MCP-Server in TypeScript für eine Wetter-REST-API (Basis-URL und API-Schlüssel aus der Umgebung). Tools: aktuelles Wetter für eine Stadt, 5-Tage-Vorhersage, gespeicherte Orte auflisten, einen gespeicherten Ort löschen. Das offizielle MC…
  • Einen hastig geschriebenen MCP-Server reparieren — server.py ist ein MCP-Server für unsere Lager-API, der funktioniert, aber in Eile geschrieben wurde. So anpassen, dass er guter MCP-Server-Praxis folgt. server.py direkt bearbeiten und weiterhin dieselbe API ansprechen. Es gibt kein Netzwerk und keine Paketinstallation; nur schreiben…

Vorteile

  • Hebt den Mittelwert von 3.57 auf 4.61 gegenüber ohne Skill (+1.04).
  • Der Skill wurde erkannt, ohne genannt zu werden: Skill-Datei in 6/6 Treatment-Läufen gelesen.
  • Hohe absolute Qualität mit dem Skill: 4.61 von 5.

Nachteile

  • Ein Ein-Satz-Prompt erzielte 4.88 gegenüber 4.61 mit dem Skill (-0.27).
  • Verbraucht 1.51x die Tokens von ohne Skill.
  • n=2 pro Aufgabe und Variante; Unterschiede unter etwa 1 Punkt sind Rauschen.

Bewertung

Codex CLI 0.166 (gpt-6-astra, niedriges Reasoning) auf einem dedizierten Windows-Test-PC, einem frischen temporären Projekt und temporären HOME/TMPDIR/Caches pro Lauf; Skill installiert (Treatment) oder nicht vorhanden (Kontrolle) oder nicht vorhanden mit der Kernanforderung des Skills in einem an den Prompt angehängten Satz (One-Liner-Gruppe); 2 Läufe pro Gruppe und Aufgabe; Netzwerk aus; Schreiben nach /tmp blockiert. Die Prompts nennen den Skill nie (außer der unten genannten Formulierung). Drei Aufgaben: einen Python-MCP-Server für eine Buchhandlungs-REST-API schreiben, einen TypeScript-MCP-Server für eine Wetter-API schreiben und einen vorhandenen quick-and-dirty server.py an gute Praxis anpassen. Nichts braucht das Netzwerk (der Agent kann das MCP-SDK nicht installieren; er schreibt nur Code). Der Prompt der Skill-Gruppe ist derselbe wie bei der Kontrolle.

Drei-Arm-Vergleich

VarianteDurchschnittsnote (0-5)Tokens pro Lauf
Ohne Skill3.5773k
Ein-Satz-Prompt4.8875k
Mit Skill4.61110k

Gemessen mit Codex CLI über 18 Läufe, bewertet durch regelbasierte Prüfungen ohne LLM-Richter. Gesamt 21.6 / 30, Urteil Situativ.

Urteil: Situativ (21.6 / 30). Quelle: anthropics/skills, skills/mcp-builder, festgehalten auf Commit ca45fc4. Installation: npx skills@latest add anthropics/skills --skill mcp-builder. Lizenz: Proprietär: anthropics/skills LICENSE.txt (Source-available; nur zur Evaluierung, nicht weitergegeben).

Was es ist

Der Skill mcp-builder aus anthropics/skills: eine Anleitung zum Bauen von Model-Context-Protocol-Servern (recherchieren und planen, implementieren, prüfen und testen, Evaluationen schreiben). Enthalten sind Sprachleitfäden für Python (FastMCP) und TypeScript, Hinweise zu MCP-Best-Practices und zwei Hilfsskripte, um Evaluationen gegen einen Server auszuführen. Proprietäre Lizenz (Source-available).

So haben wir getestet

Codex CLI 0.166 (gpt-6-astra, niedrige Denkstufe) auf einem dedizierten Windows-Test-PC, pro Lauf ein frisches temporäres Projekt und temporäre HOME/TMPDIR/Caches, Skill installiert (Skill-Gruppe), nicht vorhanden (Kontrollgruppe) oder nicht vorhanden, aber mit der Kernanforderung des Skills in einem an den Prompt angehängten Satz (Ein-Satz-Gruppe), 2 Läufe pro Gruppe und Aufgabe, Netzwerk aus, Schreibzugriffe auf /tmp blockiert. Die Prompts erwähnen den Skill nie (außer der unten genannten Formulierung).

Drei Aufgaben: einen Python-MCP-Server für eine Buchhandlungs-REST-API schreiben, einen TypeScript-MCP-Server für eine Wetter-API schreiben und einen vorhandenen quick-and-dirty server.py so reparieren, dass er guten Praktiken folgt. Nichts braucht das Netzwerk (der Agent kann das MCP SDK nicht installieren; er schreibt nur Code). Der Prompt der Skill-Gruppe ist derselbe wie bei der Kontrolle.

  1. Python-MCP-Server für eine Buchhandlungs-API — Schreibe server.py: einen MCP-Server in Python für eine REST-API des Buchhandlungs-Lagerbestands (Basis-URL aus der Umgebung, Bearer-Token aus der Umgebung). Tools: Bücher suchen, ein Buch abrufen, Lagerbestand eines Buchs aktualisieren, ein Buch löschen. Nutze das offizielle Python-SDK mcp (FastMC…
  2. TypeScript-MCP-Server für eine Wetter-API — Schreibe src/index.ts und package.json: einen MCP-Server in TypeScript für eine Wetter-REST-API (Basis-URL und API-Schlüssel aus der Umgebung). Tools: aktuelles Wetter für eine Stadt abrufen, 5-Tage-Vorhersage abrufen, gespeicherte Orte auflisten, einen gespeicherten Ort löschen. Nutze das offizielle MC…
  3. Einen hastig geschriebenen MCP-Server reparieren — server.py ist ein MCP-Server für unsere Lager-API, der funktioniert, aber in Eile geschrieben wurde. Repariere ihn so, dass er guten MCP-Server-Praktiken folgt. Bearbeite server.py direkt und halte ihn mit derselben API verbunden. Hier gibt es weder Netzwerk noch Paketinstallation; schreibe einfach…

Die Bewertung erfolgt programmatisch (versteckte Tests / Recall eingeschleuster Probleme / Constraint-Prüfungen / Rendern+OCR, wo relevant), 0–5 pro Lauf. Kein LLM-Judge hat eine Punktzahl vergeben.

Ergebnisse

Der Ein-Satz-Prompt für die dritte Gruppe: „Entwirf den MCP-Server wie ein Experte: konsistente, mit dem Dienstnamen präfixierte, handlungsorientierte Tool-Namen (z. B. bookstore_search_books), typisierte Eingabeschemata (Pydantic oder Zod) mit beschriebenen Feldern, Annotationen (readOnlyHint, destructiveHint, idempotentHint), paginierte und größenbegrenzte Ergebnisse, konkrete, umsetzbare Fehlermeldungen, Secrets nur aus Umgebungsvariablen, asynchrone I/O und nichts auf stdout beim stdio-Transport ausgeben.“

AufgabePunktzahl KontrolleEin-SatzMit SkillToken KontrolleToken Ein-SatzToken mit SkillSkill gelesen
t1-python1.434.644.260k64k97k2/2
t2-typescript4.295.04.6460k55k100k2/2
t3-fix5.05.05.097k106k133k2/2

Mittelwert: 3.57 ohne vs. 4.61 mit Skill (Delta +1.04). Token pro Lauf: 73k vs. 110k (1.51x); Zeit 80s vs. 89s. Ein-Satz-Gruppe: 4.88 (Gewinn des Skills gegenüber dem Ein-Satz-Prompt: -0.27; Gewinn des Ein-Satz-Prompts gegenüber dem Lauf ohne Skill: +1.31); Token des Ein-Satz-Prompts 75k pro Lauf, der Skill kostet also 1.47x des Ein-Satz-Prompts.

Was dabei herauskam

  • Wo es darauf ankommt, hilft der Skill: Bei den beiden von Grund auf gebauten Servern verpasste die Kontrolle die Grundlagen (Tool-Namen mit gemeinsamem Dienst-Präfix in 2/4 Läufen, Tool-Annotationen wie readOnlyHint in 2/2 Python-Läufen, asynchrone Tools in 2/2 Python-Läufen, konkrete, umsetzbare Fehlermeldungen in 2/2 Python-Läufen). Mittlere Punktzahl 3.57 Kontrolle, 4.61 Skill.
  • Die Ein-Satz-Gruppe schnitt besser ab als der Skill: 4.88, mit einer verpassten Prüfung in 18 Läufen, während die Skill-Gruppe 5 verpasste. Der Satz nennt dieselben Eigenschaften, auf die die Prüfungen achten; er ist also eine Obergrenze für einen kurzen Prompt, kostet aber 75k Token pro Lauf gegenüber 110k für den Skill und 73k für die Kontrolle.
  • Ein echter Defekt in der Skill-Gruppe: Beide TypeScript-Läufe der Skill-Gruppe erzeugten ein createServer() für das neue Paket @modelcontextprotocol/server, starteten aber nie einen Transport (kein stdio oder Streamable HTTP), sodass die Serverdatei so nicht gestartet werden kann; die Läufe von Kontrolle und Ein-Satz-Prompt enthielten einen Transport.
  • Bei der Reparaturaufgabe erzielten alle drei Gruppen dasselbe (alle 9/9 Prüfungen in allen sechs Läufen): Mit einem vorhandenen Server wandte reines Codex die Praktiken bereits an.
  • Der Skill ist schwer zu laden: SKILL.md plus Referenzleitfäden; die Läufe der Skill-Gruppe hinterließen etwa 12 Skill-Dateien im .agents-Ordner des Projekts und lasen die Leitfäden, wohin die 1.5x Token gehen. Seine Hilfsskripte (Evaluations-Harness) liefen in der Offline-Sandbox nicht.

Bewertung nach Dimensionen

DimensionPunktzahlBegründung
1_output_quality4.61

Mittlere Punktzahl 4.61/5 mit dem Skill (programmatische Prüfungen, siehe Tabelle pro Aufgabe).

2_lift_vs_no_skill3.04

+1.04 Punkte gegenüber 3.57 ohne den Skill (n=2 pro Aufgabe; unter etwa 1 Punkt ist Rauschen).

3_trigger5.0Skill-Datei in 6/6 Läufen der Skill-Gruppe gelesen.
4_instructions_portability3

Umfangreicher Referenzsatz, aufgeteilt nach Sprachleitfäden; Hilfsskripte brauchen Python-Pakete und einen laufenden Server.

5_efficiency31.51x Token (110k vs. 73k pro Lauf) und 1.11x Zeit (89s vs. 80s).
6_safety_hygiene3

Der Scanner meldet 8 CRITICAL / 13 HIGH, alle im Kontext geprüft: Beispiel-Servercode und Env-Weitergabe in Hilfsskripten; proprietäre Lizenz.

Grenzen dieses Tests

  • Regelbasierte Prüfungen am Code-Text; keiner der erzeugten Server wurde tatsächlich gestartet oder mit einem Client verbunden.
  • Kein Netzwerk: Der Agent konnte das MCP SDK weder installieren noch importieren, daher wurden API-Details (zum Beispiel das neue TypeScript-Paket v2) nicht validiert.
  • Der Evaluationsschritt des Skills (Fragen generieren und gegen den Server laufen lassen) wurde nicht ausgeführt.
  • n = 2 pro Gruppe und Aufgabe: Unterschiede unter etwa 1 Punkt sind Rauschen.
  • Regelbasierte Bewertung misst nur, was die Prüfungen sehen können; sie kann weder Geschmack noch beurteilen, ob ein Ergebnis das bestmögliche ist.

Sicherheit

Siehe security.md. Scan: 8 CRITICAL / 13 HIGH / 7 MEDIUM. Urteil: sicher ausführbar (Offline-Sandbox). Ein sauberer Scan beweist nicht, dass ein Skill sicher ist.

Fazit

Bei einem Server von Grund auf schlägt der Skill einen ungeführten Agenten bei Benennung, Annotationen, Async und Fehlerbehandlung deutlich, zum 1.5-fachen Tokenaufwand. Ein kurzer Checklisten-Satz erreichte dieselben Eigenschaften mit weniger Token und ohne den fehlenden-Transport-Defekt; installiert ihn also für die Referenzleitfäden und Konsistenz, nicht für einen Qualitätssprung gegenüber einem guten Prompt.

Transkript

Laufprotokoll: mcp-builder (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.)
Spalten: Aufgabe, Gruppe-Lauf, Punktzahl (0-5), Tokens, Sekunden, bestandene Prüfungen, vom Agenten geöffnete Skill-Dateien.

t1-python control-1: Punkte 1.79, Tokens 51610, Sek. 53.2, Prüfungen 4/9, nichts geöffnet
t1-python control-2: Punkte 1.07, Tokens 69259, Sek. 98.6, Prüfungen 3/9, nichts geöffnet
t1-python oneliner-1: Punkte 5.0, Tokens 74072, Sek. 101.3, Prüfungen 9/9, nichts geöffnet
t1-python oneliner-2: Punkte 4.29, Tokens 54692, Sek. 126.2, Prüfungen 8/9, nichts geöffnet
t1-python treatment-1: Punkte 3.39, Tokens 101809, Sek. 72.0, Prüfungen 6/9, geöffnet mcp-builder
t1-python treatment-2: Punkte 5.0, Tokens 93275, Sek. 66.9, Prüfungen 9/9, geöffnet mcp-builder
t2-typescript control-1: Punkte 4.29, Tokens 52126, Sek. 59.1, Prüfungen 8/9, nichts geöffnet
t2-typescript control-2: Punkte 4.29, Tokens 69042, Sek. 61.5, Prüfungen 8/9, nichts geöffnet
t2-typescript oneliner-1: Punkte 5.0, Tokens 55412, Sek. 104.3, Prüfungen 9/9, nichts geöffnet

18 Läufe, 3 Artefakte

Beispielausgabe

SOTA · With the skill: server.py (t1-python, run 1, Codex)

"""Bookstore MCP server (Python 3.10+, official mcp SDK, httpx, Pydantic 2). Required environment variables: BOOKSTORE_BASE_URL: API root, e.g. https://inventory.example.com/api/v1 BOOKSTORE_API_TOKEN: bearer token (without the 'Bearer ' prefix) Assumed REST contract (adjust paths/fields here to match your API): GET /books?q=...&limit=...&offset=... -> JSON search results GET /books/{book_id} -> JSON book PATCH /books/{book_id}/stock body: {"stock": nonnegative integer} DELETE /books/{book_id} Updates and deletes may return JSON or an empty success response. Search pagination and response shape are supplied by the upstream API. Run with `python server.py` in an environment with the dependencies installed. Transport is stdio; stdout is reserved for MCP protocol messages. """ import os from contextlib import asynccontextmanager from dataclasses import dataclass from typing import Annotated, Any, AsyncIterator from urllib.parse import quote, urlsplit import httpx from mcp.server.fastmcp import Context, FastMCP from mcp.server.fastmcp.exceptions import ToolError from pydantic import Field @dataclass class AppState: client: httpx.AsyncClient @asynccontextmanager async def lifespan(server: FastMCP) -> AsyncIterator[AppState]: base_url = os.environ.get("BOOKSTORE_BASE_URL", "").strip() token = os.environ.get("BOOKSTORE_API_TOKEN", "").strip() if not base_url or not token: raise RuntimeError("Set BOOKSTORE_BASE_URL and BOOKSTORE_API_TOKEN.") try: parsed = urlsplit(base_url) valid = ( parsed.scheme in {"http", "https"} and bool(parsed.hostname) and parsed.username is None and parsed.password is None and not parsed.query and not parsed.fragment ) parsed.port # Validate a supplied port without exposing the URL. except ValueError: valid = False if not valid: raise RuntimeError("BOOKSTORE_BASE_URL must be an HTTP(S) API root without credentials, query, or fragment.") if any(ord(char) < 33 or ord(char) > 126 for char in token): raise RuntimeError("BOOKSTORE_API_TOKEN must contain printable ASCII without whitespace.") async with httpx.AsyncClient( base_url=base_url.rstrip("/") + "/", headers={"Authorization": f"Bearer {token}", "Accept": "application/json"}, timeout=httpx.Timeout(30.0, connect=10.0), follow_redirects=False, trust_env=False, ) as client: yield AppState(client=client) mcp = FastMCP("bookstore_mcp", lifespan=lifespan) BookId = Annotated[str, Field(min_length=1, max_length=256, description="Book identifier, e.g. 'book-123'.")] def book_path(book_id: str) -> str: if not book_id.strip() or book_id in {".", ".."}: raise ToolError("Provide a nonblank book identifier other than '.' or '..'.") return "books/" + quote(book_id, safe="") async def api_request( ctx: Context, method: str, path: str, *, params: dict[str, Any] | None = None, payload: dict[str, Any] | None = None, ) -> dict[str, Any]: state: AppState = ctx.r [... excerpt: first 3200 of 7129 characters]

Pro ansehen