claude-ia-mcp-tools-auth
MCP-инструменты с аутентификацией OAuth
Пример на Python, демонстрирующий, как создать MCP-сервер (Model Context Protocol) с аутентификацией OAuth, объединяющий API-клиент, слой бизнес-логики и защищённые MCP-инструменты.
Возможности
Процесс аутентификации OAuth: вход в один клик в браузере для получения сессионных токенов
Многоуровневая архитектура: API-клиент → бизнес-логика → MCP-инструменты
Безопасный доступ к инструментам: для вызова защищённых инструментов требуется действительный токен
Простой HTTP-сервер: сервер аутентификации на Flask, работающий на localhost:5000
Управление токенами: сессионные токены на 24 часа с сохранением
Related MCP server: OAuth MCP Server
Архитектура
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.pyУстановка
python -m venv .venv
# Windows:
.venv\Scripts\activate
# Linux/macOS:
source .venv/bin/activate
pip install -r requirements.txtБыстрый старт
1. Запустите сервер аутентификации
python -m src.example.http.auth_serverЭто запускает Flask-сервер на http://localhost:5000 с процессом OAuth:
Посетите главную страницу
Нажмите «Click to Authenticate»
Получите сессионный токен на странице обратного вызова
Скопируйте и сохраните токен
2. Запустите MCP-сервер
В другом терминале:
python -m src.example.mcp.server3. Используйте MCP-инструменты
Теперь MCP-сервер требует аутентификации. Сначала получите URL авторизации:
echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | python -m src.example.mcp.serverЗатем пройдите аутентификацию и используйте инструменты с вашим токеном:
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.serverПроцесс аутентификации
Получение URL авторизации: вызовите инструмент
get_auth_url(аутентификация не требуется){"jsonrpc":"2.0","method":"tools/call","params":{"name":"get_auth_url","arguments":{}},"id":1}Открытие ссылки в браузере: пользователь переходит по возвращённому URL авторизации
Открывается
http://localhost:5000/auth/callback?state=...В браузере отображается страница успеха с сессионным токеном
Токен действует в течение 24 часов
Использование токена: передавайте
auth_tokenво всех вызовах инструментов{"params":{"name":"get_user","arguments":{"user_id":1},"auth_token":"YOUR_TOKEN"}}
Доступные инструменты
Публичные (аутентификация не требуется)
get_auth_url- получить URL авторизации OAuth
Защищённые (требуется аутентификация)
get_user- получить пользователя по IDlist_users- получить список всех пользователейcreate_user- создать нового пользователяupdate_user- обновить имя/email пользователяdelete_user- удалить пользователя
Конфигурация
Задайте переменные окружения:
export PORT=5000 # Auth server port
export FLASK_SECRET_KEY=your-secret-key # Flask secret (change in production!)Тестирование
Запустите тесты с помощью pytest:
pytest -v
pytest --cov=src # With coverage
pytest tests/test_auth.py # Auth tests onlyЗапустите скрипт оболочки
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
Развертывание
Для продакшена обновите:
FLASK_SECRET_KEY - используйте надёжный случайный ключ
Провайдер OAuth - замените на реальный OAuth (Google, GitHub и т.д.)
Хранение токенов - используйте базу данных вместо
.auth_tokens.jsonHTTPS - включите SSL/TLS для эндпоинтов аутентификации
Примечания по архитектуре
Этот пример демонстрирует:
Разделение ответственности: API-клиент, бизнес-логика и MCP-слой независимы
Многослойный дизайн: компоненты легко тестировать и заменять
Интеграция аутентификации: токены аутентификации передаются через параметры, а не заголовки
Обработка ошибок: корректные ответы об ошибках при сбоях аутентификации
API-клиент использует https://jsonplaceholder.typicode.com в качестве демонстрационного API.
Замените его своей собственной реализацией API, не изменяя MCP/бизнес-интерфейсы.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA complete OAuth 2.1 server implementation for FastMCP with PKCE support, enabling secure authentication and authorization flows. Provides authorization code exchange, token management, and refresh capabilities for building authenticated MCP applications.
- FlicenseNot gradedqualityDmaintenanceAn MCP server for OAuth 2.0 authentication supporting Device Code and Client Credentials flows, enabling secure token management for MCP applications.
- FlicenseNot gradedqualityDmaintenanceA simple MCP server with OAuth 2.0 authentication for testing OAuth support in mcp-cli.
- FlicenseNot gradedqualityCmaintenanceThis MCP server requires user authentication via Auth0 and then enables calling protected APIs (e.g., a Todos API) on behalf of the user.
Related MCP Connectors
Self-hosted federated MCP gateway: one OAuth 2.1 MCP server in front of N apps, user-level scopes.
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
Streamable HTTP MCP server for Google Calendar and Sheets with OAuth login.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vicboma1/claude-ia-mcp-tools-auth'
If you have feedback or need assistance with the MCP directory API, please join our Discord server