الـ MCP (Model Context Protocol) بيدي Claude وصول مباشر لخدمات خارجية في الوقت الفعلي. على عكس ملفات الذاكرة اللي بتخزّن context ثابت، اتصالات الـ MCP بتخلّي Claude يجيب بيانات حيّة — الـ GitHub issues بتاعتك، قاعدة بيانات الـ production، قنوات Slack، أو أي خدمة عندها MCP server. في الموديول ده، هنغطي إزاي تضيف servers، وتفهم الـ scopes، وتستخدم أدوات الـ MCP بفعالية.
إضافة MCP Servers
أسرع طريقة لإضافة server هي أمر claude mcp add. اختار الـ transport المناسب لنوع الـ server: http للـ servers البعيدة، stdio للـ processes اللي بتشتغل محليًا، وsse للـ servers البعيدة القديمة اللي لسه ما اتنقلتش لـ HTTP. (ملاحظة: الـ SSE متوقف — استخدم HTTP servers بدل كده حيث ما يكون متاحًا.) على Windows الأصلي، غالبًا هتحتاج تستخدم cmd /c لما تشغّل stdio servers بتستخدم npx.
# Add a remote HTTP server
claude mcp add --transport http notion https://mcp.notion.com/mcp
# Add a local Node.js server via stdio
claude mcp add --transport stdio github -- npx @modelcontextprotocol/server-github
# Add with an auth header
claude mcp add --transport http my-api https://api.example.com/mcp \
--header "Authorization: Bearer $MY_TOKEN"
أدر الـ servers بتاعتك بأوامر claude mcp list وclaude mcp get <name> وclaude mcp remove <name>. أمر /mcp جوه الـ session بيعرض الاتصالات النشطة وبيفعّل OAuth flows للـ servers اللي محتاجة authentication عبر المتصفح. من الأوامر المفيدة كمان: claude mcp reset-project-choices وclaude mcp add-from-claude-desktop وclaude mcp serve لما تحب Claude Code نفسه يشتغل كـ MCP server.
إعدادات الـ MCP بتتخزن في ~/.claude.json (ملف الإعدادات المحلي بتاعك) أو .mcp.json في root المشروع (مشترك مع الفريق). ملف .mcp.json بيتعمل له commit في git وبيطلب موافقة زملائك أول مرة يستعملوه. توسيع الـ environment variables بيشتغل في كل حقول الإعدادات — استخدم ${VAR:-default} كـ fallback:
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}
للجلسات السريعة — تجارِب مؤقتة، أو CI runs، أو محاولة إعادة إنتاج باق في بيئة معزولة — --mcp-config بيحمّل MCP servers من ملفات JSON من غير ما تلمس إعداداتك المحفوظة. الـ flag بياخد ملف JSON واحد أو أكتر (مفصولين بمسافة)، فنفس الأمر ممكن يضع shared config فوق local overrides. مع --strict-mcp-config بيتجاهل أي مصدر MCP تاني للجلسة دي، وده أنضف طريقة لإعادة إنتاج باق على مجموعة servers محددة:
# حمّل ملف إعدادات واحد للجلسة دي بس
claude --mcp-config ./ci-servers.json
# اجمع أكتر من ملف (مفصولين بمسافة)
claude --mcp-config "./shared-servers.json ./local-overrides.json"
# أعد إنتاج باق على server واحد بالظبط، متجاهلًا إعدادات الـ user/project
claude --strict-mcp-config --mcp-config ./repro.json
الـ MCP servers دلوقتي بتتوصّل بشكل متزامن (concurrent) بشكل افتراضي. لما يكون عندك عدة servers متعرّفة — stdio servers محلية وremote connectors من claude.ai — بتتهيأ كلها بالتوازي عند بدء التشغيل بدل ما تشتغل واحد ورا التاني. ده بيقلل وقت بدء التشغيل بشكل ملحوظ للمشاريع اللي فيها تكاملات MCP كتيرة.
استخدم MCP_TIMEOUT عشان تحدد timeout لكل server بالمللي ثانية (الافتراضي بيختلف حسب الـ transport).
الـ MCP connectors اللي متعرّفة في Claude.ai ممكن تظهر تلقائيًا في Claude Code. لو عرّفت server من خلال الـ web interface، هيبقى متاح في جلسات الـ CLI بتاعتك من غير إعداد محلي منفصل. ولو نفس الـ server متعرّف محليًا وعبر Claude.ai، التكرار بيتشال تلقائيًا عشان ما ينتهيش عندك اتصالين لنفس الخدمة.
الـ Scopes واكتشاف الأدوات
إعدادات الـ MCP ليها تلات scopes. الـ Local scope (بيتخزن جوه ~/.claude.json تحت المفتاح الخاص بالمشروع) خاص — أنت بس، في المشروع ده بس. الـ Project scope (.mcp.json) مشترك مع الفريق عبر git. الـ User scope (~/.claude.json بشكل عام) بيتطبق على كل مشاريعك.
لما نفس الـ server يتعرّف في أكتر من scope، الـ local configuration بيكسب. ده بيخليك تعدّل إعدادات server مشترك مع الفريق بنسخة محلية للاختبار من غير ما تأثر على أي حد تاني.
الـ MCP prompts بتظهر كـ slash commands بالنمط /mcp__servername__promptname. الـ MCP resources ممكن تتعامل معاها inline بالصيغة @server:protocol://resource/path. الـ Tool Search مفعّل بشكل افتراضي — أدوات MCP بتتأجّل وتُكتشف عند الطلب، فبس الأدوات اللي Claude يستخدمها فعلًا في المهمة الحالية بتدخل الـ context. كل description لأداة MCP وتعليمات الـ server محدودة بـ 2KB عشان ما تستهلكش servers اللي بتولّد OpenAPI context زيادة. تحذير بيظهر وقت الـ output بتاع أداة MCP لو تجاوز 10,000 token. عشان تزيد الـ limit، اضبط متغير البيئة MAX_MCP_OUTPUT_TOKENS (الافتراضي 25,000).
عشان تلغي الـ deferral لـ server معين، ضيف alwaysLoad: true في الـ config بتاعه — كل الأدوات من الـ server ده هتتخطى الـ tool-search deferral وتكون دايمًا متاحة في الجلسة:
الـ subagent-scoped MCP بيخليك تدي agents معينة وصول لـ servers باقي الـ session مش محتاجها:
---
name: data-analyst
description: Analyze production data
mcpServers:
- database
- playwright:
type: stdio
command: npx
args: ["-y", "@playwright/mcp@latest"]
---
أنماط استخدام عملية
لما يكون GitHub MCP متوصل، تقدر تتعامل مع الـ PRs والـ issues والـ commits بلغة طبيعية. Claude بيسأل الـ server، يجيب بيانات حيّة، ويرد:
List all open PRs that haven't been reviewed in more than 3 days.
Create an issue for the login timeout bug with medium priority.
/mcp__github__pr_review 456
الـ database MCP بيخليك تعمل queries بلغة طبيعية من غير ما تكتب SQL بنفسك:
Find all users who placed more than 5 orders in the last 30 days.
What's the average order value by country for Q1 2026?
للـ workflows المعقدة، أكتر من MCP server بيشتغلوا مع بعض بشكل طبيعي. workflow يومي ممكن: يجيب PR metrics من GitHub MCP، ويعمل query لبيانات المبيعات من database MCP، ويكتب تقرير عبر filesystem MCP، وينشره عبر Slack MCP — كل ده في session واحدة.
الـ MCP elicitation بتسمح لـ server يوقف الـ workflow ويطلب input منظم من المستخدم. لما server يحتاج معلومة مش قادر يجيبها لوحده — تصريح OAuth، أو تأكيد قبل عملية خطيرة، أو form بـ parameters خاصة بالمشروع — بيعمل dialog تفاعلي. المستخدم بيشوف حقول form أو URL للمتصفح، بيدي الرد، والـ server بيكمّل من حيث ما وقف. الـ hooks Elicitation وElicitationResult بيخلوك تعترض أو تعدّل الحوارات دي برمجيًا.
أفضل ممارسات الأمان: استخدم دايمًا environment variables للـ credentials، ما تعملش commit لـ tokens في git أبدًا، استخدم read-only tokens لما تحتاج تقرأ بيانات بس، وحدد وصول الـ server للحد الأدنى المطلوب. للمؤسسات، managed-mcp.json بيخلّي المسؤولين يفرضوا allowlist من الـ servers المسموح بيها على مستوى المنظمة.
من الإمكانيات المهمة التانية في الـ MCP: servers الـ MCP ممكن تبعت إشعارات list_changed عشان تحدّث الأدوات والـ prompts والـ resources المتاحة ديناميكيًا من غير ما تحتاج تعمل reconnect. لو HTTP server انقطع في نص الجلسة، Claude Code بيعمل reconnect تلقائيًا بـ exponential backoff — لحد خمس محاولات، كل مرة بتبدأ بتأخير ثانية وبتتضاعف.
القنوات (Channels): بعت أحداث لجلسة شغّالة
القنوات هي MCP servers بتبعت أحداث لجلستك الشغّالة عشان Claude يتفاعل وأنت مش قدام الـ terminal. على عكس MCP servers العادية اللي Claude بيسألها عند الحاجة، القناة بتوصّل رسائل بشكل استباقي — جسر محادثة من Telegram، webhook من CI، أو تنبيه مراقبة. الأحداث بتوصل بس والجلسة مفتوحة.
تلات plugins للقنوات مُضمّنة في الـ research preview: Telegram وDiscord وiMessage. كل واحد بيتثبّت كـ plugin وبيتضبط بالـ credentials بتاعتك. ثبّت plugin قناة بـ /plugin install telegram@claude-plugins-official، اضبطه بأمر /telegram:configure <token>، وبعدين أعد التشغيل بـ flag الـ --channels:
claude --channels plugin:telegram@claude-plugins-official
كل قناة عندها allowlist للمُرسلين — بس الـ IDs اللي ضفتها تقدر تبعت رسائل. Telegram وDiscord بيستخدموا pairing flow: ابعت رسالة للبوت بتاعك، استلم كود، واقبله في Claude Code بـ /telegram:access pair <code> وقفّل الوصول بـ /telegram:access policy allowlist. iMessage بيتخطى الـ pairing لما تبعت لنفسك وبيخلّيك تضيف جهات اتصال بالـ handle.
القنوات محتاجة Anthropic authentication (claude.ai أو Console API key) ومش متاحة على Bedrock أو Vertex AI أو Foundry. مؤسسات Team وEnterprise لازم تفعّل القنوات عن طريق channelsEnabled في الإعدادات المُدارة — مقفولة افتراضيًا. مستخدمي Pro وMax يقدروا يستخدموا القنوات مباشرة بالاشتراك بـ --channels في كل جلسة. المسؤولين كمان يقدروا يحددوا الـ plugins المسموح بيها عن طريق إعداد allowedChannelPlugins المُدار.
لما Claude يرد عبر قناة، الرد بيظهر على المنصة الخارجية (Telegram، Discord، إلخ) — الـ terminal بتاعك بيعرض الـ tool call والتأكيد بس مش نص الرد نفسه.