Розробникам
Підключіть своїх агентів до того самого графа, що й ваші плани
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 з адресою цього сервера та його секретом автентифікації й заздалегідь схвалює інструменти.
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 вбудовує інтерфейс і запускає сервер. Він керує контейнерами Neo4j і Meilisearch через Docker.
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.