Skip to main content
Glama
SHREELASYABEZAWADA

api-testing-agent

MCP-агент тестирования API

AI-агент для тестирования API, который использует Model Context Protocol (MCP) для автоматизации генерации тест-кейсов API, их выполнения и анализа сбоев.

Что он делает

  1. Обнаруживает конечные точки из спецификации OpenAPI/Swagger (через MCP-инструмент).

  2. Генерирует позитивные и негативные тестовые сценарии для каждой конечной точки с помощью LLM (LangChain + OpenAI) — валидные входные данные, отсутствующие обязательные поля, неверные типы, граничные значения, сбои аутентификации и т.д.

  3. Выполняет каждый тест-кейс против реального API через MCP-инструменты, которые отправляют запросы, проверяют ответы и анализируют HTTP-статусы.

  4. Анализирует сбои, сравнивая ожидаемые и фактические ответы и запрашивая у LLM объяснение, почему тест не прошёл и насколько это критично.

  5. Формирует отчёт в виде структурированного Markdown/JSON тестового отчёта.

Сервис FastAPI оборачивает весь конвейер, чтобы его можно было запускать по HTTP (POST /agent/run) — например, из CI, планировщика или UI, — а MCP-сервер можно также запускать отдельно и подключать к любому MCP-совместимому клиенту (Claude Desktop, Claude Code и т.д.).

Related MCP server: MCP-QA

Архитектура

┌─────────────────────┐      OpenAPI spec / target base URL
│   FastAPI Service    │◄──────────────────────────────────
│   (api/main.py)      │
└──────────┬───────────┘
           │ triggers
┌──────────▼───────────┐
│   Testing Agent        │
│   (agent/*.py)         │
│                         │
│  1. TestGenerator       │──uses──► OpenAI (LangChain)
│     (positive/negative  │
│      scenarios)         │
│                         │
│  2. TestExecutor        │──calls──► MCP Client ──stdio──► MCP Server
│     (runs each case)    │                                  │
│                         │                          ┌───────┴────────┐
│  3. FailureAnalyzer     │                          │  MCP Tools:     │
│     (LLM explains diff) │                          │  - discover_    │
│                         │                          │    endpoints    │
│  4. ReportGenerator     │                          │  - send_request │
│     (md/json report)    │                          │  - validate_    │
└─────────────────────────┘                          │    response     │
                                                       │  - analyze_    │
                                                       │    status_code │
                                                       └────────┬───────┘
                                                                │ HTTP
                                                       ┌────────▼───────┐
                                                       │  Target API     │
                                                       │  (any REST API, │
                                                       │  e.g. sample_   │
                                                       │  target_api/)   │
                                                       └─────────────────┘

Структура проекта

mcp-api-testing-agent/
├── mcp_server/
│   ├── server.py               # MCP server (FastMCP) exposing the 4 tools
│   └── tools/
│       ├── discover.py         # discover_endpoints — parses OpenAPI spec
│       ├── request_tool.py     # send_request — issues HTTP calls
│       ├── validate.py         # validate_response — schema/status checks
│       └── status_analyzer.py  # analyze_status_code — status code semantics
├── agent/
│   ├── mcp_client.py           # stdio MCP client used by the agent
│   ├── test_generator.py       # LLM-based positive/negative test generation
│   ├── test_executor.py        # runs generated test cases via MCP tools
│   ├── failure_analyzer.py     # LLM explains expected-vs-actual mismatches
│   └── report_generator.py     # Markdown + JSON report writer
├── api/
│   └── main.py                  # FastAPI app: POST /agent/run, GET /agent/reports/{id}
├── schemas/
│   └── models.py                # Pydantic models shared across the app
├── sample_target_api/
│   └── demo_api.py              # tiny FastAPI service to test the agent against
├── scripts/
│   └── run_agent.py             # CLI entrypoint (no FastAPI needed)
├── reports/                     # generated test reports land here
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── .env.example

Установка

python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env   # add your OPENAI_API_KEY

Запуск демонстрационного целевого API (небольшой пример API для тестирования)

uvicorn sample_target_api.demo_api:app --port 9000

Это открывает демонстрационный API «Task Manager» с CRUD-эндпоинтами /tasks и сгенерированной OpenAPI-спецификацией по адресу http://localhost:9000/openapi.json.

Запуск агента через CLI

python scripts/run_agent.py --spec http://localhost:9000/openapi.json --base-url http://localhost:9000

В результате будут сгенерированы тест-кейсы, выполнены их прогоны, проанализированы сбои и записан отчёт в reports/report_<timestamp>.md и .json.

Запуск агента как HTTP-сервиса

uvicorn api.main:app --port 8000
curl -X POST http://localhost:8000/agent/run \
  -H "Content-Type: application/json" \
  -d '{"spec_url": "http://localhost:9000/openapi.json", "base_url": "http://localhost:9000"}'

Запуск MCP-сервера отдельно

Чтобы подключить инструменты к MCP-совместимому клиенту (Claude Desktop, Claude Code и т.д.) вместо встроенного агента:

python -m mcp_server.server

Затем добавьте его в конфигурацию вашего MCP-клиента, например, для Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "api-testing-agent": {
      "command": "python",
      "args": ["-m", "mcp_server.server"],
      "cwd": "/absolute/path/to/mcp-api-testing-agent"
    }
  }
}

Запуск всего с Docker

docker compose up --build

Это запускает демонстрационное целевое API, FastAPI-сервис агента тестирования на базе MCP и монтирует каталог ./reports, чтобы сгенерированные отчёты были доступны на хостовой машине.

Пример вывода отчёта

# API Test Report — 2026-02-03T10:15:00

Target: http://localhost:9000
Total: 18   Passed: 15   Failed: 3   Pass rate: 83%

## Failures

### POST /tasks — missing required field "title" (negative test)
Expected: 422 Unprocessable Entity
Actual:   500 Internal Server Error
Analysis: The endpoint does not validate the request body before hitting the
database layer, so a missing "title" causes an unhandled exception instead
of a client-error response. Severity: High — indicates missing input
validation.

Замечания по адаптации под реальный проект

  • Замените sample_target_api/ на ваш настоящий сервис или укажите --spec / spec_url на любой работающий OpenAPI/Swagger JSON-эндпоинт.

  • Промпт в test_generator.py можно расширить доменными правилами (например, требуемые заголовки аутентификации, ограничения частоты запросов, ID арендаторов).

  • Для CI запускайте scripts/run_agent.py как шаг пайплайна и завершайте сборку с ошибкой, если report["summary"]["failed"] > 0.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for the comprehensive analysis of Swagger 2.0 and OpenAPI 3.x contracts. It allows users to extract detailed information about endpoints, request/response schemas, parameters, and security configurations from API documentation.
    -
  • A
    license
    A
    quality
    F
    maintenance
    MCP server for API test case generation from Swagger/OpenAPI specs. Parses Swagger 2.0 and OpenAPI 3.x, generates test cases across 8 categories (positive, negative, boundary, auth, security, idempotency, pagination, business logic), and exports to Postman, TestRail, Allure, k6, pytest, Gherkin, and CSV. Supports internal corporate APIs with auth headers. Auto-saves export files to your working di
    10
    10 npm
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Parses Swagger 2.0 and OpenAPI 3.x specifications, exposing API endpoints, schemas, and authentication through MCP tools with local caching to reduce token usage.
    11
    3 npm
    1
    MIT