# חיבור שַׁגֵּר אל Codex CLI: שלוש שורות בקובץ config.toml ומפתח שלא נכנס לקובץ

_2026-08-18 · איך מגדירים את שרת MCP של שַׁגֵּר בכלי Codex CLI של OpenAI: בלוק mcp_servers בקובץ config.toml, bearer_token_env_var במקום מפתח גלוי, הגדרה לפרויקט ובדיקה עם /mcp._

כדי לחבר את שַׁגֵּר אל Codex CLI מוסיפים לקובץ `~/.codex/config.toml` בלוק בשם `[mcp_servers.shager]` עם `url = "https://app.shager.ai/api/mcp"` ועם `bearer_token_env_var = "SHAGER_API_KEY"`. מגדירים את משתנה הסביבה `SHAGER_API_KEY` עם המפתח של שַׁגֵּר, מפעילים את `codex` ומקלידים `/mcp` כדי לראות שהשרת פעיל. Codex שולח את המפתח בכותרת `Authorization` בתור Bearer, וזה בדיוק מה שֶׁשַּׁגֵּר מצפה לקבל.

בניגוד לחלק מהכלים, Codex תומך בשרתי MCP מרוחקים עם Streamable HTTP ועם טוקן ממשתנה סביבה באופן מובנה, כך שאין צורך בגשרים או בעקיפות. זה הופך אותו לאחת הדרכים הנקיות ביותר להריץ סוכן OpenAI מול שַׁגֵּר כבר היום, כל עוד OAuth של שַׁגֵּר בפיתוח.

## למה דווקא config.toml ולא פקודה?

בכלי Claude Code רוב העבודה נעשית בפקודת `claude mcp add`. גם בכלי Codex יש פקודה דומה, `codex mcp add`, והיא מקבלת `--url` לשרתים מרוחקים. אבל [עמוד MCP בתיעוד של Codex](https://developers.openai.com/codex/mcp) מתעד את אפשרויות האימות לשרתי HTTP בתוך קובץ ההגדרות ולא כדגלים של הפקודה. לכן הדרך הבטוחה והברורה היא לערוך את הקובץ ישירות.

לפי אותו עמוד, שרת Streamable HTTP מקבל את השדות הבאים:

| שדה | חובה | מה הוא עושה |
|---|---|---|
| `url` | כן | כתובת השרת |
| `bearer_token_env_var` | לא | שם משתנה סביבה שהערך שלו נשלח בתור Bearer בכותרת Authorization |
| `http_headers` | לא | כותרות עם ערכים קבועים |
| `env_http_headers` | לא | כותרות שהערך שלהן נלקח ממשתני סביבה |

## ההגדרה המלאה לְשַׁגֵּר

פותחים את `~/.codex/config.toml` ומוסיפים:

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

ובקובץ ההגדרות של המעטפת (shell) שלכם, למשל `~/.zshrc`:

```bash
export SHAGER_API_KEY="shgr_live_XXXXXXXXXXXXXXXX"
```

זהו. אין צורך לכתוב את המילה Bearer בעצמכם, Codex מוסיף אותה. היתרון של `bearer_token_env_var` על פני `http_headers` עם ערך קבוע הוא שהמפתח לא יושב בקובץ ההגדרות. זה חשוב כשאתם מגבים את תיקיית הבית, מסנכרנים dotfiles לריפו, או סתם משתפים צילום מסך של הקונפיגורציה בערוץ של הצוות.

### מתי בכל זאת להשתמש בשדה http_headers?

כמעט אף פעם, בהקשר של שַׁגֵּר. שַׁגֵּר צריך כותרת אחת בלבד, `Authorization`, והשדה `bearer_token_env_var` מכסה אותה. אם בעתיד תעבדו דרך שער פנימי של החברה שדורש כותרת ניתוב נוספת, זה המקום להוסיף אותה, ורצוי עם `env_http_headers` כדי שגם היא לא תישמר כטקסט גלוי.

## הגדרה לפרויקט ספציפי

התיעוד של Codex מאפשר גם להגדיר שרתי MCP ברמת הפרויקט, בקובץ `.codex/config.toml` בתוך הריפו, בתנאי שהפרויקט מסומן כמהימן. לסוכנות שמחזיקה ריפו לכל לקוח גדול, זה נוח: בריפו של הלקוח מוגדר שרת שַׁגֵּר, ובריפו אחר לא.

כדאי לשלב את זה עם מפתח נפרד לכל לקוח. בְּשַׁגֵּר כל לקוח הוא סביבת עבודה (workspace), ומפתחות נוצרים ברמת הארגון. אם תרצו להפריד ברמת המפתח, צרו מפתח ייעודי לכל פרויקט בכתובת `https://app.shager.ai/dashboard/agents` ותנו לכל ריפו משתנה סביבה משלו, למשל `SHAGER_API_KEY_CLIENT_A`. ביומן הביקורת תוכלו לראות איזה מפתח ביצע כל פעולה.

## בדיקה ראשונה

מפעילים `codex` בטרמינל שבו משתנה הסביבה מוגדר, ומקלידים `/mcp`. השרת `shager` צריך להופיע ברשימת השרתים הפעילים עם הכלים שלו. אם הוא לא שם, שתי הסיבות הנפוצות הן שהמשתנה לא נטען בחלון הנוכחי, או שגיאת TOML קטנה כמו מירכאות חסרות.

אחרי זה, בקשה ראשונה:

```text
Use the shager MCP server. Run whoami and list_workspaces,
then list_channels for the first workspace. Summarize which
Facebook Pages, Instagram accounts and YouTube channels are connected.
```

אפשר כמובן לכתוב לסוכן בעברית. כתבתי כאן באנגלית כי הרבה צוותים מעדיפים את ההנחיות הטכניות לסוכן באנגלית ואת התוכן עצמו בעברית. מה שחשוב הוא שהסוכן יחזיר רשימה שתואמת את מה שאתם רואים בְּשַׁגֵּר.

### כשמשהו לא עובד

| מה רואים | מה כנראה קרה | מה עושים |
|---|---|---|
| השרת לא מופיע בפקודה `/mcp` | שגיאת תחביר בקובץ TOML או שם בלוק שגוי | בודקים שהכותרת היא בדיוק `[mcp_servers.shager]` |
| השרת מופיע, הקריאות נכשלות על אימות | המשתנה ריק בחלון הנוכחי | מריצים `echo $SHAGER_API_KEY` באותו טרמינל |
| `create_post` עובד, `schedule_post` נכשל | למפתח אין `publish` או שה sandbox לא אושר | אדם מאשר או יוצר מפתח עם הרשאה מתאימה |
| הודעת שגיאה עם הקוד `rejected` | הרשת הייתה דוחה את הפוסט | קוראים את הודעת השגיאה (message) ומתקנים פורמט, אורך או מדיה |

השגיאות של שַׁגֵּר חוזרות תמיד עם `code` וגם `message` קריאים. סוכן טוב יודע לקרוא את ההודעה, לתקן ולנסות שוב, ולא רק לדווח שהייתה תקלה. שווה לכתוב לו את זה במפורש בהנחיות.

## איפה Codex חזק במיוחד בעבודה מול שַׁגֵּר

Codex הוא סוכן קוד, והוא מרגיש הכי בבית כשהעבודה יושבת בריפו. שני דפוסים שעובדים טוב:

1. **תוכן כקבצים.** מחזיקים בריפו תיקייה עם קובץ Markdown לכל קמפיין: בריף, מסרים, קישור לדף נחיתה ורשימת קבוצות חשבונות. מבקשים מהסוכן Codex לקרוא את הקובץ, לנסח כיתוב שונה לכל חשבון ולהעלות טיוטה אחת לְשַׁגֵּר עם `create_post` והשדה `per_channel`. הבריף נשאר בהיסטוריית git, והטיוטה מחכה בְּשַׁגֵּר לבדיקה.
2. **דף נחיתה ואז הפצה.** Codex בונה או מעדכן דף נחיתה בקוד, ואחרי שהוא עולה, אותו סוכן מכין פוסט שהקישור שלו מופיע בשדה `cta_url`. שַׁגֵּר יוצר לכל חשבון קישור מקוצר ותגיות UTM משלו, כך שאחרי שבוע אפשר לבקש מהסוכן Codex להריץ `get_analytics` ולראות מאיזה עמוד הגיעו הלחיצות.

אם אתם מעדיפים לכתוב את כל הזרימה כקוד ולא דרך שרת MCP, אותן פעולות זמינות בממשק REST API, וקובץ OpenAPI נמצא בכתובת [https://app.shager.ai/api/v1/openapi.json](https://app.shager.ai/api/v1/openapi.json). זה שימושי במיוחד בסביבת CI, כשאין סוכן אינטראקטיבי אלא סקריפט שרץ לפי לוח זמנים.

## כמה כללי בטיחות שכדאי להגדיר מראש

את הגבול האמיתי כדאי לשים בצד של שַׁגֵּר ולא רק בהגדרות האישור של הסוכן, כי הוא נשמר גם כשמישהו משנה את הקונפיגורציה המקומית. מפתח עם הרשאות `read` וגם `write` בלבד מאפשר לסוכן ליצור טיוטות בלי לתזמן או לפרסם. כשתרצו שהסוכן גם יתזמן, צרו מפתח חדש עם `publish`, החליפו את הערך של משתנה הסביבה, ובטלו את הישן.

שתי נקודות נוספות. המגבלה היא 120 קריאות בדקה לכל מפתח, וסוכן שמבצע `get_post` בלולאה על מאות פוסטים יכול להגיע אליה. עדיף לבקש ממנו `list_posts` עם סינון לפי סטטוס. ובנוסף, כשאתם מבקשים מהסוכן Codex לתזמן, ציינו זמן עם אזור זמן מפורש, למשל `2026-08-24T09:00:00+03:00`. שַׁגֵּר מצפה לפורמט ISO 8601 עם offset, וזה חוסך את הטעות הקלאסית של פוסט שעולה בשש בבוקר במקום בתשע.

מי שעובד גם עם Claude Code יראה שההגדרה כמעט זהה, וההבדלים מפורטים במדריך [לחיבור שַׁגֵּר אל Claude Code](/blog/connect-shager-to-claude-code). ומי שמגיע מעולם ChatGPT ותוהה למה שם זה עוד לא עובד, ההסבר נמצא במדריך [על שַׁגֵּר וגם ChatGPT](/blog/shager-and-chatgpt). התמונה הכוללת של כל הכלים שמתחברים לְשַׁגֵּר מרוכזת ב[עמוד הסוכנים](/agents).

הצעד הבא אחרי חיבור עובד הוא להחליט מה Codex עושה לבד ומה מחכה לאדם. התחילו בטיוטות בלבד, עברו על עשר הראשונות, ורק אחרי זה תנו למפתח הרשאת `publish`.

## שאלות נפוצות

### Codex CLI תומך בשרתי MCP מרוחקים?

כן. לפי התיעוד של OpenAI, Codex תומך בשרתי Streamable HTTP עם השדה `url` בקובץ `config.toml`, ומאפשר להעביר טוקן Bearer ממשתנה סביבה דרך `bearer_token_env_var`. זה מספיק לחיבור מלא לְשַׁגֵּר.

### אפשר להוסיף את שַׁגֵּר עם codex mcp add במקום לערוך קובץ?

הפקודה מקבלת `--url`, אבל התיעוד לא מציג בה דגל להעברת טוקן מסוג Bearer. לכן הדרך המומלצת היא להוסיף את הבלוק בקובץ `config.toml` ידנית, עם `bearer_token_env_var`.

### המפתח נשמר בתוך config.toml?

לא, אם משתמשים בשדה `bearer_token_env_var`. הקובץ מכיל רק את שם המשתנה, והערך נקרא מהסביבה בזמן ההפעלה. כך אפשר לשתף את קובץ ההגדרות בלי לחשוף את המפתח.

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