Skip to main content
Glama
vicboma1

claude-ia-mcp-tools-auth

by vicboma1

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.server

3. Используйте 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

Процесс аутентификации

  1. Получение URL авторизации: вызовите инструмент get_auth_url (аутентификация не требуется)

    {"jsonrpc":"2.0","method":"tools/call","params":{"name":"get_auth_url","arguments":{}},"id":1}
  2. Открытие ссылки в браузере: пользователь переходит по возвращённому URL авторизации

    • Открывается http://localhost:5000/auth/callback?state=...

    • В браузере отображается страница успеха с сессионным токеном

    • Токен действует в течение 24 часов

  3. Использование токена: передавайте auth_token во всех вызовах инструментов

    {"params":{"name":"get_user","arguments":{"user_id":1},"auth_token":"YOUR_TOKEN"}}

Доступные инструменты

Публичные (аутентификация не требуется)

  • get_auth_url - получить URL авторизации OAuth

Защищённые (требуется аутентификация)

  • get_user - получить пользователя по ID

  • list_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

Развертывание

Для продакшена обновите:

  1. FLASK_SECRET_KEY - используйте надёжный случайный ключ

  2. Провайдер OAuth - замените на реальный OAuth (Google, GitHub и т.д.)

  3. Хранение токенов - используйте базу данных вместо .auth_tokens.json

  4. HTTPS - включите SSL/TLS для эндпоинтов аутентификации

Примечания по архитектуре

Этот пример демонстрирует:

  • Разделение ответственности: API-клиент, бизнес-логика и MCP-слой независимы

  • Многослойный дизайн: компоненты легко тестировать и заменять

  • Интеграция аутентификации: токены аутентификации передаются через параметры, а не заголовки

  • Обработка ошибок: корректные ответы об ошибках при сбоях аутентификации

API-клиент использует https://jsonplaceholder.typicode.com в качестве демонстрационного API. Замените его своей собственной реализацией API, не изменяя MCP/бизнес-интерфейсы.

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    Not graded
    quality
    D
    maintenance
    A 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.
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for OAuth 2.0 authentication supporting Device Code and Client Credentials flows, enabling secure token management for MCP applications.

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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