# OpenAI Codex'te Shager: config.toml, bearer_token_env_var ve taslakları taslak olarak tutan bir araç listesi

_2026-08-20 · Shager'ın uzak MCP sunucusunu config.toml veya codex mcp add ile Codex CLI'a ekleyin, anahtarı ortam değişkeninden okuyun, araçları sınırlayın, taslak açın._

Shager'ı OpenAI'ın Codex CLI aracına bağlamak için `~/.codex/config.toml` dosyasına `url = "https://app.shager.ai/api/mcp"` ve `bearer_token_env_var = "SHAGER_API_KEY"` içeren bir `[mcp_servers.shager]` tablosu ekleyin, ardından `shgr_live_` anahtarınızı bu değişkene dışa aktarın. Codex streamable HTTP'yi yerel olarak konuşur ve anahtarı bearer token olarak gönderir; ne bir köprüye ne de yerel bir sürece ihtiyaç vardır. Aynı işi `codex mcp add shager --url ... --bearer-token-env-var SHAGER_API_KEY` ile tek satırda da yapabilirsiniz.

Rehberin geri kalanı bunu sonradan pişman olmayacağınız şekilde yapmakla ilgili: anahtarı dosyanın dışında tutmak, Codex'in hangi Shager araçlarını çağırabileceğini sınırlamak ve bağlantının çalıştığını kanıtlayan bir ilk görev seçmek.

## Codex uzak MCP sunucuları için neleri destekliyor?

OpenAI'ın [Codex MCP dokümantasyonu](https://developers.openai.com/codex/mcp), bir `url` ile yapılandırılan streamable HTTP sunucularını ve başlıklarla kimlik doğrulamanın üç yolunu anlatır. [Yapılandırma referansı](https://developers.openai.com/codex/config-reference) bunları şöyle tanımlar:

| Anahtar | Ne yapar |
|---|---|
| `bearer_token_env_var` | Değeri bearer token olarak gönderilen ortam değişkeninin adı |
| `http_headers` | Her isteğe eklenen sabit başlıklar |
| `env_http_headers` | Değerleri ortam değişkenlerinden okunan başlıklar |

Shager `Authorization: Bearer shgr_live_...` bekler ve `bearer_token_env_var` tam olarak bunu üretir. Kullanmanız gereken seçenek bu.

## A seçeneği: config.toml dosyasını düzenleyin

`~/.codex/config.toml` dosyasını açın ve şunu ekleyin:

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

Ardından anahtarı TOML dosyasına değil, kabuk profilinize yazın:

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

Yapılandırmanın anahtarın kendisini değil, değişkenin adını tuttuğuna dikkat edin. Yani bu parçayı rahatça commit edebilir ya da paylaşabilirsiniz; her ekip arkadaşı kendi anahtarını sağlar. Kişi başına ayrı anahtar ileride kendini amorti eder, çünkü Shager'ın https://app.shager.ai/dashboard/agents adresindeki denetim kaydı her çağrıyı onu yapan anahtarla birlikte kaydeder.

## B seçeneği: codex mcp add

Aynı tabloyu CLI sizin yerinize yazar. Codex'in `codex mcp add` kaynak kodu, streamable HTTP sunucuları için `--url` seçeneğini ve onu gerektiren bir `--bearer-token-env-var` bayrağını tanımlar ([GitHub'da mcp_cmd.rs](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
```

Kurulu sürümünüz farklıysa esas alınacak kaynak `codex mcp add --help` çıktısıdır.

Sonucu kontrol edin:

```bash
codex mcp list
```

Codex TUI içinde `/mcp`, etkin sunucuları ve araçlarını gösterir.

## Bunun yerine http_headers kullanmalı mısınız?

Kullanabilirsiniz ama kullanmamalısınız. `http_headers = { "Authorization" = "Bearer shgr_live_..." }` çalışır; ancak geçerli bir kimlik bilgisini, genellikle dotfile depolarına kopyalanıp giden düz bir metin dosyasına koyar. Bearer token dışında bir başlığa ihtiyacınız varsa `env_http_headers`, bir başlık adını bir ortam değişkeni adına eşler:

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

Bu biçimde değişken, şema dahil tam değeri içermelidir: `export SHAGER_AUTH_HEADER="Bearer shgr_live_..."`. Shager için `bearer_token_env_var` daha basittir ve aynı işi görür.

## Codex'in Shager'da neler yapabileceğini nasıl sınırlarsınız?

Kurulum rehberlerinin çoğunun atladığı kısım bu. Codex, bir sunucunun araçlarını `enabled_tools` (izin listesi) ve ondan sonra uygulanan `disabled_tools` (engel listesi) ile filtrelemenize olanak tanır; ikisi de yapılandırma referansında belgelenmiştir. Bunu Shager'ın anahtar kapsamlarıyla birleştirdiğinizde, şüphe durumunda kapalı kalan iki katman elde edersiniz.

Her şeyi okuyabilen ve taslak oluşturabilen, ancak planlama, iptal ya da bağlantı linki oluşturma yapamayan bir taslak profili:

```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` listede kalıyor, çünkü `schedule_at` olmadan yalnızca taslak kaydeder. Anahtarda `publish` kapsamı da yoksa Shager, `schedule_at` içeren her `create_post` çağrısını 403 ile reddeder; böylece en yaratıcı model bile araya planlanmış bir gönderi sokamaz.

`tool_timeout_sec` değerini artırmamızın nedeni, `upload_media_from_url` aracının dosyayı sunucu tarafında indirmesi; büyük bir dikey video, referansta belirtilen varsayılan 60 saniyeden uzun sürebilir.

## Çalıştırmaya değer ilk görev

Birkaç aracı kullanan ve geride yalnızca bir taslak bırakan bir komutla başlayın:

```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.
```

Görmeniz gereken: `DRAFT` durumunda, her hesap için bir hedef içeren ve her hedefin formatı o platforma göre belirlenmiş bir gönderi. Shager'da her hesap, `cta_url` için kendi kısa linkini ve UTM etiketlerini alır; `utm_content` hesabın adını taşır. Hesap bazında ilişkilendirmeyi daha sonra mümkün kılan da budur. Ayrıntılar [hesap bazında potansiyel müşteri ilişkilendirmesi](/en/blog/utm-per-account-lead-attribution) yazısında.

## Codex bunu klavyenin başında bir insan olmadan çalıştırabilir mi?

Codex'in betikler ve CI için etkileşimsiz bir `codex exec` modu var. Arayüzsüz bir çalıştırmada MCP araç onaylarının nasıl davrandığı sürümden sürüme değişti; bu yüzden bir zamanlayıcıya bağlamadan önce kurulu sürümünüzde deneme çalıştırması yapın. Her hafta gözetimsiz çalışması gereken bir iş için pek çok ekip sohbet katmanını atlayıp Shager'ın REST API'sini kısa bir betikten çağırır; böylece takılıp kalınacak bir onay istemi olmaz. Hangisini seçerseniz seçin, işe kendi anahtarını verin, araç izin listesini dar tutun ve o anahtarın `publish` taşıyıp taşımayacağına bilinçli olarak karar verin. Bu tercihler etrafında kurulmuş bir rutini [haftalık dağıtım rutini](/en/blog/skill-weekly-distribution-routine) yazısında bulabilirsiniz.

## Sorun giderme

| Ne görüyorsunuz | Neden | Çözüm |
|---|---|---|
| 401 `unauthorized` | Değişken, Codex'i başlatan kabukta dışa aktarılmamış | Aynı terminalde `echo $SHAGER_API_KEY` çalıştırın, sonra Codex'i yeniden başlatın |
| Araçlar `/mcp` içinde görünmüyor | Ad `enabled_tools` içinde değil ya da `disabled_tools` içinde | Yazımı [/en/agents](/en/agents) sayfasındaki araç listesiyle karşılaştırın |
| 403 `sandbox_unclaimed` | Anahtar ajanın kendi kendine kaydından geldi ve henüz bir insan sahiplenmedi | `claim_url` adresini bir insana gönderin |
| Planlamada 403 `forbidden` | Anahtarda `publish` yok | Taslak anahtarı için beklenen davranış |
| 429 `rate_limited` | Anahtar başına dakikada 120'den fazla istek | Hesap başına bir çağrı yerine grupları ve tek bir `create_post` kullanın |

## SSS

### Codex'in Shager ile konuşması için OAuth gerekir mi?

Hayır. Codex ortam değişkeninden gelen bearer token'ları destekler ve Shager API anahtarını bu şekilde kabul eder. Shager'ın MCP sunucusu OAuth ile girişi de destekliyor, Codex de OAuth sunucularını destekliyor; yani anahtar yönetmek istemiyorsanız giriş yapmak da bir seçenek.

### Codex IDE eklentisinde Shager kurulumu farklı mı?

OpenAI'ın MCP dokümantasyonuna göre ChatGPT masaüstü uygulaması, Codex CLI ve IDE eklentisi bu yapılandırmayı paylaşır; yani aynı `~/.codex/config.toml` tablosu hepsine hizmet eder. Ortam değişkeninin düzenleyici sürecine görünür olduğundan emin olun; macOS'ta bu, düzenleyiciyi bir terminalden başlatmak anlamına gelebilir.

### Codex'i MCP yerine REST API'ye yönlendirebilir miyim?

Evet, sohbet etmek yerine kod yazıyorsanız. [OpenAPI belgesi](https://app.shager.ai/api/v1/openapi.json), MCP araçlarıyla aynı işlemleri aynı kapsamlar ve sınırlarla tanımlar.

## Sonraki adım

Codex bağlandıktan sonra, bir şeyi otomatikleştirmeden önce işlemlerin kendisine alışın. [REST API hızlı başlangıç](/en/blog/shager-rest-api-quickstart) rehberi, çalışma alanından takip linkli gönderiye kadar tüm sırayı curl ve Python ile adım adım gösterir; bu da Codex MCP araçlarını çağırırken ne yaptığını okumanıza yardımcı olur.

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