Aggregators Rust ★ 176

sxhxliang/mcp-access-point

Web servisinizi kod değişikliği yapmadan tek tıkla MCP sunucusuna dönüştürün.

Claude Desktop config.json'a ekle

{
  "mcpServers": {
    "sxhxliang-mcp-access-point": {
      "command": "node",
      "args": [
        "~/.mcp/mcp-access-point/index.js"
      ]
    }
  }
}

MCP Erişim Noktası

MCP Access Point geleneksel HTTP hizmetleri ile MCP (Model Context Protocol) istemcileri arasında iletişim köprüsü kurmak için tasarlanmış hafif bir protokol dönüştürme ağ geçidi aracıdır. MCP istemcilerinin sunucu tarafında herhangi bir arayüz değişikliği gerektirmeden mevcut HTTP hizmetleriyle doğrudan etkileşim kurmasını sağlar.

Admin Dashboard

Giriş

Bu proje Pingora üzerine inşa edilmiştir - muazzam ölçekli istek proxy hizmetlerini destekleyebilen ultra yüksek performanslı ağ geçidi proxy kütüphanesi. Pingora, Cloudflare platformu için temel trafiği işleyen hizmetleri oluşturmak için kullanılmıştır ve yıllar boyunca internet genelinde saniyede 40 milyondan fazla isteğe tutarlı bir şekilde hizmet vermiştir. Cloudflare platformundaki trafik oranının önemli bir bölümünü destekleyen teknik köşetaşı haline gelmiştir.

HTTP'den MCP'ye

Bu mod Cursor Desktop gibi istemcilerin sunucuların kendileri SSE protokolünü desteklemediğinde bile SSE aracılığıyla uzak HTTP sunucularıyla iletişim kurmasını sağlar.

  • Örnek kurulum iki hizmeti içerir:
    • Service 1, 127.0.0.1:8090 adresinde yerel olarak çalışır
    • Service 2, api.example.com adresinde uzaktan çalışır
  • MCP Access Point aracılığıyla, her iki hizmet de herhangi bir kod değişikliği yapılmadan MCP hizmetlerine dönüştürülebilir.
  • İstemciler MCP protokolü aracılığıyla Service 1 ve Service 2 ile iletişim kurar. MCP Access Point otomatik olarak MCP isteklerini ayırt eder ve uygun arka uç hizmetlerine iletir.
graph LR
   A["Cursor Desktop"] <--> |SSE| B["MCP Access Point"]
   A2["Other Desktop"] <--> |Streamable Http| B["MCP Access Point"]
   B <--> |http 127.0.0.1:8090| C1["Existing API Server"]
   B <--> |https//api.example.com| C2["Existing API Server"]
  
   style A2 fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px
   style A fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px
   style B fill:#e6e6af,stroke:#333,color:black,stroke-width:2px
   style C1 fill:#e6ffe6,stroke:#333,color:black,stroke-width:2px
   style C2 fill:#e6ffd6,stroke:#333,color:black,stroke-width:2px

Taşıma Türü (Özelliği)

Şu anda SSE ve Streamable HTTP protokollerini destekler:

  • ✅ Streamable HTTP (durumsuz) 2025-03-26

    • Tüm hizmetler: ip:port/mcp
    • Tek hizmet: ip:port/api/{service_id}/mcp
  • ✅ SSE 2024-11-05

    • Tüm hizmetler: ip:port/sse
    • Tek hizmet: ip:port/api/{service_id}/sse

SSE için IP:PORT/sse kullanın Streamable HTTP için IP:PORT/mcp kullanın

Desteklenen MCP istemcileri

Temel Özellikler

  • Protokol Dönüştürme: HTTP ve MCP protokolleri arasında sorunsuz dönüştürme
  • Sıfır Müdahale Entegrasyonu: Mevcut HTTP hizmetleriyle tam uyumluluk
  • İstemci Yetkiendirmesi: MCP istemcilerinin standart HTTP hizmetlerini doğrudan çağırmasını sağlar
  • Hafif Proxy: Verimli protokol dönüştürmesi ile minimalist mimari
  • Çok Kiracılılık: Her kiracı için bağımsız yapılandırma ve uç noktalar
  • Çalışma Zamanı Yapılandırma Yönetimi: Hizmet yeniden başlatmadan dinamik yapılandırma güncellemeleri
  • Admin API'si: Gerçek zamanlı yapılandırma yönetimi için RESTful API

Hızlı Başlangıç

Kurulum

# Kaynaktan kurulum
git clone https://github.com/sxhxliang/mcp-access-point.git
cd mcp-access-point
cargo run -- -c config.yaml

# Hata ayıklama için inspector kullanın (önce hizmeti başlatın)
npx @modelcontextprotocol/inspector node build/index.js
# Erişim http://127.0.0.1:6274/
# "SSE" seçin ve 0.0.0.0:8080/sse girin, ardından bağlan'a tıklayın
# veya "Streamable HTTP" seçin ve 0.0.0.0:8080/mcp girin

Çok Kiracılılık Desteği

MCP Access Gateway çok kiracılılığı destekler; burada her kiracı şu yollarla erişilebilir olan birden fazla MCP hizmetini yapılandırabilir:

  • /api/{mcp-service-id}/sse (SSE için)
  • /api/{mcp-service-id}/mcp (Streamable HTTP için)

Örnek yapılandırma:

# config.yaml örneği (birden fazla hizmeti destekler)

mcps:
  - id: service-1 # /api/service-1/sse veya /api/service-1/mcp aracılığıyla erişim
    ... # Hizmet yapılandırması
  - id: service-2 # /api/service-2/sse veya /api/service-2/mcp aracılığıyla erişim
    ... # Hizmet yapılandırması
  - id: service-3 # /api/service-3/sse veya /api/service-3/mcp aracılığıyla erişim
    ... # Hizmet yapılandırması

Tüm hizmetlere aynı anda erişmek için kullanın:

  • 0.0.0.0:8080/mcp (Streamable HTTP)
  • 0.0.0.0:8080/sse (SSE)

Yapılandırma Ayrıntıları

  1. -c config.yaml
    • -c (veya --config) yapılandırma dosyası yolunu (config.yaml) belirtir.
    • Bu dosya MCP Access Point'in proxy yapacağı ve dönüştüreceği API'leri tanımlar.

config.yaml Örneği

Yapılandırma dosyası çok kiracılılığı destekler ve her MCP hizmeti için arka uç hizmetlerinin ve yönlendirme kurallarının bağımsız yapılandırılmasını sağlar. Anahtar yapılandırma öğeleri şunları içerir:

  1. mcps - MCP hizmeti listesi

    • id: Erişim yolları oluşturmak için kullanılan benzersiz hizmet tanımlayıcısı
    • upstream_id: İlişkili arka uç hizmeti kimliği
    • path: OpenAPI specification dosya yolu. Yerel dosyaları (örn. config/openapi.json) ve uzak HTTP/HTTPS URL'lerini (örn. https://petstore.swagger.io/v2/swagger.json) destekler. Hem JSON hem de YAML formatları desteklenir.
    • routes: Özel yönlendirme yapılandırması (isteğe bağlı)
    • upstream: Arka uç hizmeti özel yapılandırması (isteğe bağlı)
  2. upstreams - Arka uç hizmeti yapılandırması

    • id: Arka uç hizmeti kimliği
    • nodes: Arka uç düğüm adresleri ve ağırlıkları
    • type: Yük dengeleme algoritması (roundrobin/random/ip_hash)
    • scheme: Arka uç protokolü (http/https)
    • pass_host: HTTP Host header işleme
    • upstream_host: Host header değerini geçersiz kıl

Tam yapılandırma örneği:

# config.yaml örneği (birden fazla hizmeti destekler)
mcps:
  - id: service-1 # Benzersiz tanımlayıcı, /api/service-1/sse veya /api/service-1/mcp aracılığıyla erişilebilir
    upstream_id: 1
    path: config/openapi_for_demo_patch1.json # Yerel OpenAPI spec yolu

  - id: service-2 # Benzersiz tanımlayıcı
    upstream_id: 2
    path: https://petstore.swagger.io/v2/swagger.json # Uzak OpenAPI spec

  - id: service-3 
    upstream_id: 3
    routes: # Özel yönlendirme
      - id: 1
        operation_id: get_weather
        uri: /points/{latitude},{longitude}
        method: GET
        meta:
          name: Get Weather
          description: Retrieve weather information by coordinates
          inputSchema: # İsteğe bağlı giriş doğrulaması
            type: object
            required:
              - latitude
              - longitude
            properties:
              latitude:
                type: number
                minimum: -90
                maximum: 90
              longitude:
                type: number
                minimum: -180
                maximum: 180

upstreams: # Gerekli arka uç yapılandırması
  - id: 1
    headers: # Arka uç hizmetine göndermek için headers
      X-API-Key: "12345-abcdef"        # API key
      Authorization: "Bearer token123" # Bearer token
      User-Agent: "MyApp/1.0"          # User agent
      Accept: "application/json"       # Accept header
    nodes: # Arka uç düğümleri (IP veya domain)
      "127.0.0.1:8090": 1 # Format: address:weight

  - id: 2 
    nodes:
      "127.0.0.1:8091": 1

  - id: 3 
    nodes:
      "api.weather.gov": 1
    type: roundrobin # Yük dengeleme algoritması
    scheme: https # Protokol
    pass_host: rewrite # Host header işleme
    upstream_host: api.weather.gov # Host geçersiz kıl

MCP Access Gateway'i yapılandırma dosyası ile çalıştırmak için:

cargo run -- -c config.yaml

Docker'da Çalıştırma

Hızlı başlangıç için yerel olarak çalıştırın

# Not: /path/to/your/config.yaml yerine gerçek yolu kullanın
docker run -d --name mcp-access-point --rm \
  -p 8080:8080 \
  -e port=8080 \
  -v /path/to/your/config.yaml:/app/config/config.yaml \
  ghcr.io/sxhxliang/mcp-access-point:main

Docker Image'ı Oluşturma (İsteğe Bağlı)

  • docker yükleyin
  • repository'yi klonlayın ve image'ı oluşturun
# Repository'yi klonlayın
git clone https://github.com/sxhxliang/mcp-access-point.git
cd mcp-access-point

# Image oluşturun
docker build -t liangshihua/mcp-access-point:latest .
  • Docker Container'ı çalıştırın
# Ortam değişkenleri kullanarak (hizmet host üzerinde çalışıyor)
# Not: /path/to/your/config.yaml yerine gerçek yolu kullanın

docker run -d --name mcp-access-point --rm \
  -p 8080:8080 \
  -e port=8080 \
  -v /path/to/your/config.yaml:/app/config/config.yaml \
  liangshihua/mcp-access-point:latest

Ortam Değişkenleri

  • port: MCP Access Point dinleme portu (varsayılan: 8080)

Tipik Kullanım Senaryoları

  • Kademeli Mimari Geçişi: HTTP'den MCP'ye kademeli geçişi kolaylaştırır
  • Hibrit Mimari Desteği: MCP ekosistemi içinde mevcut HTTP altyapısını yeniden kullanın
  • Protokol Uyumluluğu: Her iki protokolü de destekleyen hibrit sistemler oluşturun

Örnek Senaryo:
MCP tabanlı AI istemcilerinin eski HTTP microservisleriyle arayüz olması gerektiğinde, MCP Access Gateway sorunsuz protokol dönüştürmeyi sağlayan bir middleware katmanı olarak görev yapar.

@limcheekin adlı kullanıcıya pratik bir örnek içeren bir makale yazması için çok teşekkürler: https://limcheekin.medium.com/building-your-first-no-code-mcp-server-the-fabric-integration-story-90da58cdbe1f

Çalışma Zamanı Yapılandırma Yönetimi

MCP Access Point artık RESTful Admin API'si aracılığıyla dinamik yapılandırma yönetimini destekler ve hizmeti yeniden başlatmadan yapılandırmaları güncellemenizi sağlar.

Admin API Özellikleri

  • Gerçek Zamanlı Yapılandırma Güncellemeleri: Arka uç hizmetlerini, hizmetleri, yönlendirmeleri ve diğer kaynakları anında değiştirin
  • Bağımlılık Doğrulaması: Değişikliklerden önce kaynak bağımlılıklarının otomatik doğrulanması
  • Batch İşlemleri: Birden fazla yapılandırma değişikliğini atomik olarak yürütün
  • Yapılandırma Doğrulaması: Uygulamadan önce değişiklikleri doğrulamak için dry-run modu
  • Kaynak İstatistikleri: Yapılandırma durumunu izleyin ve izleyin

Admin API Yapılandırması

Admin API'yi etkinleştirmek için config.yaml dosyanıza aşağıdakileri ekleyin:

access_point:
  admin:
    address: "127.0.0.1:8081"  # Admin API dinleme adresi
    api_key: "your-api-key"    # İsteğe bağlı kimlik doğrulama API key

Admin API Uç Noktaları

Kaynak Yönetimi

  • GET /admin/resources - Kaynak özeti ve istatistiklerini alın
  • GET /admin/resources/{type} - Belirli bir türdeki tüm kaynakları listeleyin
  • GET /admin/resources/{type}/{id} - Belirli bir kaynağı alın
  • POST /admin/resources/{type}/{id} - Yeni bir kaynak oluşturun
  • PUT /admin/resources/{type}/{id} - Mevcut bir kaynağı güncelleyin
  • DELETE /admin/resources/{type}/{id} - Bir kaynağı silin

Gelişmiş İşlemler

  • POST /admin/validate/{type}/{id} - Kaynak yapılandırmasını doğrulayın
  • POST /admin/batch - Batch işlemleri yürütün
  • POST /admin/reload/{type} - Belirli bir kaynak türünü yeniden yükleyin
  • POST /admin/reload/config - Dosyadan tam yapılandırmayı yeniden yükleyin (varsayılan olarak config.yaml). İsteğe bağlı JSON gövdesi: { "config_path": "path/to/config.yaml" }

Desteklenen Kaynak Türleri

  • upstreams - Arka uç sunucu yapılandırmaları
  • services - Hizmet tanımları
  • routes - Yönlendirme kuralları
  • global_rules - Global plugin kuralları
  • mcp_services - MCP hizmeti yapılandırmaları
  • ssls - SSL sertifika yapılandırmaları

Admin API Örnekleri

Yeni bir arka uç oluşturun

curl -X POST http://localhost:8081/admin/resources/upstreams/my-upstream \
  -H "Content-Type: application/json" \
  -d '{
    "id": "my-upstream",
    "type": "RoundRobin",
    "nodes": ["127.0.0.1:8001", "127.0.0.1:8002"],
    "timeout": {
      "connect": 5,
      "read": 10,
      "send": 10
    }
  }'

Bir hizmet oluşturun

curl -X POST http://localhost:8081/admin/resources/services/my-service \
  -H "Content-Type: application/json" \
  -d '{
    "id": "my-service",
    "upstream_id": "my-upstream",
    "hosts": ["api.example.com"]
  }'

Batch işlemleri

curl -X POST http://localhost:8081/admin/batch \
  -H "Content-Type: application/json" \
  -d '{
    "dry_run": false,
    "operations": [
      {
        "operation_type": "create",
        "resource_type": "upstreams",
        "resource_id": "batch-upstream",
        "data": {
          "id": "batch-upstream",
          "type": "Random",
          "nodes": ["192.168.1.10:8080"]
        }
      },
      {
        "operation_type": "create",
        "resource_type": "services",
        "resource_id": "batch-service",
        "data": {
          "id": "batch-service",
          "upstream_id": "batch-upstream"
        }
      }
    ]
  }'

Kaynak istatistiklerini alın

curl http://localhost:8081/admin/resources

Admin Dashboard UI'si

  • Route: GET /admin yerleşik dashboard'u (static/admin_dashboard.html) sunar.
    1. mcp_services, 2) ssls, 3) global_rules, 4) routes, 5) upstreams, 6) services.
  • Her kart API yanıtından türetilen count ve biçimlendirilmiş last_updated gösterir.

Dosyadan yapılandırmayı yeniden yükleyin

# Varsayılan config.yaml'ı kullanır
curl -X POST http://localhost:8081/admin/reload/config \
  -H "Content-Type: application/json" \
  -H "x-api-key: your-api-key"

# Veya farklı bir config yolu belirtin
curl -X POST http://localhost:8081/admin/reload/config \
  -H "Content-Type: application/json" \
  -H "x-api-key: your-api-key" \
  -d '{"config_path": "./config.yaml"}'

Admin API'yi Test Etme

Admin API işlevselliğini doğrulamak için sağlanan test betiğini kullanın:

# Test betiğini çalıştırılabilir yapın
chmod +x test-admin-api.sh

# Kapsamlı API testlerini çalıştırın
./test-admin-api.sh

Ayrıntılı Admin API belgeleri için bkz. RUNTIME_CONFIG_API.md.

Katkı Yönergeleri

  1. Bu repository'yi fork edin.
  2. Bir branch oluşturun ve değişikliklerinizi commit edin.
  3. Bir pull request oluşturun ve merge edilmesini bekleyin.
  4. Kodunuzun Rust kodlama standartlarını takip ettiğinden emin olun.

Benzer MCP sunucuları

Daha fazla: Aggregators →