# Shager في OpenAI Codex: ملف config.toml و‏bearer_token_env_var وقائمة أدوات تُبقي المسودات مسودات

_2026-08-20 · اضبط خادم MCP البعيد لـ Shager في Codex CLI عبر config.toml أو codex mcp add، واقرأ المفتاح من متغير بيئة، وقيّد الأدوات، وأنشئ أول مسودة._

لربط Shager بـ Codex CLI من OpenAI، أضف جدول `[mcp_servers.shager]` إلى `~/.codex/config.toml` يتضمن `url = "https://app.shager.ai/api/mcp"` و`bearer_token_env_var = "SHAGER_API_KEY"`، ثم صدّر مفتاح `shgr_live_` الخاص بك في هذا المتغير. يتعامل Codex مع streamable HTTP بشكل أصلي ويرسل المفتاح كرمز bearer، فلا حاجة إلى جسر أو عملية محلية. ويمكنك أيضًا فعل ذلك في سطر واحد: `codex mcp add shager --url ... --bearer-token-env-var SHAGER_API_KEY`.

بقية هذا الدليل عن فعل ذلك بطريقة لن تندم عليها: إبقاء المفتاح خارج الملف، وتحديد أدوات Shager التي يستطيع Codex استدعاءها، واختيار أول مهمة تثبت أن التوصيل سليم.

## ماذا يدعم Codex في خوادم MCP البعيدة؟

تصف [وثائق MCP في Codex](https://developers.openai.com/codex/mcp) من OpenAI خوادم streamable HTTP التي تُضبط عبر `url`، إضافة إلى ثلاث طرق للمصادقة بالترويسات. ويعرّفها [مرجع الإعدادات](https://developers.openai.com/codex/config-reference) كما يلي:

| المفتاح | ماذا يفعل |
|---|---|
| `bearer_token_env_var` | اسم متغير بيئة تُرسل قيمته كرمز bearer |
| `http_headers` | ترويسات ثابتة تُضاف إلى كل طلب |
| `env_http_headers` | ترويسات تُقرأ قيمها من متغيرات البيئة |

يتوقع Shager ‏`Authorization: Bearer shgr_live_...`، وهذا بالضبط ما ينتجه `bearer_token_env_var`. هذا هو الخيار الذي تستخدمه.

## الخيار A: تعديل config.toml

افتح `~/.codex/config.toml` وأضف:

```toml
[mcp_servers.shager]
url = "https://app.shager.ai/api/mcp"
bearer_token_env_var = "SHAGER_API_KEY"
```

ثم ضع المفتاح في ملف تعريف الصدفة، لا في ملف TOML:

```bash
export SHAGER_API_KEY="shgr_live_your_key_here"
```

لاحظ أن ملف الإعداد يحمل اسم المتغير لا المفتاح نفسه. يعني ذلك أنك تستطيع رفع هذا المقطع إلى المستودع أو مشاركته بحرية، ويضع كل زميل مفتاحه الخاص. وتخصيص مفتاح لكل شخص يؤتي ثماره لاحقًا، لأن سجل التدقيق في Shager على https://app.shager.ai/dashboard/agents يسجّل كل استدعاء باسم المفتاح الذي نفّذه.

## الخيار B: ‏codex mcp add

يكتب سطر الأوامر الجدول نفسه نيابة عنك. تعرّف شيفرة Codex المصدرية للأمر `codex mcp add` الخيار `--url` لخوادم streamable HTTP، والخيار `--bearer-token-env-var` الذي يتطلبه ([mcp_cmd.rs على GitHub](https://github.com/openai/codex/blob/main/codex-rs/cli/src/mcp_cmd.rs)):

```bash
codex mcp add shager \
  --url https://app.shager.ai/api/mcp \
  --bearer-token-env-var SHAGER_API_KEY
```

إذا كان الإصدار المثبت لديك مختلفًا، فالمرجع الموثوق هو `codex mcp add --help`.

تحقق من النتيجة:

```bash
codex mcp list
```

وداخل واجهة Codex في الطرفية، يعرض `/mcp` الخوادم النشطة وأدواتها.

## هل تستخدم http_headers بدلًا من ذلك؟

يمكنك ذلك، لكن لا تفعل. الصيغة `http_headers = { "Authorization" = "Bearer shgr_live_..." }` تعمل، لكنها تضع بيانات اعتماد حية في ملف نصي عادي يميل إلى أن يُنسخ إلى مستودعات ملفات الإعداد الشخصية. وإذا احتجت إلى ترويسة غير رمز bearer، فإن `env_http_headers` يربط اسم الترويسة باسم متغير بيئة:

```toml
[mcp_servers.shager]
url = "https://app.shager.ai/api/mcp"
env_http_headers = { "Authorization" = "SHAGER_AUTH_HEADER" }
```

بهذه الصيغة يجب أن يحتوي المتغير على القيمة كاملة، بما فيها المخطط: `export SHAGER_AUTH_HEADER="Bearer shgr_live_..."`. أما مع Shager، فإن `bearer_token_env_var` أبسط ويؤدي الغرض نفسه.

## كيف تحدّ مما يستطيع Codex فعله في Shager؟

هذا هو الجزء الذي تتجاهله معظم أدلة الإعداد. يتيح لك Codex تصفية أدوات الخادم عبر `enabled_tools` (قائمة سماح) و`disabled_tools` (قائمة منع تُطبَّق بعدها)، وكلاهما موثق في مرجع الإعدادات. اجمع ذلك مع نطاقات المفاتيح في Shager، فتحصل على طبقتين تُغلقان الباب عند أي خلل.

هذا ملف تعريف للمسودات يستطيع قراءة كل شيء وإنشاء مسودات، لكنه لا يستطيع الجدولة أو الإلغاء أو إنشاء روابط ربط:

```toml
[mcp_servers.shager]
url = "https://app.shager.ai/api/mcp"
bearer_token_env_var = "SHAGER_API_KEY"
enabled_tools = [
  "whoami",
  "list_workspaces",
  "list_channels",
  "list_groups",
  "upload_media_from_url",
  "create_post",
  "get_post",
  "list_posts",
  "get_analytics",
]
tool_timeout_sec = 120
```

تبقى `create_post` في القائمة لأنها من دون `schedule_at` تحفظ مسودة فقط. وإذا كان المفتاح أيضًا بلا النطاق `publish`، فإن Shager يرفض أي `create_post` يتضمن `schedule_at` برمز 403، فلا يستطيع حتى نموذج مبدع أن يمرر منشورًا مجدولًا خلسة.

أما رفع `tool_timeout_sec` فسببه أن `upload_media_from_url` ينزّل الملف على الخادم، وقد يستغرق فيديو عمودي كبير أكثر من 60 ثانية، وهي المهلة الافتراضية المذكورة في المرجع.

## أول مهمة تستحق التشغيل

ابدأ بتعليمات تلمس عدة أدوات ولا تترك وراءها إلا مسودة:

```text
Use the shager MCP server.
1. whoami, then list_workspaces.
2. In workspace "Lakeside Realty", list_channels and list_groups.
3. upload_media_from_url https://example.com/media/open-house.jpg
4. create_post as a draft to group "All agents" with a different caption per
   channel (per_channel), mentioning each agent's neighborhood from the channel
   name. cta_url https://lakesiderealty.example/open-house, campaign
   "open-house-oct", first_comment "Details and RSVP: " followed by the link.
5. get_post and print a table of channel, network, format and state.
```

ما يجب أن تراه: منشورًا بحالة `DRAFT` له وجهة واحدة لكل حساب، ولكل وجهة صيغتها المحددة لتلك الشبكة. في Shager، يحصل كل حساب على رابط قصير ووسوم UTM خاصة به لـ `cta_url`، مع `utm_content` الذي يحمل اسم الحساب، وهذا ما يجعل نسب النتائج إلى كل حساب ممكنًا لاحقًا. التفاصيل في [نسب العملاء المحتملين إلى كل حساب](/ar/blog/utm-per-account-lead-attribution).

## هل يستطيع Codex تشغيل ذلك دون إنسان أمام لوحة المفاتيح؟

لدى Codex وضع غير تفاعلي هو `codex exec` للسكربتات وأنظمة CI. لكن سلوك الموافقة على أدوات MCP في التشغيل دون واجهة تغيّر بين الإصدارات، فاختبر تشغيلًا تجريبيًا على الإصدار المثبت لديك قبل أن تضعه على مؤقت. وللمهام التي يجب أن تعمل كل أسبوع دون إشراف، تتخطى فرق كثيرة طبقة الدردشة وتستدعي REST API في Shager من سكربت قصير، لا توجد فيه نوافذ موافقة قد يعلق عندها. أيًا كان اختيارك، خصص للمهمة مفتاحًا خاصًا بها، وأبقِ قائمة الأدوات المسموحة ضيقة، وقرّر عن وعي هل يحمل هذا المفتاح `publish` أم لا. روتين مبني على هذه الاختيارات مشروح في [روتين التوزيع الأسبوعي](/ar/blog/skill-weekly-distribution-routine).

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

| ما تراه | السبب | الحل |
|---|---|---|
| 401 `unauthorized` | المتغير غير مُصدَّر في الصدفة التي شغّلت Codex | نفّذ `echo $SHAGER_API_KEY` في الطرفية نفسها، ثم أعد تشغيل Codex |
| أدوات غائبة عن `/mcp` | الاسم غير موجود في `enabled_tools`، أو مدرج في `disabled_tools` | قارن الكتابة بقائمة الأدوات في [/ar/agents](/ar/agents) |
| 403 `sandbox_unclaimed` | المفتاح جاء من تسجيل الوكيل الذاتي ولم يتولَّ أي شخص ملكيته | أرسل `claim_url` إلى شخص من الفريق |
| 403 `forbidden` عند الجدولة | المفتاح بلا `publish` | سلوك متوقع لمفتاح مخصص للمسودات |
| 429 `rate_limited` | أكثر من 120 طلبًا في الدقيقة لكل مفتاح | استخدم المجموعات واستدعاء `create_post` واحدًا بدل استدعاء لكل حساب |

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

### هل يحتاج Codex إلى OAuth للتواصل مع Shager؟

لا. يدعم Codex رموز bearer من متغير بيئة، ويقبل Shager مفتاح API بهذه الطريقة. ويدعم خادم MCP في Shager تسجيل الدخول عبر OAuth أيضًا، كما يدعم Codex خوادم OAuth، فتسجيل الدخول خيار متاح إن كنت تفضّل ألا تدير مفتاحًا.

### هل يختلف إعداد Shager في إضافة Codex لبيئات التطوير؟

تقول وثائق MCP من OpenAI إن تطبيق ChatGPT لسطح المكتب وCodex CLI وإضافة بيئة التطوير تتشارك هذا الإعداد، فالجدول نفسه في `~/.codex/config.toml` يخدمها جميعًا. تأكد من أن متغير البيئة مرئي لعملية المحرر، وقد يعني ذلك على macOS تشغيل المحرر من الطرفية.

### هل يمكنني توجيه Codex إلى REST API بدل MCP؟

نعم، إذا كنت تكتب شيفرة لا تدردش. يصف [مستند OpenAPI](https://app.shager.ai/api/v1/openapi.json) العمليات نفسها التي تقدمها أدوات MCP، بالنطاقات والحدود نفسها.

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

بعد ربط Codex، تعرّف جيدًا إلى العمليات نفسها قبل أتمتة أي شيء. يمر [دليل البدء السريع لـ REST API](/ar/blog/shager-rest-api-quickstart) على التسلسل كاملًا، من مساحة العمل إلى المنشور المُتتبَّع، باستخدام curl وPython، وهذا يساعدك أيضًا على فهم ما يفعله Codex حين يستدعي أدوات MCP.

---
Source: https://shager.ai/ar/blog/connect-shager-to-codex
