Разработчикам
Подключите своих ассистентов к тому же графу, что и ваши планы
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 8080setup-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 | /health | Liveness |
| GET | /api/version | Server version |
| GET | /api/projects | List projects (POST creates) |
| POST | /api/projects/{slug}/sync | Parse a project into the graph |
| GET | /api/plans/{plan_id}/waves | Parallel waves of a plan |
| POST | /api/plans/{plan_id}/run | Start the runner on a plan |
| GET | /api/code/search | Search code |
| GET | /api/code/impact | Impact analysis |
| GET | /api/notes/search | Search notes |
| GET | /api/decisions/search | Search decisions |
| POST | /api/reason | Reasoning over the graph |
| POST | /mcp | MCP 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.