Skip to main content

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/*

Metadata

Release files for platform42-mcp-proxy 0.1.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for platform42-mcp-proxy 0.1.6
File Size Uploaded Provenance Actions
platform42_mcp_proxy-0.1.6.tar.gz 49.2 kB Without provenance Details for platform42_mcp_proxy-0.1.6.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for platform42-mcp-proxy 0.1.6
File Interpreter ABI Platform Actions
platform42_mcp_proxy-0.1.6-py3-none-any.whl Python 3 none any Details for platform42_mcp_proxy-0.1.6-py3-none-any.whl

Total release size: 99.6 kB

Release files / platform42_mcp_proxy-0.1.6.tar.gz

Download URL platform42_mcp_proxy-0.1.6.tar.gz
Size 49.2 kB
Tags Source
SHA-256 checksum
How to use checksums
c347ed0b4480cd5b1d0a5571cbaf7912f31b2224ba280fcabd28a3d3c3ad6ea5
BLAKE2b-256 checksum
How to use checksums
fcdbd69115010d8fc5992bfd9cf1c0c9fb1638dcb85171f146fef9060fe0fe69
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / platform42_mcp_proxy-0.1.6-py3-none-any.whl

Download URL platform42_mcp_proxy-0.1.6-py3-none-any.whl
Size 50.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
75511006af395b5cc53917b66dee6335d998908ea805bf6355e9a407fdf68c69
BLAKE2b-256 checksum
How to use checksums
5d389fe3c33dc8eaf86392abc68d42150421f88fafc1c9ff7cc2b3be2e685d2a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for platform42-mcp-proxy 0.1.6

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page