Skip to main content
Glama

Обзор

Самый полный MCP-сервер для тестирования API — 42 инструмента, нулевая настройка, ничего подобного не существует. Это не просто отправитель запросов. Это полноценная рабочая среда для тестирования: HTTP-запросы с утверждениями (assertions), многошаговые потоки с извлечением переменных, импорт OpenAPI с генерацией мок-данных на основе схем, нагрузочное тестирование с метриками перцентилей, сравнение ответов между окружениями, пакетные тесты, переиспользуемые коллекции, группы окружений с привязкой к директориям и постоянными значениями по умолчанию, импорт/экспорт Postman и экспорт cURL. Все это через естественный диалог. Никаких аккаунтов, облаков или сгенерированных файлов. Все работает локально и сохраняется в виде обычного JSON, который принадлежит вам.


Просто общайтесь

Вам не нужно учить названия инструментов или параметры. Опишите, что вы хотите, и ИИ сам выберет нужный инструмент.

"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"

Если вы импортировали спецификацию OpenAPI, ИИ уже знает каждый эндпоинт, каждое обязательное поле и каждое допустимое значение перечисления (enum). Когда вы говорите «создай пост в блоге», он считывает схему и правильно формирует запрос — никаких догадок.


Установка

Claude Code

claude mcp add --scope user api-testing -- npx -y @cocaxcode/api-testing-mcp@latest

Claude Desktop

Добавьте в файл конфигурации (~/Library/Application Support/Claude/claude_desktop_config.json на macOS, %APPDATA%\Claude\claude_desktop_config.json на Windows):

{
  "mcpServers": {
    "api-testing": {
      "command": "npx",
      "args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
    }
  }
}

Cursor / Windsurf

Добавьте в .cursor/mcp.json или .windsurf/mcp.json в корне вашего проекта:

{
  "mcpServers": {
    "api-testing": {
      "command": "npx",
      "args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
    }
  }
}

VS Code — добавьте в .vscode/mcp.json:

{
  "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@latest

Или добавьте в ~/.codex/config.toml:

[mcp_servers.api-testing]
command = "npx"
args = ["-y", "@cocaxcode/api-testing-mcp@latest"]

Gemini CLI — добавьте в ~/.gemini/settings.json:

{
  "mcpServers": {
    "api-testing": {
      "command": "npx",
      "args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
    }
  }
}

Быстрый старт

После установки настройте окружение, чтобы относительные пути разрешались автоматически:

"Create an environment called dev with BASE_URL http://localhost:3000"

Если у вашего API есть спецификация Swagger/OpenAPI, импортируйте её:

"Import my API spec from http://localhost:3000/api-docs-json"

Проверьте командой: "List my environments" — вы должны увидеть только что созданное окружение.


Возможности

HTTP-запросы

Отправляйте запросы с любым HTTP-методом, заголовками, параметрами запроса, JSON-телом, аутентификацией и интерполяцией {{variable}}. Относительные URL автоматически разрешаются относительно BASE_URL.

"POST to /api/users with name Jane and email jane@company.com using my bearer token"

Поддерживаются: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS — Bearer / API Key / Basic auth — пользовательские тайм-ауты.

Утверждения (Assertions)

Проверяйте ответы с помощью структурированных результатов (пройдено/не пройдено):

"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 < 500

10 операторов: eq, neq, gt, gte, lt, lte, contains, not_contains, exists, type

Потоки запросов

Связывайте запросы с извлечением переменных между шагами. Идеально подходит для потоков аутентификации и последовательностей CRUD.

"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

Импортируйте спецификации из URL или локального файла (JSON и YAML). После импорта ИИ знает каждый эндпоинт, параметр и схему.

"Import my API spec from http://localhost:3000/api-docs-json"
"Import the spec from ./openapi.yaml"
"What parameters does POST /users expect?"

Поддерживается OpenAPI 3.x с полным разрешением $ref, allOf, oneOf, anyOf. OpenAPI 2.0 поддерживается частично.

Генерация мок-данных

Генерируйте реалистичные фиктивные данные на основе ваших схем OpenAPI. Учитываются типы, форматы (email, uuid, date-time), перечисления и обязательные поля.

"Generate mock data for creating a user"
{
  "email": "user42@example.com",
  "name": "Test User 73",
  "password": "TestPass123!",
  "role": "admin"
}

Нагрузочное тестирование

Запускайте N параллельных запросов и получайте метрики производительности:

"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: 567ms

Сравнение ответов (Diffing)

Выполняйте два запроса и сравнивайте их ответы по полям. Обнаруживайте регрессии или сравнивайте окружения.

"Compare the users endpoint between dev and prod"

Пакетное тестирование

Запускайте все сохраненные запросы в коллекции (или фильтруйте по тегу) и получайте сводку:

"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)

Коллекции

Сохраняйте запросы для повторного использования с тегами. Создавайте наборы регрессионных тестов.

"Save this request as create-user with tags auth, smoke"
"List all requests tagged smoke"

Окружения

Окружения хранят ваши переменные — BASE_URL, токены, API-ключи — и разделяют их по контексту. Система имеет три основных понятия:

Группа. Группа организует окружения и привязывает их к директориям. Группа имеет N областей видимости (директорий), которые используют её окружения, и ровно одно окружение по умолчанию. Когда вы создаете окружение внутри группы, оно принадлежит этой группе. Когда вы переходите (cd) в директорию, являющуюся областью видимости группы, её окружения становятся доступны автоматически.

По умолчанию. Окружение по умолчанию активируется автоматически, когда вы входите в область видимости его группы. Оно сохраняется между сессиями — перезапустите редактор, откройте терминал заново, и значение по умолчанию останется на месте. Установите один раз и забудьте.

Активное. Активное окружение — это то, которое используется прямо сейчас для разрешения переменных. При входе в область видимости оно устанавливается как «по умолчанию», но вы можете переключить его в любой момент. Активный выбор действует только в рамках сессии — при перезапуске он сбрасывается на значение по умолчанию.

Глобальные окружения (не связанные с группой) также существуют. Они требуют явной активации через env_switch и не сохраняются между сессиями.

Практический пример:

"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"                                            <- persists

Автоматическая интерполяция. Любая переменная {{variable}} в URL, заголовках, параметрах запроса или теле запроса разрешается относительно активного окружения перед отправкой запроса. Установите BASE_URL один раз, и любой относительный путь будет работать.

Ваши учетные данные никогда не покидают ваш компьютер. Файлы окружений — это обычные JSON-файлы, хранящиеся в ~/.api-testing/. Ничего не синхронизируется с облаком. Ничего не встраивается в экспортируемые файлы. Ничего не отслеживается через git. Ваши токены и секреты остаются там, где им и положено быть: на вашем диске, под вашим контролем.

Импорт и экспорт Postman

Двусторонняя поддержка Postman. Переходите между Postman и вашим рабочим процессом с ИИ без проблем.

"Import my Postman collection from ./exported.postman_collection.json"
"Export my collection to Postman"
"Export the dev environment for Postman"

Коллекция: Формат Postman v2.1. Папки становятся тегами. Аутентификация наследуется от папок/уровня коллекции. Поддерживаются тела запросов raw JSON, x-www-form-urlencoded, form-data.

Окружение: Предпочитает currentValue вместо value. Пропускает отключенные переменные. Опциональный флаг activate.

Коллекция: Запросы группируются в папки по тегам. Аутентификация отображается в нативный формат Postman. {{variables}} сохраняются как есть.

Окружение: Все переменные экспортируются как enabled: true в формате, совместимом с Postman.

Нативный экспорт и импорт

Экспортируйте коллекции и окружения в переносимую папку .atm/. Делитесь с командой или копируйте между проектами.

"Export my collection and dev environment"
your-project/
└── .atm/
    ├── collection.json
    └── dev.env.json

Примечание: .atm/ автоматически добавляется в .gitignore при первом экспорте.

Экспорт cURL

Преобразуйте любой сохраненный запрос в готовую к вставке команду cURL с разрешенными переменными.

"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"}'

Справочник инструментов

42 инструмента в 9 категориях:

Категория

Инструменты

Кол-во

Запросы

request

1

Тестирование

assert

1

Потоки

flow_run

1

Коллекции

collection_save, collection_list, collection_get, collection_delete

4

Окружения

env_create, env_list, env_set, env_get, env_switch, env_rename, env_delete, env_spec

8

Группы

env_group_create, env_group_list, env_group_delete, env_group_add_scope, env_group_remove_scope, env_set_default, env_set_group

7

API Specs

api_import, api_spec_list, api_endpoints, api_endpoint_detail

4

Моки

mock

1

Утилиты

load_test, export_curl, diff_responses, bulk_test, export_collection, import_collection, export_environment, import_environment, export_postman_collection, import_postman_collection, export_postman_environment, import_postman_environment

12

Совет: Вам не нужно вызывать инструменты напрямую. Опишите, что вы хотите, и ИИ сам выберет нужный.


Хранилище

Все локально. Никаких баз данных, облачной синхронизации или телеметрии. Все данные живут в ~/.api-testing/ в виде обычных JSON-файлов, которые вы можете прочитать, создать резервную копию или удалить в любое время.

~/.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)

Глобальное хранилище против экспорта проектов. Директория ~/.api-testing/ — это ваше личное глобальное хранилище, где живут учетные данные, и они никогда его не покидают. Когда вы экспортируете коллекцию или окружение, они попадают в .atm/ в корне вашего проекта. Эта папка автоматически добавляется в .gitignore при первом экспорте, но даже если вы решите закоммитить её, ваши учетные данные останутся в ~/.api-testing/ и никогда не будут скопированы в .atm/. Вы можете безопасно делиться экспортами .atm/ с командой, не опасаясь утечки секретов.

Переопределение пути к хранилищу по умолчанию:

{
  "env": { "API_TESTING_DIR": "/path/to/custom/.api-testing" }
}

Предупреждение: Если вы переопределяете API_TESTING_DIR на путь внутри git-репозитория, добавьте .api-testing/ в ваш .gitignore, чтобы избежать отправки учетных данных в репозиторий.


Архитектура

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+ tests

Стек: TypeScript (strict) · MCP SDK · Zod · Vitest · tsup


MIT · Создано cocaxcode

-
security - not tested
A
license - permissive license
-
quality - not tested

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