Асинхронный Python-клиент Tehzor Public API
Все 73 метода Tehzor Public API и MCP-сервер для LLM-агентов.
pip install -U tehzor # библиотека
pip install -U "tehzor[mcp]" # + MCP-сервер tehzor-mcp
0.2.0 несовместима с 0.1.x (
TehzorAPI.create) — см. docs/MIGRATION.md и CHANGELOG.md. Примеры — в examples/.
Принципы
- Факт важнее спецификации.
docs/openapi.json— заявление разработчика API о доступных методах. Модели строятся по фактическим ответам, которые проверяют контрактные тесты (pytest -m contract). Найденные расхождения собраны в docs/API_FACTS.md. - Бережно к серверу. Ограничение частоты и параллельности, повторы только для безопасных операций в пределах бюджета времени, circuit breaker. Тяжёлые запросы (502 после ~30 с) не повторяются.
- Запись под контролем. Режим
read_only=Trueблокирует изменяющие операции до отправки. Создание, изменение и удаление проверяются только на заглушках.
Быстрый старт
import asyncio
from tehzor import TehzorClient
from tehzor.models.problems import ProblemFilters
from tehzor.models.spaces import SpaceEdit
async def main() -> None:
async with TehzorClient(api_key="...") as thz: # или переменная окружения TEHZOR_API_KEY
print(await thz.objects.stages())
async for p in thz.problems.iter(ProblemFilters(objects=["<id объекта>"])):
print(p.number, p.status.name if p.status else None)
# изменения: сначала посмотреть запрос, ничего не отправляя
req = await thz.spaces.edit("<id помещения>", SpaceEdit(area_bti=55.1), dry_run=True)
print(req.describe(), req.json)
asyncio.run(main())
MCP-сервер для LLM-агентов
tehzor-mcp публикует все 73 операции API как инструменты MCP, плюс problems_search (поиск нарушений
с автопагинацией), space_overview (сводка по помещению) и справочники как ресурсы tehzor://….
Запуск
uvx (без установки):
uvx --from "tehzor[mcp]" tehzor-mcp
Из git (например, ветка до релиза): uvx --from "tehzor[mcp] @ git+https://github.com/gritsyuk/tehzor@<ветка>" tehzor-mcp.
Docker:
docker build -t tehzor-mcp .
docker run -i --rm -e TEHZOR_API_KEY tehzor-mcp
За корпоративным прокси с собственным CA сертификат передаётся только на время сборки:
docker build --build-arg HTTPS_PROXY --secret id=pip_ca,src=/path/to/ca.pem -t tehzor-mcp .
HTTP (streamable-http) — для удалённого подключения, только с токеном:
TEHZOR_API_KEY=… TEHZOR_MCP_HTTP_TOKEN=$(openssl rand -hex 32) docker compose up -d
Клиент подключается к http://<host>:8000/mcp с заголовком Authorization: Bearer <TEHZOR_MCP_HTTP_TOKEN>.
Наружу публикуйте только за reverse-proxy с TLS.
Подключение
Claude Code:
claude mcp add tehzor --env TEHZOR_API_KEY=… -- uvx --from "tehzor[mcp]" tehzor-mcp
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"tehzor": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "TEHZOR_API_KEY", "tehzor-mcp"],
"env": {"TEHZOR_API_KEY": "…"}
}
}
}
Запись данных и подтверждение человеком
- По умолчанию запись выключена: изменяющие инструменты видны агенту, но отказывают и ничего не отправляют.
Включается
TEHZOR_MCP_ALLOW_WRITE=1;TEHZOR_MCP_WRITE_TOOLS=problems_create,comments_createсужает список.TEHZOR_MCP_HIDE_WRITE=1убирает изменяющие инструменты совсем. - Даже при включённой записи каждая изменяющая операция сначала возвращает превью (метод, путь, тело) и
одноразовый
confirmation_id(живёт 10 минут). Выполнение — только после подтверждения человеком: через диалог клиента (MCP elicitation) или инструментconfirm_operation. Отправляется ровно показанный запрос. - Создание никогда не повторяется автоматически (дублей не будет). Для большинства сущностей удаления в API нет.
- Журнал аудита —
TEHZOR_MCP_AUDIT_LOG(по умолчанию~/.tehzor-mcp/audit.jsonl, в Docker — том/data); ФИО, телефоны и email маскируются, ключ не пишется. - Важно: при создании нарушения сервер Tehzor сам назначает исполнителей и наблюдателей по настройкам объекта — они получают уведомления (см. docs/API_FACTS.md).
Переменные окружения
| Переменная | По умолчанию | Назначение |
|---|---|---|
TEHZOR_API_KEY |
— | ключ API (можно не задавать, если заголовок api-key подставляет прокси) |
TEHZOR_BASE_URL |
https://api.tehzor.ru |
адрес API |
TEHZOR_PROXY, TEHZOR_SSL_VERIFY |
—, 1 |
прокси и проверка TLS; также учитываются HTTPS_PROXY/NO_PROXY |
TEHZOR_RATE_LIMIT, TEHZOR_MAX_CONCURRENCY |
5, 5 |
запросов в секунду и параллельно |
TEHZOR_MCP_ALLOW_WRITE |
0 |
разрешить изменяющие операции (с подтверждением) |
TEHZOR_MCP_WRITE_TOOLS |
все | список разрешённых изменяющих инструментов |
TEHZOR_MCP_HIDE_WRITE |
0 |
не публиковать изменяющие инструменты |
TEHZOR_MCP_CONFIRM_TTL |
600 |
срок жизни confirmation_id, с |
TEHZOR_MCP_AUDIT_LOG |
~/.tehzor-mcp/audit.jsonl |
журнал аудита |
TEHZOR_MCP_TRANSPORT, TEHZOR_MCP_HOST, TEHZOR_MCP_PORT |
stdio, 127.0.0.1, 8000 |
транспорт |
TEHZOR_MCP_HTTP_TOKEN |
— | обязательный токен для HTTP |
Разработка
python -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/ruff check . && .venv/bin/mypy
.venv/bin/pytest # unit-тесты, без сети
.venv/bin/pytest -m contract # живое API, только чтение (нужны ключ и TEHZOR_SEED_OBJECT_ID)
Статус
| Этап | Состояние |
|---|---|
| 0. Каркас (pyproject, ruff, mypy, CI) | готово |
| 1. Ядро: транспорт с защитой сервера, ошибки, реестр операций, пагинация | готово |
| 2. Модели (по фактическим ответам) | готово |
| 3. Контрактные тесты: 49 читающих операций на живом API | готово — 53 из 53 |
4. Изменяющие операции (24): dry_run, только на заглушках |
готово — 73 из 73 операций |
| 5. MCP-сервер: 76 инструментов, 18 ресурсов, подтверждение записи; uvx и Docker | готово |
| 6. Релиз 0.2.0: CHANGELOG, гайд миграции, примеры, публикация через Trusted Publishing | готово к публикации |
Metadata
Release files for tehzor 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tehzor-0.2.0.tar.gz | 43.5 kB | With provenance | Details for tehzor-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| tehzor-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for tehzor-0.2.0-py3-none-any.whl |
Total release size: 105.7 kB
Release files / tehzor-0.2.0.tar.gz
| Download URL | tehzor-0.2.0.tar.gz |
|---|---|
| Size | 43.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0c3b62396643a1dc53d4588a30e9d9ad72deb2fa9d33bace7bb1844f15959a3a
|
|
BLAKE2b-256 checksum How to use checksums |
6b870979627a639374739db85daa674c16c42efc554ce7c1d889656c0516b941
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.
Transparency logRelease files / tehzor-0.2.0-py3-none-any.whl
| Download URL | tehzor-0.2.0-py3-none-any.whl |
|---|---|
| Size | 62.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a295fb040c19da8f832dbfd98a709fa70a6de82b7c8850dd3f38199b443b97c6
|
|
BLAKE2b-256 checksum How to use checksums |
2cc95823b6c29dddf6b7c31b6c3df46a8cf52b90993c1ff7bbce8264d98ccd3a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.
Transparency logSecurity for tehzor 0.2.0
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for tehzor-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.
Transparency logA 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.