Bosphorus

← Bilgi bankası

Kendi anahtarlarınız OpenBao'da: Context7 ve O'Reilly

Yönetici Context7 ve O'Reilly'yi bir kez bağlar; herkes kendi anahtarını kendi OpenBao klasöründe tutar, My variables'tan ya da OpenBao'dan girer.

AraçlarMy variablesOpenBaoGüvenlikÜrün üzerinde doğrulandığı tarih:

Pek çok geliştirici iki araç sunucusuna zaten doğrudan düzenleyicisinden ulaşıyor: güncel kütüphane belgeleri için Context7, kitaplar, videolar ve eğitimler için O’Reilly. Her ikisi de kişisel bir anahtar ister; bu yüzden herkesin .mcp.json dosyasında bir tane bulunur:

"oreilly": {
  "type": "http",
  "url": "https://api.oreilly.com/api/content-discovery/v1/mcp/",
  "headers": {
    "Authorization": "Bearer ${OREILLY_MCP_TOKEN}"
  }
},
"context7": {
  "type": "http",
  "url": "https://mcp.context7.com/mcp",
  "headers": {
    "CONTEXT7_API_KEY": "${CONTEXT7_API_KEY}"
  }
}

Bu yöntem tek bir makinedeki tek bir kişi için işe yarar. Sohbet çalışma alanına, ajanlara ya da bir iş arkadaşına hiçbir şey kazandırmaz ve anahtar bir ortam değişkeninde ya da bir dosyada durur. Bu makale iki sunucuyu da platformun arkasına taşır. Yönetici her birini bir kez bağlar. Herkes kendi anahtarını kendi OpenBao klasöründe tutar, konsoldan ya da OpenBao’dan girip değiştirir ve anahtar yalnızca o kişinin kendi çağrılarında dışarı çıkar. Hiçbir zaman bir sohbette, bir yapılandırma dosyasında ya da ortak bir hesapta bulunmaz.

Aşağıdaki her adım 27 Eylül 2026’da canlı bir sistemde yapıldı. Ekran görüntüleri gerçektir; adlar ve adresler değiştirilmiştir.

Kim ne yapar

Adım Kim Nerede
Sunucuyu kaydetmek Yönetici Konsol, /mcp → Register a server
Değişkeni o sunucu üzerinde tanımlamak Yönetici Konsol, /mcp → Variables
Kendi anahtarını kaydetmek, ardından Sync tools Yönetici My variables (/vault), ardından /mcp
Kendi anahtarını kaydetmek, kontrol etmek ve değiştirmek Herkes, kendisi için My variables, OpenBao web arayüzü ya da bao komut satırı

Kişiler sunucu kaydedemez ve değişken tanımlayamaz: bu adımların her biri platformun trafiği ve kimlik bilgilerini nereye göndereceğine karar verir. Kişilerin elinde olan, kendi anahtarlarıdır.

Anahtarınız nerede durur

Her kişinin değerleri, kv gizli kayıt motorundaki (KV sürüm 2) tek bir klasörde durur:

kv/
└── users/
    └── ayse.demir@corp.example/
        └── mcp/
            ├── context7    CONTEXT7_API_KEY
            └── oreilly     OREILLY_MCP_TOKEN

kv/users/<e-posta>/mcp/<sunucu> yolunu parça parça okuyun:

Parça Nedir Neye dikkat edilmeli
kv Gizli kayıt motoru Her zaman kv
users/<e-posta> Kişisel kasanız Adresiniz, oturum açtığınız hesapta yazıldığı biçimiyle birebir, büyük-küçük harf dahil. bao token lookup bunu meta.email olarak gösterir
mcp Platformun okuduğu tek klasör Kasanızın başka bir yerinde tuttuğunuz her şey yalnızca size aittir ve hiçbir yere gönderilmez
<sunucu> Her araç sunucusu için bir gizli kayıt Sunucunun /mcp sayfasında parantez içinde görünen kısa adı (slug), örneğin oreilly (oreilly)
içindeki anahtar Tanımlanan her değişken için bir anahtar Değişkenin adı, birebir ve büyük harflerle: CONTEXT7_API_KEY, OREILLY_MCP_TOKEN

Yol hakkında iki şey daha:

Bölüm A: yönetici

A1. .mcp.json dosyanızda zaten yazanlardan başlayın

Yukarıdaki .mcp.json dosyasındaki her girdi, konsol formlarındaki bir soruyu yanıtlar:

.mcp.json içinde Konsolda
Girdinin adı, oreilly Name. Sunucunun kısa adı olur; bu aynı zamanda OpenBao gizli kaydının adıdır. Birebir aynı tutun
url URL (streamable HTTP endpoint)
Başlığın adı Değişkenin Header alanı
Başlık değerinde ${…} çevresindeki metin Değişkenin Template alanı; anahtarın geleceği yerde ${value} olacak biçimde
${…} içindeki ad Kişilerin göreceği Variable adı

Kısa ad, sunucu kaydedildiği anda sabitlenir. Ad zaten kullanılıyorsa platform sonuna -2 ekler ve OpenBao klasörü kısa adı izler; bu yüzden kişilere anahtarlarının nerede durduğunu söylemeden önce /mcp sayfasındaki parantezlere bakın.

A2. Her sunucuyu kaydedin

/mcp → Register a server bölümünde adı ve URL’yi girin, Auth alanını none bırakın (paylaşılan bir anahtar yok: herkes kendi anahtarını getirir) ve require user (signed assertion) kutusunu işaretleyin. Ardından Register & sync düğmesine basın.

/mcp sayfasında context7 kaydı: ad context7, Context7 URL’si, auth none, require user işaretli

Context7 anahtarsız da yanıt verir, bu yüzden araçları hemen görünür. O’Reilly belirteci olmayan herkesi geri çevirir; bu yüzden ilk eşitleme başarısız olur ve satır, sonra ne yapılacağını açıkça söyler:

Kayıttan hemen sonra oreilly satırı: durum error, initialize sırasında mcp http 401 ve kişi başına bir değişken tanımlama talimatı

Bu beklenen bir durumdur. Sonraki iki adım bunu düzeltir.

A3. Değişkeni tanımlayın ve önce sunucuyu seçin

/mcp → Variables → Declare a variable formunda ilk alan Server alanıdır. Bu değişkenle ilgili geri kalan her şeyi o belirler:

Declare a variable: Server oreilly (vurgulu), değişken OREILLY_MCP_TOKEN, teslim header, başlık Authorization, şablon Bearer ${value}, required ve secret işaretli

Formun geri kalanı doğrudan .mcp.json dosyasındaki başlık satırından gelir:

Sunucu Değişken Teslim Başlık Şablon Zorunlu Gizli
context7 CONTEXT7_API_KEY header CONTEXT7_API_KEY (boş: değerin kendisi) evet evet
oreilly OREILLY_MCP_TOKEN header Authorization Bearer ${value} evet evet

Her biri için bir açıklama yazın; kişiler bunu kendi sayfalarında okur. Declare düğmesinden sonra her iki sunucu da değişkenini ve nereye teslim edildiğini gösterir:

Variables sekmesi: context7 CONTEXT7_API_KEY değerini olduğu gibi, oreilly OREILLY_MCP_TOKEN değerini Authorization başlığına Bearer ${value} olarak teslim ediyor

Platformun sizin için zorunlu tuttuğu kurallar: kişiler yalnızca değer girer, hiçbir zaman başlık ya da şablon seçmez; taşıma başlıkları ve platformun kendi başlıkları hedef başlık olarak seçilemez; bir kişinin kaydetmediği zorunlu bir değişken, araç sunucusuna hiçbir şey ulaşmadan o kişinin çağrısını durdurur ve kendi sayfasına bir bağlantı verir.

A4. Kendi anahtarınızı kaydedin, ardından Sync tools

Paylaşılan anahtarı olmayan bir sunucu, araçlarını anonim olarak listelemeyi bile reddeder. Bu yüzden Sync tools, düğmeye basan yöneticinin kendi değeriyle çalışır. Önce kendi O’Reilly belirtecinizi My variables sayfasına kaydedin (aşağıdaki B1 adımı), ardından satırdaki Sync tools düğmesine basın:

Sync tools sonrasında oreilly satırı: durum ok, bir araç, search_oreilly_content

Önbelleğe alınan araç listesi, sizin belirtecinizin görebildiği listedir. Herkesin çağrıları yine kendi belirtecini taşır.

Varsayılan olarak bir sunucu, izin verilen ekiplerin oturum açmış bütün kullanıcılarına açıktır. Yalnızca bazı kişilerin ulaşması gereken bir sunucuda Access alanını granted yapıp o kişileri ekleyin. GitHub makalesi aynı adımları üçüncü bir hizmet için anlatır.

Bölüm B: herkes, kendisi için

B1. Anahtarınızı My variables sayfasına kaydedin

Konsolda oturum açın ve My variables (/vault) sayfasını açın. Zorunlu anahtarını henüz kaydetmediğiniz bir sunucu bunu söyler:

Kaydetmeden önce My variables: oreilly için 1 required not set, bir giriş alanı ve Save düğmesi

Anahtarınızı yapıştırıp Save düğmesine basın. Satır artık set, kısa bir parmak izi ve in OpenBao gösterir. Değer bir daha hiç gösterilmez, size bile. Sonradan değiştirmek için yeni anahtarı yazıp Replace düğmesine basın; parmak izi değişir.

Sayfanın üstündeki kutu klasörünüzün adını verir ve ona bağlantı içerir:

My variables: kv/users/ayse.demir@corp.example/mcp/ klasörü, OpenBao’da açma bağlantısı, context7 ve oreilly ikisi de kayıtlı

B2. OpenBao’da kontrol edin

open my folder in OpenBao bağlantısını açın. Yöntem olarak OIDC seçin, Role alanını boş bırakın ve konsolda kullandığınız şirket hesabıyla oturum açın. Bir yönetici de bunun için rolü boş bırakmalıdır: yönetici rolü kasayı işletmek içindir, kişisel anahtarlar için değil.

OpenBao oturum açma: yöntem OIDC, rol boş, Sign in with OIDC Provider

Bağlantı klasörünüzdeki mcp/ klasörünü açar. Her sunucu için bir gizli kayıt vardır:

OpenBao’da users/ayse.demir@corp.example/mcp klasörü: context7, envkit, github ve oreilly

Birini açın. İçinde değişkenle birebir aynı adı taşıyan tek bir anahtar vardır; değeri siz gösterene kadar maskelidir:

users/ayse.demir@corp.example/mcp/context7 gizli kaydı: CONTEXT7_API_KEY anahtarı, değer maskeli, sürüm 1

B3. OpenBao’da değiştirin

Gizli kayıtta Create new version düğmesine basın, değeri değiştirin ve Save düğmesine basın. Anahtarın adını olduğu gibi bırakın; kayıtta birden fazla anahtar varsa diğer satırları silmeyin: yeni sürüm gizli kaydın tamamıdır.

Create new version: CONTEXT7_API_KEY anahtarı, değer maskeli, Save ve Cancel

Konsolda ayrıca kaydetmeniz gereken bir şey yoktur. Platform klasörünüzü her çağrıda yeniden okur; bir sonraki çağrı yeni anahtarı kullanır ve My variables yeni parmak izini ve zamanı gösterir:

OpenBao’daki değişiklikten sonra My variables: yeni parmak izi ve güncellenmiş zaman

OpenBao’ya yazılan bir anahtar, konsoldan kaydedilen bir anahtarla birebir aynı biçimde denetlenir: satır sonu içeremez, en çok 8 KiB olabilir ve değişkenin biçimine uymalıdır. Uymayan bir değer gönderilmez, kullanılamaz olarak reddedilir. Sunucunun tanımlamadığı bir adla eklediğiniz anahtar saklanır ama hiçbir zaman gönderilmez.

B4. Aynısı komut satırından

bao istemcisini kasanıza yöneltin ve oturum açın; şirket hesabıyla oturum açma bir tarayıcı penceresinde tamamlanır:

export BAO_ADDR=https://vault.corp.example
bao login -method=oidc
bao token lookup

bao token lookup, klasörünüzün adını meta.email olarak gösterir. Klasörünüzü listeleyin, bir gizli kaydı okuyun ve sürümlerini görün:

bao kv list kv/users/ayse.demir@corp.example/mcp
bao kv get kv/users/ayse.demir@corp.example/mcp/context7
bao kv metadata get kv/users/ayse.demir@corp.example/mcp/context7

Tek bir anahtarı değiştirmek için patch kullanın ve değeri standart girişten verin; böylece kabuk geçmişinize hiç düşmez (read -rs yapıştırdığınızı ekranda göstermez):

read -rs NEWKEY
printf '%s' "$NEWKEY" | bao kv patch kv/users/ayse.demir@corp.example/mcp/context7 CONTEXT7_API_KEY=-
unset NEWKEY

Tek bir anahtarı değiştirmek için bao kv put kullanmayın. put gizli kaydı baştan yazar: adını vermediğiniz her anahtar silinir. patch yalnızca adını verdiğiniz anahtarları değiştirir. Birden fazla değişkeni olan bir sunucuda bu fark önemlidir.

Her komutun canlı kasada bir üyeye verdiği yanıt:

Komut Sonuç
bao token lookup meta.email = adresiniz; politikalar default ve personal
bao kv list …/mcp context7, envkit, github, oreilly
bao kv list kv/users/ 403: kimin kasası olduğunu kimse listeleyemez
bao kv get …/mcp/context7 CONTEXT7_API_KEY ve değeri, sürüm 2
bao kv metadata get …/mcp/context7 zamanlarıyla birlikte sürüm 1 ve 2
İki anahtarlı bir kayıtta tek anahtarla put diğer anahtar gitmişti
İki anahtarlı bir kayıtta tek anahtarla patch diğer anahtar korunmuştu

Düzenleyicinizden kullanın

İki sunucu da platforma alındıktan sonra .mcp.json dosyanız artık kimsenin anahtarını taşımaz. Dosya platformun aktarıcısını gösterir ve kişisel platform anahtarınızı gönderir; aktarıcı Context7 ya da O’Reilly anahtarınızı çıkışta klasörünüzden ekler:

"context7": {
  "type": "http",
  "url": "https://ai.corp.example/api/mcp/context7",
  "headers": {
    "Authorization": "Bearer ${BOSPHORUS_KEY}"
  }
},
"oreilly": {
  "type": "http",
  "url": "https://ai.corp.example/api/mcp/oreilly",
  "headers": {
    "Authorization": "Bearer ${BOSPHORUS_KEY}"
  }
}

ai.corp.example yerine platformunuzun adresini yazın. Her URL’nin son parçası sunucunun kısa adıdır. Sohbet çalışma alanı, düzenleyici eklentisi ve ajanlar aynı sunuculara aynı yoldan, her seferinde soran kişinin anahtarıyla ulaşır. VS Code için aimo eklentisinde bir dosyaya eklenecek hiçbir şey yoktur: oturum açtığınızda aynı sunuculara aktarıcı üzerinden ulaşır ve Vault görünümü değişkenlerinizi aynı klasöre yazar.

Platformun anahtarınız hakkında verdiği sözler

Bir şey yolunda gitmediğinde

Durum Ne yapmalı
This tool needs your own OREILLY_MCP_TOKEN … Anahtarınızı My variables sayfasına kaydedin; ileti oraya bağlantı verir.
Sync tools mcp http 401 gösteriyor Düğmeye basan yönetici kendi anahtarını henüz kaydetmedi (A4).
OpenBao users/ için permission denied diyor Beklenen durum: kimse başkalarının kasalarını listeleyemez. Klasörünüzü tam yoluyla ya da konsolun bağlantısıyla açın.
OpenBao’ya yazdığınız anahtar kullanılmıyor Gizli kaydın adının sunucunun kısa adı, anahtarın adının büyük harflerle değişkenin adı olduğunu ve yoldaki e-postanın bao token lookup çıktısıyla birebir aynı olduğunu kontrol edin.
My variables değeri kullanılamaz gösteriyor Değer bir kurala uymuyor (satır sonu, 8 KiB’tan uzun, yanlış biçim). Temiz bir değerle yeni bir sürüm oluşturun.
put kullandınız ve diğer anahtarlar gitti OpenBao’da önceki sürümü açın, eksik değerleri kopyalayın ve bütün anahtarlarla yeni bir sürüm oluşturun.
could not be read from the vault just now OpenBao kısa bir süre için ulaşılamıyor. Bir dakika sonra yeniden deneyin; sürerse yöneticinize bildirin.
Şirketten ayrılıyorsunuz Değerlerinizi My variables sayfasından silin ya da bir yöneticiden silmesini isteyin.