
mcpsnoop v0.22.0
Wireshark لـ MCP. وكيل شفاف بين عميل الذكاء الاصطناعي الخاص بك وخادم MCP. راقب كل استدعاء مباشرةً في طرفيتك، وأفشل CI بناءً على ما يجده، وصدّر امتدادات OpenTelemetry.
Wireshark لـ MCP. يجلس mcpsnoop بين عميل الذكاء الاصطناعي الخاص بك وخادم MCP الخاص بك ويسجّل كل إطار JSON-RPC يتبادلانه، دون أي تغيير على أي من الجانبين. شاهده مباشرةً في طرفيتك، أو أفشل CI بناءً على ما يجده، أو أرسله إلى خلفية التتبع الخاصة بك كـ OpenTelemetry spans.
المشكلة
يتصل MCP Inspector الرسمي بصفته عميلاً خاصاً به، لذا لا يرى أبداً ما يرسله عميلك (Cursor، Claude Code، Codex) فعلياً إلى خادمك. وأي شيء ينتظر وصول طلب لا يمكنه إظهار الاستدعاء الذي لم يُجرِه النموذج أبداً، أو الذي أجراه بوسائط خاطئة. عندما لا يُستدعى أداة بصمت، أو لا تتوافق القدرات، أو يتعلّق استدعاء فحسب، تجد نفسك تنقّب في السجلات وتخمّن.
بدلاً من ذلك، يجلس mcpsnoop في مسار البيانات الحقيقي. غلّف أمر خادمك به وشاهد كل إطار JSON-RPC مباشرةً، أثناء تحدّث عميلك وخادمك الحقيقيين.
في CI
هذه الصفحة هي أيضاً قائمة إجراء GitHub الخاص بـ mcpsnoop، لذا إليك محتواها بالكامل. يفحص جلسة ملتقطة، ويسجّل كل اكتشاف كتنبيه لفحص الشيفرة، ويفشل المهمة بناءً على ما وضعت له شرطاً.
permissions:
security-events: write
contents: read
steps:
- uses: kerlenton/[email protected]
with:
session: artifacts/session.jsonl
لا يوجد تسجيل جاهز؟ سجّل جلسة واحدة باستخدام عميلك الخاص مرة واحدة، ثم أودِعها في المستودع، ودع الإجراء يعيد تشغيلها مقابل كل عملية بناء. لا يُشغَّل أي نموذج ولا مفتاح API في CI. تُفحص إعادة التشغيل مثل أي تسجيل، وتفشل المهمة أيضًا عندما يصبح الخادم أسوأ مما كان عليه في التسجيل. الخادم الذي يُوصَل إليه عبر Streamable HTTP يحصل على target مع نقطة نهايته، ويمكن إعادة تشغيل التسجيل عبر أي من النقلين.
steps:
- uses: kerlenton/[email protected]
with:
replay: tests/mcp/claude-code-session.jsonl
server: node dist/index.js
ثبّت أي إصدار تريده. أحدث إصدار موجود على صفحة الإصدارات. كل مدخل و مخرج موجود في إجراء GitHub أدناه، وكل إشارة يمكن أن يفشل الفحص بسببها موجودة في docs/CI.md.
OpenTelemetry
تُهمل مراجعة MCP 2026-07-28 التسجيل على مستوى البروتوكول وتطلب من
التطبيقات الانتقال إلى stderr على stdio، أو إلى OpenTelemetry للمراقبة
المنظمة. يغطي mcpsnoop كليهما دون المساس بالعميل أو الخادم.
تظهر أسطر stderr الخاصة بخادم stdio في التدفق بجانب إطاراتها،
ويصبح كل طلب span يتبع
اصطلاحات OpenTelemetry الدلالية لـ MCP.
mcpsnoop export -T otlp -o trace.json # spans from a capture
mcpsnoop --otlp-endpoint http://localhost:4318/v1/traces -- node build/index.js # spans as calls complete
تصل استدعاءات الأدوات كـ span باسم tools/call search، حاملةً
mcp.method.name وgen_ai.tool.name وerror.type، لذا فهي تظهر في
لوحة معلومات مبنية لـ MCP بدلاً من لوحة مبنية لـ mcpsnoop. مقاييس الأدوات الحية لـ
Prometheus على بُعد علم واحد فقط. كلاهما في
docs/OPENTELEMETRY.md.
البدء السريع
شاهده فورًا، دون أي إعداد.
mcpsnoop demo
لاستخدامه فعليًا، ضمّن خادمك في إعدادات MCP الخاصة بعميلك.
{
"mcpServers": {
"my-server": {
"command": "mcpsnoop",
"args": ["--", "node", "build/index.js"]
}
}
}
كل ما يأتي بعد -- هو الأمر الذي يُشغّل خادمك عادةً. استبدله بما تستخدمه أنت بالفعل، مثل python server.py أو npx -y @scope/server أو ملف ثنائي مُجمَّع.
على Claude Desktop لست مضطرًا إلى إجراء هذا التعديل يدويًا.
mcpsnoop wrap my-server # route my-server through mcpsnoop
mcpsnoop unwrap my-server # put it back
wrap يعثر على claude_desktop_config.json، وينسخه إلى
claude_desktop_config.json.mcpsnoop.bak في المرة الأولى، ويعيد كتابة إدخال ذلك
الخادم فقط، بحيث تُترك تنسيقاتك وكل خادم آخر دون تغيير.
داخل الإدخال المعاد كتابته تعود المفاتيح بترتيب أبجدي. unwrap
يستعيد الملف، ويحذف النسخة الاحتياطية بمجرد عدم بقاء أي خادم ملفوفًا.
أعد تشغيل Claude Desktop بعد أيٍّ منهما، لأن خوادم MCP تُشغَّل مرة واحدة عند
بدء التشغيل.
ثم استخدم عميلك كالمعتاد وافتح واجهة المستخدم.
mcpsnoop
لا أعلام، ولا مسارات sockets، ولا ترتيب بدء تشغيل يجب تذكّره. يجد الـ shim والـ UI بعضهما البعض من تلقاء نفسيهما، ويقوم الـ UI بملء الجلسات السابقة من القرص.
بالنسبة لخادم streamable-HTTP، شغّل mcpsnoop كـ reverse proxy.
mcpsnoop http --target http://localhost:3000/mcp --listen :7000
تظهر حالة HTTP لكل استجابة في التدفق، لذا فإن الاستجابة التي لا تحمل أي رسالة JSON-RPC خاصة بها تبقى إطارًا مرئيًا بدلًا من ألا تكون شيئًا. يشمل ذلك تحدّي 401، و403 عند رفض Origin، و202 التي تُقرّ بإشعار، و502 عندما يتعذّر الوصول إلى الهدف كليًا. يُحتفظ بترويسة WWW-Authenticate الخاصة بـ401 حرفيًا وتُعرض في المفتّش، لأنها تحدد مخطط المصادقة وبيانات وصف المورد التي ينبغي الانتقال إليها تاليًا. صفِّ حسب الحالة باستخدام status:401 في TUI، أو حسب أي فشل باستخدام status:err. تُحتسب أي استجابة 4xx أو 5xx خطأً، لذا تفشل جولة mcpsnoop check الافتراضية عندها، ويُقرأ الاستدعاء الذي أجابت عنه على أنه فاشل بدلًا من أنه ما يزال منتظرًا.
لا تملك خادمًا خاصًا بك؟ جرّبه فعليًا مقابل خادم اختبار منشور، يُشغّله عميلك الخاص. لفحص جلسة بعد حدوثها، راجع مراجعة الجلسات السابقة من السجلات.
التثبيت
npm
لا حاجة إلى سلسلة أدوات Go. معظم خوادم MCP مكتوبة بـ Node أو Python، لذا فهذه أقصر طريق للبدء.
npx mcpsnoop -- node build/index.js
لا تحتوي حزمة npm على أي شيفرة خاصة بها. تحمل ست حزم خاصة بكل منصة بناءً واحدًا لكل منها، ويثبّت npm الحزمة الوحيدة المطابقة لجهازك، لذا لا يوجد شيء لتنزيله وقت التثبيت ولا شيء لفتحه في وكيل. للإبقاء عليها بدلًا من جلبها في كل تشغيل، استخدم npm i -g mcpsnoop.
Homebrew
brew install mcpsnoop
Go
go install github.com/kerlenton/mcpsnoop/cmd/mcpsnoop@latest
توجد ملفات ثنائية مبنية مسبقًا لكل منصة على صفحة Releases.
يوفر mcpsnoop إكمالات لـ bash وzsh وfish وPowerShell. شغّل
mcpsnoop completion <shell> --help لخطوات الإعداد، والتي تغطي تفعيل
الإكمال ومسار التثبيت لنظام التشغيل الخاص بك.