انتقل إلى المحتوى

للمطوّرين

اربط وكلاءك بالرسم البياني نفسه الذي تقوم عليه خططك

يعرض ⁦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/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}

    تدفق واحد لتشغيل خطة: أحداث المشغّل (بدأت مهمة، بدأت دفعة...) وأحداث المحادثة لكل جلسة فرعية.

تُصادق المتصفحات بملف تعريف ارتباط، أو بتذكرة لمرة واحدة من ⁦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⁩.