Chuyển đến nội dung

Dành cho nhà phát triển

Kết nối các agent của bạn vào cùng đồ thị với kế hoạch của bạn

Project Orchestrator mở mọi thứ ứng dụng làm được dưới dạng công cụ MCP, một REST API và hai luồng WebSocket. Một máy chủ Rust giữ mã, kế hoạch, quyết định và ghi chú trong một đồ thị Neo4j và trong Meilisearch.

công cụ MCP
31
công cụ MCP
action trong số đó
402
action trong số đó
ngôn ngữ được phân tích
17
ngôn ngữ được phân tích
luồng WebSocket
3
luồng WebSocket

Bạn đang tìm chính sản phẩm? Hãy quay lại trang chủ.

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

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

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

Kết nối

Kết nối PO với một ứng dụng khách MCP

Ứng dụng máy tính hoặc máy chủ phải đang chạy. Sau đó một lệnh đăng ký PO vào Claude Code, hoặc bạn tự thêm mục cấu hình cho bất kỳ ứng dụng khách MCP nào khác.

Cài và khởi động máy chủ

Máy chủ cần Neo4j và Meilisearch. NATS là tùy chọn. Kho mã có sẵn một docker-compose.yml cho cả ba.

orchestrator serve

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

Đăng ký PO vào Claude Code

Lệnh này ghi mục MCP ở chế độ stdio, kèm URL máy chủ này và bí mật xác thực của nó, và phê duyệt trước các công cụ.

orchestrator setup-claude

orchestrator setup-claude --port 8080

setup-claude cũng thêm mcp__project-orchestrator__* vào các công cụ được phép trong ~/.claude/settings.json, nên Claude Code không hỏi trước mỗi lệnh gọi.

Kiểm tra là nó hoạt động

Trong Claude Code, chạy /mcp: project-orchestrator phải có trong danh sách. Sau đó hãy xin danh sách các dự án: Claude gọi project(action: "list").

Claude Code

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

Mọi ứng dụng khách MCP, stdio

mcp_server là một proxy mỏng: nó nói MCP qua stdio và chuyển từng lệnh gọi đến REST API. Nó không bao giờ tự kết nối với Neo4j. Đặt PO_AUTH_TOKEN, hoặc PO_JWT_SECRET để nó tự tạo token khi khởi động.

~/.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>"      }    }  }}

Ứng dụng khách từ xa, Streamable HTTP

Máy chủ cũng trả lời MCP tại POST /mcp, sau cùng lớp xác thực với REST API. Một session id được trả về trong header Mcp-Session-Id và phải được gửi lại ở mỗi yêu cầu.

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"}

Công cụ MCP

31 công cụ, một dạng lệnh gọi

Mỗi công cụ nhận một tham số action và chuyển đến một thao tác. Tìm theo công cụ, action hoặc tham số, rồi sao chép đúng lệnh gọi.

31 công cụ

plan

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

Lập kế hoạch và bàn giao 27 action

Ví dụ lệnh gọi

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

Action

+21 nữa

Tham số

plan_idproject_idtitledescriptionpriorityconstraintsstatussearchlimitoffsetsort_bysort_orderpriority_minpriority_maxcwdproject_slugtrigger_idtrigger_typeconfigcooldown_secsrun_idrun_idstask_idparent_session_idcustom_sections

Giá trị tham số như <uuid> là chỗ giữ chỗ. Tên action và tham số được đọc từ mã nguồn của máy chủ.

Kiến trúc

Một máy chủ Rust, ba kho lưu trữ, mọi ứng dụng khách

Các ứng dụng khách không bao giờ chạm vào cơ sở dữ liệu. Chúng nói chuyện với máy chủ, nơi phân tích mã, phục vụ API và phát luồng sự kiện.

  • MCP clients

    Claude Code, Cursor hoặc bất kỳ ứng dụng khách MCP nào. Chúng nói MCP với mcp_server qua stdio, hoặc với POST /mcp qua HTTP.

  • Desktop app

    Ứng dụng Tauri 2 nhúng giao diện và khởi động máy chủ. Nó quản lý các container Neo4j và Meilisearch qua Docker.

  • WebSocket clients

    Bất cứ thứ gì mở /ws/chat/{session_id}, /ws/events hoặc /ws/run/{run_id}.

  • mcp_server

    Chương trình mcp_server: nhận MCP qua stdio, gửi ra các lệnh REST. Không giữ trạng thái.

  • orchestrator

    Chương trình orchestrator (axum). REST API, trình quản lý chat, trình chạy kế hoạch, trình phân tích tree-sitter, bus sự kiện.

  • Neo4j

    Đồ thị: mã, kế hoạch, tác vụ, quyết định, ghi chú, kỹ năng, quy trình, phiên chat.

  • Meilisearch

    Tìm kiếm toàn văn trên mã, ghi chú, quyết định và tin nhắn chat.

  • NATStùy chọn

    Đồng bộ sự kiện và chuyển tiếp chat giữa nhiều phiên bản máy chủ. Nếu không có nó, máy chủ chỉ chạy cục bộ.

  • Claude

    Trình quản lý chat điều khiển Claude qua SDK nexus-claude.

Chúng nói chuyện với nhau thế nào

  • 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

Phân tích mã

17 ngôn ngữ, được phân tích bằng tree-sitter

Mỗi tệp được phân tích thành hàm, struct, trait, enum, import, khối impl và các cạnh gọi hàm, rồi được lưu vào đồ thị.

17 ngôn ngữ

  • Rust

    Phần mở rộng: .rs

    tree-sitter-rust

  • TypeScript / JavaScript

    Phần mở rộng: .ts .tsx .js .jsx .mjs .cjs

    tree-sitter-typescript

  • Python

    Phần mở rộng: .py .pyi

    tree-sitter-python

  • Go

    Phần mở rộng: .go

    tree-sitter-go

  • Java

    Phần mở rộng: .java

    tree-sitter-java

  • C

    Phần mở rộng: .c .h

    tree-sitter-c

  • C++

    Phần mở rộng: .cpp .cc .cxx .hpp .hxx .hh

    tree-sitter-cpp

  • Ruby

    Phần mở rộng: .rb .rake .gemspec

    tree-sitter-ruby

  • PHP

    Phần mở rộng: .php .phtml .php5 .php7

    tree-sitter-php

  • Kotlin

    Phần mở rộng: .kt .kts

    tree-sitter-kotlin-ng

  • Swift

    Phần mở rộng: .swift

    tree-sitter-swift

  • Bash

    Phần mở rộng: .sh .bash .zsh

    tree-sitter-bash

  • C#

    Phần mở rộng: .cs

    tree-sitter-c-sharp

  • Scala

    Phần mở rộng: .scala .sc

    tree-sitter-scala

  • Zig

    Phần mở rộng: .zig

    tree-sitter-zig

  • HCL (Terraform)

    Phần mở rộng: .tf .tfvars

    tree-sitter-hcl

  • Dart

    Phần mở rộng: .dart

    tree-sitter-dart

Trên mỗi tệp: hàm, struct, trait, enum, import, khối impl, lời gọi hàm kèm điểm tin cậy.

Các tệp JavaScript (.js, .jsx, .mjs, .cjs) được đọc bằng ngữ pháp TypeScript.

API và sự kiện

REST cho trạng thái, WebSocket cho thay đổi

Kế hoạch, mã, ghi chú và phần còn lại là JSON thuần qua HTTP. Các thay đổi được đẩy qua WebSocket.

Các endpoint REST chính

Hầu hết các route nằm sau middleware xác thực. Khi chưa cấu hình mục xác thực, API ở chế độ mở.

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

Các luồng WebSocket

  • /ws/events

    Mọi thao tác tạo, cập nhật, xóa, liên kết, hủy liên kết và đổi trạng thái, dưới dạng một sự kiện JSON. Lọc bằng các tham số truy vấn entity_types, project_id và layers.

  • /ws/chat/{session_id}

    Cuộc trò chuyện với Claude. Gửi user_message, interrupt, permission_response và input_response; nhận các sự kiện chat, được phát lại từ last_event sau khi kết nối lại.

  • /ws/run/{run_id}

    Một luồng cho một lượt chạy kế hoạch: các sự kiện của trình chạy (tác vụ đã bắt đầu, đợt đã bắt đầu...) cùng các sự kiện chat của mọi phiên con.

Trình duyệt xác thực bằng cookie, hoặc bằng một vé dùng một lần từ POST /auth/ws-ticket được truyền qua tham số ticket.

Một thông điệp /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>"}

Mở rộng

Ba cách để biến PO thành của bạn

Cả ba đều có sẵn qua cùng các công cụ MCP.

  • Protocol

    Định nghĩa một máy trạng thái hữu hạn với các trạng thái và chuyển tiếp, bắt đầu một lượt chạy, và để các agent đưa nó tiến lên bằng công cụ protocol.

  • Skill

    Skill là các cụm ghi chú và mã hình thành từ việc sử dụng; công cụ skill kích hoạt, xuất và nhập chúng giữa các dự án và phiên bản.

  • MCP federation

    mcp_federation kết nối các máy chủ MCP bên ngoài qua stdio, sse hoặc streamable_http, để các công cụ của chúng dùng được thông qua PO.