Встановлення MCP-сервера mcbp-ai

Ця тека — готова поставка: усередині вбудований Python і встановлений пакет. У систему нічого ставити не треба. Скопіювали, налаштували, запустили.

Повний довідник по параметрах — README.md поруч. Тут — порядок дій. Кроки, позначені потрібен адміністратор, виконуються у вікні PowerShell, відкритому через «Запуск від імені адміністратора».

Порядок дій

1

Скопіювати теку

robocopy <тека поставки> C:\mcbp-mcp /E

Тека certs\ порожня, tokens.toml ще немає — обидва зʼявляться на кроках 3 і 4.

2

Підключення до BAS

Відкрийте 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 усередині сервісу — це нормально.

Пастка, що коштує години Якщо сервер стоїть НЕ на машині з BAS, localhost у цьому рядку означає вже саму машину сервера. Симптом — не зрозуміла відмова, а мовчазний таймаут при старті. Ставте адресу машини з базою і відкрийте на ній порт 80: IIS слухає 0.0.0.0:80, але правила брандмауера для нього типово немає.
3

Токени доступу

Кожному клієнтові — свій токен, зіставлений з обліковкою BAS. Так у журналі реєстрації бази дії йдуть від імені конкретної людини, а не спільного службового запису.

  1. Запустіть new-token.cmd — надрукує випадковий рядок. По одному на клієнта.
  2. Скопіюйте 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), а не виконується під службовою обліковкою. Разом із доступом по мережі це обовʼязково — інакше будь-хто в мережі працює службовим записом.

Файл читається при старті Після правки токенів сервер треба перезапустити. У файлі паролі — тримайте його поза загальним доступом і не кладіть у git.
onec_password — це пароль до тієї бази Обліковка з токена перевіряється базою з ONEC_BASE_URL. Перемкнули сервер на іншу базу — перевірте паролі в tokens.toml: сервер стартує нормально, /healthz відповідає ok, і лише перший виклик інструмента дає AUTH_FAILED: BAS rejected credentials (401).
4

Доступ по мережі та HTTPS потрібен адміністратор

Клієнт на цій самій машині? Пропустіть цей крок цілком. Лишіть 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.

5

Запуск і перевірка

Подвійний клік на 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 у його ж вікні.
6

Що видати клієнтові

Клієнтові не потрібна ця тека — йому йдуть чотири файли з 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} і відмовить, тобто помилка конфігу виглядатиме як відмова авторизації.

7

Локальний клієнт: ChatGPT Desktop / Codex

Найкоротший шлях перевірити сервер — підключити клієнта на тій самій машині. Тоді сертифікат не потрібен (див. крок 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 має бути у списку. Далі попросіть у клієнті, наприклад, перелік довідників — відповісти має база, а не помилка авторизації.

8

Локальний клієнт: Claude Desktop

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 і мережеві клієнти можуть працювати одночасно.

9

Оновлення

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
клієнт отримує 400MCP_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
інструментів менше, ніж очікувалиякщо серед них є хоч один із трьох на запис — гейт увімкнений, а список урізав сам клієнт (він довантажує визначення партіями)