mcp-прокси



О
mcp-proxy — это инструмент, позволяющий переключаться между транспортами сервера. Поддерживаются два режима:
stdio в SSE/StreamableHTTP
SSE в stdio
Related MCP server: Tiny SSE MCP Server
1. stdio в SSE/StreamableHTTP
Запустите прокси-сервер из stdio, который подключается к удаленному серверу SSE.
Этот режим позволяет клиентам, таким как Claude Desktop, взаимодействовать с удаленным сервером через SSE, даже если он изначально не поддерживается.
graph LR
A["Claude Desktop"] <--> |stdio| B["mcp-proxy"]
B <--> |SSE| C["External MCP Server"]
style A fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px
style B fill:#e6e6ff,stroke:#333,color:black,stroke-width:2px
style C fill:#e6ffe6,stroke:#333,color:black,stroke-width:2px
1.1 Конфигурация
Этот режим требует предоставления URL конечной точки SSE сервера MCP в качестве первого аргумента программы. Если сервер использует потоковый HTTP-транспорт, обязательно примените его на стороне mcp-proxy , передав --transport=streamablehttp .
Аргументы
Имя | Необходимый | Описание | Пример |
command_or_url
| Да | Конечная точка SSE сервера MCP для подключения | http://example.io/sse |
--headers
| Нет | Заголовки, используемые для подключения SSE к серверу MCP | Авторизация «Предъявитель моего секретного токена доступа» |
--transport
| Нет | Решает, какой транспортный протокол использовать при подключении к серверу MCP. Может быть 'sse' или 'streamablehttp' | потоковоеhttp |
Переменные среды
Имя | Необходимый | Описание | Пример |
API_ACCESS_TOKEN
| Нет | Можно использовать вместо --headers Authorization 'Bearer <API_ACCESS_TOKEN>'
| ВАШ_ТОКЕН |
1.2 Пример использования
Предполагается, что mcp-proxy запускается клиентом MCP, поэтому настройка должна быть выполнена соответствующим образом.
Для Claude Desktop запись конфигурации может выглядеть следующим образом:
{
"mcpServers": {
"mcp-proxy": {
"command": "mcp-proxy",
"args": [
"http://example.io/sse"
],
"env": {
"API_ACCESS_TOKEN": "access-token"
}
}
}
}
2. SSE в stdio
Запустите прокси-сервер, предоставляющий доступ к серверу SSE, который подключается к локальному серверу stdio.
Это позволяет удаленно подключаться к локальному серверу stdio. mcp-proxy открывает порт для прослушивания запросов SSE, создает локальный сервер stdio, который обрабатывает запросы MCP.
graph LR
A["LLM Client"] <-->|SSE| B["mcp-proxy"]
B <-->|stdio| C["Local MCP Server"]
style A fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px
style B fill:#e6e6ff,stroke:#333,color:black,stroke-width:2px
style C fill:#e6ffe6,stroke:#333,color:black,stroke-width:2px
2.1 Конфигурация
Для этого режима необходимо задать аргумент --sse-port . Аргумент --sse-host можно задать для указания IP-адреса хоста, который будет прослушивать сервер SSE. Дополнительные переменные среды можно передать локальному серверу stdio с помощью аргумента --env . Аргументы командной строки для локального сервера stdio необходимо передавать после разделителя -- .
Аргументы
Имя | Необходимый | Описание | Пример |
command_or_url
| Да | Команда для запуска сервера MCP stdio | uvx mcp-сервер-fetch |
--port
| Нет, доступен случайный выбор | Порт сервера MCP для прослушивания | 8080 |
--host
| Нет, по умолчанию 127.0.0.1
| IP-адрес хоста, который будет прослушивать сервер MCP | 0.0.0.0 |
--env
| Нет | Дополнительные переменные среды для передачи на сервер MCP stdio. Можно использовать несколько раз. | ФУ БАР |
--cwd
| Нет | Рабочий каталог для передачи в процесс сервера MCP stdio. | /тмп |
--pass-environment
| Нет | Пройти через все переменные среды при создании сервера | --непроходная-среда |
--allow-origin
| Нет | Разрешенные источники для сервера SSE. Можно использовать несколько раз. По умолчанию CORS не разрешен. | --allow-origin "*" |
--stateless
| Нет | Включить режим без сохранения состояния для потоковых http-транспортов. Значение по умолчанию — False | --no-stateless |
--named-server NAME COMMAND_STRING
| Нет | Определяет именованный сервер stdio. | --named-server fetch 'uvx mcp-server-fetch' |
--named-server-config FILE_PATH
| Нет | Путь к JSON-файлу, определяющему именованные серверы stdio. | --named-server-config /path/to/servers.json |
--sse-port
(устарело) | Нет, доступен случайный выбор | Порт сервера SSE для прослушивания | 8080 |
--sse-host
(устарело) | Нет, по умолчанию 127.0.0.1
| IP-адрес хоста, который будет прослушивать сервер SSE. | 0.0.0.0 |
2.2 Пример использования
Чтобы запустить сервер mcp-proxy , который прослушивает порт 8080 и подключается к локальному серверу MCP:
# Start the MCP server behind the proxy
mcp-proxy uvx mcp-server-fetch
# Start the MCP server behind the proxy with a custom port
# (deprecated) mcp-proxy --sse-port=8080 uvx mcp-server-fetch
mcp-proxy --port=8080 uvx mcp-server-fetch
# Start the MCP server behind the proxy with a custom host and port
# (deprecated) mcp-proxy --sse-host=0.0.0.0 --sse-port=8080 uvx mcp-server-fetch
mcp-proxy --host=0.0.0.0 --port=8080 uvx mcp-server-fetch
# Start the MCP server behind the proxy with a custom user agent
# Note that the `--` separator is used to separate the `mcp-proxy` arguments from the `mcp-server-fetch` arguments
# (deprecated) mcp-proxy --sse-port=8080 -- uvx mcp-server-fetch --user-agent=YourUserAgent
mcp-proxy --port=8080 -- uvx mcp-server-fetch --user-agent=YourUserAgent
# Start multiple named MCP servers behind the proxy
mcp-proxy --port=8080 --named-server fetch 'uvx mcp-server-fetch' --named-server fetch2 'uvx mcp-server-fetch'
# Start multiple named MCP servers using a configuration file
mcp-proxy --port=8080 --named-server-config ./servers.json
Именованные серверы
NAME используется в URL-пути /servers/NAME/ .
COMMAND_STRING — команда для запуска сервера (например, «uvx mcp-server-fetch»).
Можно использовать многократно.
Этот аргумент игнорируется, если используется --named-server-config .
FILE_PATH — если указан, это единственный источник для именованных серверов, а аргументы CLI --named-server игнорируются.
Если указан сервер по умолчанию (аргумент command_or_url без --named-server или --named-server-config ), он будет доступен по корневым путям (например, http://127.0.0.1:8080/sse ).
Именованные серверы (определенные как --named-server или --named-server-config ) будут доступны в /servers/<server-name>/ (например, http://127.0.0.1:8080/servers/fetch1/sse ). Конечная точка /status предоставляет глобальный статус.
Формат файла конфигурации JSON для
Файл JSON должен иметь следующую структуру:
{
"mcpServers": {
"fetch": {
"disabled": false,
"timeout": 60,
"command": "uvx",
"args": [
"mcp-server-fetch"
],
"transportType": "stdio"
},
"github": {
"timeout": 60,
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-github"
],
"transportType": "stdio"
}
}
}
mcpServers : словарь, где каждый ключ — это имя сервера (используется в пути URL, например, /servers/fetch/ ), а значение — это объект, определяющий сервер.
command : (обязательно) Команда для выполнения на сервере stdio.
args : (Необязательно) Список аргументов для команды. По умолчанию пустой список.
enabled : (Необязательно) Если false , это определение сервера будет пропущено. По умолчанию true .
timeout и transportType : эти поля присутствуют в стандартных конфигурациях клиента MCP, но в настоящее время игнорируются mcp-proxy при загрузке именованных серверов. Тип транспорта неявно "stdio".
Установка
Установка через Smithery
Чтобы автоматически установить MCP Proxy для Claude Desktop через Smithery :
npx -y @smithery/cli install mcp-proxy --client claude
Установка через PyPI
Стабильная версия пакета доступна в репозитории PyPI. Установить ее можно с помощью следующей команды:
# Option 1: With uv (recommended)
uv tool install mcp-proxy
# Option 2: With pipx (alternative)
pipx install mcp-proxy
После установки вы можете запустить сервер с помощью команды mcp-proxy . Смотрите параметры конфигурации для каждого режима выше.
Установка через репозиторий Github (последняя версия)
Последнюю версию пакета можно установить из репозитория git с помощью следующей команды:
uv tool install git+https://github.com/sparfenyuk/mcp-proxy
[!ПРИМЕЧАНИЕ] Если вы уже установили сервер, вы можете обновить его с помощью команды uv tool upgrade --reinstall .
[!ПРИМЕЧАНИЕ] Если вы хотите удалить сервер, используйте команду uv tool uninstall mcp-proxy .
Установка как контейнера
Начиная с версии 0.3.2, можно извлечь и запустить соответствующий образ контейнера:
docker run -t ghcr.io/sparfenyuk/mcp-proxy:v0.3.2-alpine --help
Поиск неисправностей
Проблема : Claude Desktop не может запустить сервер: код ENOENT в журналах
Решение : Попробуйте использовать полный путь к бинарнику. Для этого откройте терминал и выполните команду where mcp-proxy (macOS, Linux) или where.exe mcp-proxy (Windows). Затем используйте выходной путь в качестве значения атрибута 'command':
"fetch": {
"command": "/full/path/to/bin/mcp-proxy",
"args": [
"http://localhost:8932/sse"
]
}
Расширение изображения контейнера
Вы можете расширить образ контейнера mcp-proxy , включив в него дополнительные исполняемые файлы. Например, uv не включен по умолчанию, но вы можете создать с его помощью собственный образ:
# file: mcp-proxy.Dockerfile
FROM ghcr.io/sparfenyuk/mcp-proxy:latest
# Install the 'uv' package
RUN python3 -m ensurepip && pip install --no-cache-dir uv
ENV PATH="/usr/local/bin:$PATH" \
UV_PYTHON_PREFERENCE=only-system
ENTRYPOINT [ "mcp-proxy" ]
Настройка Docker Compose
С помощью пользовательского Dockerfile вы можете определить службу в файле Docker Compose:
services:
mcp-proxy-custom:
build:
context: .
dockerfile: mcp-proxy.Dockerfile
network_mode: host
restart: unless-stopped
ports:
- 8096:8096
command: "--pass-environment --port=8096 --sse-host 0.0.0.0 uvx mcp-server-fetch"
[!ПРИМЕЧАНИЕ] Не забудьте установить аргумент --pass-environment , иначе вы получите ошибку «Интерпретатор не найден в управляемых установках или пути поиска»
Аргументы командной строки
usage: mcp-proxy [-h] [-H KEY VALUE] [--transport {sse,streamablehttp}] [-e KEY VALUE] [--cwd CWD] [--pass-environment | --no-pass-environment]
[--debug | --no-debug] [--named-server NAME COMMAND_STRING] [--named-server-config FILE_PATH] [--port PORT] [--host HOST]
[--stateless | --no-stateless] [--sse-port SSE_PORT] [--sse-host SSE_HOST] [--allow-origin ALLOW_ORIGIN [ALLOW_ORIGIN ...]]
[command_or_url] [args ...]
Start the MCP proxy.
It can run as an SSE client (connecting to a remote SSE server and exposing stdio).
Or, it can run as an SSE server (connecting to local stdio command(s) and exposing them over SSE).
When running as an SSE server, it can proxy a single default stdio command or multiple named stdio commands (defined via CLI or a config file).
positional arguments:
command_or_url Command or URL.
If URL (http/https): Runs in SSE/StreamableHTTP client mode.
If command string: Runs in SSE server mode, this is the default stdio server.
If --named-server or --named-server-config is used, this can be omitted if no default server is desired.
options:
-h, --help show this help message and exit
SSE/StreamableHTTP client options:
-H, --headers KEY VALUE
Headers to pass to the SSE server. Can be used multiple times.
--transport {sse,streamablehttp}
The transport to use for the client. Default is SSE.
stdio client options:
args Any extra arguments to the command to spawn the default server. Ignored if only named servers are defined.
-e, --env KEY VALUE Environment variables used when spawning the default server. Can be used multiple times. For named servers, environment is inherited or passed via --pass-environment.
--cwd CWD The working directory to use when spawning the default server process. Named servers inherit the proxy's CWD.
--pass-environment, --no-pass-environment
Pass through all environment variables when spawning all server processes.
--debug, --no-debug Enable debug mode with detailed logging output.
--named-server NAME COMMAND_STRING
Define a named stdio server. NAME is for the URL path /servers/NAME/. COMMAND_STRING is a single string with the command and its arguments (e.g., 'uvx mcp-server-fetch --timeout 10'). These servers inherit the proxy's CWD and environment from --pass-environment. Can be specified multiple times. Ignored if --named-server-config is used.
--named-server-config FILE_PATH
Path to a JSON configuration file for named stdio servers. If provided, this will be the exclusive source for named server definitions, and any --named-server CLI arguments will be ignored.
SSE server options:
--port PORT Port to expose an SSE server on. Default is a random port
--host HOST Host to expose an SSE server on. Default is 127.0.0.1
--stateless, --no-stateless
Enable stateless mode for streamable http transports. Default is False
--sse-port SSE_PORT (deprecated) Same as --port
--sse-host SSE_HOST (deprecated) Same as --host
--allow-origin ALLOW_ORIGIN [ALLOW_ORIGIN ...]
Allowed origins for the SSE server. Can be used multiple times. Default is no CORS allowed.
Examples:
mcp-proxy http://localhost:8080/sse
mcp-proxy --transport streamablehttp http://localhost:8080/mcp
mcp-proxy --headers Authorization 'Bearer YOUR_TOKEN' http://localhost:8080/sse
mcp-proxy --port 8080 -- my-default-command --arg1 value1
mcp-proxy --port 8080 --named-server fetch1 'uvx mcp-server-fetch' --named-server tool2 'my-custom-tool --verbose'
mcp-proxy --port 8080 --named-server-config /path/to/servers.json
mcp-proxy --port 8080 --named-server-config /path/to/servers.json -- my-default-command --arg1
mcp-proxy --port 8080 -e KEY VALUE -e ANOTHER_KEY ANOTHER_VALUE -- my-default-command
mcp-proxy --port 8080 --allow-origin='*' -- my-default-command
Пример файла конфигурации
{
"mcpServers": {
"fetch": {
"enabled": true,
"timeout": 60,
"command": "uvx",
"args": [
"mcp-server-fetch"
],
"transportType": "stdio"
},
"github": {
"timeout": 60,
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-github"
],
"transportType": "stdio"
}
}
}
Тестирование
Проверьте сервер mcp-proxy , запустив его с сервером mcp-server-fetch . Вы можете использовать инструмент инспектора для проверки целевого сервера.
# Run the stdio server called mcp-server-fetch behind the proxy over SSE
mcp-proxy --port=8080 uvx mcp-server-fetch &
# Connect to the SSE proxy server spawned above using another instance of mcp-proxy given the URL of the SSE server
mcp-proxy http://127.0.0.1:8080/sse
# Send CTRL+C to stop the second server
# Bring the first server to the foreground
fg
# Send CTRL+C to stop the first server