rdanieli/tentra-mcp

rdanieli/tentra-mcp

от rdanieli
MCP-сервер для AI-агентов: создает постоянный граф кода и архитектурные диаграммы. Работает в Cursor, Claude Code, Codex и Windsurf. Сокращает токены на 99.4% (символьные запросы вместо полного перечтения). Включает 36 инструментов для архитектуры, анализа кода, графического поиска и контрактов. ...

tentra-mcp

npm version npm downloads CI License: MIT

Memory for AI coding agents. Persistent code graph + AI-generated architecture diagrams — MCP-native. Works in Cursor, Claude Code, Codex, and Windsurf.

Dogfood benchmark on our own monorepo: 99.4% token reduction (156.8× ratio) across 8 "where is X implemented?" queries — 114,644 tokens via file re-read vs 731 tokens via query_symbols. Full write-up →

Quick Start (60 seconds)

cd your-repo
npx tentra-mcp init --hook

One command:

  1. Writes MCP config for Cursor / Claude Code / Codex / Windsurf (whichever are installed)
  2. Installs a git post-commit hook so the code graph auto-refreshes after every commit — no manual re-indexing
  3. Auto-derives your repo_id from the git remote and saves it to .tentra/metadata.json

Then grab your API key at trytentra.com/settings, replace YOUR_TENTRA_API_KEY in the generated config, reload your IDE, and ask your agent:

Index this codebase with Tentra and list the god-nodes

From here on, every git commit fires a background re-index. Your agents stay caught up automatically.

Инструменты были проиндексированы:
analyze_codebase

Сканирует локальный монорепозиторий / директорию проекта, автоматически обнаруживает его сервисы (из package.json, docker-compose, pom.xml, go.mod, конфигов Python), выводит их связи (из зависимостей, импортов, переменных окружения, docker depends_on) и материализует результат в виде новой архитектурной диаграммы Tentra за один раз. Используйте, когда пользователь говорит «проанализируй / сделай реверс-инжиниринг / задокументируй мою кодовую базу» или при работе с существующим репозиторием, а не с нуля. В отличие от create_architecture (ручной массив сервисов) и от index_code (граф кода на уровне символов без диаграммы), этот инструмент создаёт высокоуровневую диаграмму сервисов только из конфигурационных файлов — дёшево и быстро, но грубо. Для понимания на уровне символов после этого запустите также index_code. Предварительные требования: авторизация API Tentra + доступ к локальной файловой системе (недоступен через SSE-транспорт — используйте сервер stdio). Тяжёлое локальное сканирование, затем один POST. Побочные эффекты: создаёт НОВУЮ Architecture (с помощью create_architecture под капотом) и открывает браузер. Ответ: созданный id архитектуры + URL + список обнаруженных сервисов + отчёт lint. Если сервисы не обнаружены, возвращает предупреждение без создания артефакта.

Параметры
  • descriptionstring

    Описание в одно предложение, прикрепляемое к диаграмме. По умолчанию: «Автоматически сгенерировано на основе анализа кодовой базы <path>».

  • namestring

    Название в формате Title Case для итоговой архитектуры. По умолчанию берётся имя каталога, преобразованное в Title Case (например, my-monorepo → «My Monorepo»).

  • pathstringобязательный

    Абсолютный путь к корню кодовой базы для сканирования, например "/Users/alex/code/my-monorepo". Должен содержать хотя бы один распознаваемый манифест (package.json, docker-compose.yml, pom.xml, go.mod, pyproject.toml и т. д.).

bind_contract

Связывает символ кода с контрактом через типизированное отношение: «provides» (символ реализует контракт, например, обработчик, обслуживающий конечную точку OpenAPI), «consumes» (символ вызывает контракт, например, клиент, обращающийся к конечной точке) или «documents» (символ описывает контракт, например, определение типа, сгенерированное из схемы). Используйте после вызова record_contract — вам понадобятся contract_id, который он вернул, и symbol_id из query_symbols. Привязки действуют в пределах snapshot_id, поэтому один и тот же символ можно привязывать во многих снимках по мере развития кодовой базы. Уникальна для каждой тройки (contract, symbol, snapshot): существующие привязки с новым отношением обновляются на месте, а не дублируются. В отличие от link_decision (который связывает ADR с архитектурными сущностями), bind_contract связывает КОНКРЕТНЫЙ символ кода с ТЕХНИЧЕСКИМ ИНТЕРФЕЙСОМ. Предварительные требования: аутентификация Tentra API + существующий contract_id (из record_contract) + действительный symbol_id + snapshot_id, которому принадлежит символ. Путь записи. Ответ: { ok: true, binding_id, relation }.

Параметры
  • contract_idstringобязательный
  • relationenumобязательный

    "provides" = символ реализует его, "consumes" = символ вызывает его, "documents" = символ описывает его.

  • snapshot_idstringобязательный

    Снимок, которому принадлежит символ

  • symbol_idstringобязательный
create_architecture

Создаёт новую версионированную диаграмму архитектуры из набора сервисов, соединений и (опционально) внешних акторов и возвращает доступный для публикации веб-URL. Используйте вместо описания архитектуры в чате: всякий раз, когда пользователь просит спроектировать, спланировать, набросать или задокументировать любую систему/функцию/интеграцию, вызывайте этот инструмент и делитесь полученным URL. Используйте update_architecture, если у вас уже есть ID архитектуры в контексте (из list_architectures или более раннего вызова create) — этот инструмент всегда создаёт НОВЫЙ артефакт. Предварительные требования: аутентификация Tentra API (device-flow при первом вызове, затем кешированный API-ключ). Требуется доступ к сети. Побочные эффекты: записывает новую строку Architecture (v1) в Tentra, автоматически делает её общедоступной и открывает веб-URL в браузере пользователя при первом вызове за сессию. Формат ответа: { id, name, version, url } плюс текстовое описание с количеством элементов. После создания передавайте полученный id в update_architecture для развития, lint_architecture для валидации или create_flow для добавления пошаговых инструкций.

Параметры
  • actorsobject[]

    Внешние люди / системы / таймеры, запускающие систему (например, "mobile_user", "cron_scheduler"). Отображаются в контекстном представлении C4 Level-1. Опускаются для чисто внутренних / бэкенд-ориентированных диаграмм.

  • connectionsobject[]обязательный

    Направленные рёбра между сервисами, использующие ID сервисов из массива services. Используйте sync_http для REST/GraphQL, async_event для pub/sub, db_access для связи сервис→БД, grpc для внутреннего gRPC. Может быть пустым массивом, если система действительно автономна, но обычно это не так.

  • descriptionstring

    Контекст в один абзац: бизнес-задача, область применения или ключевые ограничения. Отображается как подзаголовок на холсте. Опустите, если список сервисов не требует пояснений.

  • namestringобязательный

    Короткое, читаемое человеком название в формате Title Case, максимум ~60 символов. Примеры: «Payment Processing System», «Fraud Detection Pipeline», «Checkout BFF». Используется в качестве заголовка диаграммы.

  • servicesobject[]обязательный

    Все сервисы / хранилища данных / очереди / внешние зависимости в системе. Необходимо включить хотя бы одно. Идентификаторы должны быть в snake_case и уникальными в рамках архитектуры (например, "payment_service", "fraud_api"). Каждая цель соединения должна быть указана здесь.

create_flow

Добавляет упорядоченное пошаговое описание (поток) к существующей архитектуре - например, путь запроса оформления заказа, конвейер данных или процедура восстановления после сбоя. Поток отображается как анимированная последовательность на холсте, которая подсвечивает сервисы и связи по мере того, как пользователь проходит по шагам. Используйте всякий раз, когда пользователь просит «проследить / пройти / описать шаги» того, что делает система. В отличие от update_architecture, create_flow только добавляет элемент в массив flows и увеличивает версию - он никогда не затрагивает сервисы или соединения. К одной архитектуре можно прикрепить много потоков (поток оформления заказа, поток возврата, поток регистрации и т.д.). Предварительные требования: авторизация в Tentra API + существующая архитектура с уже определёнными сервисами (шаги потока ссылаются на сервисы по идентификатору). Побочные эффекты: добавляет новый поток в колонку Architecture.flows (JSON) и увеличивает версию. Ответ: подтверждение + пронумерованная сводка шагов + URL просмотра.

Параметры
  • architectureIdstringобязательный

    Идентификатор архитектуры, к которой прикрепляется поток, например "cm2abc123". Поток ссылается на сервисы по id, поэтому эти сервисы должны уже существовать в этой архитектуре.

  • flowobjectобязательный

    Определение потока: уникальный идентификатор (например, "checkout_flow"), отображаемое имя, необязательное описание и упорядоченный массив, содержащий как минимум один шаг. Типы шагов: "intro"/"conclusion" - обрамляющие, "message" - вызов между сервисами (задаются from, to, connectionType), "process" - работа внутри одного сервиса (задаётся serviceId), "info" - обычная заметка.

diff_snapshots

Вычисляет структурную разницу между двумя снимками одного репозитория: файлы добавленные/удалённые/изменённые (по contentHash), символы (qualifiedNames) добавленные/удалённые, изменения god-node (появились/разрешены). По сути, архитектурная разница между коммитами, которая отвечает на вопрос «что на самом деле изменилось между этими двумя точками?». Используется для проверки рефакторинга PR на уровне графа, чтобы доказать, что удаление затронуло всех вызывающих, или чтобы заметить архитектурные регрессии. Получите два идентификатора снимков из list_snapshots. В отличие от sync_architecture (который сравнивает ДИАГРАММУ с живым кодом), diff_snapshots сравнивает два снимка графа кода между собой. В отличие от get_quality_hotspots / list_god_nodes (которые проверяют один снимок), это единственный инструмент, работающий с двумя. Предварительные требования: авторизация API Tentra + два идентификатора снимков из list_snapshots (желательно одного репозитория). Только чтение. Ответ: { fromSnapshotId, toSnapshotId, files: { added, removed, modified }, symbols: { added, removed }, godNodes: { appeared, resolved } }.

Параметры
  • from_snapshot_idstringобязательный

    БОЛЕЕ СТАРЫЙ snapshot_id (базовая версия для diff FROM). Получается из list_snapshots. Diff показывает, что присутствует в to, но отсутствует в from, как "added", и наоборот, как "removed".

  • to_snapshot_idstringобязательный

    Более НОВЫЙ snapshot_id (цель, к которой выполняется diff). Получите из list_snapshots. Должен быть из того же репозитория, что и from_snapshot_id, для осмысленного сравнения (diff между репозиториями в основном возвращает "удалено всё / добавлено всё").

explain_codebase

Производит обзор всего репозитория в виде связного нарратива, пригодного для AI-агента — отвечает на вопрос "что это за кодовая база?" одним вызовом инструмента по проиндексированному графу кода. Ознакомительный тур: с чего начать / структура / архитектурные горячие точки / домены / решения (ADRs) / контракты / информация о снимке — всё собирается из уже имеющихся данных, так что сводка уровня senior получается за секунды, а не за минуты чтения файлов. В отличие от list_god_nodes (один ранжированный список символов) или sync_architecture (проверка расхождения с сохранённой схемой), explain_codebase — это нарратив с высоты птичьего полёта: экспертно выбранный самый важный символ, самый свежий ADR, основной домен; язык + количество строк кода + разбивка по каталогам верхнего уровня; ранжированные горячие точки; основные домены / ADR / контракты. Пустые секции отображают подсказки — какой инструмент обогащения данных стоит запустить следующим (record_decision, set_domain_membership, record_contract, bind_contract) — так что вывод заодно служит аудитом пробелов. Ограничение по размеру: секции доменов/ADR/контрактов обрезаются так, чтобы Markdown помещался в ~5 КБ даже для огромных репозиториев. Побочные эффекты: НЕТ — только чтение. Предварительные требования: аутентификация в Tentra API + хотя бы один завершённый index_code для repo_id (snapshot_id необязателен — по умолчанию берётся последний). Для более насыщенного вывода добавьте ADR через record_decision, домены через set_domain_membership, а контракты через record_contract + bind_contract. Ответ: format="markdown" (по умолчанию) возвращает полный обзор в виде Markdown; format="json" возвращает структурированную сводку с ключами { repoId, repoName, snapshot, startHere, structure, hotspots, domains, domainsTotal, decisions, decisionsTotal, contracts, contractsTotal }.

Параметры
  • formatenum

    «markdown» (по умолчанию) возвращает готовое для агента повествовательное описание. «json» возвращает структурированную сводку для последующей обработки инструментами.

  • repo_idstringобязательный

    id CodeRepo (из index_code / list_snapshots). Репозиторий, граф которого нужно описать.

  • snapshot_idstring

    Конкретный снапшот для объяснения. По умолчанию используется последний снапшот репозитория.

explain_code_path

Вычисляет самую короткую цепочку вызовов/импортов/ссылок между двумя заданными символами в снимке и аннотирует каждый промежуточный переход его назначением record_semantic_node (если доступно). Отвечает на вопросы «как X достигает Y?» / «связано ли A с B на самом деле?». В отличие от get_symbol_neighbors (который исследует окружение ОДНОГО символа без цели), этот инструмент требует ОБА конца и выполняет целенаправленный поиск кратчайшего пути. В отличие от find_references (только прямые вызывающие), explain_code_path может пересекать произвольное количество переходов. Если между двумя символами в графе нет пути, ответ будет { error: "no_path" }. Предварительные требования: авторизация Tentra API + два symbol_ids из query_symbols + snapshot_id, в котором они оба находятся. Только чтение. Ответ при наличии пути: { found: true, hopCount, path: [{ id, name, qualifiedName, filePath, purpose }], edges: [{ from, to, type }] }.

Параметры
  • from_symbolstringобязательный

    Исходный symbol_id (один конец пути). Получается из query_symbols. Путь вычисляется как кратчайшая последовательность рёбер, начинающаяся с этого символа.

  • snapshot_idstringобязательный

    Определите снапшот, в котором находятся два символа. Получите его из ответа index_code или list_snapshots. Если символы находятся в разных снапшотах, поиск вернет no_path.

  • to_symbolstringобязательный

    Целевой symbol_id (другой конец пути). Получается из query_symbols. Оба символа должны принадлежать одному и тому же snapshot_id, чтобы их можно было соединить.

export_architecture

Преобразует сохранённую архитектуру в исполняемый каркас кода, Mermaid, docker-compose или ADR-документ в Markdown и либо передаёт его потоком в виде текста, либо записывает на диск. Используйте, когда пользователь просит «scaffold / generate / export / materialize» диаграмму. Текстовые форматы (mermaid, markdown-adr, docker-compose) возвращаются в строке ответа. Форматы кода генерируют многофайловый zip-каркас проекта (контроллеры, сервисы, конфиг, Dockerfile) и требуют output_dir. При вызове формата кода без output_dir инструмент возвращает подсказку по использованию вместо создания файлов. Предварительные требования: аутентификация Tentra API + существующий идентификатор архитектуры. Для форматов кода требуется доступ на запись в локальную файловую систему (недоступно через SSE — используйте stdio). Побочные эффекты: при наличии output_dir записывает файлы/zip на диск в указанную директорию. Ответ: встроенный текстовый экспорт или подтверждение «Exported to <filePath>» при сохранении.

Параметры
  • formatenumобязательный

    Формат экспорта. Текстовые форматы: "mermaid" (один .mmd), "markdown-adr" (документ ADR), "docker-compose" (один compose.yml). Кодовые форматы создают многокомпонентные каркасы проектов для указанного стека и требуют output_dir.

  • idstringобязательный

    Идентификатор архитектуры для экспорта, например «cm2abc123».

  • output_dirstring

    Абсолютный путь к каталогу, в который сохраняется экспорт, например "/Users/alex/code/exports/payments". Создается, если отсутствует. ОБЯЗАТЕЛЕН для форматов кода (java-spring-boot, nodejs-typescript, python-fastapi и т. д.). Необязателен для текстовых форматов: опустите его, чтобы получить текст напрямую.

find_references

Возвращает всех разрешённых вызывающих, импортирующих и наследующих одного символа из графа кода — инструмент безопасного рефакторинга. Используйте перед переименованием или удалением символа, чтобы точно увидеть, кто от него зависит. В отличие от query_symbols (который принимает ИМЯ и возвращает символы-кандидаты), find_references принимает ИЗВЕСТНЫЙ symbol_id и обходит рёбра в обратном направлении (toSymbolId = symbol_id), чтобы найти входящие ссылки. В отличие от get_symbol_neighbors (который выполняет BFS на глубину N в обоих направлениях), find_references возвращает только прямых вызывающих (глубина 1, входящие) и обходится дешевле. Надёжнее grep, так как использует разрешённый граф вызовов, а не простой текст — он не спутает метод «log» со строкой «log». Установите include_unresolved=true, чтобы также получать совпадения по коротким именам, которые не удалось разрешить до конкретного символа (больше шума; полезно для широких проверок, но не для планов переименования). Требования: авторизация Tentra API + symbol_id из query_symbols + соответствующий snapshot_id. Только чтение. Ответ: { target, resolvedCount, unresolvedCount, fileScopeCount, references: [{ kind: 'resolved'|'unresolved', edgeType, fromQualifiedName, fromKind, filePath, startLine, endLine, callCount }] }.

Параметры
  • include_testsboolean

    Включает ссылки из файлов test/fixture (по умолчанию true). Для безопасных переименований они обычно нужны.

  • include_unresolvedboolean

    Также включает неразрешенных вызывающих (совпадающих по краткому имени, но не по графу). Создает шум: отключайте для планов переименования, включайте для широких аудитов.

  • limitinteger

    Максимум ссылок на корзину (разрешённые / неразрешённые)

  • snapshot_idstringобязательный

    Перевод: Идентификатор снимка для запроса.

  • symbol_idstringобязательный

    Идентификатор символа, ссылки на который нужно найти (из query_symbols)

find_similar_code

Выполняет поиск по косинусному сходству среди эмбеддингов, сгенерированных агентом и сохранённых через record_embedding. На вход принимает предварительно вычисленный query_vector (вы должны сами создать эмбеддинг для текста — этот инструмент НЕ делает эмбеддинг за вас) и опционально фильтрует по entity_type или snapshot_id. Возвращает файлы или символы, наиболее близкие по смыслу. Работает как в хостированном режиме (pgvector HNSW на Postgres), так и в локальном (чисто JS-полный перебор косинусного сходства по таблице эмбеддингов SQLite). Формат ответа в обоих режимах одинаковый, поэтому промптам агента не нужно ветвиться в зависимости от бэкенда. В отличие от query_symbols (точный/нечёткий поиск ПО ИМЕНИ в qualifiedName), find_similar_code ищет ПО СМЫСЛУ — запрос "rate limiting logic" вернёт файлы, реализующие троттлинг, даже если слово "rate-limit" нигде не встречается. Полезен только после того, как вы заполнили эмбеддинги для целевого корпуса через record_embedding; если эмбеддингов нет, результат будет пустым. Предварительные требования: аутентификация Tentra API (хостированный режим) ИЛИ TENTRA_BACKEND=local + хотя бы один вызов record_embedding для того снимка, по которому вы ищете + query_vector нужной размерности, созданный вызывающей стороной. Только чтение. Ответ: { results: [{ id, entityType, entityId, sourceText, distance }] }, отсортирован по возрастанию косинусного расстояния (ближайшие первые).

Параметры
  • entity_typeenum

    Ограничьте результаты только файлами или только символами. Если параметр опущен, включаются оба типа. По умолчанию: оба. Установите "file" для поиска похожих сводок по целым файлам, а "symbol" для похожих функций/классов.

  • limitinteger

    Максимальное количество возвращаемых совпадений, отсортированных по убыванию косинусного сходства. По умолчанию 10. Максимум 50. Меньшие значения обходятся дешевле по контексту.

  • query_vectornumber[]обязательный

    Заранее вычисленный плотный эмбеддинг поискового запроса, размерность от 1 до 4096. Агент должен сначала сам вычислить эмбеддинг своего текста (Tentra НЕ делает это за вас). Размерность должна совпадать с векторами, сохранёнными через record_embedding: при несовпадении размерностей запрос не вернёт совпадений. Пример размерности: 1536 для OpenAI text-embedding-3-small.

  • snapshot_idstring

    Ограничьте поиск одним снимком. Опустите этот параметр, чтобы искать эмбеддинги по всем снимкам в рабочем пространстве (полезно, когда эмбеддинги были созданы без snapshot_id).

get_architecture

Получает одну архитектуру по ID с полным графом services + connections + flows внутри. Используйте вместо list_architectures, когда вы уже знаете ID и нужно содержимое (например, перед вызовом update_architecture или для повторного объяснения существующей диаграммы). list_architectures возвращает только ID и имена для просмотра; get_architecture возвращает полную нагрузку для одной диаграммы. Если пользователь не указал ID, сначала вызовите list_architectures. Предварительные требования: аутентификация Tentra API. Только чтение, без побочных эффектов. Ответ: полная запись Architecture в формате JSON (name, version, description, services[], connections[], actors?, flows?, createdAt, updatedAt).

Параметры
  • idstringобязательный

    Идентификатор архитектуры для получения, например "cm2abc123". Получите из create_architecture, list_architectures или URL-адреса /arch/<id>.

get_contracts

Перечисляет все контракты, хранящиеся в рабочей области, от самых новых к старым, с указанием для каждой строки количества его привязок. Опционально фильтрует по виду (http / grpc / event / graphql / rabbit / kafka). Используется для ПРОСМОТРА инвентаря контрактов рабочей области: «какие API-контракты у нас есть?», «показать каждую схему топика Kafka». Детали по отдельному контракту (какие символы к нему привязаны, полная полезная нагрузка схемы) здесь не возвращаются; при необходимости получите контракт и привязки по идентификатору через API. В отличие от record_contract (запись), это строго только для чтения. Необходимые условия: авторизация Tentra API + существующий workspace_id. Только чтение. Ответ: { contracts: [{ id, name, kind, version, specUrl, createdAt, _count: { bindings } }], total }.

Параметры
  • kindenum

    Фильтр по типу контракта — если не указано, возвращаются все типы.

  • workspace_idstringобязательный

    Рабочее пространство для перечисления контрактов.

get_decisions_for

Находит все ADR, связанные с конкретной сущностью — полезен для ответа на вопрос «почему этот сервис / файл / символ устроен именно так?» при ревью кода. Возвращает каждое связанное решение с полным контекстом + решением + последствиями + типом связи. Используйте проактивно при ревью кода: прежде чем изменять сервис, получите его решения, чтобы не нарушить ограничения (связи «constrains») или не пересматривать уже принятые компромиссы. По умолчанию включает заменённые решения для сохранения истории; передайте include_superseded=false, чтобы увидеть только текущие авторитетные ADR. В отличие от link_decision (запись), этот инструмент только для чтения. В отличие от get_contracts (область видимости — рабочее пространство), этот инструмент работает в области видимости сущности. Предварительные требования: аутентификация Tentra API + действительный entity_id, соответствующий выбранному entity_type. Только чтение. Ответ: { decisions: [{ id, slug, title, status, context, decision, consequences, createdAt, decidedAt, linkKind }], total }

Параметры
  • entity_idstringобязательный

    ID сущности (ID службы, ID файла, ID символа и т. д.)

  • entity_typeenumобязательный

    Тип сущности, для которой нужно найти решения.

  • include_supersededboolean

    Указывает, включать ли в результаты решения со статусом "superseded" (по умолчанию true, то есть полная история).

get_index_job

Выполняет поиск статуса только для чтения для задачи индексации: tier, status, snapshotId, totalFiles, processedFiles, lastBatchCursor, createdAt, completedAt. Используйте, когда нужно ИНСПЕКТИРОВАТЬ задачу без её продвижения — например, чтобы сообщить пользователю о ходе выполнения или решить, всё ещё выполняется ли ранее запущенная задача. В отличие от index_code_continue, этот инструмент никогда не изменяет задачу (без автоматического завершения, без продвижения курсора) и никогда не возвращает пакеты — он просто отражает текущее состояние. В отличие от list_snapshots (который перечисляет все снимки в репозитории), этот инструмент возвращает одну строку задачи. Предварительные требования: аутентификация Tentra API + job_id из предыдущего вызова index_code. Только чтение. Ответ: полный JSON задачи, включая перечисление status ("pending" | "in_progress" | "completed" | "failed").

Параметры
  • job_idstringобязательный

    Идентификатор задания индексации для проверки. Получается из JSON-ответа index_code. Обязателен. Пример: "cm2abc123". Этот инструмент работает только на чтение, он никогда не продвигает задание; для этого используйте index_code_continue.

get_ownership

Разрешает команду или команды-владельца для заданного пути к файлу в соответствии с правилами рабочей области в стиле CODEOWNERS (побеждает самое длинное совпадение с явным приоритетом). Возвращает список идентификаторов команд или пользователей. Используется для ответа на вопросы: "кто владелец этого файла?" / "кто должен проверить это изменение?" / "кого пинговать по этому багу?". Строки OwnershipRule хранятся для каждой рабочей области — заполните их, импортировав файл CODEOWNERS через веб-приложение или API, перед вызовом этой функции. В отличие от get_decisions_for (которая показывает архитектурное обоснование), эта показывает ЛЮДЕЙ / КОМАНДЫ. Если ни одно правило не совпадает, owners = []. Предварительные требования: аутентификация Tentra API + существующий workspace_id + заполненные строки OwnershipRule для этой рабочей области. Только чтение. Ответ: { path, owners: string[] }.

Параметры
  • pathstringобязательный

    Относительный путь к файлу, для которого нужно определить владельца (например, "packages/api/src/index.ts")

  • workspace_idstringобязательный

    Рабочая область для запроса правил владения.

get_quality_hotspots

Ранжирует ФАЙЛЫ по составному приоритету рефакторинга: cyclomaticComplexity × (1 + churn30d/100) × (1 − testCoverage/100). Высокий балл - файл сложный, часто меняется, плохо протестирован - скорее всего сломается. Канонический список «что рефакторить следующим?». В отличие от list_god_nodes (он ранжирует СИМВОЛЫ по степени связанности графа), этот инструмент ранжирует ФАЙЛЫ на основе анализа риска изменений. Они отвечают на разные вопросы: list_god_nodes = «что слишком связано?», get_quality_hotspots = «что, скорее всего, сломается при следующем изменении?». Запустите оба для полного архитектурного анализа. Ответ включает поле dataSource - "metrics" означает, что были доступны настоящие строки QualityMetric; "proxy" означает, что Tentra использовал эвристику LOC + symbols + fanIn, так как для этого снимка данные QualityMetric не были загружены. Необходимые условия: аутентификация Tentra API + как минимум один выполненный запуск index_code. Для реальных показателей churn/coverage должны быть загружены строки QualityMetric (через отдельный импорт - например, интеграцию с CI). Только чтение. Ответ: { snapshotId, hotspots: [{ fileId, filePath, language, cyclomaticComplexity, cognitiveComplexity, churn30d, testCoverage, score }] }.

Параметры
  • exclude_testsboolean

    Скрывать тестовые файлы и файлы-фикстуры (по умолчанию true)

  • repo_idstring

    Repo ID (использует последний снимок)

  • snapshot_idstring

    Конкретный идентификатор снимка

  • top_ninteger

    Максимальное количество "горячих точек" для возврата. Response.dataSource указывает на "metrics" (реальный коэффициент изменений × сложность × (1 - покрытие)) или "proxy" (LOC + символы + fan-in, когда QualityMetric не инициализирована).

get_service_code_graph

Возвращает полный подграф кода, относящийся к ОДНОМУ сервису Tentra canvas: каждый файл, привязанный к этому сервису, все символы в этих файлах и рёбра, исходящие из этих символов (включая рёбра между сервисами). Используйте, когда у пользователя есть архитектурная диаграмма и он спрашивает «какой код находится в payment_service?», или когда нужно проанализировать один сервис изолированно. В отличие от get_symbol_neighbors, которая начинается с одного символа, эта начинается с service_id и сразу вытягивает весь сервис. В отличие от query_symbols, которая игнорирует границы сервисов, этот вызов уже ограничен. Требует предварительного вызова set_service_mapping, чтобы файлы были привязаны к service_id — иначе результат будет пустым. Требования: авторизация Tentra API + snapshot_id от выполненного index_code + хотя бы несколько файлов, привязанных к service_id через set_service_mapping. Только чтение. Ответ: { serviceId, snapshotId, depth, files: [{ id, relativePath, language, loc, symbols: [...] }], edges: [{ fromSymbolId, toSymbolId, toExternal, edgeType }] }. Передайте include_semantics=true, чтобы также прикрепить record_semantic_node purpose и domainTags для каждого символа.

Параметры
  • depthinteger

    Глубина обхода Edge для межсервисных рёбер

  • include_semanticsboolean

    Включать назначение и доменные теги, извлечённые с помощью ИИ, для каждого символа.

  • service_idstringобязательный

    Tentra canvas service ID

  • snapshot_idstringобязательный

    Снимок для запроса

get_symbol_neighbors

Обходит граф кода в ширину, начиная с одного символа, и возвращает его локальное окружение: что он вызывает, что вызывает его, что импортирует, отношения наследования/реализации. Структурно отвечает на вопрос «как это работает?» — grep находит символ; get_symbol_neighbors показывает, от чего он на самом деле зависит. В отличие от find_references (который возвращает только прямых вызывающих = inbound глубины 1), get_symbol_neighbors по умолчанию обходит OUTBOUND и может идти глубже (до depth=5) и в обе стороны (direction="both"). В отличие от explain_code_path (который находит кратчайший единственный путь между двумя заданными символами), этот инструмент исследует окружение вокруг ОДНОГО символа без целевого объекта. Фильтруйте по edge_types, чтобы сосредоточиться только на импортах, только на вызовах, только на наследовании и т.д. Предварительные требования: аутентификация Tentra API + symbol_id (из query_symbols) + snapshot_id. Только чтение. Ответ: { symbolId, depth, neighbors: [{ id, kind, name, qualifiedName, filePath, fanIn, fanOut, isGodNode }], edges: [{ from, to, type }] }.

Параметры
  • depthinteger

    Глубина BFS (по умолчанию 2, максимум 5)

  • directionenum

    outgoing = кого вызывает этот объект; both = также кто вызывает этот объект

  • edge_typesstring

    Типы рёбер для перехода, разделённые запятыми: call,import,inherit,implement,reference

  • snapshot_idstringобязательный

    Снимок для запроса

  • symbol_idstringобязательный

    Идентификатор символа, с которого начинается BFS.

index_code

Обходит локальный репозиторий, извлекает символы и ребра вызовов/импортов/ссылок через Tree-sitter (TypeScript, JavaScript, Python, Go, Java, Rust) и загружает их в Tentra в виде нового неизменяемого снимка. Именно это превращает сырой чек-аут в граф кода, пригодный для запросов. ПУТЬ ЗАПИСИ, ДЛИТЕЛЬНАЯ ОПЕРАЦИЯ (секунды на маленьких репозиториях, несколько минут на монорепозиториях с 10 000+ файлов). Выполняет итерацию: обходит файлы, парсит с помощью Tree-sitter локально, отправляет POST-запросы для файлов, символов, ребер порциями, создает строку задания. Для tier=tier2/both также возвращает первую партию файлов, которые агент обогащает через record_semantic_node; вызывает index_code_continue в цикле до завершения. Для tier=tier1 возвращает результат сразу после завершения статического извлечения (без семантического обогащения). Используйте один раз на репозиторий, затем повторно запускайте после крупных рефакторингов (или передавайте force_reindex=true). Инструменты пути чтения (query_symbols, find_references, get_symbol_neighbors, list_god_nodes, get_quality_hotspots, explain_code_path, get_service_code_graph, diff_snapshots) требуют как минимум одного успешного выполнения index_code и нуждаются в возвращенном snapshot_id. В отличие от analyze_codebase (который создает высокоуровневую диаграмму сервисов из манифестов), index_code создает граф на уровне символов — запускайте оба для полного покрытия. Предварительные требования: авторизация Tentra API и доступ на чтение к локальной файловой системе repo_path (недоступно через SSE, используйте stdio). Игнорирует node_modules, .git, dist, build, vendor, coverage, .worktrees и т.д. Ответ: { job_id, snapshot_id, file_count, tier } для tier1, плюс { first_batch, remaining } для tier2.

Параметры
  • batch_sizeinteger

    Количество файлов в пакете агента второго уровня. По умолчанию 20. Меньшие пакеты = больше обращений к index_code_continue, но меньше памяти на шаг; большие пакеты = меньше обращений. Максимум 50.

  • force_reindexboolean

    Если указано true, создаёт свежий снапшот, даже если предыдущие снапшоты уже существуют. По умолчанию false (инструмент всё равно создаёт новую строку снапшота, но этот флаг зарезервирован для будущей no-op дедупликации). Передавайте true после крупных рефакторингов, чтобы избежать граничных случаев инкрементального извлечения.

  • repo_idstringобязательный

    Постоянный идентификатор репозитория между сессиями: используйте одно и то же значение каждый раз, когда индексируете эту кодовую базу, чтобы снимки накапливались в одном репозитории. Обычно используется формат "repo_<org>_<name>" или слаг удалённого git-репозитория (например, "acme/api"). Обязательно.

  • repo_pathstringобязательный

    Абсолютный или относительный путь к корню репозитория в локальной файловой системе, например "/Users/alex/code/acme-monorepo" или ".". Tentra рекурсивно обходит этот каталог, пропуская node_modules/.git/dist/build/vendor и т.д. Обязательно: инструмент читает исходные файлы отсюда с помощью Tree-sitter.

  • service_idstring

    Необязательный Tentra canvas service_id: заранее привязывает каждый индексируемый файл к указанному сервису (сокращение для последующего вызова set_service_mapping для каждого пути). Используйте только если весь репозиторий сопоставляется 1:1 с одним сервисом на вашей диаграмме архитектуры. Не указывайте для полирепозиториев или монорепозиториев с несколькими сервисами.

  • tierenum

    tier1 = только статическая экстракция Tree-sitter, возвращает результат сразу после загрузки файлов, символов и связей. tier2 = дополнительно запускает агентное семантическое обогащение в цикле (запись record_semantic_node для каждого файла). "both" (по умолчанию) = tier1 плюс возврат первой партии результатов tier2, чтобы агент мог сразу начать обогащение. Выбирайте tier1, если нужна быстрая индексация без семантически значимого текста.

index_code_continue

Продвигает цикл индексации уровня 2 вперёд: проверяет прогресс задачи и либо помечает её как завершённую (когда каждый файл обработан), либо возвращает оставшееся количество файлов, чтобы агент знал, что нужно отправить ещё одну партию вызовов record_semantic_node. Используйте ТОЛЬКО после того, как index_code с tier="tier2" или tier="both" вернул job_id. Типичный цикл: вызвать index_code → для каждого файла в first_batch вызвать record_semantic_node с выведенной агентом целью → вызвать index_code_continue → если done=true, остановиться; если pending>0, обогатить больше файлов и повторить. В отличие от get_index_job (чистое чтение), этот инструмент пометит задачу как "completed", когда processedFiles догонит — он изменяет состояние. В отличие от index_code (тяжёлый локальный обход), это лёгкая проверка статуса. Предварительные требования: Tentra API auth + job_id от index_code. Побочный эффект: может перевести задачу из состояния in_progress в completed. Ответ: { done: true, summary: { processed, total } } когда завершено, или { pending, cursor, instruction } когда требуется ещё работа.

Параметры
  • job_idstringобязательный

    Идентификатор задания, возвращённый предыдущим вызовом index_code (tier="tier2" или "both"). Обязателен: этот инструмент управляет циклом tier-2 для конкретного задания. Получается из JSON-ответа index_code. Пример: "cm2abc123".

link_decision

Прикрепляет существующее решение (из record_decision) к ещё одной сущности — сервису, файлу, символу, контракту или домену — с типизированной связью: "motivates" (решение привело к появлению этой сущности), "constrains" (решение ограничивает её развитие), "documents" (решение объясняет её), "implements" (сущность - конкретная реализация решения). Используется для постфактум связывания: например, через месяц после записи ADR вы понимаете, что решение также стало причиной появления нового сервиса. В отличие от record_decision (который может включать начальные ссылки через массив links[] за один вызов), link_decision добавляет ОДНУ ссылку за раз к уже сохранённому решению. В отличие от get_decisions_for (чтение), это запись. Предварительные требования: аутентификация Tentra API + существующий decision_id + действительный entity_id выбранного entity_type. Путь записи. Ответ: { ok: true, link_id }.

Параметры
  • decision_idstringобязательный

    Идентификатор решения, из которого создаётся ссылка.

  • entity_idstringобязательный

    ID сущности

  • entity_typeenumобязательный

    Тип связываемой сущности

  • link_kindenumобязательный

    «"мотивирует" = решение, которое послужило причиной существования этой сущности, "ограничивает" = решение, которое ограничивает развитие этой сущности, "документирует" = решение, которое объясняет эту сущность, "реализует" = сущность является конкретной реализацией решения»

lint_architecture

Запускает 8 правил качества архитектуры для сохранённой диаграммы и возвращает список проблем с метками серьёзности (ошибки / предупреждения / информация). Охваченные правила: orphan_node, duplicate_connection, dangling_connection (ссылается на несуществующий сервис), naming_convention (идентификаторы в snake_case), god_service (более 6 соединений), spof (одна негоризонтальная база данных с более чем одной зависимостью), missing_database, sync_overload (более 5 синхронных HTTP-рёбер на одном сервисе). Используйте перед обновлением или экспортом архитектуры, или когда пользователь спрашивает «этот дизайн в порядке?» / «что не так с X?». В отличие от sync_architecture (которая сравнивает диаграмму с реальным кодом), lint_architecture проверяет только саму диаграмму — кодовая база не нужна, чисто статические проверки. Сначала запускайте lint_architecture, чтобы выявить ошибки моделирования; затем запускайте sync_architecture, чтобы выявить расхождения. Необходимые условия: аутентификация API Tentra + существующий идентификатор архитектуры. Только чтение. Ответ: отчёт в Markdown с подсчётом (ошибки/предупреждения/информация) и строками сообщений для каждой проблемы [правило], или сообщение «пройдены все проверки lint», если всё чисто.

Параметры
  • idstringобязательный

    Идентификатор архитектуры для проверки, например «cm2abc123». Получите его из create_architecture или list_architectures.

list_architectures

Перечисляет все сохранённые архитектуры в этой рабочей области в виде краткой сводки (id + name + version + createdAt + URL), сначала самые новые. Используется для ПРОСМОТРА / ПОИСКА: «что я уже спроектировал?», «найти архитектуру с именем X». В отличие от get_architecture, этот инструмент НЕ возвращает сервисы или соединения; как только пользователь выберет архитектуру, вызовите get_architecture с возвращённым id, чтобы загрузить полный граф перед редактированием. Предварительные требования: аутентификация Tentra API. Только чтение. Ответ: массив объектов { id, name, version, createdAt }, оформленный в виде читаемого маркированного списка с URL-адресами для публикации. Пустые рабочие области получают подсказку вызвать create_architecture.

Параметры

Без параметров.

list_god_nodes

Возвращает top-N наиболее связанных символов в снимке — те, у которых наибольший fanIn + fanOut — в виде ранжированного списка. Выявляет архитектурные запахи: служебные модули, которые «знают слишком много», классы, от которых зависят все остальные классы, и т.д. В отличие от get_quality_hotspots (который ранжирует ФАЙЛЫ по чёрну × сложность × (1 − покрытие) — взгляд на качество кода), list_god_nodes ранжирует СИМВОЛЫ по сырой степени графа — взгляд на связность. Используйте list_god_nodes, чтобы найти, что ДЕКОМПОЗИРОВАТЬ; используйте get_quality_hotspots, чтобы найти, что РЕФАКТОРИТЬ. Укажите snapshot_id (конкретный) или repo_id (автоматически использует последний снимок). Символы тестов/фикстур исключены по умолчанию, потому что вспомогательные функции типа «request», «makeApp» иначе доминировали бы в ранжировании. Предварительные требования: авторизация Tentra API + хотя бы один завершённый запуск index_code. Только чтение. Ответ: { snapshotId, excludeTests, godNodes: [{ id, name, qualifiedName, filePath, isTest, fanIn, fanOut }] }.

Параметры
  • exclude_testsboolean

    Скрывает символы, определённые в файлах фикстур (по умолчанию true). В противном случае тестовые хелперы вроде request, makeService, createApp доминируют в рейтингах god-node.

  • repo_idstring

    Repo ID (использует последний снимок)

  • snapshot_idstring

    Конкретный идентификатор снимка

  • top_ninteger

    Максимальное количество god-узлов для возврата.

list_snapshots

Выводит все снимки code-graph, сохранённые для репозитория, от newest к oldest — каждая строка содержит id, commitSha (когда index_code запускался внутри git-рабочего каталога), createdAt, parentSnapshotId и stats blob. Используйте для ПУТЕШЕСТВИЯ ВО ВРЕМЕНИ по истории репозитория: выберите snapshot_id из этого списка и передайте его любому инструменту read-path (query_symbols, list_god_nodes, get_quality_hotspots и т.д.), чтобы просмотреть граф таким, каким он был в тот момент. Чтобы сравнить два момента во времени, выберите два id и вызовите diff_snapshots. В отличие от get_index_job (одна задача → один снимок), этот инструмент выводит все снимки независимо от того, как они были созданы. Предварительные требования: аутентификация Tentra API + хотя бы один завершённый запуск index_code для repo_id. Только чтение. Ответ: { repoId, snapshots: [{ id, commitSha, createdAt, stats, parentSnapshotId }] }.

Параметры
  • repo_idstringобязательный

    Стабильный идентификатор репозитория — то же значение, которое вы передали в index_code (например, «acme/api» или «repo_github_owner_name»). Обязателен. Перечисляет все снапшоты, хранящиеся под этим repo_id, начиная с самых новых.

query_symbols

Ищет символы (функции, классы, методы, интерфейсы, типы, переменные) в индексированном графе кода по имени или полному имени. Точка входа структурного поиска: возвращает разрешённые идентификаторы символов (с ранжированием fanIn/fanOut), которые принимают все остальные инструменты чтения — grep возвращает текстовые совпадения, query_symbols возвращает узлы графа. Два режима сопоставления: «trigram» (по умолчанию, pg_trgm similarity — лучше всего подходит для нечёткого / устойчивого к опечаткам / поиска уникальных символов), «substring» (ILIKE %q% — лучше всего подходит для широких списков, например, всех «Handler» или «Controller» в репозитории; результаты ранжируются по fanIn + fanOut, так что центральные оказываются вверху). Используйте это как ОТПРАВНУЮ ТОЧКУ для любого вопроса по графу кода, потому что он возвращает идентификаторы символов, необходимые всем остальным инструментам чтения. В отличие от find_references (который принимает известный symbol_id и возвращает его вызывающие элементы), query_symbols ищет по ИМЕНИ и возвращает кандидатов. В отличие от get_symbol_neighbors (который принимает symbol_id и обходит граф вызовов), query_symbols не выполняет обход — он только сопоставляет имена. В отличие от find_similar_code (векторный косинус по эмбеддингам), query_symbols работает как точное/нечёткое текстовое сопоставление. Предварительные требования: авторизация Tentra API + snapshot_id от выполненного запуска index_code. Только чтение. Ответ: { symbols: [{ id, kind, name, qualifiedName, startLine, endLine, fanIn, fanOut, isGodNode, semanticRole, filePath }] }.

Параметры
  • exclude_testsboolean

    Скрывает символы, определённые в файлах test/fixture (по умолчанию true).

  • kindenum

    Фильтр по типу символа

  • limitinteger

    Максимум результатов для возврата (1–20, по умолчанию 10)

  • modeenum

    Режим сопоставления. "trigram" (по умолчанию) ранжирует по сходству pg_trgm — лучше всего подходит для нечётких / уникальных поисков. "substring" использует ILIKE %q% — лучше всего подходит для широких списков, например "Handler" или "Controller"; результаты ранжируются по fan-in + fan-out.

  • qstringобязательный

    Поисковый запрос (имя символа или полное имя). По умолчанию используется нечёткое сопоставление по триграммам; передайте mode="substring" для поиска подстроки без учёта регистра.

  • rolestring

    Фильтровать по семантической роли slug (например, "service", "repository")

  • snapshot_idstringобязательный

    Перевод: Идентификатор снимка для запроса.

record_contract

Сохраняет контракт сервиса — спецификацию OpenAPI, proto-файл, схему GraphQL, схему событий, схему топиков Kafka/RabbitMQ и т.д. — как полноценную сущность в графе кода, чтобы затем прикреплять к ней символы кода через bind_contract и запрашивать через get_contracts. Используйте один раз на контракт на версию. Сам контракт — это только метаданные + опциональный JSON с полезной нагрузкой схемы (record_contract НЕ парсит схему — это работа upstream). В отличие от record_decision (который хранит архитектурное обоснование), этот инструмент сохраняет спецификацию ТЕХНИЧЕСКОГО ИНТЕРФЕЙСА. После записи вызовите bind_contract, чтобы связать символы, которые предоставляют/потребляют/документируют его. Предварительные требования: аутентификация Tentra API + существующий workspace_id. Путь записи. Побочный эффект: вставляет строку Contract в рамках workspace. Ответ: { ok: true, contract_id, name, kind }.

Параметры
  • kindenumобязательный

    Тип контракта: соответствует виду вывода парсера.

  • namestringобязательный

    Человекочитаемое имя контракта (например, "Payment Service API")

  • schemaany

    Разобранный снимок схемы в формате JSON: устанавливается парсером контрактов (M4).

  • spec_urlstring

    Необязательный URL-адрес исходного файла спецификации (URL OpenAPI, ссылка на proto-репозиторий и т. д.)

  • versionstringобязательный

    Версия контракта (например, "1.2.0" или "payments.v1")

  • workspace_idstringобязательный

    Рабочее пространство для хранения контракта

record_decision

Сохраняет запись архитектурного решения (ADR) - slug + title + status + context + decision + consequences - как полноценную строку в графе кода, с поддержкой замены (автоматическая пометка старого решения как "superseded") и немедленных ссылок на сущности (services, files, symbols, contracts, domains). Используйте, когда пользователь документирует реальное архитектурное решение: "we chose Postgres over Mongo", "we split the monolith into N services", "we deprecated the legacy auth flow". В отличие от link_decision (который прикрепляет существующее решение к сущности постфактум), record_decision СОЗДАЁТ решение и опционально прикрепляет начальный набор сущностей за один вызов. Решения отображаются позже через get_decisions_for, чтобы объяснить "why is this like this?" при просмотре кода. Предварительные требования: Tentra API auth + существующий workspace_id + уникальный slug в пределах этого workspace. Операция записи. Побочные эффекты: создаёт строку Decision, создаёт строки DecisionLink из массива links и обновляет статус цели superseded_by_id на "superseded", если указан. Ответ: { ok: true, decision_id, slug, status, links_created }.

Параметры
  • consequencesstringобязательный

    Компромиссы, последствия и дальнейшая работа.

  • contextstringобязательный

    Предыстория: почему потребовалось это решение

  • decided_atstring

    Дата и время в формате ISO-8601, когда решение было окончательно принято.

  • decisionstringобязательный

    Фактически принятое решение.

  • linksobject[]

    Сущности, на которые напрямую влияет это решение, можно добавить позже с помощью link_decision.

  • slugstringобязательный

    Короткий идентификатор, например "adr-007", должен быть уникальным в пределах рабочего пространства.

  • statusenum

    Статус жизненного цикла решения

  • superseded_by_idstring

    ID БОЛЕЕ СТАРОГО решения, которое заменяется этим новым. Более старое решение будет помечено как "superseded".

  • titlestringобязательный

    Однострочный заголовок решения

  • workspace_idstringобязательный

    Рабочее пространство для хранения решения

record_embedding

Сохраняет ОДИН предварительно вычисленный вектор эмбеддинга для файла или символа, чтобы он стал доступен для поиска через find_similar_code. Вы должны сгенерировать вектор самостоятельно (агент встраивает source_text с помощью любой доступной ему модели), Tentra сохраняет вектор + source_text + идентификатор модели, но не вызывает никакой API эмбеддинга от вашего имени. Работает как в размещённом режиме (колонка pgvector в Postgres), так и в локальном режиме (Float32Array BLOB в SQLite). Формы запроса и ответа одинаковы в обоих режимах. Используется в цикле после index_code для заполнения векторного индекса: для каждого интересующего вас файла или символа встраивается репрезентативный фрагмент (сигнатура функции + комментарий документации, или сводка файла) и записывается. В отличие от record_semantic_node (человекочитаемое назначение, хранящееся в CodeSemantic), record_embedding сохраняет плотный вектор для поиска по косинусу. Эти два метода дополняют друг друга, а не являются альтернативами. Предварительные требования: аутентификация Tentra API (размещённый режим) ИЛИ TENTRA_BACKEND=local + file_id или symbol_id из завершённого index_code + вектор, который вы уже вычислили. Путь записи. Побочный эффект: вставляет данные в таблицу embeddings. Ответ: { id, ok: true }.

Параметры
  • entity_idstringобязательный

    ID встраиваемого файла или символа.

  • entity_typeenumобязательный

    Какую сущность представляет этот эмбеддинг?

  • modelstringобязательный

    Идентификатор модели эмбеддинга (например, text-embedding-3-small)

  • snapshot_idstring

    Снимок, которому принадлежит этот эмбеддинг.

  • source_textstringобязательный

    Текст, который был встроен (для аудита / повторного встраивания при смене модели)

  • vectornumber[]обязательный

    Вектор эмбеддинга, созданный агентом

record_semantic_node

Сохраняет ОДНУ семантическую аннотацию, выведенную агентом (цель в одно предложение + теги домена + уверенность + необязательная семантическая роль), для одного файла ИЛИ одного символа в задаче индексации и продвигает курсор прогресса этой задачи на 1. Это сторона записи для индексации второго уровня: после того как index_code (tier2/both) возвращает пакет файлов с их скелетами символов, агент читает исходный код каждого файла, решает, что он делает, и вызывает record_semantic_node для каждого файла — Tentra сохраняет аннотацию в CodeSemantic и помечает файл как проиндексированный на втором уровне. Курсор задачи продвигается автоматически, поэтому index_code_continue в итоге возвращает done=true. В отличие от record_embedding (который сохраняет векторы для find_similar_code), record_semantic_node сохраняет читаемый человеком текст цели плюс теги домена и отображается в query_symbols, explain_code_path, get_service_code_graph (include_semantics=true) и get_decisions_for. Предварительные требования: аутентификация Tentra API + активный job_id из index_code + file_id ИЛИ symbol_id из снимка этой задачи (требуется ровно один из двух). Вызывайте для каждого файла/символа, а не одной большой пачкой. Ответ: { ok: true, semantic_id }.

Параметры
  • confidencenumber

    Насколько агент уверен в назначении/тегах, 0-1. По умолчанию 0.7 (умеренная уверенность). Используйте ~0.9, когда символ очевиден (большой docstring, понятное имя), и ~0.5, когда приходится догадываться.

  • domain_tagsstring[]

    Произвольные метки бизнес-домена (например, ["payments", "webhooks", "security"]). Используются для разбиения графа по доменам. По умолчанию []. Рекомендуется нижний регистр и snake-case.

  • extracted_bystringобязательный

    Идентификатор агента / модели, которая выполнила это извлечение, например "claude-opus-4-7" или "gpt-5-mini". Требуется для журналов аудита и повторного запуска извлечения при обновлении моделей.

  • file_idstring

    CodeFile ID для аннотации. Укажите ЛИБО file_id, либо symbol_id (ровно один: инструмент выдаёт ошибку, если указаны оба или не указан ни один). Используйте file_id для описания назначения на уровне файла; используйте symbol_id для конкретной функции/класса.

  • is_god_nodeboolean

    Необязательное переопределение автоматически вычисляемого флага isGodNode на символе. Обычно опускайте: Tentra вычисляет его по fanIn/fanOut. Устанавливайте true только при наличии веских доказательств связанности, пропущенных статическим анализом.

  • job_idstringобязательный

    job_id активной индексации из index_code. Обязателен: это связывает аннотацию с заданием и продвигает его курсор прогресса.

  • lens_metadataobject

    Произвольный JSON-payload, ограниченный тем «ракурсом» (безопасность, производительность, тестирование…), для которого агент извлекает данные. Свободная форма; схема не навязывается.

  • purposestringобязательный

    Одно предложение с понятной человеку целью. Пример: «Проверяет подписи HMAC во входящих вебхуках Stripe». Отображается в результатах query_symbols, в get_service_code_graph (include_semantics=true) и в аннотациях переходов explain_code_path. Не превышайте ~200 символов.

  • semantic_role_slugstring

    Необязательная семантическая роль из каталога SemanticRole (например, "service", "repository", "controller", "handler"). Помогает query_symbols фильтровать по архитектурной роли.

  • snapshot_idstringобязательный

    Снимок, к которому относится файл или символ (из ответа index_code). Обязательное поле: семантические узлы привязаны к снимку, поскольку они могут меняться со временем.

  • symbol_idstring

    Идентификатор CodeSymbol для аннотирования. Укажите ЛИБО file_id, ЛИБО symbol_id (не оба). Используйте для детальных аннотаций одной функции/класса/метода; для общих сводок по фаилу предпочитайте file_id.

safe_rename

Возвращает структурированный PATCH PLAN для переименования символа — место определения и все места вызовов с точными путями к файлам и диапазонами строк — чтобы вызывающий агент мог применить перезапись с помощью своих инструментов Edit/MultiEdit. Канонический инструмент «переименовать, не сломав скрытые вызовы». В отличие от find_references (которая возвращает только вызывающие места), safe_rename также возвращает собственное место объявления символа (которое агент тоже должен переписать) и упаковывает всё с сводкой и предупреждениями в план, готовый к программному применению. В отличие от простого grep-and-replace, места вызовов берутся из разрешённого графа кода — вы случайно не переименуете за один проход метод «log» и строку «log». Агент заменяет с помощью grep oldName → newName в пределах диапазона startLine..endLine каждого обращения (ограниченного телом вызывающего элемента), а НЕ во всём файле, поэтому несвязанные символы с тем же коротким именем остаются нетронутыми. ВАЖНО — побочных эффектов: НЕТ. Tentra никогда не записывает файлы. Этот инструмент возвращает только план; агент отвечает за применение изменений, что делает перезапись безопасной по умолчанию (пробный прогон, сравнение, откат — всё остаётся в руках агента). Если target.fanIn превышает порог god-node, срабатывает предупреждение, чтобы агент перепроверил, прежде чем вносить изменения. Если include_unresolved=true, включаются approximate совпадения коротких имён с предупреждением, что не все они могут быть целевыми. Предусловия: аутентификация Tentra API + symbol_id из query_symbols + соответствующий snapshot_id + допустимый новый идентификатор (буквы/цифры/подчёркивания, не может начинаться с цифры — пробелы и специальные символы отвергаются). Только чтение. Ответ: { target: { id, qualifiedName, oldName, newName, fanIn, fanOut, isGodNode }, definition: { filePath, startLine, endLine } | null, references: [{ kind, edgeType, fromSymbolId, fromQualifiedName, fromKind, filePath, startLine, endLine, callCount, isTest }], summary: { totalReferences, distinctCallers, fileCount, warnings: string[] } }.

Параметры
  • include_testsboolean

    Включает ссылки из файлов test/fixture. По умолчанию true - безопасные переименования почти всегда дожны охватывать и тесты, иначе они сломают CI.

  • include_unresolvedboolean

    Также включает best-effort-совпадения по коротким именам, для которых резолвер графа вызовов не смог доказать, что они указывают на этот символ. По умолчанию false: включайте только, если нужен более широкий охват и вы готовы вручную проверять каждое неразрешённое совпадение.

  • new_namestringобязательный

    Новый идентификатор символа. Должен быть допустимым идентификатором: только буквы, цифры и подчеркивания, не может начинаться с цифры. Пробелы и специальные символы не допускаются.

  • snapshot_idstringобязательный

    Снимок, в котором находится символ, из index_code / list_snapshots.

  • symbol_idstringобязательный

    Идентификатор символа для переименования, из query_symbols. Цель, чьё объявление И каждое место вызова будут включены в план.

set_domain_membership

Помечает один файл, символ или сервис как принадлежащий бизнес-домену (например, "payments", "identity", "fraud"). Поддерживает как назначения, определённые ИИ (source="ai", меньшая уверенность), так и подтверждённые человеком (source="human", confidence 1.0). Upsert: если кортеж (domain_id, entity_type, entity_id) уже содержит членство, оно обновляется на месте, а не дублируется. Используйте назначения, определённые ИИ, для начального заполнения карт доменов после индексации, затем дайте человеку подтвердить и переключить source на "human". В отличие от set_service_mapping (который привязывает ФАЙЛ к конкретному SERVICE в canvas, 1:1), членства в доменах имеют отношение многие-ко-многим и ограничены абстрактными БИЗНЕС-доменами — один файл может принадлежать нескольким доменам с разными уровнями уверенности. Предварительные требования: аутентификация Tentra API + существующий domain_id (строки доменов создаются отдельно через веб-приложение или API) + действительный entity_id соответствующего entity_type. Путь записи. Ответ: { ok: true, membership_id }.

Параметры
  • confidencenumber

    Насколько вы уверены в назначении этого домена, 0–1. По умолчанию 1.0 (подтверждено человеком = точно). Используйте ~0.6–0.8 для массовой разметки, выполненной ИИ, чтобы человек мог позже проверить строки с низкой уверенностью.

  • domain_idstringобязательный

    Существующий идентификатор домена (записи доменов создаются отдельно через веб-приложение / API, НЕ этим инструментом). Получите его из списка доменов в веб-интерфейсе Tentra. Пример: "dom_payments".

  • entity_idstringобязательный

    Идентификатор объекта, к которому добавляется тег. Должен соответствовать entity_type: CodeFile id, CodeSymbol id или строка service_id в canvas.

  • entity_typeenumобязательный

    Что означает entity_id. "file" = идентификатор CodeFile из вывода index_code, "symbol" = идентификатор CodeSymbol из query_symbols, "service" = идентификатор сервиса в Tentra canvas (строка в snake_case, например "payment_service").

  • sourceenum

    Происхождение этого задания. "human" (по умолчанию) = пользователь явно подтвердил. "ai" = создано агентом; обычно сопровождается confidence < 1.0 и предназначено для проверки / переопределения человеком.

set_service_mapping

Объявляет, какой сервис холста Tentra владеет какими файлами в конкретном снимке — за один пакетный вызов. Каждое сопоставление имеет вид (относительный путь к файлу → идентификатор сервиса); у каждой подходящей строки CodeFile обновляется столбец serviceId. Это мост между графом кода (файлы, символы, рёбра) и архитектурной диаграммой (сервисы, соединения). get_service_code_graph и представления, ограниченные сервисами, возвращают пустые массивы, пока хотя бы один вызов set_service_mapping не заполнит сопоставления для снимка. В отличие от set_domain_membership (который помечает сущности абстрактными бизнес-доменами), set_service_mapping помечает файлы КОНКРЕТНЫМ сервисом на холсте. Предварительные требования: аутентификация API Tentra + snapshot_id от завершённого index_code + service_ids, которые уже существуют в архитектуре Tentra. Путь записи. Побочный эффект: обновляет CodeFile.serviceId для каждого подходящего пути. Пути, не соответствующие ни одному файлу в снимке, молча пропускаются. Ответ: { ok: true, updatedFiles: number }.

Параметры
  • mappingsobject[]обязательный

    Одна или несколько пар путь → service_id для применения.

  • snapshot_idstringобязательный

    Идентификатор снимка для обновления сопоставлений файлов в

sync_architecture

Сравнивает сохранённую архитектуру Tentra с текущим состоянием локального кода и возвращает отчёт о расхождениях: добавленные/удалённые/изменённые сервисы, добавленные/удалённые соединения, а также оценку точности от 0 до 100. Используйте, когда пользователь спрашивает «моя диаграмма всё ещё точна?», «что изменилось?» или после значительных рефакторингов. В отличие от lint_architecture (которая только проверяет диаграмму изолированно), этот инструмент читает код и сравнивает. В отличие от analyze_codebase (которая создаёт новую диаграмму с нуля), он сравнивает с СУЩЕСТВУЮЩЕЙ диаграммой, не перезаписывая её — после этого вызовите update_architecture, если хотите применить изменения. Предварительные требования: авторизация в API Tentra + идентификатор сохранённой архитектуры + доступ к локальной файловой системе (недоступен через SSE — используйте stdio). Выполняет ресурсоёмкое локальное сканирование. Только для чтения по отношению к диаграмме. Ответ: отчёт в формате Markdown с оценкой точности, добавленными/удалёнными/изменёнными сервисами и соединениями, а также подсказкой вызвать update_architecture для применения исправлений.

Параметры
  • architectureIdstringобязательный

    Сохранённый ID архитектуры для сравнения, например "cm2abc123".

  • codebasePathstringобязательный

    Абсолютный путь к корню текущей кодовой базы для сканирования, например "/Users/alex/code/my-monorepo". Должен содержать распознаваемые манифесты проектов.

update_architecture

Мутирует существующую архитектуру — увеличивает её версию, сохраняет снимок предыдущего состояния как запись версии и заменяет любые переданные поля верхнего уровня. Используйте вместо create_architecture, когда у вас уже есть идентификатор архитектуры из предыдущего вызова, list_architectures или URL. В отличие от create_architecture (которая всегда создаёт новый артефакт), этот инструмент сохраняет идентичность и историю изменений: версия автоинкрементируется, а старое состояние остаётся в истории ArchitectureVersion. Каждое поле заменяется, а не объединяется — если вы передаёте services, вы ЗАМЕНЯЕТЕ весь массив services; поля, которые вы опускаете, остаются нетронутыми. Предварительные условия: аутентификация API Tentra + валидный идентификатор архитектуры, принадлежащий вызывающей стороне. Побочные эффекты: записывает новую строку ArchitectureVersion, выполняет PATCH архитектуры. Ответ: { id, name, version, url } — возвращает URL пользователю.

Параметры
  • connectionsobject[]

    ПОЛНЫЙ массив connections для замены: семантика та же, что и у services, а именно замена, а не слияние. Опустите, чтобы оставить connections без изменений.

  • descriptionstring

    Новый абзац описания. Пропустите, чтобы оставить без изменений.

  • idstringобязательный

    Идентификатор архитектуры для обновления, например "cm2abc123" - непрозрачный идентификатор, возвращаемый create_architecture или list_architectures. Обязательный.

  • namestring

    Новое имя в Title Case. Опустите, чтобы оставить без изменений.

  • servicesobject[]

    ПОЛНЫЙ массив services для замены: включает всё, что должно остаться (не патч). Если опустить, список services останется без изменений.

1.3.3основная
1.3.2
1.3.1
1.2.8
1.2.5
1.2.4
1.2.0
1.1.1
1.1.0
1.0.0

Выберите клиент, чтобы установить rdanieli/tentra-mcp:

Любой клиент

Конфиг добавления MCP сервера стандартный, обычно он не меняется вообще, поэтому подходит практически к любому ИИ клиенту, поддерживающему MCP.

{
  "mcpServers": {
    "rdanieli-tentra-mcp-kbyfjt8uac": {
      "command": "npx",
      "args": [
        "tentra-mcp"
      ]
    }
  }
}
CursorCursor

Перейдите по ссылке и сервер автоматически будет добавлен в Cursor. Либо откройте/создайте файл ~/.cursor/mcp.json(%USERPROFILE%\.cursor\mcp.json на Windows) и добавьте конфиг сервера:

{
  "mcpServers": {
    "rdanieli-tentra-mcp-kbyfjt8uac": {
      "command": "npx",
      "args": [
        "tentra-mcp"
      ]
    }
  }
}
VS Code

Создайте .vscode/mcp.json в проекте (ключ верхнего уровня — servers):

{
  "servers": {
    "rdanieli-tentra-mcp-kbyfjt8uac": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "tentra-mcp"
      ]
    }
  }
}

Либо добавьте сервер через терминал:

code --add-mcp "{\"name\":\"rdanieli-tentra-mcp-kbyfjt8uac\",\"type\":\"stdio\",\"command\":\"npx\",\"args\":[\"tentra-mcp\"]}"
ClaudeClaude Desktop

Откройте Settings → Developer → Edit Config — это откроет файл claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Впишите сервер и полностью перезапустите Claude Desktop:

{
  "mcpServers": {
    "rdanieli-tentra-mcp-kbyfjt8uac": {
      "command": "npx",
      "args": [
        "tentra-mcp"
      ]
    }
  }
}
Claude CodeClaude Code

Добавьте сервер одной командой в терминале:

claude mcp add rdanieli-tentra-mcp-kbyfjt8uac -- npx tentra-mcp

Либо через JSON-конфиг:

claude mcp add-json rdanieli-tentra-mcp-kbyfjt8uac "{\"command\":\"npx\",\"args\":[\"tentra-mcp\"]}"
CodexCodex

Добавьте сервер командой в терминале:

codex mcp add rdanieli-tentra-mcp-kbyfjt8uac -- npx tentra-mcp

Либо вручную в ~/.codex/config.toml(%USERPROFILE%\.codex\config.toml на Windows):

[mcp_servers.rdanieli-tentra-mcp-kbyfjt8uac]
command = "npx"
args = ["tentra-mcp"]
PerplexityPerplexity

MCP доступен подписчикам Perplexity Pro / Max / Enterprise. Локальные серверы — только в приложении для macOS.

  1. Откройте Настройки аккаунта → Connectors.
  2. Установите вспомогательное приложение PerplexityXPC (один раз).
  3. Нажмите Add Connector → вкладка Simple.
  4. В поле Server Name укажите rdanieli/tentra-mcp, а в поле команды запуска — строку ниже:
npx tentra-mcp

Нажмите Save и дождитесь статуса Running.

WindsurfWindsurf

Откройте Windsurf Settings → Cascade → MCP Servers или отредактируйте файл ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "rdanieli-tentra-mcp-kbyfjt8uac": {
      "command": "npx",
      "args": [
        "tentra-mcp"
      ]
    }
  }
}
ClineCline

В панели Cline нажмите иконку MCP Servers → Configure → Configure MCP Servers (или отредактируйте ~/.cline/mcp.json) и добавьте сервер:

{
  "mcpServers": {
    "rdanieli-tentra-mcp-kbyfjt8uac": {
      "command": "npx",
      "args": [
        "tentra-mcp"
      ],
      "disabled": false,
      "autoApprove": []
    }
  }
}
Continue

Создайте файл в .continue/mcpServers/ (например rdanieli-tentra-mcp-kbyfjt8uac.yaml) или добавьте блок в config.yaml. MCP работает только в режиме agent:

mcpServers:
  - name: rdanieli-tentra-mcp-kbyfjt8uac
    command: npx
    args:
      - "tentra-mcp"
Zed

Выполните agent: add context server или откройте настройки (zed: open settings file) и добавьте сервер в объект context_servers:

{
  "context_servers": {
    "rdanieli-tentra-mcp-kbyfjt8uac": {
      "command": "npx",
      "args": [
        "tentra-mcp"
      ]
    }
  }
}

Похожие MCP-сервера

depwire/depwire

depwire/depwire

от depwire

Depwire – MCP сервер для AI-ассистентов, строящий детерминированный граф зависимостей кода на 16 языках. Позволяет симулировать удаление символов, проверять безопасность и оценивать архитектурное здоровье. Все 23 инструмента работают локально, без отправки кода.

TypeScript⭐ 64
abrinsmead/mindpilot-mcp

abrinsmead/mindpilot-mcp

от abrinsmead

MCP сервер Mindpilot рисует диаграммы архитектуры и кода по запросу твоего агента. Удобен для быстрого анализа легаси и сложных потоков — данные не уходят в облако, можно экспортировать в векторный формат.

TypeScript⭐ 90
Disentinel/grafema

Disentinel/grafema

от disentinel

Grafema - MCP сервер, который строит единый граф из вашего кода, инфраструктуры и знаний, позволяя запрашивать структуру системы с помощью 30+ MCP инструментов. Полезен разработчикам и AI-агентам д...

Rust⭐ 35
endiagram/mcp

endiagram/mcp

от dushyant30suthar

MCP сервер для детерминированного структурного анализа систем на основе теории графов. Помогает инженерам проверять структуру, инварианты и живость систем. Каждый результат подтверждён математическ...

JavaScript⭐ 8
MarcelRoozekrans/roslyn-codelens-mcp

MarcelRoozekrans/roslyn-codelens-mcp

от marcelroozekrans

Roslyn MCP сервер для глубокого семантического анализа .NET-кода. Предоставляет AI-агентам и разработчикам полный доступ к иерархиям типов, графам вызовов и диагностике с рефакторингом — всё в одном инструменте.

C#⭐ 65
hoklims/stacksfinder-mcp

hoklims/stacksfinder-mcp

от hoklims

MCP-сервер с детерминированными рекомендациями по стеку. Анализирует 80+ технологий по 6 метрикам, сравнивает и предлагает оптимальный стек под проект. Бесплатные инструменты и Pro-доступ с аудитом...

TypeScript⭐ 9
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин