Перейти до вмісту

Розробникам

Підключіть своїх агентів до того самого графа, що й ваші плани

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 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 вбудовує інтерфейс і запускає сервер. Він керує контейнерами 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/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.