# حوّل تطبيق Go إلى خادم MCP مع إضافة web-mcp في ToGO

> تحوّل إضافة web-mcp تطبيق ToGO إلى خادم MCP بعيد عبر Streamable HTTP: سجّل الأدوات بـ Go، واحمِها بـ bearer tokens، ودع Claude أو ChatGPT أو Cursor يستدعيها. الإعداد والمصادقة والحدود.

*2026-10-12T12:32:37Z*

أصبح وكلاء الذكاء الاصطناعي فئة ثانية من المستخدمين لمعظم التطبيقات. وبروتوكول Model Context Protocol (MCP) هو طريقتهم في استدعاء تطبيقك: تعرض أدوات، فيستخدمها Claude أو ChatGPT أو Cursor أو أي عميل MCP.

**الإجابة المختصرة:** ثبّت `togo-framework/web-mcp`، وسجّل الأدوات بـ Go عبر `webmcp.AddTool`، فيقدّم تطبيق ToGO خادم MCP بعيدًا على `/mcp` عبر Streamable HTTP (مراجعة MCP بتاريخ 2025-06-18). فعّل مصادقة bearer بمتغير بيئة واحد، وأصدر رموز وصول شخصية، وشغّل ما تحتاجه من خوادم مسماة، كل منها على `/mcp/{server}`.

## التثبيت

```bash
togo install togo-framework/web-mcp
```

## تسجيل أداة

```go
s := webmcp.FromKernel(k)

webmcp.AddTool(s.Default(), "ping", "health check",
    func(ctx context.Context, _ webmcp.NoArgs) (string, error) { return "pong", nil })
```

أصبحت هذه الأداة متاحة على `/mcp`. ولخادم منفصل، مثلًا للوكلاء الداخليين فقط، مع التحقق من الصلاحية:

```go
agents := s.NewServer("agents", "1.0.0") // served at /mcp/agents

webmcp.AddTool(agents, "list_projects", "list projects",
    func(ctx context.Context, in ListArgs) (string, error) {
        id, _ := webmcp.IdentityFrom(ctx) // who is calling, and with which scopes
        if !id.Can("read") {
            return "", fmt.Errorf("forbidden")
        }
        return listProjects(ctx, in)
    })
```

يخبرك `webmcp.IdentityFrom(ctx)` بهوية المُستدعي، ويتحقق `id.Can("read")` من صلاحية، فتستطيع الأداة رفض ما لا يسمح به الرمز. وللموارد والـ prompts أو مخططات الأدوات المخصصة يعطيك `srv.MCP` خادم MCP الأساسي.

## المصادقة

افتراضيًا تكون نقطة النهاية مفتوحة، وهذا مقبول على جهازك فقط. اضبطها بمتغيرات البيئة:

| المتغير | وظيفته |
|---|---|
| `WEBMCP_BASE_PATH` | مكان تثبيت الخوادم (الافتراضي `/mcp`) |
| `WEBMCP_AUTH` | `none` أو `bearer` |
| `WEBMCP_TOKENS` | رموز ثابتة للإعدادات البسيطة |
| `WEBMCP_ADMIN_KEY` | يحمي واجهة إدارة الرموز |
| `WEBMCP_AUTH_SERVER` | خادم تفويض OAuth يُعلَن عنه |

مع `WEBMCP_AUTH=bearer` يحصل الطلب الذي لا يحمل رمزًا صالحًا على `401` مع ترويسة `WWW-Authenticate`، ويخبر `/.well-known/oauth-protected-resource` (RFC 9728) عملاء MCP بمكان الحصول على رمز. هذا هو مسار الاكتشاف الذي يستخدمه عملاء مثل Claude لبدء تسجيل الدخول بأنفسهم.

رموز الوصول الشخصية تبدأ بـ `mcp_pat_…`، تُعرض مرة واحدة عند إنشائها وتُخزَّن كبصمات SHA-256 فقط. تُدار عبر `/api/web-mcp/tokens`، ويسرد `/api/web-mcp/servers` الخوادم. ولتخزين الرموز في قاعدة بياناتك، نفّذ `TokenStore` (أو `ManagedTokenStore`) واضبطه بـ `Registry.SetTokenStore`.

## web-mcp مقابل الأمر المدمج `mcp`

يأتي ToGO بأمر `mcp` جاهز، وهو خادم **stdio** للتطوير يتيح لوكيل البرمجة تشغيل مولّدات الإطار على جهازك. أما **web-mcp** فلوكلاء مستخدميك: خادم HTTP بعيد مع مصادقة، ضمن تطبيقك المنشور. ومعظم التطبيقات تحتاج الاثنين.

## حدود بصراحة

- **بروتوكول MCP ما زال يتغير.** تستهدف web-mcp المراجعة 2025-06-18، والعملاء الذين لا يدعمون إلا وسائط نقل أقدم قد يحتاجون محوّلًا.
- **الأدوات واجهة برمجية.** كل ما تعرضه قد يستدعيه وكيل يعمل باسم مستخدم، فضيّق صلاحيات الرموز وتحقق بـ `id.Can` في كل أداة تغيّر بيانات.
- **ToGO في الإصدار 0.x**، والإضافة تتبعه.

## الأسئلة الشائعة

### كيف أبني خادم MCP بلغة Go؟
مع ToGO، ثبّت إضافة web-mcp وسجّل الأدوات بـ `webmcp.AddTool`، فيقدّمها التطبيق على `/mcp` عبر Streamable HTTP جاهزة لأي عميل MCP.

### هل تدعم web-mcp المصادقة؟
نعم. اضبط `WEBMCP_AUTH=bearer` لاشتراط الرموز. وتدعم الرموز الثابتة، ورموز الوصول الشخصية المخزّنة كبصمات، واكتشاف OAuth عبر `/.well-known/oauth-protected-resource` (RFC 9728).

### هل يمكن لتطبيق واحد أن يعرض أكثر من خادم MCP؟
نعم. ينشئ `s.NewServer("agents", "1.0.0")` خادمًا آخر على `/mcp/agents` بأدواته الخاصة.

### ما الفرق بين MCP عبر stdio وعبر Streamable HTTP؟
خادم stdio عملية محلية يشغّلها العميل، ويناسب أدوات التطوير. أما خادم Streamable HTTP فيعمل عن بُعد خلف رابط، فيمكن نشره ومشاركته وحمايته بالمصادقة.

## الخطوة التالية

- [إضافة web-mcp](/ar/plugins/web-mcp)
- [ToGO أم Gin وEcho وFiber](/ar/blog/togo-vs-gin-echo-fiber)
- [ابدأ مع ToGO](/ar/docs)

تريد أن يستخدم وكلاء الذكاء الاصطناعي منتجك بأمان؟ أبني خوادم MCP وتكاملات الوكلاء. [تواصل معي](https://fadymondy.com/ar/contact?utm_source=to-go&utm_medium=referral&utm_campaign=seo-content-oct26).

---

Source: https://to-go.dev/ar/blog/go-mcp-server-togo-web-mcp
