Skip to content

Спецификации

Спецификация — это логический контейнер, представляющий домен или сервис API (например, YouTube, Binance, Open-Meteo). Каждая спецификация имеет уникальный domain, base_url, опциональную auth и содержит одну или несколько коллекций.

Коллекции указывают на файлы OpenAPI/Swagger/Postman — сама спецификация — это не файл, а группировка вокруг них.

Domain — правила именования

domain — это уникальный идентификатор спецификации. Он используется в качестве первичного ключа во всей системе.

ПравилоОграничение
СимволыТолько a-z, 0-9, _, -
Длина1–60 символов
УникальностьДубликаты запрещены — две активные спецификации не могут иметь одинаковый domain

Примеры: meteo, binance, github-api, my_service, openai-v1

Неправильные примеры: Meteo (заглавные), my api (пробел), my.api (точка), a-very-long-domain-name-that-exceeds-sixty-characters (слишком длинный)

Поля спецификации

ПолеYAML-ключОбязательноОписание
DomaindomainУникальный идентификатор API (1–60 символов, a-z0-9_-)
LLM Titlellm_titleЧеловекочитаемое имя, которое LLM использует для обращения к этому API (5–120 символов)
LLM Instructionllm_instructionКороткая подсказка, внедряемая в системный промпт swag2mcp (макс. 500 символов)
Base URLbase_urlБазовый URL для всех запросов к API (валидный URL)
DisabledisableПропустить эту спецификацию при загрузке и индексации
TagstagsТеги для фильтрации (например, ["public", "demo"])
AuthauthКонфигурация аутентификации
HTTP Clienthttp_clientHTTP-настройки для спецификации (заголовки, куки)
КоллекцииcollectionsСписок из 1–30 коллекций

Валидация

При проверке конфига swag2mcp проверяет следующие правила для каждой спецификации:

ПроверкаПравило
Дублирующиеся доменыНикакие две активные спецификации не могут иметь одинаковый domain
Формат domainДолжен соответствовать ^[a-z0-9_-]{1,60}$
LLM TitleОбязательно, 5–120 символов, буквы/цифры/пробелы/базовая пунктуация
LLM InstructionМакс. 500 символов, тот же набор символов, что и title
Base URLОбязательно, должен быть валидным URL
КоллекцииОбязательно, от 1 до 30 элементов
AuthПроверяется для каждого типа (например, bearer требует token, basic требует username + password)
LocationКаждая коллекция должна иметь валидный URL или путь к файлу (5–250 символов)

Валидация запускается при каждом старте swag2mcp mcp. Если она не пройдена, MCP-сервер не запустится — в некоторых IDE это означает, что сервер просто не подключится, и LLM получит понятное сообщение об ошибке с объяснением, что исправить.

Для диагностики проблем перед запуском сервера используйте команду validate:

bash
# Проверка рабочей области по умолчанию (~/.swag2mcp)
swag2mcp validate

# Проверка пользовательской рабочей области проекта
swag2mcp validate ./my-project

LLM Instruction

Рекомендуется задавать llm_instruction для каждой спецификации — короткую подсказку (до 500 символов), которая сообщает LLM, для чего предназначен этот API и когда его использовать. Эта инструкция внедряется в системный промпт swag2mcp, помогая LLM понять назначение спецификации без дополнительного контекста.

yaml
specs:
  - domain: jokes
    llm_title: Dad Joke API
    llm_instruction: "Используй этот API для получения случайных шуток про пап или поиска конкретных шуток по ключевому слову."
    base_url: https://icanhazdadjoke.com
    collections:
      - llm_title: Jokes
        location: https://raw.githubusercontent.com/mmadfox/swag2mcp/main/specs/dadjoke.yaml

Коллекции также могут иметь собственный llm_instruction (до 360 символов) для более точных указаний.

Auth

Аутентификация настраивается на уровне спецификации и применяется ко всем её коллекциям. swag2mcp поддерживает 9 методов аутентификации:

МетодYAML-типКлючевые поля
Nonenone
Basicbasicusername, password
Bearerbearertoken
Digestdigestusername, password
OAuth2 Client Credentialsoauth2-ccclient_id, client_secret, token_url
OAuth2 Passwordoauth2-pwdusername, password, client_id, token_url
API Keyapi-keykey, value, in (header или query)
HMAChmacapi_key, secret_key
Scriptscriptdomain

Подробнее о каждом методе: Обзор аутентификации.

HTTP-клиент

Вы можете переопределить HTTP-настройки на уровне спецификации. Они применяются ко всем запросам, выполняемым коллекциями этой спецификации.

yaml
specs:
  - domain: slow-api
    llm_title: Slow API
    base_url: https://slow-api.example.com
    http_client:
      headers:
        X-API-Version: "2"
      cookies:
        - name: session
          value: abc123
    collections:
      - llm_title: Default
        location: https://raw.githubusercontent.com/mmadfox/swag2mcp/main/specs/dadjoke.yaml

Настройки каскадируются: глобальные → спецификация → коллекция. Подробнее: Каскад конфигурации.

Теги

Теги позволяют фильтровать спецификации по категориям. Используйте их с флагом --tags в swag2mcp ls или при загрузке.

yaml
specs:
  - domain: meteo
    llm_title: Open-Meteo Weather APIs
    base_url: https://api.open-meteo.com
    tags: ["weather", "public"]
    collections:
      - llm_title: Forecast
        location: https://raw.githubusercontent.com/mmadfox/swag2mcp/main/specs/meteo/forecast.yml
bash
# Показать только спецификации с тегом "weather"
swag2mcp ls --tags weather

Disable

Установите disable: true, чтобы полностью пропустить спецификацию. Она не будет загружена, проиндексирована или доступна LLM.

yaml
specs:
  - domain: old-api
    llm_title: Old API (Deprecated)
    base_url: https://old-api.example.com
    disable: true
    collections:
      - llm_title: Default
        location: https://raw.githubusercontent.com/mmadfox/swag2mcp/main/specs/dadjoke.yaml

Примеры

Минимальная спецификация

yaml
specs:
  - domain: dadjokes
    llm_title: Dad Joke API
    base_url: https://icanhazdadjoke.com
    collections:
      - llm_title: Jokes
        location: https://raw.githubusercontent.com/mmadfox/swag2mcp/main/specs/dadjoke.yaml

Спецификация с аутентификацией

yaml
specs:
  - domain: binance
    llm_title: Binance Market Data API
    base_url: https://api.binance.com
    auth:
      type: hmac
      config:
        api_key: $(BINANCE_API_KEY)
        secret_key: $(BINANCE_SECRET_KEY)
    collections:
      - llm_title: Market Data
        location: https://raw.githubusercontent.com/mmadfox/swag2mcp/main/specs/binance.yaml

Спецификация с несколькими коллекциями

yaml
specs:
  - domain: meteo
    llm_title: Open-Meteo Weather APIs
    base_url: https://api.open-meteo.com
    collections:
      - llm_title: Forecast
        location: https://raw.githubusercontent.com/mmadfox/swag2mcp/main/specs/meteo/forecast.yml
      - llm_title: Air Quality
        location: https://raw.githubusercontent.com/mmadfox/swag2mcp/main/specs/meteo/air-quality.yml
      - llm_title: Marine
        location: https://raw.githubusercontent.com/mmadfox/swag2mcp/main/specs/meteo/marine.yml

Спецификация с LLM Instruction и тегами

yaml
specs:
  - domain: rickandmorty
    llm_title: Rick and Morty API
    llm_instruction: "Используй этот API для получения информации о персонажах, эпизодах и локациях из мультсериала Рик и Морти."
    base_url: https://rickandmortyapi.com/api
    tags: ["entertainment", "public"]
    collections:
      - llm_title: Characters
        location: https://raw.githubusercontent.com/mmadfox/swag2mcp/main/specs/rick-and-morty.json

Связанные разделы