API Testing MCP
Kurze Übersicht
Der vollständigste MCP-Server für API-Tests — 42 Tools, keine Konfiguration, nichts Vergleichbares. Dies ist nicht nur ein Request-Sender. Es ist eine vollständige Test-Workbench: HTTP-Anfragen mit Assertions, mehrstufige Abläufe mit Variablenextraktion, OpenAPI-Import mit schema-bewussten Mock-Daten, Lasttests mit Perzentil-Metriken, Antwort-Diffing über Umgebungen hinweg, Bulk-Test-Runner, wiederverwendbare Sammlungen, Umgebungsgruppen mit Verzeichnis-Scoping und persistenten Standardwerten, Postman-Import/Export und cURL-Export. Alles durch natürliche Konversation. Keine Konten, keine Cloud, keine generierten Dateien. Alles läuft inline und wird als einfaches JSON gespeichert, das Ihnen gehört.
Einfach ansprechen
Sie müssen keine Tool-Namen oder Parameter lernen. Beschreiben Sie, was Sie möchten, und die KI wählt das richtige Tool aus.
"Create a group called my-project and add this directory as scope"
"Set up a dev environment with BASE_URL http://localhost:3000"
"Switch to prod for this session"
"Set dev as the default environment"
"Import my API spec from /api-docs-json"
"Show me all user endpoints"
"GET /users"
"Create a user with random data"
"Verify that DELETE /users/5 returns 204"
"Login as admin, extract the token, then fetch dashboard stats"
"How fast is /health with 50 concurrent requests?"
"Run all my saved smoke tests"
"Compare the users endpoint between dev and prod"
"Export the create-user request as curl"
"Export my collection to Postman"Wenn Sie eine OpenAPI-Spezifikation importiert haben, kennt die KI bereits jeden Endpunkt, jedes erforderliche Feld und jeden gültigen Enum-Wert. Wenn Sie sagen „Erstelle einen Blog-Beitrag“, liest sie das Schema und erstellt die Anfrage korrekt — kein Raten erforderlich.
Installation
Claude Code
claude mcp add --scope user api-testing -- npx -y @cocaxcode/api-testing-mcp@latestClaude Desktop
Fügen Sie dies Ihrer Konfigurationsdatei hinzu (~/Library/Application Support/Claude/claude_desktop_config.json unter macOS, %APPDATA%\Claude\claude_desktop_config.json unter Windows):
{
"mcpServers": {
"api-testing": {
"command": "npx",
"args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
}
}
}Cursor / Windsurf
Fügen Sie dies zu .cursor/mcp.json oder .windsurf/mcp.json in Ihrem Projektstammverzeichnis hinzu:
{
"mcpServers": {
"api-testing": {
"command": "npx",
"args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
}
}
}VS Code — zu .vscode/mcp.json hinzufügen:
{
"servers": {
"api-testing": {
"command": "npx",
"args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
}
}
}Codex CLI (OpenAI):
codex mcp add api-testing -- npx -y @cocaxcode/api-testing-mcp@latestOder zu ~/.codex/config.toml hinzufügen:
[mcp_servers.api-testing]
command = "npx"
args = ["-y", "@cocaxcode/api-testing-mcp@latest"]Gemini CLI — zu ~/.gemini/settings.json hinzufügen:
{
"mcpServers": {
"api-testing": {
"command": "npx",
"args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
}
}
}Schnellstart
Nach der Installation richten Sie eine Umgebung ein, damit relative Pfade automatisch aufgelöst werden:
"Create an environment called dev with BASE_URL http://localhost:3000"Wenn Ihre API eine Swagger/OpenAPI-Spezifikation hat, importieren Sie diese:
"Import my API spec from http://localhost:3000/api-docs-json"Überprüfen Sie es mit: "List my environments" — Sie sollten die gerade erstellte Umgebung sehen.
Funktionen
HTTP-Anfragen
Senden Sie jede HTTP-Methode mit Headern, Query-Parametern, JSON-Body, Authentifizierung und {{variable}}-Interpolation. Relative URLs werden automatisch gegen BASE_URL aufgelöst.
"POST to /api/users with name Jane and email jane@company.com using my bearer token"Unterstützt: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS — Bearer / API Key / Basic Auth — benutzerdefinierte Timeouts.
Assertions
Validieren Sie Antworten mit strukturierten Bestehen/Nicht-Bestehen-Ergebnissen:
"Verify that GET /api/health returns 200, body.status is ok, and responds in under 500ms"PASS — 3/3 assertions passed
status === 200
body.status === "ok"
timing.total_ms < 50010 Operatoren: eq, neq, gt, gte, lt, lte, contains, not_contains, exists, type
Request-Abläufe
Verketten Sie Anfragen mit Variablenextraktion zwischen den Schritten. Perfekt für Authentifizierungsabläufe und CRUD-Sequenzen.
"Login as admin@test.com, extract the access token, then use it to fetch all users"flow_run({
steps: [
{
name: "login",
method: "POST",
url: "/auth/login",
body: { email: "admin@test.com", password: "SecurePass#99" },
extract: { "TOKEN": "body.access_token" }
},
{
name: "get-users",
method: "GET",
url: "/api/users",
headers: { "Authorization": "Bearer {{TOKEN}}" }
}
]
})OpenAPI-Import
Importieren Sie Spezifikationen von einer URL oder einer lokalen Datei (JSON und YAML). Nach dem Import kennt die KI jeden Endpunkt, Parameter und jedes Schema.
"Import my API spec from http://localhost:3000/api-docs-json"
"Import the spec from ./openapi.yaml"
"What parameters does POST /users expect?"Unterstützt OpenAPI 3.x mit vollständiger $ref-Auflösung, allOf, oneOf, anyOf. OpenAPI 2.0 wird teilweise unterstützt.
Mock-Datengenerierung
Generieren Sie realistische Fake-Daten aus Ihren OpenAPI-Schemas. Respektiert Typen, Formate (email, uuid, date-time), Enums und erforderliche Felder.
"Generate mock data for creating a user"{
"email": "user42@example.com",
"name": "Test User 73",
"password": "TestPass123!",
"role": "admin"
}Lasttests
Feuern Sie N gleichzeitige Anfragen ab und erhalten Sie Leistungsmetriken:
"How fast is the health endpoint with 50 concurrent requests?"LOAD TEST — GET /api/health
Requests: 50 concurrent
Successful: 50 | Failed: 0
Req/sec: 23.31
Min: 45ms | Avg: 187ms
p50: 156ms | p95: 412ms | p99: 523ms
Max: 567msAntwort-Diffing
Führen Sie zwei Anfragen aus und vergleichen Sie deren Antworten Feld für Feld. Erkennen Sie Regressionen oder vergleichen Sie Umgebungen.
"Compare the users endpoint between dev and prod"Bulk-Tests
Führen Sie jede gespeicherte Anfrage in einer Sammlung aus (oder filtern Sie nach Tag) und erhalten Sie eine Zusammenfassung:
"Run all my saved smoke tests"BULK TEST — 8/8 passed | 1.2s total
health — GET /health → 200 (45ms)
list-users — GET /users → 200 (123ms)
create-post — POST /blog → 201 (89ms)
login — POST /auth/login → 200 (156ms)Sammlungen
Speichern Sie Anfragen zur Wiederverwendung mit Tags. Erstellen Sie Regressions-Suiten.
"Save this request as create-user with tags auth, smoke"
"List all requests tagged smoke"Umgebungen
Umgebungen enthalten Ihre Variablen — BASE_URL, Token, API-Schlüssel — und halten sie nach Kontext getrennt. Das System hat drei Kernkonzepte:
Gruppe. Eine Gruppe organisiert Umgebungen und bindet sie an Verzeichnisse. Eine Gruppe hat N Scopes (Verzeichnisse), die ihre Umgebungen teilen, und genau eine Standardumgebung. Wenn Sie eine Umgebung innerhalb einer Gruppe erstellen, gehört sie zu dieser Gruppe. Wenn Sie in ein Verzeichnis cden, das ein Scope einer Gruppe ist, werden deren Umgebungen automatisch verfügbar.
Standard. Die Standardumgebung wird automatisch aktiviert, wenn Sie einen Scope ihrer Gruppe betreten. Sie bleibt über Sitzungen hinweg bestehen — starten Sie Ihren Editor neu, öffnen Sie Ihr Terminal erneut, und der Standardwert ist immer noch da. Einmal einstellen und vergessen.
Aktiv. Die aktive Umgebung ist diejenige, die gerade für die Variablenauflösung verwendet wird. Sie beginnt als Standard, wenn Sie einen Scope betreten, aber Sie können jederzeit wechseln. Die aktive Auswahl ist nur sitzungsbezogen — sie wird beim Neustart auf den Standardwert zurückgesetzt.
Globale Umgebungen (die keiner Gruppe zugeordnet sind) existieren weiterhin. Sie erfordern eine explizite Aktivierung mit env_switch und bleiben nicht über Sitzungen hinweg bestehen.
Praktisches Beispiel:
"Create a group called my-api"
"Add this directory as scope to my-api"
"Create a dev environment with BASE_URL http://localhost:3000" <- auto-joins group, auto-default
"Create a prod environment with BASE_URL https://api.example.com"
"List environments" <- shows dev (active, default) and prod
"Switch to prod" <- session only
"Set prod as default" <- persistsAutomatische Interpolation. Jede {{variable}} in URLs, Headern, Query-Parametern oder Request-Bodys wird gegen die aktive Umgebung aufgelöst, bevor die Anfrage abgeschickt wird. Setzen Sie BASE_URL einmal und jeder relative Pfad funktioniert einfach.
Ihre Anmeldedaten verlassen niemals Ihren Rechner. Umgebungsdateien sind einfaches JSON, das in ~/.api-testing/ gespeichert wird. Nichts wird mit einer Cloud synchronisiert. Nichts wird in Exporte eingebettet. Nichts wird von Git verfolgt. Ihre Token und Geheimnisse bleiben genau dort, wo sie sein sollten: auf Ihrer Festplatte, unter Ihrer Kontrolle.
Postman-Import & Export
Bidirektionale Postman-Unterstützung. Migrieren Sie nahtlos zwischen Postman und Ihrem KI-Workflow.
"Import my Postman collection from ./exported.postman_collection.json"
"Export my collection to Postman"
"Export the dev environment for Postman"Sammlung: Postman v2.1 Format. Ordner werden zu Tags. Authentifizierung wird von Ordnern/Sammlungsebene geerbt. Unterstützt Raw-JSON, x-www-form-urlencoded, form-data Bodys.
Umgebung: Bevorzugt currentValue gegenüber value. Überspringt deaktivierte Variablen. Optionales activate-Flag.
Sammlung: Anfragen in Ordnern nach Tag gruppiert. Authentifizierung auf das native Postman-Format gemappt. {{variables}} bleiben unverändert erhalten.
Umgebung: Alle Variablen werden als enabled: true im Postman-kompatiblen Format exportiert.
Nativer Export & Import
Exportieren Sie Sammlungen und Umgebungen in einen portablen .atm/-Ordner. Teilen Sie sie mit Ihrem Team oder kopieren Sie sie zwischen Projekten.
"Export my collection and dev environment"your-project/
└── .atm/
├── collection.json
└── dev.env.jsonHinweis:
.atm/wird beim ersten Export automatisch zu.gitignorehinzugefügt.
cURL-Export
Konvertieren Sie jede gespeicherte Anfrage in einen sofort kopierbaren cURL-Befehl mit aufgelösten Variablen.
"Export the create-user request as curl"curl -X POST \
'https://api.example.com/users' \
-H 'Authorization: Bearer eyJhbGci...' \
-H 'Content-Type: application/json' \
-d '{"name":"Jane","email":"jane@company.com"}'Tool-Referenz
42 Tools in 9 Kategorien:
Kategorie | Tools | Anzahl |
Anfragen |
| 1 |
Testen |
| 1 |
Abläufe |
| 1 |
Sammlungen |
| 4 |
Umgebungen |
| 8 |
Gruppen |
| 7 |
API-Spezifikationen |
| 4 |
Mock |
| 1 |
Dienstprogramme |
| 12 |
Tipp: Sie müssen Tools nicht direkt aufrufen. Beschreiben Sie, was Sie möchten, und die KI wählt das richtige aus.
Speicherung
Alles ist lokal. Keine Datenbank, keine Cloud-Synchronisierung, keine Telemetrie. Alle Daten liegen in ~/.api-testing/ als einfache JSON-Dateien, die Sie jederzeit lesen, sichern oder löschen können.
~/.api-testing/
├── groups/ # Environment groups with scopes and defaults
├── environments/ # Environment variables — tokens, keys, passwords
├── collections/ # Saved requests (shareable, no secrets)
├── specs/ # Imported OpenAPI specs
└── project-envs.json # Session-only active environments (cleared on restart)Globale Speicherung vs. Projekt-Exporte. Das Verzeichnis ~/.api-testing/ ist Ihr privater, globaler Speicher — hier leben Anmeldedaten und sie verlassen diesen Ort nie. Wenn Sie eine Sammlung oder Umgebung exportieren, geht sie in .atm/ in Ihrem Projektstammverzeichnis. Dieser Ordner wird beim ersten Export automatisch zu .gitignore hinzugefügt, aber selbst wenn Sie ihn committen, bleiben Ihre Anmeldedaten in ~/.api-testing/ und werden niemals in .atm/ kopiert. Sie können .atm/-Exporte sicher mit Ihrem Team teilen, ohne Geheimnisse preiszugeben.
Überschreiben Sie den Standard-Speicherpfad:
{
"env": { "API_TESTING_DIR": "/path/to/custom/.api-testing" }
}Warnung: Wenn Sie
API_TESTING_DIRauf einen Pfad innerhalb eines Git-Repositorys überschreiben, fügen Sie.api-testing/zu Ihrer.gitignorehinzu, um das Pushen von Anmeldedaten zu vermeiden.
Architektur
src/
├── index.ts # Entry point (shebang + StdioServerTransport)
├── server.ts # createServer() factory
├── tools/ # 42 tool handlers (one file per category)
│ ├── request.ts # HTTP requests (1)
│ ├── assert.ts # Assertions (1)
│ ├── flow.ts # Request chaining (1)
│ ├── collection.ts # Collection CRUD (4)
│ ├── environment.ts # Environment management (8)
│ ├── group.ts # Environment groups (7)
│ ├── api-spec.ts # OpenAPI import/browse (4)
│ ├── mock.ts # Mock data generation (1)
│ ├── load-test.ts # Load testing (1)
│ └── utilities.ts # curl, diff, bulk, import/export (12)
├── lib/ # Business logic (no MCP dependency)
│ ├── http-client.ts # fetch wrapper with timing
│ ├── storage.ts # JSON file storage engine
│ ├── schemas.ts # Shared Zod schemas
│ ├── url.ts # BASE_URL resolution
│ ├── path.ts # Dot-notation accessor (body.data.0.id)
│ ├── interpolation.ts # {{variable}} resolver
│ └── openapi-parser.ts # $ref + allOf/oneOf/anyOf resolution
└── __tests__/ # 10+ test suites, 120+ testsStack: TypeScript (strict) · MCP SDK · Zod · Vitest · tsup
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cocaxcode/api-testing-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server