MCP proxy server for 1C HTTP services
Project description
Platform42 MCP Proxy for 1C
Python MCP-прокси между MCP-клиентами и HTTP-сервисом 1С. Репозиторий содержит только Python proxy-server, без 1С-расширения/конфигурации.
Основано на src/py_server проекта https://github.com/vladimir-kharin/1c_mcp.
Режимы выбора базы
1. Fixed-base: MCP_ONEC_URL задан
Если MCP_ONEC_URL задан, прокси работает только с этой публикацией 1С:
MCP_ONEC_URL=https://host/base
MCP_ONEC_USERNAME=Admin
MCP_ONEC_PASSWORD=secret
MCP_ONEC_SERVICE_ROOT=mcp
В этом режиме параметр _base_url запрещён. Если MCP-клиент передаст _base_url в tools/call, прокси вернёт ошибку.
2. Dynamic-base: MCP_ONEC_URL не задан
Если MCP_ONEC_URL не задан, прокси не привязан к конкретной базе. Тогда:
tools/listберётся из отдельного catalog source;- в schema каждого tool автоматически добавляется обязательный параметр
_base_url; - каждый
tools/callобязан передать_base_url; _base_urlиспользуется только прокси и не передаётся в 1С;- логин/пароль для фактического вызова берутся из
MCP_ONEC_USERNAME/MCP_ONEC_PASSWORD.
Пример вызова tool в dynamic-base:
{
"_base_url": "https://host/base-or-data-area",
"actualParameter": "value"
}
В 1С уйдёт только:
{
"actualParameter": "value"
}
Catalog source для tools/list в dynamic-base
MCP tools/list не принимает arguments, поэтому адрес/логин/пароль для получения списка tools задаются в конфигурации прокси.
Источник onec
Список tools берётся из обычной базы 1С:
MCP_TOOLS_CATALOG_SOURCE=onec
MCP_TOOLS_CATALOG_URL=https://host/catalog-base
MCP_TOOLS_CATALOG_USERNAME=Admin
MCP_TOOLS_CATALOG_PASSWORD=secret
MCP_TOOLS_CATALOG_SERVICE_ROOT=mcp
MCP_ONEC_USERNAME=Admin
MCP_ONEC_PASSWORD=secret
MCP_ONEC_SERVICE_ROOT=mcp
Если MCP_TOOLS_CATALOG_USERNAME/PASSWORD не заданы, используются MCP_ONEC_USERNAME/PASSWORD.
Источник file
MCP_TOOLS_CATALOG_SOURCE=file
MCP_TOOLS_CATALOG_PATH=/opt/mcp-proxy/tools.json
MCP_ONEC_USERNAME=Admin
MCP_ONEC_PASSWORD=secret
Формат файла:
{
"tools": [
{
"name": "example_tool",
"description": "Example tool",
"inputSchema": {
"type": "object",
"properties": {
"name": {"type": "string"}
},
"required": ["name"]
}
}
]
}
Также поддерживается raw array tools.
Источник http
MCP_TOOLS_CATALOG_SOURCE=http
MCP_TOOLS_CATALOG_URL=https://example.com/tools.json
MCP_TOOLS_CATALOG_USERNAME=optional-basic-auth-user
MCP_TOOLS_CATALOG_PASSWORD=optional-basic-auth-password
MCP_ONEC_USERNAME=Admin
MCP_ONEC_PASSWORD=secret
Безопасность _base_url
В dynamic-base режиме _base_url может превратить прокси в SSRF-примитив с Basic Auth кредами. Для production рекомендуется задавать allowlist:
MCP_ONEC_ALLOWED_BASE_URLS=https://host/base1,https://host/base2
или JSON array:
MCP_ONEC_ALLOWED_BASE_URLS=["https://host/base1", "https://host/base2"]
Если allowlist задан, _base_url обязан совпадать с одним из разрешённых URL после удаления trailing slash. Поддерживаются shell-style wildcard-шаблоны (*, ?, [seq]), например:
MCP_ONEC_ALLOWED_BASE_URLS=https://*.example.com/base/*,https://*.example.org/1c
Установка
python -m pip install platform42-mcp-proxy
Из исходников:
python -m pip install -e .
Запуск
Stdio
python -m src.py_server stdio
# или после установки пакета
mcp-proxy-1c stdio
HTTP
python -m src.py_server http --port 8000
# или
mcp-proxy-1c http --port 8000
Endpoints HTTP-режима:
/mcp/— Streamable HTTP MCP transport;/sse— SSE transport;/health— health check;/info— server info.
Stdio конфигурация для агентов
Fixed-base
{
"mcpServers": {
"1c-mcp-proxy": {
"command": "mcp-proxy-1c",
"args": ["stdio"],
"env": {
"MCP_ONEC_URL": "https://host/base",
"MCP_ONEC_USERNAME": "Admin",
"MCP_ONEC_PASSWORD": "password",
"MCP_ONEC_SERVICE_ROOT": "mcp"
}
}
}
}
Dynamic-base
{
"mcpServers": {
"1c-mcp-proxy": {
"command": "mcp-proxy-1c",
"args": ["stdio"],
"env": {
"MCP_ONEC_USERNAME": "Admin",
"MCP_ONEC_PASSWORD": "password",
"MCP_ONEC_SERVICE_ROOT": "mcp",
"MCP_TOOLS_CATALOG_SOURCE": "onec",
"MCP_TOOLS_CATALOG_URL": "https://host/catalog-base",
"MCP_TOOLS_CATALOG_SERVICE_ROOT": "mcp",
"MCP_ONEC_ALLOWED_BASE_URLS": "https://host/base1,https://host/base2"
}
}
}
}
В dynamic-base каждый tools/call обязан передавать _base_url.
Сборка пакета
python -m pip install -U build twine
python -m build
python -m twine check dist/*
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file platform42_mcp_proxy-0.1.4.tar.gz.
File metadata
- Download URL: platform42_mcp_proxy-0.1.4.tar.gz
- Upload date:
- Size: 49.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66a57977792da469c9fcd68322b3679f96c112d6e2c9301816c8995c2c64d0da
|
|
| MD5 |
5964210881c9154a98e280b91dea23ff
|
|
| BLAKE2b-256 |
0e3e727c2f7649d0ae90d9412b574f804cd2555df85b9d0ccab543163f3e1f17
|
File details
Details for the file platform42_mcp_proxy-0.1.4-py3-none-any.whl.
File metadata
- Download URL: platform42_mcp_proxy-0.1.4-py3-none-any.whl
- Upload date:
- Size: 50.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5cba7c73f8ada06ce4fb837c3d61cd23a9e45c6b0da77cbd0eeb18922e9d0794
|
|
| MD5 |
35691d05b4ef89ef80e3062d5db7be33
|
|
| BLAKE2b-256 |
9c25cd6db3a2a77551eda99374ce8d19f8cf2d070cc0111f1d6605b2106062ec
|