/ الدليل / الملعب / C# SDK
● رسمي modelcontextprotocol ⚡ فوري

C# SDK

بواسطة modelcontextprotocol · modelcontextprotocol/csharp-sdk

بناء خوادم وعملاء MCP باستخدام .NET — SDK رسمي يطوره بالتعاون فريق MCP وMicrosoft.

SDK رسمي من modelcontextprotocol/csharp. اكتب خوادم MCP باستخدام سمات مثل [McpServerToolType] و [McpServerTool]، أو بناء عملاء يتصلون بأي خادم MCP. يندمج بشكل طبيعي مع حقن التبعيات في .NET والتسجيل والاستضافة.

لماذا تستخدمه

الميزات الأساسية

عرض مباشر

كيف يبدو في الممارسة

csharp-sdk.replay ▶ جاهز
0/0

التثبيت

اختر العميل

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "csharp-sdk": {
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "./MyMcpServer"
      ]
    }
  }
}

افتح Claude Desktop → Settings → Developer → Edit Config. أعد التشغيل بعد الحفظ.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "csharp-sdk": {
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "./MyMcpServer"
      ]
    }
  }
}

يستخدم Cursor نفس مخطط mcpServers مثل Claude Desktop. إعدادات المشروع أولى من الإعدادات العامة.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "csharp-sdk": {
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "./MyMcpServer"
      ]
    }
  }
}

انقر على أيقونة MCP Servers في شريط Cline الجانبي، ثم "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "csharp-sdk": {
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "./MyMcpServer"
      ]
    }
  }
}

نفس الصيغة مثل Claude Desktop. أعد تشغيل Windsurf لتطبيق التغييرات.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "csharp-sdk",
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "./MyMcpServer"
      ]
    }
  ]
}

يستخدم Continue مصفوفة من كائنات الخادم بدلاً من خريطة.

~/.config/zed/settings.json
{
  "context_servers": {
    "csharp-sdk": {
      "command": {
        "path": "dotnet",
        "args": [
          "run",
          "--project",
          "./MyMcpServer"
        ]
      }
    }
  }
}

أضف إلى context_servers. يعيد Zed التحميل تلقائيًا عند الحفظ.

claude mcp add csharp-sdk -- dotnet run --project ./MyMcpServer

أمر من سطر واحد. تحقق باستخدام claude mcp list. احذف باستخدام claude mcp remove.

حالات الاستخدام

استخدامات عملية: C# SDK

بناء خادم MCP في .NET يكشف عن خدماتك الموجودة

👤 مهندسو C#/.NET الذين يملكون واجهات برمجية داخلية ⏱ ~45 min intermediate

متى تستخدمه: إذا كنت تعمل مع .NET وتريد كشف منطق الأعمال للوكلاء بدون إعادة كتابة.

المتطلبات الأساسية
  • .NET 8+ SDKdotnet --version
الخطوات
  1. إنشاء المشروع
    dotnet new console -n MyMcpServer. أضف ModelContextProtocol NuGet. استخدم قالب الاستضافة البسيط لـ MCP.✓ تم النسخ
    → ملف csproj و Program.cs مع خدمة MCP مستضافة
  2. إضافة أداة
    أنشئ فئة ثابتة بـ [McpServerToolType]. أضف دالة GetOrder(string id) مزينة بـ [McpServerTool(Description="...")] تستدعي OrderService الموجود لديك عبر DI.✓ تم النسخ
    → تجميع الأداة بنجاح، والوصف يأتي من السمة
  3. الاختبار باستخدام المفتش
    قم بتشغيل الخادم كـ stdio. شغل مفتش MCP عبر npx @modelcontextprotocol/inspector dotnet run. استدعِ GetOrder.✓ تم النسخ
    → استدعاء الأداة يعيد JSON الطلب

النتيجة: خادم MCP مترجم ومكتوب بشكل آمن يعيد استخدام خدمات .NET الموجودة وحاوية حقن التبعيات.

المزالق
  • أساليب الأداة التي تكون أساليب نسخة على فئة تحتاج حقن التبعيات للعمل — سجل الفئة المالكة في ServiceCollection؛ يحل SDK عبر حقن التبعيات
  • الأساليب غير المتزامنة بدون رموز الإلغاء المناسبة تتعطل عند الإيقاف — قبول CancellationToken ct كمعامل أخير على كل أداة — SDK يحقنها

بناء تطبيق console .NET يستخدم خوادم MCP

👤 مطورو C# الذين ينشئون أتمتة داخلية ⏱ ~30 min intermediate

متى تستخدمه: تريد كود .NET حتمي (وليس حلقة LLM) يستدعي خوادم MCP — على سبيل المثال، وظيفة مجدولة تستخدم MCPs github و filesystem.

الخطوات
  1. إضافة حزمة العميل
    أنشئ تطبيق console. أضف مرجع عميل ModelContextProtocol. أضف إعداد يشير إلى خادم stdio (على سبيل المثال npx -y @modelcontextprotocol/server-github).✓ تم النسخ
    → بناء العميل بنجاح
  2. الاتصال والاستدعاء
    ابدأ العميل، اسرد الأدوات، استدعِ list_repositories باسم منظمتي. اطبع النتيجة.✓ تم النسخ
    → طباعة المستودعات على وحدة التحكم
  3. لفها كوظيفة مجدولة
    حولها إلى Worker Service يعمل كل ليلة. سجل المقاييس عبر ILogger.✓ تم النسخ
    → تشغيل Worker عبر dotnet run والجدولة بنظافة

النتيجة: MCP كمكتبة، وليس مجرد مكون دردشة — يعمل داخل أي عملية .NET.

المزالق
  • خوادم Stdio تستغرق وقتًا للبدء، المكالمة الأولى تنتهي بانتظار — ابدأ تشغيل العميل عند بدء التطبيق وأعد استخدامه؛ لا تولد واحدًا لكل استدعاء

تقديم نقطة نهاية MCP من تطبيق ASP.NET Core

👤 مهندسو منصة .NET ⏱ ~60 min advanced

متى تستخدمه: تريد استضافة خادم MCP داخل خدمة ASP.NET Core موجودة، خلف نفس المصادقة والدخول.

المتطلبات الأساسية
  • تطبيق ASP.NET Core موجود أو الرغبة في بدء واحدdotnet new web
الخطوات
  1. إضافة خدمات نقطة نهاية MCP
    في Program.cs، builder.Services.AddMcpServer().WithToolsFromAssembly(). ثم app.MapMcp('/mcp').✓ تم النسخ
    → نقطة نهاية /mcp تستجيب لمصافحة SSE
  2. شارك المصادقة مع بقية التطبيق
    ضع نقطة نهاية /mcp خلف حد وسيط JWT bearer الخاص بك. تحقق من حصول الطلبات غير المصرح بها على 401.✓ تم النسخ
    → 401 غير مصرح، 200 مصرح
  3. النشر والاتصال
    انشر. قم بتوصيل Claude Desktop لزميل عبر mcp-remote https://myapp.com/mcp مع JWT الخاص به.✓ تم النسخ
    → يرى أعضاء الفريق الأدوات

النتيجة: MCP جنبًا إلى جنب مع API الموجود في نشر واحد مع قصة مصادقة واحدة.

المزالق
  • Kestrel يخزن مؤقتًا استجابات SSE خلف بروكسي عكسي — تعطيل التخزين المؤقت للاستجابة؛ تأكد من أن IIS/nginx/Cloudflare في الأمام يعطل أيضًا التخزين المؤقت لـ /mcp
اجمعها مع: cloud-run

التركيبات

اجمعها مع خوادم MCP أخرى لتحقيق نتائج x10

csharp-sdk + cloud-run

نشر خادم .NET MCP على Cloud Run جنبًا إلى جنب مع الخدمات الجزئية الأخرى

ضع خادم .NET MCP الخاص بي في حاوية (قاعدة mcr.microsoft.com/dotnet/aspnet)، انشره على Cloud Run مع min-instance=1 لتخفيف بدء التشغيل البارد.✓ تم النسخ
csharp-sdk + fastmcp

مقارنة للمتاجر متعددة اللغات — SDKs مختلفة، نفس البروتوكول

فريقنا لديه خدمات Python و .NET. استخدم FastMCP لواجهات برمجية Python و csharp-sdk لواجهات برمجية .NET — كلاهما خلف بوابة ContextForge واحدة.✓ تم النسخ

الأدوات

ما يوفره هذا الـ MCP

الأداةالمدخلاتمتى تستدعيهاالتكلفة
[McpServerToolType] attribute on a class ضع علامة على الفئات التي يجب أن تكون طرقها مكشوفة free
[McpServerTool(Description)] attribute on a method كل دالة تريد للوكلاء استدعاءها free
AddMcpServer() / WithToolsFromAssembly() fluent builder Program.cs عند البدء free
MapMcp('/path') ASP.NET endpoint استضافة ASP.NET فقط free
IMcpClient stdio or SSE transport config الاستخدام من جانب العميل free

التكلفة والحدود

تكلفة التشغيل

حصة API
لا يوجد — هذا SDK
الرموز لكل استدعاء
لا توجد نفقات عامة للإطار تتجاوز بروتوكول MCP
التكلفة المالية
مجاني، مرخص تحت MIT
نصيحة
استخدم تسجيل .NET المدمج و HealthChecks لالتقاط المشاكل قبل أن تتفاقم في الإنتاج

الأمان

الصلاحيات والأسرار ونطاق الأثر

تخزين بيانات الاعتماد: معايير .NET: user-secrets للتطوير، متغيرات البيئة أو Key Vault للإنتاج
نقل البيانات الخارجي: أي شيء تصل إليه أدواتك

استكشاف الأخطاء

الأخطاء الشائعة وحلولها

Tool not appearing in inspector

WithToolsFromAssembly() تمسح فقط المجموعة المنفذة. بالنسبة للأدوات في المكتبات المرجعية، مرر المجموعة بشكل صريح: WithTools(typeof(MyTools).Assembly).

DI can't resolve my service in a tool method

يجب تسجيل أنواع الأدوات في الحاوية. أضف builder.Services.AddScoped<OrderService>() قبل AddMcpServer.

ASP.NET MapMcp returns 404

لقد قمت بالتعيين بعد app.Run() — انقل MapMcp قبل Run. تحقق أيضًا من أن المسار لا يتعارض مع نقاط النهاية الأخرى.

JSON serialization fails on enums

يستخدم SDK System.Text.Json؛ أضف [JsonStringEnumConverter] على أعدادك أو قم بالتكوين عام.

البدائل

C# SDK مقابل البدائل

البديلمتى تستخدمهاالمقايضة
FastMCP (Python)أنت موافق على اختيار Python — نظام بيئي أمثلة أغنىلغة مختلفة؛ تعتمد على مهارات الفريق
TypeScript MCP SDKمتجر Node / TSDX مشابه، اختيار اللغة

المزيد

الموارد

📖 اقرأ ملف README الرسمي على GitHub

🐙 تصفح القضايا المفتوحة

🔍 تصفح أكثر من 400 خادم MCP و Skills