claude-ia-mcp-tools-auth
MCP-Tools mit OAuth-Authentifizierung
Ein Python-Beispiel, das zeigt, wie ein MCP-Server (Model Context Protocol) mit OAuth-Authentifizierung aufgebaut wird und dabei einen API-Client, eine Geschäftslogikschicht und abgesicherte MCP-Tools kombiniert.
Merkmale
OAuth-Authentifizierungsablauf: Authentifizierung per Klick im Browser für Sitzungstokens
Mehrschichtige Architektur: API-Client → Geschäftslogik → MCP-Tools
Sicherer Tool-Zugriff: Erfordert ein gültiges Auth-Token zum Aufrufen geschützter Tools
Einfacher HTTP-Server: Flask-basierter Authentifizierungsserver unter localhost:5000
Token-Verwaltung: 24 Stunden gültige Sitzungstokens mit Persistenz
Related MCP server: MCP App with Authentication
Architektur
src/example/
├── api/
│ ├── api_client.py # HTTP API client (JSONPlaceholder)
│ └── http_server.py # Local HTTP server
├── auth/
│ └── manager.py # OAuth token & state management
├── business/
│ └── service.py # Business logic layer
├── http/
│ └── auth_server.py # Flask OAuth auth server
├── mcp/
│ └── server.py # MCP server with auth
└── main.pyInstallation
python -m venv .venv
# Windows:
.venv\Scripts\activate
# Linux/macOS:
source .venv/bin/activate
pip install -r requirements.txtSchnellstart
1. Authentifizierungsserver starten
python -m src.example.http.auth_serverDadurch wird ein Flask-Server mit einem OAuth-Ablauf unter http://localhost:5000 gestartet:
Rufen Sie die Startseite auf
Klicken Sie auf „Klicken zum Authentifizieren“
Erhalten Sie Ihr Sitzungstoken auf der Rückrufseite
Kopieren und speichern Sie Ihr Token
2. MCP-Server starten
In einem anderen Terminal:
python -m src.example.mcp.server3. MCP-Tools verwenden
Der MCP-Server erfordert nun eine Authentifizierung. Rufen Sie zuerst die Authentifizierungs-URL ab:
echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | python -m src.example.mcp.serverAuthentifizieren Sie sich anschließend und verwenden Sie die Tools mit Ihrem Token:
echo '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"get_user","arguments":{"user_id":1},"auth_token":"YOUR_SESSION_TOKEN"},"id":1}' | python -m src.example.mcp.serverAuthentifizierungsablauf
Authentifizierungs-URL abrufen: Rufen Sie das Tool
get_auth_urlauf (keine Authentifizierung erforderlich){"jsonrpc":"2.0","method":"tools/call","params":{"name":"get_auth_url","arguments":{}},"id":1}Im Browser klicken: Der Benutzer klickt auf die zurückgegebene Authentifizierungs-URL
Öffnet
http://localhost:5000/auth/callback?state=...Der Browser zeigt eine Erfolgsseite mit dem Sitzungstoken
Das Token ist 24 Stunden gültig
Token verwenden: Geben Sie
auth_tokenbei allen Tool-Aufrufen mit{"params":{"name":"get_user","arguments":{"user_id":1},"auth_token":"YOUR_TOKEN"}}
Verfügbare Tools
Öffentlich (keine Authentifizierung erforderlich)
get_auth_url- OAuth-Authentifizierungs-URL abrufen
Geschützt (Authentifizierung erforderlich)
get_user- Einen Benutzer anhand der ID abrufenlist_users- Alle Benutzer auflistencreate_user- Einen neuen Benutzer erstellenupdate_user- Benutzername/E-Mail aktualisierendelete_user- Einen Benutzer löschen
Konfiguration
Legen Sie die Umgebungsvariablen fest:
export PORT=5000 # Auth server port
export FLASK_SECRET_KEY=your-secret-key # Flask secret (change in production!)Tests
Führen Sie die Tests mit pytest aus:
pytest -v
pytest --cov=src # With coverage
pytest tests/test_auth.py # Auth tests onlyShell-Skript ausführen
sh test-auth-flow.sh
========================================
MCP Auth Server - Complete Flow Test
========================================
Base URL: https://claude-ia-mcp-tools-auth-staging.up.railway.app
Step 1: Start Auth Flow
GET /auth/start
Status: 401
Auth URL: https://claude-ia-mcp-tools-auth-staging.up.railway.app/auth/callback?state=Xukdt6MwHba0n0UfkOX3lAAanm7MJhSyzomyCJCxj1M
State Token: Xukdt6MwHba0n0UfkOX3lAAanm7MJhSyzomyCJCx...
Step 2: Complete Auth Callback
GET /auth/callback?state=Xukdt6MwHba0n0UfkOX3lAAanm7MJhSyzomyCJCxj1M
Status: 200
Session Token: 7Y6SaanfrLmiOXoE2kUvTbdEfawIMSJyGDaNFPf1...
Step 3: Verify Token with Auth Status
GET /auth/status -H 'Authorization: Bearer 7Y6SaanfrLmiOXoE2kUvTbdEfawIMSJyGDaNFPf1-Bg'
Response:
{"authenticated":true,"user_id":"user_1b25e4982c9904b8"}
========================================
TEST RESULTS
========================================
State Token: Xukdt6MwHba0n0UfkOX3lAAanm7MJhSyzomyCJCxj1M
Session Token: 7Y6SaanfrLmiOXoE2kUvTbdEfawIMSJyGDaNFPf1-Bg
Authenticated: true
User ID: user_1b25e4982c9904b8
========================================
Step 4: Test Invalid Token
GET /auth/status -H 'Authorization: Bearer invalid_token_123'
Response: {"authenticated":false,"user_id":null}
SUCCESS: Complete auth flow working correctly!
You can now use this token for MCP:
Authorization: Bearer 7Y6SaanfrLmiOXoE2kUvTbdEfawIMSJyGDaNFPf1-Bg
Bereitstellung
Für die Produktion passen Sie Folgendes an:
FLASK_SECRET_KEY - Verwenden Sie einen starken, zufälligen Schlüssel
OAuth-Anbieter - Ersetzen Sie ihn durch einen echten OAuth-Anbieter (Google, GitHub usw.)
Token-Speicherung - Verwenden Sie eine Datenbank anstelle von
.auth_tokens.jsonHTTPS - Aktivieren Sie SSL/TLS für die Authentifizierungs-Endpunkte
Hinweise zur Architektur
Dieses Beispiel veranschaulicht:
Trennung der Verantwortlichkeiten: API-Client, Geschäftslogik und MCP-Ebene sind unabhängig voneinander
Schichtenarchitektur: Einfach zu testen und Komponenten austauschbar
Authentifizierungs-Integration: Auth-Tokens werden über Parameter übergeben, nicht über Header
Fehlerbehandlung: Ordnungsgemäße Fehlerantworten bei Authentifizierungsfehlern
Der API-Client verwendet https://jsonplaceholder.typicode.com als Demo-API.
Ersetzen Sie ihn durch Ihre eigene API-Implementierung, ohne die MCP-/Geschäftsschnittstellen zu ändern.
This server cannot be deployed
Maintenance
Related MCP Connectors
One OAuth connector for your team's remote MCP servers, with Tool Packs, guardrails and logs.
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
OAuth-protected, read-only-by-default MCP server for provenance-labeled QuillCaddie project memory.
Prove end users to agents and apps: login-links, OIDC clients, and API keys over remote MCP
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables remote MCP server with OAuth authentication using Cloudflare Access, allowing users to connect via sign-in with an identity provider.-
- FlicenseNot gradedqualityDmaintenanceThis MCP server implements a secure OAuth 2.1 authorization server with Google login, enabling authenticated tool execution and a user interface for MCP applications.-
- AlicenseNot gradedqualityBmaintenanceEnables end-to-end testing of OAuth authorization for an MCP server, exposing scoped tools like whoami and echo over streamable HTTP.ISC
- FlicenseBqualityBmaintenanceEnables MCP clients to authenticate through OIDC and call protected tools while rejecting unauthenticated requests.26-