إعداد سير عمل متعدد الوكلاء باستخدام MCP في Cursor

مع نمو المشاريع في التعقيد، قد لا يكون وكيل ذكاء اصطناعي واحد كافيًا. يدعم Cursor سير العمل متعدد الوكلاء من خلال خوادم MCP (بروتوكول سياق النموذج)، مما يسمح لوكلاء متخصصين متعددين بالتعاون في جوانب مختلفة من مشروعك في نفس الوقت. يوضح لك هذا الدليل كيفية إعداد وتنسيق وكلاء متعددين بفعالية.
ما هو التنسيق متعدد الوكلاء؟
يتيح لك التنسيق متعدد الوكلاء:
- تقسيم المهام المعقدة عبر وكلاء متخصصين (مثلاً، واحد للواجهة الأمامية، واحد للواجهة الخلفية)
- العمل بشكل متوازٍ على أجزاء مختلفة من قاعدة الكود
- الحفاظ على فصل الاهتمامات مع وكلاء مخصصين لمجالات محددة
- توسيع مساعدتك بالذكاء الاصطناعي مع نمو مشروعك
المتطلبات الأساسية
قبل إعداد سير عمل متعدد الوكلاء:
- Cursor Pro أو أعلى - تتطلب ميزات متعدد الوكلاء خطة مدفوعة
- دعم خادم MCP - تأكد من تمكين MCP في إعدادات Cursor
- مستودع Git - تعمل سير العمل متعدد الوكلاء بشكل أفضل مع التحكم في الإصدار
إعداد تكوين Worktree
ملف .cursor/worktrees.json هو المفتاح للتنسيق متعدد الوكلاء.
الخطوة 1: إنشاء ملف التكوين
أنشئ .cursor/worktrees.json في جذر مشروعك:
{
"worktrees": [
{
"id": "frontend-agent",
"name": "Frontend Agent",
"description": "Handles UI components, styling, and client-side logic",
"directories": ["src/components", "src/pages", "src/styles", "public"],
"rules": [
"Use React and TypeScript",
"Follow the existing component patterns",
"Use Tailwind CSS for styling",
"Ensure responsive design"
]
},
{
"id": "backend-agent",
"name": "Backend Agent",
"description": "Manages API endpoints, database models, and server logic",
"directories": ["src/api", "src/models", "src/middleware", "migrations"],
"rules": [
"Use Express.js with TypeScript",
"Follow RESTful conventions",
"Implement proper error handling",
"Add input validation"
]
},
{
"id": "test-agent",
"name": "Testing Agent",
"description": "Writes and maintains test suites",
"directories": ["tests", "src/__tests__", "cypress"],
"rules": [
"Use Jest for unit tests",
"Use React Testing Library for component tests",
"Aim for 80%+ coverage",
"Write integration tests for API endpoints"
]
}
]
}
الخطوة 2: تكوين خوادم MCP
أضف خوادم MCP إلى إعدادات Cursor (Cmd/Ctrl + Shift + P → "Cursor Settings"):
{
"mcpServers": {
"task-coordinator": {
"command": "npx",
"args": ["-y", "@cursor-task/coordinator"],
"env": {
"WORKTREE_CONFIG": "./.cursor/worktrees.json"
}
},
"file-sync": {
"command": "npx",
"args": ["-y", "@cursor-task/file-sync"]
}
}
}
استخدام وضع متعدد الوكلاء
بدء جلسة متعددة الوكلاء
- افتح Composer (
Cmd/Ctrl + I) - انقر على محدد الوكيل (أعلى Composer)
- حدد وضع "Multi-Agent"
- اختر الوكلاء الذين تريد تنشيطهم
تعيين المهام
يقوم الوكلاء تلقائيًا باستلام المهام بناءً على الملفات التي تشير إليها:
@src/components/UserProfile.tsx @src/api/users.ts
نفذ صفحة ملف تعريف المستخدم تجلب البيانات من واجهة برمجة التطبيقات وتعرضها.
يجب أن يتعامل وكيل الواجهة الأمامية مع واجهة المستخدم، ويجب أن يضمن وكيل الواجهة الخلفية إرجاع نقطة النهاية لواجهة برمجة التطبيقات للبيانات الصحيحة.
توجيه المهام يدويًا
يمكنك أيضًا توجيه المهام إلى وكلاء محددين:
[@frontend-agent] إنشاء مكون تنقل متجاوب مع قائمة همبرغر للجوال
[@backend-agent] إضافة نقطة نهاية /api/navigation تُرجع عناصر القائمة بناءً على دور المستخدم
التواصل بين الوكلاء
يتواصل الوكلاء من خلال نظام ملفات مهام مشترك.
ملفات المهام
يتم تتبع المهام في .cursor/tasks/:
.cursor/
tasks/
TASK-001-frontend-nav.md
TASK-002-backend-api.md
TASK-003-integration-test.md
يحتوي كل ملف مهمة على:
# TASK-001: Navigation Component
## Status: IN_PROGRESS
## Assigned: frontend-agent
## Dependencies: None
## Description
Create a responsive navigation component...
## Acceptance Criteria
- [ ] Mobile hamburger menu works
- [ ] Desktop horizontal layout
- [ ] Active state highlighting
## Notes
- Use the existing Button component
- Follow the design in Figma (link)
تسليم الوكلاء
عندما يكمل وكيل مهمة يعتمد عليها وكيل آخر:
## Handoff Notes
Completed by: frontend-agent
Handed to: test-agent
The Navigation component is in src/components/Navigation.tsx.
Props interface is defined. Ready for testing.
أفضل الممارسات لسير العمل متعدد الوكلاء
1. تحديد حدود واضحة
يجب أن يكون لكل وكيل نطاق محدد بوضوح:
{
"id": "database-agent",
"directories": ["src/db", "migrations", "seeds"],
"rules": [
"Only modify files in the assigned directories",
"Run migrations before committing changes",
"Document schema changes in CHANGELOG.md"
]
}
2. استخدام العقود المشتركة
حدد الواجهات التي يتفق عليها الوكلاء:
// src/types/shared.ts
// This file is read by ALL agents
export interface ApiResponse<T> {
data: T;
success: boolean;
error?: string;
}
export interface User {
id: string;
email: string;
name: string;
role: 'admin' | 'user';
}
3. تنفيذ حل النزاعات
عندما يقوم الوكلاء بتعديل نفس الملفات:
{
"conflictResolution": {
"strategy": "last-write-wins",
"notification": true,
"manualReview": ["src/types/shared.ts", "package.json"]
}
}
4. مراقبة نشاط الوكلاء
تتبع ما يفعله كل وكيل:
# عرض المهام النشطة
cat .cursor/tasks/*.md | grep "Status: IN_PROGRESS"
# التحقق من عمليات التثبيت الأخيرة للوكلاء
git log --oneline --all --grep="agent:" | head -20
مثال: سير عمل متعدد الوكلاء كامل
لنقم ببناء ميزة مع ثلاثة وكلاء يعملون معًا:
المرحلة 1: وكيل الواجهة الخلفية
[@backend-agent] إنشاء نقطة نهاية /api/products مع عمليات CRUD.
استخدم اتصال قاعدة البيانات الموجود في src/db/index.ts.
اتبع واجهة ApiResponse في src/types/shared.ts.
المرحلة 2: وكيل الواجهة الأمامية (يبدأ بعد تثبيت الواجهة الخلفية)
[@frontend-agent] إنشاء مكون ProductList يجلب من /api/products.
استخدم React Query لجلب البيانات.
عرض المنتجات في شبكة متجاوبة.
المرحلة 3: وكيل الاختبار (يبدأ بعد تثبيت الواجهة الأمامية)
[@test-agent] كتابة اختبارات لمكون ProductList ونقطة النهاية /api/products.
تضمين اختبارات حالة الخطأ.
الهدف تغطية 85%+.
استكشاف أخطاء مشاكل متعدد الوكلاء وإصلاحها
| المشكلة | الحل |
|---|---|
| الوكلاء يستبدلون تغييرات بعضهم البعض | حدد حدود دليل أكثر صرامة في worktrees.json |
| المهام لا يتم التقاطها | تحقق من أن ملفات المهام في .cursor/tasks/ بالحالة الصحيحة |
| الوكلاء يتعارضون على الملفات المشتركة | أضف الملفات إلى manualReview في conflictResolution |
| وكيل واحد خامل | تأكد من أن تبعيات المهام مُعلَّمة على أنها مكتملة |
متقدم: خوادم MCP مخصصة
للعمليات المتخصصة، أنشئ خوادم MCP مخصصة:
// mcp-server-custom.js
const { Server } = require('@modelcontextprotocol/sdk/server/index.js');
const server = new Server({
name: 'custom-task-router',
version: '1.0.0'
}, {
capabilities: {
tools: {}
}
});
server.setRequestHandler('tools/call', async (request) => {
if (request.params.name === 'route-task') {
const { task, agentPool } = request.params.arguments;
// Custom routing logic
const bestAgent = selectBestAgent(task, agentPool);
return {
content: [{
type: 'text',
text: `Task routed to ${bestAgent}`
}]
};
}
});