Перейти к содержимому

Разработчикам

Подключите своих ассистентов к тому же графу, что и ваши планы

Project Orchestrator открывает всё, что делает приложение, в виде инструментов MCP, REST API и двух потоков WebSocket. Сервер на Rust хранит код, планы, решения и заметки в графе Neo4j и в Meilisearch.

инструментов MCP
31
инструментов MCP
действий во всех
402
действий во всех
языков разбирается
17
языков разбирается
потока WebSocket
3
потока WebSocket

Ищете сам продукт? Вернитесь на главную страницу.

project(action: "sync", slug: "my-app")

code(
  action: "analyze_impact",
  target: "src/session.rs",
  project_slug: "my-app"
)

plan(action: "run", plan_id: "<uuid>")

Подключение

Подключите PO к клиенту MCP

Приложение для компьютера или сервер должны быть запущены. Затем одна команда регистрирует PO в Claude Code, а для любого другого клиента MCP вы добавляете запись вручную.

Установите и запустите сервер

Серверу нужны Neo4j и Meilisearch. NATS необязателен. В репозитории есть docker-compose.yml для всех трёх.

orchestrator serve

# needs Neo4j and Meilisearch: docker compose up -dbrew install this-rs/tap/project-orchestratororchestrator serve --port 8080

Зарегистрируйте PO в Claude Code

Команда записывает запись MCP в режиме stdio с URL этого сервера и его секретом аутентификации и заранее одобряет инструменты.

orchestrator setup-claude

orchestrator setup-claude --port 8080

setup-claude также добавляет mcp__project-orchestrator__* в разрешённые инструменты в ~/.claude/settings.json, чтобы Claude Code не спрашивал подтверждения при каждом вызове.

Проверьте, что всё работает

В Claude Code выполните /mcp: project-orchestrator должен быть в списке. Затем попросите список проектов: Claude вызовет project(action: "list").

Claude Code

# in Claude Code/mcp# then ask: "List all registered projects"# Claude calls: project(action: "list")

Любой клиент MCP, stdio

mcp_server — тонкий прокси: он говорит по MCP через stdio и передаёт каждый вызов в REST API. Сам к Neo4j он никогда не подключается. Задайте PO_AUTH_TOKEN или PO_JWT_SECRET, чтобы он сгенерировал токен при запуске.

~/.claude/mcp.json

{  "mcpServers": {    "project-orchestrator": {      "command": "/path/to/mcp_server",      "env": {        "PO_SERVER_URL": "http://127.0.0.1:8080",        "PO_AUTH_TOKEN": "<jwt-session-token>"      }    }  }}

Удалённые клиенты, Streamable HTTP

Сервер отвечает по MCP и по адресу POST /mcp, за той же аутентификацией, что и REST API. Идентификатор сессии возвращается в заголовке Mcp-Session-Id и должен передаваться в каждом запросе.

Claude Code

claude mcp add --transport http project-orchestrator http://127.0.0.1:8080/mcp \  --header "Authorization: Bearer <token>"

HTTP

POST /mcpAuthorization: Bearer <token>Content-Type: application/json{"jsonrpc":"2.0","id":1,"method":"tools/list"}

Инструменты MCP

31 инструмент, одна форма вызова

Каждый инструмент принимает параметр action и направляет его в одну операцию. Ищите по инструменту, действию или параметру, затем копируйте точный вызов.

Инструментов: 31

plan

Plans with dependency graph, waves, critical path, and the autonomous runner.

Планирование и выполнение 27 действия

Пример вызова

plan(  action: "create",  title: "Migrate session store to Redis",  priority: 8)

Действия

ещё 21

Параметры

plan_idproject_idtitledescriptionpriorityconstraintsstatussearchlimitoffsetsort_bysort_orderpriority_minpriority_maxcwdproject_slugtrigger_idtrigger_typeconfigcooldown_secsrun_idrun_idstask_idparent_session_idcustom_sections

Значения аргументов вроде <uuid> — заполнители. Названия действий и параметров прочитаны из исходного кода сервера.

Архитектура

Один сервер на Rust, три хранилища, любой клиент

Клиенты никогда не обращаются к базам напрямую. Они говорят с сервером, который разбирает код, отдаёт API и рассылает события.

  • MCP clients

    Claude Code, Cursor или любой клиент MCP. Они говорят по MCP с mcp_server через stdio или с POST /mcp по HTTP.

  • Desktop app

    Приложение на Tauri 2 содержит интерфейс и запускает сервер. Через Docker оно управляет контейнерами Neo4j и Meilisearch.

  • WebSocket clients

    Всё, что открывает /ws/chat/{session_id}, /ws/events или /ws/run/{run_id}.

  • mcp_server

    Бинарный файл mcp_server: на входе MCP через stdio, на выходе вызовы REST. Состояния не хранит.

  • orchestrator

    Бинарный файл orchestrator (axum). REST API, менеджер чата, исполнитель планов, парсер tree-sitter, шина событий.

  • Neo4j

    Граф: код, планы, задачи, решения, заметки, навыки, протоколы, сессии чата.

  • Meilisearch

    Полнотекстовый поиск по коду, заметкам, решениям и сообщениям чата.

  • NATSнеобязательно

    Синхронизирует события и передаёт чат между несколькими экземплярами сервера. Без него сервер работает только локально.

  • Claude

    Менеджер чата управляет Claude через SDK nexus-claude.

Как они общаются

  • MCP clients / mcp_serverstdio
  • MCP clients / orchestratorHTTP /mcp
  • mcp_server / orchestratorREST
  • Desktop app / orchestratorREST + WebSocket
  • WebSocket clients / orchestratorWebSocket
  • orchestrator / Neo4jbolt
  • orchestrator / MeilisearchHTTP
  • orchestrator / NATSNATS
  • orchestrator / ClaudeSDK

Разбор кода

17 языков, разбор через tree-sitter

Каждый файл разбирается на функции, структуры, трейты, перечисления, импорты, блоки impl и рёбра вызовов, затем сохраняется в графе.

Языков: 17

  • Rust

    Расширения: .rs

    tree-sitter-rust

  • TypeScript / JavaScript

    Расширения: .ts .tsx .js .jsx .mjs .cjs

    tree-sitter-typescript

  • Python

    Расширения: .py .pyi

    tree-sitter-python

  • Go

    Расширения: .go

    tree-sitter-go

  • Java

    Расширения: .java

    tree-sitter-java

  • C

    Расширения: .c .h

    tree-sitter-c

  • C++

    Расширения: .cpp .cc .cxx .hpp .hxx .hh

    tree-sitter-cpp

  • Ruby

    Расширения: .rb .rake .gemspec

    tree-sitter-ruby

  • PHP

    Расширения: .php .phtml .php5 .php7

    tree-sitter-php

  • Kotlin

    Расширения: .kt .kts

    tree-sitter-kotlin-ng

  • Swift

    Расширения: .swift

    tree-sitter-swift

  • Bash

    Расширения: .sh .bash .zsh

    tree-sitter-bash

  • C#

    Расширения: .cs

    tree-sitter-c-sharp

  • Scala

    Расширения: .scala .sc

    tree-sitter-scala

  • Zig

    Расширения: .zig

    tree-sitter-zig

  • HCL (Terraform)

    Расширения: .tf .tfvars

    tree-sitter-hcl

  • Dart

    Расширения: .dart

    tree-sitter-dart

Из каждого файла: функции, структуры, трейты, перечисления, импорты, блоки impl, вызовы функций с оценкой уверенности.

Файлы JavaScript (.js, .jsx, .mjs, .cjs) читаются грамматикой TypeScript.

API и события

REST для состояния, WebSocket для изменений

Планы, код, заметки и всё остальное — обычный JSON по HTTP. Изменения приходят по WebSocket.

Основные конечные точки REST

Большинство маршрутов стоит за промежуточным слоем аутентификации. Если раздел auth не настроен, API открыт.

GET/healthLiveness
GET/api/versionServer version
GET/api/projectsList projects (POST creates)
POST/api/projects/{slug}/syncParse a project into the graph
GET/api/plans/{plan_id}/wavesParallel waves of a plan
POST/api/plans/{plan_id}/runStart the runner on a plan
GET/api/code/searchSearch code
GET/api/code/impactImpact analysis
GET/api/notes/searchSearch notes
GET/api/decisions/searchSearch decisions
POST/api/reasonReasoning over the graph
POST/mcpMCP over Streamable HTTP

Потоки WebSocket

  • /ws/events

    Каждое создание, обновление, удаление, связывание, разрыв связи и смена статуса — одним событием JSON. Фильтруйте параметрами запроса entity_types, project_id и layers.

  • /ws/chat/{session_id}

    Беседа с Claude. Отправляйте user_message, interrupt, permission_response и input_response; получайте события чата, которые после переподключения воспроизводятся начиная с last_event.

  • /ws/run/{run_id}

    Один поток на запуск плана: события исполнителя (задача началась, волна началась...) плюс события чата каждой дочерней сессии.

Браузеры аутентифицируются через cookie или по одноразовому билету из POST /auth/ws-ticket, переданному в параметре ticket.

Сообщение /ws/events

/ws/events?entity_types=plan,task&project_id=<uuid>

{  "entity_type": "task",  "action": "status_changed",  "entity_id": "<uuid>",  "payload": { "old_status": "pending", "new_status": "in_progress" },  "timestamp": "2026-10-05T10:00:00Z",  "project_id": "<uuid>"}

Расширение

Три способа настроить PO под себя

Все три доступны через те же инструменты MCP.

  • Протоколы

    Задайте конечный автомат с состояниями и переходами, запустите его и позвольте ассистентам продвигать его инструментом protocol.

  • Навыки

    Навыки — кластеры заметок и кода, которые возникают в ходе работы; инструмент skill активирует, экспортирует и импортирует их между проектами и экземплярами.

  • Федерация MCP

    mcp_federation подключает внешние серверы MCP через stdio, sse или streamable_http, чтобы их инструменты были доступны через PO.