MCP الأمان والتفويض
MCP يوحّد كيفية وصف القدرات واستدعائها. وهو لا يقرر أي القدرات ينبغي أن يتلقاها وكيل أو أي الآثار الجانبية وافق عليها المستخدم.
أربعة قرارات منفصلة
- مصادقة الاتصال — هل يمكن لهذا العميل الاتصال بهذا الخادم؟
- رؤية القدرات — ما الأدوات والموارد التي يمكن للنموذج رؤيتها؟
- تفويض التنفيذ — هل يمكن لهذه الهوية تنفيذ هذا الإجراء المحدد على هذا المورد الآن؟
- موافقة بشرية — هل يتطلب إجراء ذو عواقب أن يؤكد شخص مدخلاته وآثاره الدقيقة؟
لا تدمج هذه القرارات في قائمة إعدادات autoApprove.
خوادم stdio المحلية
ترث عملية فرعية محلية موضعًا قويًا داخل مضيف التطبيق.
- استخدم مسارًا تنفيذيًا مطلقًا ومراجعًا.
- ثبّت إصدارات الحزمة والملف التنفيذي؛ وتجنب علامات
latest. - مرّر فقط متغيرات البيئة المطلوبة.
- لا تضع الأسرار في وسائط سطر الأوامر.
- قيّد جذور نظام الملفات وأدلة العمل.
- طبّق ملف تعريف لعزل نظام التشغيل عندما يتعامل الخادم مع إدخال غير موثوق.
- تعامل مع أوصاف الخادم والموارد والنتائج على أنها محتوى غير موثوق.
مسارات التحميل وتحديث/إضافة وقت التشغيل في JSON تتحقق من معرّفات الخادم.
McpServerManager لا يعزل الأمر المكوَّن.
HTTP القابل للبث عن بُعد
يمكن لـ McpHttpClientBuilder تطبيق ما يلي:
- رموز حامل;
- رأس مفتاح API يختاره المستدعي;
- رؤوس عشوائية خاضعة للمراجعة;
- اكتساب رمز اعتماد العميل-البيانات الثابتة لـ OAuth 2.0;
- مهلات الطلبات; و
- إعادة تهيئة جلسة واحدة محدودة بعد استجابة جلسة منتهية.
OAuth2Config ليس تدفق التفويض الكامل لـ MCP. فهو لا ينفذ
اكتشاف بيانات وصفية للمورد المحمي، أو اكتشاف خادم التفويض، أو التفويض عبر المتصفح، أو PKCE، أو تفاوض مؤشر المورد. استخدم
rmcp التفويض APIs أو مكوّن هوية عندما يتطلب النشر ذلك
التدفق.
قيّد طلب الرمز بحيث لا يمكن لخادم تفويض بطيء أو غير متاح أن يعلّق إعداد الاتصال، ولاحظ أن العميل لا يكرر سر العميل إلى الخلف أبدًا — تُخفى أجسام أخطاء نقطة نهاية الرمز قبل وصولها إلى السجلات:
use adk_tool::mcp::OAuth2Config;
use std::time::Duration;
let auth = OAuth2Config::new(client_id, token_url)
.with_secret(client_secret)
.with_scopes(vec!["mcp.read".into(), "mcp.invoke".into()])
.with_timeout(Duration::from_secs(10)); // token request timeout
مهلة طلب الرمز الافتراضية هي 30 ثانية.
إظهار الأدوات وتنفيذها
استخدم with_tools أو with_filter لإبقاء القدرات غير الضرورية خارج طلب
النموذج. ثم طبّق تفويض أداة ADK-Rust والموافقة أثناء
وقت التنفيذ.
بالنسبة للأدوات ذات العواقب:
- اعرض للشخص الوسائط النهائية المحلولة;
- ميّز بين السماح لمرة واحدة والسياسة الدائمة;
- أبقِ الموافقة مرتبطة بمعرّف استدعاء الدالة الدقيق;
- اجعل الكتابات الخارجية قابلة لإعادة التنفيذ دون آثار جانبية حيثما أمكن;
- خزّن قرار الموافقة ونتيجة الأداة معًا; و
- لا تعتبر أبدًا استجابة بروتوكول ناجحة دليلًا على نتيجة عمل ناجحة دون التحقق من الأدلة المُعادة.
الاستيضاح
الاستيضاح هو طلب خادم لمزيد من المعلومات، وليس تعليمات يجب على التطبيق الالتزام بها. راجع الرسالة، URL، الحقول المطلوبة، والبيانات الوصفية. ارفض الطلبات غير المدعومة أو غير المتوقعة. تحقّق من صحة جميع قيم النماذج المقبولة قبل استخدامها.
التسجيل والأسرار
اخفِ متغيرات البيئة، ورؤوس التفويض، ومفاتيح API، وإجابات الاستيضاح، وسائط الأدوات الحساسة. وسجّل بدلًا من ذلك معرّف الخادم، واسم الأداة، ومعرّف المهمة، و الحالة، والتوقيت، والموافقة، وملخصًا محدودًا للنتيجة.