للمطوّرين
اربط وكلاءك بالرسم البياني نفسه الذي تقوم عليه خططك
يعرض 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 عبر nexus-claude SDK.
كيف يتحدثون
- 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 للحالة، وWebSockets للتغيير
الخطط والشيفرة والملاحظات وغيرها JSON عادي عبر HTTP. وتُدفع التغييرات عبر WebSockets.
أهم نقاط REST
معظم المسارات خلف وسيط المصادقة. وحين لا يُضبط قسم المصادقة تكون 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}
تدفق واحد لتشغيل خطة: أحداث المشغّل (بدأت مهمة، بدأت دفعة...) وأحداث المحادثة لكل جلسة فرعية.
تُصادق المتصفحات بملف تعريف ارتباط، أو بتذكرة لمرة واحدة من 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.