Skip to main content
Glama

Шлюз MCP

Английский |简体中文

Лицензия

Данный проект лицензирован в соответствии с лицензией GNU General Public License v3.0 — более подробную информацию см. в файле LICENSE .

Related MCP server: Maya MCP

Обзор проекта

MCP Gateway — это приложение, созданное с помощью Python. Он действует как центральный шлюз , который подключается к нескольким внутренним серверам MCP и объединяет их возможности (независимо от того, взаимодействуют ли они через протоколы Stdio или SSE). В конечном итоге он предоставляет эти объединенные возможности клиентам MCP вышестоящего уровня через унифицированную конечную точку SSE ( /sse ).

Основные преимущества:

  1. Упрощенная настройка клиента: клиентам MCP достаточно подключиться к одному адресу шлюза MCP, чтобы получить доступ к функциям всех внутренних служб, что устраняет необходимость в индивидуальной настройке каждого внутреннего сервера.

  2. Агрегация и оркестровка возможностей: объединяет инструменты MCP с разнообразными возможностями из разных источников, обеспечивая основу для создания более мощных, настраиваемых агентов, ориентированных на конкретные области задач.

Структура файла проекта

.
├── config.json                     # Core configuration file: Defines the backend MCP servers to connect to and manage.
├── main.py                         # Program entry point: Parses command-line arguments, sets up logging, and starts the web server.
├── bridge_app.py                   # Starlette application core: Handles forwarding of MCP requests and SSE connection management.
├── client_manager.py               # Client manager: Responsible for establishing and maintaining connection sessions with backend MCP servers.
├── capability_registry.py          # Capability registry: Dynamically discovers, registers, and manages capabilities provided by all backend MCP servers.
├── config_loader.py                # Configuration loader: Responsible for loading and strictly validating the format and content of the `config.json` file.
├── errors.py                       # Custom exceptions: Defines project-specific error types, such as configuration errors and backend server errors.
├── rich_handler.py                 # Rich logging handler: Provides beautified, structured console log output.
├── servers/                        # Contains built-in/example backend MCP server scripts.
│   ├── bash_server.py              # <-- Built-in Bash command execution tool (Linux/macOS/WSL)
│   ├── cmd_server.py               # <-- Built-in Windows CMD command execution tool (Windows Only)
│   ├── powershell_server.py        # <-- Built-in Windows PowerShell command execution tool (Windows Only)
│   └── wmi_server.py               # <-- Built-in Windows WMI query tool (Windows Only)
└── logs/                           # Log directory: Stores runtime log files (created automatically).

Встроенные MCP-серверы

Этот проект поставляется с четырьмя внутренними инструментами MCP Server, которые можно использовать напрямую и включать в config.json без дополнительной настройки:

  • Инструмент выполнения команд Bash ( : выполняет команды Bash в средах Linux, macOS или WSL.

  • Средство выполнения команд CMD Windows ( : выполняет команды CMD в средах Windows.

  • Средство выполнения команд Windows PowerShell ( : выполняет команды PowerShell в средах Windows.

  • Инструмент запросов Windows WMI ( : выполняет запросы WMI в средах Windows.

Если вы столкнулись со следующей ошибкой в среде Linux:

error: Distribution `pywin32==310 @ registry+https://pypi.org/simple` can't be installed because it doesn't have a source distribution or wheel for the current platform>

Пожалуйста, удалите модуль wmi : uv remove wmi

Установка и настройка

Этот проект написан на Python. Рекомендуется использовать uv для управления окружением и зависимостями.

  1. Клонировать репозиторий

    git clone https://github.com/trtyr/MCP-Gateway.git
    cd MCP-Gateway
  2. Создать и активировать виртуальную среду

    # Create virtual environment
    uv venv
    
    # Activate virtual environment
    # Linux/macOS
    source .venv/bin/activate
    # Windows (Command Prompt/PowerShell)
    .venv\Scripts\activate
  3. Установить зависимости

    # Install all required dependencies based on pyproject.toml
    uv sync

После выполнения этих шагов проект готов к запуску.

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

Получить помощь по проекту

Для просмотра всех доступных параметров запуска можно использовать аргумент -h или --help :

# Windows
uv run python .\main.py -h
# Linux/macOS
uv run python ./main.py -h

Вывод будет примерно таким:

usage: main.py [-h] [--host HOST] [--port PORT] [--log-level {debug,info,warning,error,critical}]

Start MCP_Bridge_Server v3.0.0

options:
  -h, --help            show this help message and exit
  --host HOST           Host address (default: 0.0.0.0)
  --port PORT           Port (default: 9000)
  --log-level {debug,info,warning,error,critical}
                        Set file logging level (default: info)

Начать проект

Используйте uv run python main.py для запуска сервера. Вы можете указать host , port и log-level :

# Listen on all network interfaces on port 9000, set log level to debug
uv run python .\main.py --host 0.0.0.0 --port 9000 --log-level debug

После запуска вы увидите богатый, улучшенный вывод консоли, подобный изображению ниже, показывающий состояние сервера, информацию о подключении и загруженные инструменты:

Подключение клиента MCP

После запуска MCP Gateway вы можете использовать любой MCP-совместимый клиент (например, Cline, Cursor, Claude Desktop или пользовательский клиент) для подключения к конечной точке SSE, предоставляемой Gateway.

Адрес по умолчанию: http://<Server_IP_Address>:9000/sse (если используется порт по умолчанию).

Пример (с использованием ChatWise Connect):

  1. Выберите тип подключения SSE .

  2. Введите URL-адрес SSE шлюза (например, http://127.0.0.1:9000/sse ).

  3. Нажмите Connect .

После успешного подключения вы увидите все внутренние инструменты MCP, агрегированные через шлюз в клиенте:

Журналы

Журналы времени выполнения автоматически сохраняются в папке logs в корневом каталоге проекта. Имена файлов журналов включают временные метки и уровни журналов, что упрощает отслеживание проблем.

logs/
├── log_20240801_103000_INFO.log
└── log_20240801_110000_DEBUG.log
...

Файл конфигурации ( config.json )

Основной файл конфигурации config.json находится в корневом каталоге проекта. Он определяет внутренние серверы MCP, к которым MCP Gateway должен подключаться и управлять ими.

Каждая запись представляет собой внутренний сервер. Ключ — это уникальное имя, которое вы назначаете этому внутреннему серверу (это имя будет использоваться в качестве префикса для его возможностей), а значение — это объект, содержащий конфигурацию сервера.

Поддерживаются два типа подключений к внутреннему серверу:

  • stdio : взаимодействует с локально запущенным процессом сервера MCP через стандартный ввод/вывод (stdin/stdout).

  • sse : взаимодействует с удаленным или локально работающим сервером MCP через протокол Server-Sent Events (SSE).

Конфигурация типа stdio

Подходит для локальных процессов сервера MCP, жизненный цикл которых должен управляться шлюзом.

Поля конфигурации:

  • type (обязательно): должен быть "stdio" .

  • command (обязательно): исполняемая команда, используемая для запуска процесса сервера (например, python , uv , node или абсолютный путь к скрипту/исполняемому файлу).

  • args (обязательно): список аргументов (список строк), передаваемых command .

  • env (необязательно): Словарь переменных окружения (Dict[str, str]) для установки дочернего процесса. Если не указано, дочерний процесс наследует окружение Gateway.

Пример:

{
  "powershell": {
    "type": "stdio",
    "command": "python",
    "args": ["servers/powershell_server.py"]
  },
  "my_custom_tool": {
    "type": "stdio",
    "command": "/path/to/my/custom_mcp_server",
    "args": ["--port", "ignored_for_stdio", "--some-flag"],
    "env": {
      "API_KEY": "your_secret_key"
    }
  }
}

Как это работает: Когда запускается MCP Gateway, он использует указанную command и args (вместе с необязательным env ) для запуска дочернего процесса. Gateway взаимодействует с внутренним сервером MCP через стандартный ввод и вывод этого дочернего процесса. Когда Gateway завершает работу, он пытается завершить эти дочерние процессы.

Конфигурация типа SSE

Подходит для подключения к уже работающим серверам MCP (локальным или удаленным) или в случаях, когда шлюзу необходимо запустить локальный процесс сервера SSE перед подключением.

Поля конфигурации:

  • type (обязательно): должен быть "sse" .

  • url (обязательно): URL-адрес конечной точки SSE внутреннего сервера MCP (полный адрес HTTP/HTTPS).

  • command (необязательно): если указано, шлюз выполнит эту команду при запуске для запуска локального сервера SSE.

  • args (необязательно, только если указана command ): список аргументов, передаваемых command .

  • env (необязательно, только если указана command ): переменные среды, которые следует задать для локально запущенного дочернего процесса.

Пример 1: Подключение к уже работающему удаленному серверу SSE

{
  "remote_search_service": {
    "type": "sse",
    "url": "https://mcp.example.com/search/sse"
  }
}

Пример 2: Шлюз запускает локальный сервер SSE и подключается

{
  "local_sse_server": {
    "type": "sse",
    "url": "http://127.0.0.1:8080/sse",
    "command": "uv",
    "args": ["run", "python", "servers/my_local_sse_app.py", "--port", "8080"],
    "env": { "MODE": "production" }
  }
}

Как это работает:

  • Указан только : шлюз напрямую пытается подключиться к указанному url .

  • url : Сначала шлюз использует command и args для запуска локального процесса (ожидая, что этот процесс будет прослушивать адрес и порт, соответствующие url ). Затем он ждет в течение короткого периода ( LOCAL_SSE_STARTUP_DELAY , определенный в client_manager.py ) перед попыткой подключения к url . Когда шлюз завершает работу, он пытается завершить этот локальный процесс.

Примеры добавления конфигурации

Ниже приведены примеры того, как добавить сторонние MCP-серверы в config.json .

Пример Stdio: Драматург MCP

Предположим, вы хотите интегрировать MCP-сервер Playwright ( @playwright/mcp ).

  1. Понять метод запуска : Playwright MCP обычно запускается с помощью npx @playwright/mcp@latest . Это пакет Node.js, выполняемый через npx .

  2. Настройте :

    {
      // ... other server configurations ...
      "playwright": {
        "type": "stdio",
        "command": "npx",
        "args": ["@playwright/mcp@latest"]
      }
      // ... other server configurations ...
    }

    Здесь commandnpx , а args содержит имя и версию пакета Playwright MCP.

  3. Перезапустите шлюз : сохраните config.json и перезапустите шлюз MCP.

После запуска вы должны увидеть инструменты с именем playwright/... (например, playwright/browse ) в журналах консоли и вашего клиента.

Пример SSE: ENScan_GO (локальный запуск)

Предположим, вы хотите интегрировать ENScan_GO, программу Go, которую можно запустить с помощью ./enscan --mcp и которая предоставляет службу SSE по адресу http://localhost:8080 .

  1. Получить исполняемый файл : Загрузите исполняемый файл ENScan_GO (например, enscan-v1.2.1-windows-amd64.exe ) и поместите его в доступное место (например, в каталог servers/ или в системную переменную PATH).

  2. Настройте :

    {
      // ... other server configurations ...
      "enscan": {
        "type": "sse",
        "url": "http://127.0.0.1:8080/sse", // Address ENScan_GO listens on
        // Note: Ensure path separators are correct on Windows, or use an absolute path
        "command": "servers/enscan-v1.2.1-windows-amd64.exe", // Path to the executable
        "args": ["--mcp"] // Startup arguments
      }
      // ... other server configurations ...
    }

    Здесь мы указываем type как sse , предоставляем url который он прослушивает, и используем command и args чтобы сообщить шлюзу, как запустить этот локальный сервер SSE.

  3. Перезапустите шлюз : сохраните config.json и перезапустите шлюз MCP.

Сначала шлюз запустит процесс ENScan_GO, затем подключится к http://127.0.0.1:8080/sse . После запуска вы должны увидеть инструменты с именем enscan/... .

-
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/trtyr/MCP-Gateway'

If you have feedback or need assistance with the MCP directory API, please join our Discord server