Ця тека — готова поставка: усередині вбудований Python і встановлений пакет. У систему нічого ставити не треба. Скопіювали, налаштували, запустили.
Повний довідник по параметрах — README.md поруч. Тут — порядок дій.
Кроки, позначені потрібен адміністратор, виконуються у вікні
PowerShell, відкритому через «Запуск від імені адміністратора».
robocopy <тека поставки> C:\mcbp-mcp /E
Тека certs\ порожня, tokens.toml ще немає — обидва
зʼявляться на кроках 3 і 4.
Відкрийте server.env (UTF-8, Блокнот підійде) і задайте три значення:
| Ключ | Що вписати |
|---|---|
ONEC_BASE_URL | адреса HTTP-сервісу MCBP_AI без хвостового /ai/v1 |
ONEC_USER | обліковка BAS для запитів без авторизації — тримайте мінімальні права |
ONEC_PASSWORD | пароль; ключ має бути присутнім навіть із порожнім значенням |
ONEC_BASE_URL=http://<ВАША АДРЕСА>/<ваша база>/hs/mcbp_ai
Замість <ВАША АДРЕСА> — імʼя або IP машини, де опублікована база
(ipconfig покаже адресу; якщо база на цій самій машині, підійде
localhost). Замість <ваша база> — імʼя публікації в IIS.
Сегмент mcbp_ai подвоюється з ai/v1 усередині сервісу — це нормально.
localhost у цьому рядку означає вже саму
машину сервера. Симптом — не зрозуміла відмова, а мовчазний таймаут при старті. Ставте
адресу машини з базою і відкрийте на ній порт 80: IIS слухає 0.0.0.0:80, але
правила брандмауера для нього типово немає.
Кожному клієнтові — свій токен, зіставлений з обліковкою BAS. Так у журналі реєстрації бази дії йдуть від імені конкретної людини, а не спільного службового запису.
new-token.cmd — надрукує випадковий рядок. По одному на клієнта.tokens.example.toml у tokens.toml і замініть значення:[[users]]
token = "<рядок з new-token.cmd>"
onec_user = "Директор-Корнієнко"
onec_password = ""
label = "Директор"
Далі увімкніть реєстр у server.env:
MCP_TOKENS_FILE=tokens.toml
MCP_REQUIRE_AUTH=1
MCP_REQUIRE_AUTH=1 означає: запит без заголовка Authorization
відхиляється (400), а не виконується під службовою обліковкою. Разом із доступом по мережі
це обовʼязково — інакше будь-хто в мережі працює службовим записом.
onec_password — це пароль до тієї бази
Обліковка з токена перевіряється базою з ONEC_BASE_URL. Перемкнули сервер на
іншу базу — перевірте паролі в tokens.toml: сервер стартує нормально,
/healthz відповідає ok, і лише перший виклик інструмента дає
AUTH_FAILED: BAS rejected credentials (401).
MCP_HTTP_HOST=127.0.0.1 і MCP_HTTP_PORT=8010, а рядки
MCP_HTTP_SSL_* — закоментованими. Трафік не виходить за межі машини, тож
ані сертифікат, ані правило брандмауера, ані права адміністратора не потрібні. Адреса
для клієнта буде http://127.0.0.1:8010/mcp.
Якщо клієнти на інших машинах — у server.env:
MCP_HTTP_HOST=0.0.0.0
MCP_HTTP_PORT=8443
Далі сертифікат — у теці поставки, з адмінського вікна:
powershell -ExecutionPolicy Bypass -File .\make-cert.ps1 -DnsName <імʼя машини> -IPAddress <LAN-адреса>
Потім розкоментуйте в server.env два останні рядки:
MCP_HTTP_SSL_CERTFILE=certs\mcbp-mcp.crt.pem
MCP_HTTP_SSL_KEYFILE=certs\mcbp-mcp.key.pem
І відкрийте порт у брандмауері:
New-NetFirewallRule -DisplayName "MCBP MCP 8443" -Direction Inbound `
-Protocol TCP -LocalPort 8443 -Action Allow -Profile Any
-Profile Private не діє, якщо інтерфейси мають категорію
Public. Локально це непомітно — трафік на власну адресу не фільтрується, —
а чужа машина буде заблокована. Тому -Profile Any, або переведіть мережу
в Private.
Без HTTPS облікові дані BAS ідуть у заголовку відкритим текстом при кожному запиті. Поки
MCP_HTTP_HOST=127.0.0.1, це неважливо; щойно 0.0.0.0 —
вмикайте https.
Подвійний клік на start.cmd. Вікно лишається відкритим, зупинка — Ctrl+C у ньому ж.
curl http://127.0.0.1:8010/healthz # має відповісти: ok
curl -I https://<адреса>:8443/healthz # з іншої машини, якщо ввімкнули https
У вікні сервера при старті має бути рядок GET ai/v1/health → 200 — це доказ,
що база відповідає. Холодний старт бази 6–10 с, далі відповіді ~10 мс: перший повільний
запит не є проблемою продуктивності.
Сам MCP-ендпоінт — /mcp. У браузері він не відкривається (лише POST/GET/DELETE
у межах MCP-сесії), тому для перевірки живості існує /healthz.
Stop-Process → Access is denied). Завершуйте
Ctrl+C у його ж вікні.
Клієнтові не потрібна ця тека — йому йдуть чотири файли з client-kit\:
| Файл | Призначення |
|---|---|
README.md | інструкція клієнта, три кроки |
trust-cert.cmd | вносить сертифікат у довірені кореневі (від адміністратора) |
setup-codex.cmd | реєструє сервер у Codex CLI |
mcbp-mcp.cer | покладіть туди з certs\ — лише публічна частина |
Плюс словами: адреса https://<адреса>:8443/mcp і персональний токен.
certs\mcbp-mcp.key.pem і certs\mcbp-mcp.pfx лишаються на сервері:
власник ключа може видати себе за ваш сервер.
Для Claude Code замість Codex клієнт додає у свій .mcp.json:
{
"mcpServers": {
"mcbp-ai": {
"type": "http",
"url": "https://<адреса>:8443/mcp",
"headers": { "Authorization": "Bearer ${MCBP_TOKEN}" }
}
}
}
Незадана змінна MCBP_TOKEN конектор не валить — сервер отримає нерозкритий
текст ${MCBP_TOKEN} і відмовить, тобто помилка конфігу виглядатиме як
відмова авторизації.
Найкоротший шлях перевірити сервер — підключити клієнта на тій самій машині. Тоді
сертифікат не потрібен (див. крок 4), а адреса — http://127.0.0.1:8010/mcp.
Через комплект клієнта. Запустіть client-kit\setup-codex.cmd:
client-kit\setup-codex.cmd http://127.0.0.1:8010/mcp <ваш токен>
Скрипт знаходить codex.exe (у PATH або під
%LOCALAPPDATA%\OpenAI\Codex\bin\, у тому числі у вкладеній теці збірки),
кладе токен у змінну користувача MCBP_TOKEN через setx і виконує
codex mcp add.
Або вручну — те саме двома командами:
setx MCBP_TOKEN "<ваш токен>"
codex mcp add mcbp --url http://127.0.0.1:8010/mcp --bearer-token-env-var MCBP_TOKEN
Запис лягає в %USERPROFILE%\.codex\config.toml як секція
[mcp_servers.mcbp]. ChatGPT Desktop читає той самий файл — після правки
перезапустіть застосунок.
setx діє лише на нові процеси — закрийте термінал і відкрийте новий,
інакше змінна порожня. І перевірте, що в секції [mcp_servers.mcbp] є рядок
bearer_token_env_var: сам лише url при
MCP_REQUIRE_AUTH=1 дасть 400, і виглядатиме це як несправний сервер.
Перевірка:
codex mcp list
Сервер mcbp має бути у списку. Далі попросіть у клієнті, наприклад, перелік
довідників — відповісти має база, а не помилка авторизації.
Claude Desktop підключається інакше — не до HTTP-сервера з кроків вище.
Його конектор приймає лише URL і не має поля для токена (шукає OAuth), а сам застосунок
встановлений як пакет Windows, якому закриті і адреси локальної мережі, і loopback. Тому для
нього поставка запускається через stdio: Claude сам стартує процес сервера і
говорить із ним через канал, без мережі й без токенів — обліковка BAS задається в
env.
Правиться файл (застосунок має бути ЗАКРИТИЙ):
%APPDATA%\Claude\claude_desktop_config.json
Якщо цього файлу немає, застосунок встановлений із Microsoft Store — тоді конфіг лежить у контейнері пакета:
%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json
У файлі вже є налаштування застосунку — додайте лише розділ mcpServers:
"mcpServers": {
"mcbp-ai": {
"command": "C:\\mcbp-mcp\\python\\python.exe",
"args": ["-m", "mcbp_mcp_server"],
"env": {
"ONEC_BASE_URL": "http://<ВАША АДРЕСА>/<ваша база>/hs/mcbp_ai",
"ONEC_USER": "<обліковка BAS>",
"ONEC_PASSWORD": "<пароль>",
"PYTHONIOENCODING": "utf-8"
}
}
}
python.exe -m mcbp_mcp_server, НЕ Scripts\mcbp.exe
У консольний скрипт mcbp.exe зашитий абсолютний шлях до інтерпретатора тієї
машини, де поставку складали. На машині, куди її скопіювали, того шляху немає, і
Claude Desktop не підніме сервер — без зрозумілого повідомлення. Модульний виклик залежить
лише від теки поставки.
PYTHONIOENCODING обов'язковий: без нього кирилиця в каналі stdio псується.
Щоб додати три інструменти запису, впишіть у той самий env рядок
"MCP_ALLOW_WRITE": "1".
+ → Connectors.
HTTP-режим і stdio не конфліктують: це різні процеси над однією базою, тож Claude Desktop і мережеві клієнти можуть працювати одночасно.
update.cmd тягне свіжі mcbp[http] і mcbp-core з
TestPyPI. server.env і tokens.toml при цьому не чіпаються — саме
тому вони й лежать поза пакетом.
mcbp-core з команди
З одним лише mcbp оновлення проходить «успішно», але ядро лишається старим —
і виправлення до клієнта не доходять.
| Симптом | Причина |
|---|---|
помилка в server.env: ... | пропущений ключ; найчастіше відсутній ONEC_PASSWORD — порожнє значення легальне, відсутній ключ ні |
| мовчазний таймаут при старті | ONEC_BASE_URL вказує на localhost там, де бази немає |
усі маршрути 404, а /health живий | у ONEC_BASE_URL лишився хвіст /ai/v1 |
address already in use | порт зайнятий — змініть MCP_HTTP_PORT |
| клієнт отримує 400 | MCP_REQUIRE_AUTH=1, а токена немає або він не з tokens.toml |
| сервер не стартує після правки токенів | MCP_TOKENS_FILE заданий, а файл відсутній або битий — це навмисно: мовчазний старт без Bearer виглядав би робочим |
| немає інструментів запису | MCP_ALLOW_WRITE=0 — типовий стан; 1 додає три інструменти запису |
| клієнт з іншої машини не підключається | правило брандмауера з -Profile Private при мережі Public |
| помилка сертифіката у клієнта | не виконано trust-cert.cmd, або сертифікат виданий на іншу адресу |
| Claude Desktop не показує сервер | застосунок не перезапущено повністю (значок у треї), або в command стоїть Scripts\mcbp.exe замість python.exe -m mcbp_mcp_server |
| інструментів менше, ніж очікували | якщо серед них є хоч один із трьох на запис — гейт увімкнений, а список урізав сам клієнт (він довантажує визначення партіями) |