Skip to content

MCP-сервер

MCP-сервер — это основная точка взаимодействия для LLM-агентов. Он предоставляет все настроенные API в виде MCP-инструментов, которые LLM может вызывать.

Конфигурация

yaml
mcp:
  transport: stdio

Транспорты

Доступны три типа транспорта:

ТранспортОписаниеКогда использовать
stdioСтандартный ввод/выводЛокальные LLM-клиенты (VS Code, Cursor, Claude Desktop)
sseServer-Sent EventsУдалённые клиенты, HTTP-взаимодействие
streamable-httpHTTP с потоковой передачейВеб-клиенты, современные MCP-клиенты

stdio (по умолчанию)

LLM-клиент запускает swag2mcp как дочерний процесс. Взаимодействие происходит через стандартный ввод и вывод. Сетевой порт не требуется.

yaml
mcp:
  transport: stdio
bash
swag2mcp mcp

SSE

Транспорт Server-Sent Events для HTTP-взаимодействия. MCP-сервер прослушивает HTTP-порт, а LLM-клиент подключается удалённо.

yaml
mcp:
  transport: sse
  addr: "127.0.0.1:8080"
  path: "/mcp"
bash
swag2mcp mcp --transport sse --http-addr 127.0.0.1:8080

Streamable HTTP

Современный HTTP-транспорт с поддержкой потоковых ответов. Похож на SSE, но использует другой протокол.

yaml
mcp:
  transport: streamable-http
  addr: "127.0.0.1:8080"
  path: "/mcp"
bash
swag2mcp mcp --transport streamable-http --http-addr 0.0.0.0:8080

Параметры

transport

  • Тип: string
  • По умолчанию: "stdio"
  • Варианты: stdio, sse, streamable-http
  • Эффект: Определяет, как MCP-сервер взаимодействует с LLM-клиентом.

addr

  • Тип: string
  • По умолчанию: ":8080"
  • Описание: Адрес прослушивания для SSE и Streamable HTTP транспортов. Формат: host:port.
  • Примеры: ":8080", "127.0.0.1:8080", "0.0.0.0:9000"

path

  • Тип: string
  • По умолчанию: "/mcp"
  • Описание: URL-путь для MCP-эндпоинта. LLM-клиент отправляет запросы на http://<addr><path>.
  • Примеры: "/mcp", "/api/mcp", "/v1/mcp"

auth.token

  • Тип: string
  • По умолчанию: "" (без аутентификации)
  • Описание: Bearer-токен для аутентификации HTTP-транспорта. Если установлен, LLM-клиент должен включать Authorization: Bearer <token> в каждый запрос.
  • Примечание: Поддерживает разрешение $(ENV_VAR).

auth.type

  • Type: string
  • Default: "" (no JWT auth)
  • Options: jwks, oidc, introspection
  • Description: JWT authentication type for HTTP transport. When set, enables dynamic token verification using JWKS, OIDC Discovery, or token introspection.

auth.jwks_url

  • Type: string
  • Default: ""
  • Description: URL of the JWKS (JSON Web Key Set) endpoint. Required when auth.type is jwks or resolved via OIDC discovery.

auth.issuer

  • Type: string
  • Default: ""
  • Description: Expected JWT issuer (iss claim). If set, tokens with a different issuer are rejected.

auth.audience

  • Type: string
  • Default: ""
  • Description: Expected JWT audience (aud claim). If set, tokens without this audience are rejected.

auth.introspection_url

  • Type: string
  • Default: ""
  • Description: Token introspection endpoint URL. Required when auth.type is introspection.

auth.client_id

  • Type: string
  • Default: ""
  • Description: Client ID for introspection auth. Required when auth.type is introspection.

auth.client_secret

  • Type: string
  • Default: ""
  • Description: Client secret for introspection auth. Supports $(ENV_VAR) resolution.

HTTP-аутентификация

Защитите MCP HTTP-эндпоинт с помощью bearer-токена:

yaml
mcp:
  auth:
    token: "my-secret-token"

Или через флаг CLI:

bash
swag2mcp mcp --auth-token "my-secret-token"

With JWT authentication (JWKS)

Protect the MCP HTTP endpoint with JWT verification via a JWKS endpoint:

yaml
mcp:
  auth:
    type: jwks
    jwks_url: "https://auth.example.com/.well-known/jwks.json"
    issuer: "https://auth.example.com/"
    audience: "swag2mcp"
bash
swag2mcp mcp --transport sse --http-addr 0.0.0.0:8080 \
  --auth-type jwks \
  --auth-jwks-url "https://auth.example.com/.well-known/jwks.json" \
  --auth-issuer "https://auth.example.com/" \
  --auth-audience "swag2mcp"

With JWT authentication (OIDC Discovery)

yaml
mcp:
  auth:
    type: oidc
    issuer: "https://auth.example.com/"
    audience: "swag2mcp"

With JWT authentication (Token Introspection)

yaml
mcp:
  auth:
    type: introspection
    introspection_url: "https://auth.example.com/introspect"
    client_id: "my-client"
    client_secret: "$(MCP_CLIENT_SECRET)"
bash
swag2mcp mcp --transport sse --http-addr 0.0.0.0:8080 \
  --auth-type introspection \
  --auth-introspection-url "https://auth.example.com/introspect" \
  --auth-client-id "my-client" \
  --auth-client-secret "$(MCP_CLIENT_SECRET)"

Health Check

MCP-сервер предоставляет эндпоинт health check, который работает без инициализации MCP:

bash
curl http://127.0.0.1:8080/health
# {"status":"ok","version":"v1.2.0"}

Флаги запуска

Флаги CLI переопределяют YAML-конфигурацию. Если флаг не установлен, значение из раздела mcp в YAML используется как запасной вариант.

ФлагТипПо умолчаниюОписание
--transportstring"stdio"Тип транспорта: stdio, sse, streamable-http
--http-addrstring":8080"Адрес HTTP-сервера (для SSE и Streamable HTTP)
--http-pathstring"/mcp"URL-путь для MCP-обработчика
--auth-tokenstring""Bearer-токен для аутентификации HTTP-транспорта
--logfilestring""Путь к файлу лога (логи пишутся в stderr, если не указан)
--disable-llm-authbooltrueУдалить инструмент auth из списка MCP-инструментов
--dump-dirstring""Директория для сохранения HTTP-запросов (отладка)
--tagsstring""Фильтр спецификаций по тегам (через запятую)
--auth-typestring""JWT auth type: jwks, oidc, introspection
--auth-jwks-urlstring""JWKS URL for JWT auth
--auth-issuerstring""JWT issuer for token validation
--auth-audiencestring""JWT audience for token validation
--auth-introspection-urlstring""Token introspection URL
--auth-client-idstring""Client ID for introspection auth
--auth-client-secretstring""Client secret for introspection auth