MCP sunucuları için bir reverse proxy ve yönetim katmanı, Kubernetes ortamlarında ölçeklenebilir, oturum farkında yönlendirme ve lifecycle yönetimi sağlar.
Claude Desktop config.json'a ekle
{
"mcpServers": {
"microsoft-mcp-gateway": {
"command": "node",
"args": [
"~/.mcp/mcp-gateway/index.js"
]
}
}
} Kaynak kodu al ve yerel olarak çalıştır
git clone https://github.com/microsoft/mcp-gateway.git ~/.mcp/mcp-gateway
cd ~/.mcp/mcp-gateway MCP Gateway, Model Context Protocol (MCP) sunucuları için bir ters proxy ve yönetim katmanıdır. Kubernetes ortamlarında MCP sunucularının ölçeklenebilir, oturum farkında yönlendirme, yetkilendirme ve yaşam döngüsü yönetimini sağlar.
Bu proje aşağıdakileri sağlar:
/adapters kapsamı altında yönetilen mantıksal kaynaklar. Birleşik bir AI geliştirme platformunda diğer kaynak türleriyle (örn. /agents) bir arada bulunmak için tasarlanmıştır.session_id ile tüm isteklerin aynı MCP sunucusu örneğine tutarlı bir şekilde yönlendirilmesini sağlar.FoundrySettings:Endpoint yapılandırılmadığı sürece devre dışıdır.flowchart LR
subgraph Clients[" "]
direction TB
DataClient["🔌 Agent/MCP<br>Data Client"]
MgmtClient["⚙️ Management<br>Client"]
end
subgraph Gateway["MCP Gateway"]
direction TB
subgraph Auth1["Authentication & Authorization"]
Auth["🔐 Data Plane Auth<br>Bearer Token / RBAC"]
Auth2["🔐 Control Plane Auth<br>Bearer Token / RBAC"]
end
subgraph DataPlane["Data Plane"]
Routing["🔀 Adapter Routing<br>/adapters/{name}/mcp"]
ToolRouting["🔀 Tool Router Gateway<br>/mcp"]
end
subgraph ControlPlane["Control Plane"]
direction LR
AdapterMgmt["📦 Adapter Management<br>/adapters CRUD"]
ToolMgmt["🔧 Tool Management<br>/tools CRUD"]
end
subgraph Management["Backend Services"]
DeploymentMgmt["☸️ Deployment Manager"]
MetadataMgmt["📋 Metadata Manager"]
end
end
subgraph Cluster["Kubernetes Cluster"]
direction TB
subgraph ServerRow[" "]
direction LR
subgraph MCPServers["MCP Servers"]
direction TB
PodA["mcp-a-0"]
PodA1["mcp-a-1"]
PodB["mcp-b-0"]
end
subgraph ToolRouters["Tool Gateway Routers"]
direction TB
Router1["toolgateway-0"]
Router2["toolgateway-1"]
end
end
subgraph ToolServers["Registered Tool Servers"]
direction LR
Tool1["tool-1-0"]
Tool2["tool-2-0"]
end
end
Metadata[("💾 Metadata Store<br>Server & Tool Info")]
DataClient -->|"MCP Requests"| Auth
MgmtClient -->|"API Calls"| Auth2
Auth --> Routing
Auth --> ToolRouting
Auth2 --> AdapterMgmt
Auth2 --> ToolMgmt
AdapterMgmt & ToolMgmt --> DeploymentMgmt
AdapterMgmt & ToolMgmt --> MetadataMgmt
Routing -.->|"Session Affinity"| MCPServers
ToolRouting -.->|"Session Affinity"| ToolRouters
ToolRouters ==>|"Dynamic Routing"| ToolServers
DeploymentMgmt -->|"Deploy & Monitor"| Cluster
MetadataMgmt <-->|"Read/Write"| Metadata
style Gateway fill:#e1f5ff
style Cluster fill:#fff4e1
style Metadata fill:#f0f0f0
POST /adapters — Yeni bir MCP sunucusu dağıt ve kaydet.GET /adapters — Kullanıcının erişebildiği tüm MCP sunucularını listele.GET /adapters/{name} — Belirli bir adaptörün meta verilerini al.GET /adapters/{name}/status — Dağıtım durumunu kontrol et.GET /adapters/{name}/logs — Sunucunun çalışan günlüklerine erişebil.PUT /adapters/{name} — Dağıtımı güncelle.DELETE /adapters/{name} — Sunucuyu kaldır.POST /tools — MCP araç tanımı meta verileriyle bir araç kaydet ve dağıt.GET /tools — Kullanıcının erişebildiği tüm kayıtlı araçları listele.GET /tools/{name} — Belirli bir araçın meta verilerini ve araç tanımını al.GET /tools/{name}/status — Araç dağıtım durumunu kontrol et.GET /tools/{name}/logs — Araç sunucusunun çalışan günlüklerine erişebil.PUT /tools/{name} — Bir araç dağıtımını ve tanımını güncelle.DELETE /tools/{name} — Kayıtlı bir araç kaldır.Yalnızca FoundrySettings:Endpoint yapılandırılırken kullanılabilir. Ayrıntılar için aşağıdaki Aracılar ve Oturumlar bölümüne bakınız.
POST /agents, GET /agents, GET|PUT|DELETE /agents/{name} — Aracı tanımları için CRUD işlemleri.POST /sessions, GET /sessions, GET|DELETE /sessions/{id} — Oturumlar için CRUD işlemleri.POST /sessions/run — Bir oturum başlat ve olayları akışla (SSE).POST /sessions/{id}/messages — Mevcut bir oturumu yeni bir kullanıcı mesajıyla devam ettir; olayları akışla (SSE).POST /adapters/{name}/mcp — Akışlanabilir bir HTTP bağlantısı kur.POST /mcp — Istekleri araç ağ geçidi yönlendiricisine yönlendir; bu yönlendirici araç tanımlarına göre istekleri kayıtlı araçlara dinamik olarak yönlendirir. Yönlendirici kendisi ölçeklenebilirlik için ağ geçidinin arkasında çalışan birden çok örneğe sahip bir MCP sunucusudur.Ağ geçidi, MCP sunucuları ve araçları için Entra ID kimlik doğrulaması ve temel uygulama rolü yetkilendirmesi sağlar:
requiredRoles değerleri atanmış müdürlere (örneğin mcp.engineer) ve zorunlu yönetici rolü mcp.admin sahibi herkese verilir. requiredRoles boş veya belirtilmediğinde, yalnızca oluşturucu ve mcp.admin müdürleri kaynağı okuyabilir.mcp.admin rolüne sahip müdürlerle sınırlıdır.Azure Entra ID'i yapılandırmak (mcp.admin ve diğer rol değerleri oluşturmak, bunları kullanıcılara veya hizmet müdürlerine atamak ve bu değerleri adaptör/araç payload'larında sağlamak) için adım adım yardım için bkz. docs/entra-app-roles.md.
MCP Gateway artık MCP araçlarını yönetmek ve yürütmek için ölçeklenebilir bir mimari sağlayan araç kaydı ve dinamik yönlendirme yeteneklerini desteklemektedir.
Araç Kaydı: Geliştiriciler /tools API endpoint'i aracılığıyla araçları kaydeder:
Araç Ağ Geçidi Yönlendiricisi: Akıllı bir yönlendirici olarak çalışan bir uzman MCP sunucusu:
POST /mcp endpoint'i aracılığıyla erişilir (adaptör adı olmadan)Dinamik Yönlendirme: İstemciler /mcp'ye MCP istekleri gönderdiğinde:
Ön İzleme / tek-replika. Bu alt sistem opt-in olup değerlendirme ve tek-pod dağıtımları için tasarlanmıştır. Yerleşik araçlar ağ geçidi pod'u içinde işlem içinde yürütülür ve oturum başına durum (çalışma dizini, disk-kota sayaçları) o pod'a yereldir. Bir şandal sandbox ve paylaşılan oturum depolaması eklemeden bu özelliği çoklu replika veya çoklu kiracılı üretim dağıtımında etkinleştirmeyin.
Ağ geçidi isteğe bağlı olarak kayıtlı MCP araçlarını ve küçük bir yerleşik araç kümesini (builtin:bash, builtin:read_file, builtin:write_file) çağıran LLM tabanlı aracıları çalıştırabilir. Aracı CRUD endpoint'leri (/agents, /sessions GET/DELETE/LIST) her zaman kullanılabilir, ancak oturum yürütmesini akışla (POST /sessions/run, POST /sessions/{id}/messages) yalnızca FoundrySettings:Endpoint yapılandırıldığında etkinleştirilir. Olmadan, bir akışlama isteği Foundry'nin yapılandırılması gerektiğini söyleyen bir error SSE olayıyla hızlı bir şekilde başarısız olur.
appsettings.json'e (veya ortam değişkenleri aracılığıyla) bir FoundrySettings bölümü ekleyin:
{
"FoundrySettings": {
"Endpoint": "https://<your-resource>.cognitiveservices.azure.com/",
"DeploymentName": "gpt-4o"
}
}
Kimlik doğrulama DefaultAzureCredential kullanır; ağ geçidinin kimliğine (AKS'deki yönetilen kimlik veya az login aracılığıyla yerel kullanıcı) hedef kaynakta Cognitive Services User rolünü verin. Araç yayınlayan modeller boş olmayan bir tools dizisine sahip herhangi bir aracı için gereklidir — gpt-4o-sınıfı dağıtımlar önerilir.
POST /agents
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "weather-helper",
"model": "gpt-4o",
"system": "You answer weather questions concisely.",
"tools": ["mcp:weather"],
"description": "Demo agent backed by the weather MCP tool."
}
tools girişleri ön ek tarafından ad alanlandırılır:
mcp:<tool-name> — /tools aracılığıyla kayıtlı bir araçla yönlendir.agent:<agent-name> — başka bir aracıya delege et (alt aracı / Task deseni).builtin:bash, builtin:read_file, builtin:write_file — işlem içi yerleşikler (aşağıda Yerleşik araçlar ve sınırlamalar'a bakınız).Başvurulan mcp: ve agent: kaynakları aracı oluştur/güncelle zamanında doğrulanır: oluşturucu bu kaynakları doğrudan çağıramadığından kaynak mevcut değilse veya arayanın okuma erişimi yoksa çağrı başarısız olur.
POST /sessions/run
Authorization: Bearer <token>
Content-Type: application/json
Accept: text/event-stream
{ "agentName": "weather-helper", "input": "What's the weather in Seattle?" }
Yanıt Server-Sent Events akışıdır; her olay event: <type>\ndata: <json>\n\n'dir. Olay türleri Started, ToolCallStarted, ToolCallCompleted, TokenDelta, Completed ve Failed olabilir.
Mevcut bir oturumu sonraki bir mesajla devam ettirmek için:
POST /sessions/{id}/messages
Content-Type: application/json
{ "input": "And in Portland?" }
Bir aracı builtin:bash / builtin:read_file / builtin:write_file'ı tools içinde listelemişse, bu yerleşikler ağ geçidi pod'u içinde bir oturum başına çalışma dizini altında çalışır. Korunurlar:
sudo, ağ çıkışı, bağlamalar, paket yöneticileri, vb.) için bir regex yasaklama listesi. Bu derinlemesinde savunmadır, bir sandbox değildir... geçişini reddeder.Çoklu kiracı veya üretim kullanımı için, bunları gerçek bir oturum başına sandbox (örn. ephemeral pod, gVisor, firejail) ile değiştirin — BuiltinToolExecutor.cs'deki satır içi yorumlara bakınız.
docker run -d -p 5000:5000 --name registry registry:2.7
MCP sunucusu görüntülerini yerel kayıt defterinize (localhost:5000) derle ve push'la.
docker build -f sample-servers/mcp-example/Dockerfile sample-servers/mcp-example -t localhost:5000/mcp-example:1.0.0
docker push localhost:5000/mcp-example:1.0.0
(İsteğe bağlı) Visual Studio ile dotnet/Microsoft.McpGateway.sln'i aç.
MCP Gateway görüntüsünü yayınla:
dotnet publish dotnet/Microsoft.McpGateway.Service/src/Microsoft.McpGateway.Service.csproj -c Release /p:PublishProfile=localhost_5000.pubxml
Araç Ağ Geçidi Yönlendiricisi görüntüsünü yayınla:
dotnet publish dotnet/Microsoft.McpGateway.Tools/src/Microsoft.McpGateway.Tools.csproj -c Release /p:PublishProfile=localhost_5000.pubxml
Dağıtım manifestlerini uygula:
kubectl apply -f deployment/k8s/local-deployment.yml
Ağ geçidi hizmet portunu ilet:
kubectl port-forward -n adapter svc/mcpgateway-service 8000:8000
OpenAPI tanımını openapi/mcp-gateway.openapi.json'den Postman, Bruno veya Swagger Editor gibi araçlara aktarın.
Yeni bir adaptör kaynağı oluşturmak için bir istek gönderin:
POST http://localhost:8000/adapters
Content-Type: application/json
{
"name": "mcp-example",
"imageName": "mcp-example",
"imageVersion": "1.0.0",
"description": "test"
}
MCP sunucusunu dağıttıktan sonra bağlantıyı test etmek için VS Code gibi bir istemci kullanın. Rehbere bakınız: VS Code'da MCP sunucularını kullan.
Not: En son MCP özelliklerine erişmek için VSCode'un güncel olduğundan emin olun.
mcp-example sunucusuna bağlanmak için şunu kullanın:
http://localhost:8000/adapters/mcp-example/mcp (Streamable HTTP)mcp-example sunucusuna bağlanan örnek .vscode/mcp.json
{
"servers": {
"mcp-example": {
"url": "http://localhost:8000/adapters/mcp-example/mcp",
}
}
}
Diğer sunucular için:
http://localhost:8000/adapters/{name}/mcp (Streamable HTTP)Önce yerel kayıt defterinize bir araç sunucusu görüntüsünü derle ve push'la:
docker build -f sample-servers/tool-example/Dockerfile sample-servers/tool-example -t localhost:5000/weather-tool:1.0.0
docker push localhost:5000/weather-tool:1.0.0
Tanımıyla birlikte bir araçı kaydetmek için bir istek gönderin:
POST http://localhost:8000/tools
Content-Type: application/json
{
"name": "weather",
"imageName": "weather-tool",
"imageVersion": "1.0.0",
"description": "Weather tool for getting current weather information",
"toolDefinition": {
"tool": {
"name": "weather",
"title": "Weather Information",
"description": "Gets the current weather for a specified location.",
"type": "http",
"inputSchema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
}
},
"required": ["location"]
}
},
"port": 8000
}
}
Araç dağıtım durumunu kontrol et:
GET http://localhost:8000/tools/weather/status
Araç ağ geçidi yönlendiricisine bağlanmak için bir MCP istemcisi (VS Code gibi) kullanın:
Araç ağ geçidi yönlendiricisine bağlanan örnek .vscode/mcp.json:
{
"servers": {
"tool-gateway": {
"url": "http://localhost:8000/mcp"
}
}
}
Yönlendirici, MCP isteğindeki araç adına göre araç çağrılarını uygun kayıtlı araç sunucularına otomatik olarak yönlendirecektir.
Dağıtılan tüm kaynakları kaldırmak için Kubernetes ad alanını silin:
kubectl delete namespace adapter

Bulutta dağıtılan hizmet Azure Entra ID kullanarak bearer token kimlik doğrulaması gerektirir. Bir uygulama kaydını yapılandırmak için aşağıdaki adımları izleyin.
Uygulama Kayıtları'na gidin
+ Yeni kayıt seçeneğine tıklayın
mcp-gatewayUygulama kaydının Genel Bakış sayfasına gidin ve aşağıdakileri kopyalayın:
Sol menüde API Açığa Çıkar seçeneğine gidin
Uygulama Kimliği URI'sinin yanında Ekle'ye tıklayın ve varsayılan değeri olarak bırakın:
api://<your-client-id>
+ Kapsam Ekle'ye tıklayın
accessMindsDB MCP server ile farklı platformlar ve veritabanları arasındaki verileri bağlayın ve birleştirin.
2.500+ API ile 8.000'den fazla hazır araçla bağlantı kurun ve sunucuları kendi uygulamanız içinde yönetin.
MetaMCP, MCP bağlantılarınızı GUI ile yöneten tek bir merkezi MCP server ara yazılımıdır.
40'tan fazla uygulamayı tek bir binary ile SQL kullanarak sorgulayın. PostgreSQL, MySQL veya SQLite uyumlu veritabanlarınıza da bağlanabilir. Yerel-öncelikli ve gizlilik odaklı tasarımı ile sunulur.
Kurumsal AI Ajanları için self-hosted MCP Server kayıt defteri
Birden fazla MCP sunucusunu tek bir sunucuda toparlayan, birleşik bir Model Context Protocol sunucu uygulaması.