MCP Data Gateway
MCP Data Gateway
Статус: Ранняя разработка. Каркас проекта (конфигурация, зависимости, документация) готов. Исходный код в
src/еще не реализован — текущий прогресс см. в Дорожной карте разработки. План реализации находится вdocs/plan.md.
MCP-сервер (Model Context Protocol) на базе Python, который выступает в качестве унифицированного шлюза данных, позволяя Claude (и другим MCP-клиентам) отправлять и получать данные через несколько внешних API через единый безопасный интерфейс.
Обзор
Этот MCP-сервер предоставляет:
Универсальную обработку данных для различных типов данных
Универсальный API-шлюз, поддерживающий любую конечную точку REST или GraphQL
Аутентификацию OAuth 2.0 с автоматическим процессом входа через браузер
Безопасное хранение учетных данных с использованием системной связки ключей (keyring)
Фундамент для развития MCP-приложения в будущем
Функции
Функция | Описание |
Поддержка нескольких API | Подключение к любому количеству внешних сервисов через единую конфигурацию |
REST + GraphQL | Встроенная поддержка API как REST, так и GraphQL |
OAuth 2.0 | Полный поток кода авторизации с автоматическим всплывающим окном браузера |
Обновление токенов | Автоматическое обновление токенов и повторная аутентификация по истечении срока действия |
Безопасное хранение | Учетные данные хранятся в зашифрованном виде через системную связку ключей |
Универсальные модели данных | Гибкие схемы для обработки данных любой формы |
Авто-аутентификация | Инструменты автоматически запрашивают вход в систему при необходимости |
Архитектура
MCP/
├── src/
│ ├── server.py # MCP server entry point
│ ├── auth/
│ │ ├── __init__.py
│ │ ├── oauth.py # OAuth 2.0 flow handler with popup
│ │ └── credentials.py # Secure credential storage (keyring)
│ ├── gateway/
│ │ ├── __init__.py
│ │ ├── api_client.py # Generic REST/GraphQL HTTP client
│ │ └── handlers.py # Request/response transformation
│ ├── models/
│ │ ├── __init__.py
│ │ └── data_models.py # Generic Pydantic data models
│ └── tools/
│ ├── __init__.py
│ └── mcp_tools.py # MCP tool definitions for Claude
├── config/
│ └── api_configs.json # API service configurations
├── tests/ # Unit and integration tests
├── .env.example # Environment variables template
├── .gitignore # Excludes secrets and build artifacts
├── requirements.txt # Python dependencies
└── README.md # This fileЗоны ответственности модулей
Основной MCP-сервер (src/server.py)
Инициализирует MCP-сервер с использованием Python SDK
mcpРегистрирует инструменты (
fetch_data,send_data,execute_graphqlи т. д.)Обрабатывает жизненный цикл выполнения инструментов и ответы об ошибках
Аутентификация (src/auth/)
oauth.py: Поток кода авторизации OAuth 2.0 с автоматическим всплывающим окном браузера. Запускает локальный HTTP-сервер обратного вызова для получения кода авторизации. Поддерживает нескольких провайдеров (Google, GitHub, пользовательские).
credentials.py: Безопасное хранение токенов доступа/обновления через системную связку ключей. Обрабатывает проверку и истечение срока действия токенов.
API-шлюз (src/gateway/)
api_client.py: Универсальный асинхронный HTTP-клиент, поддерживающий REST (GET/POST/PUT/DELETE) и GraphQL (запросы/мутации). Обрабатывает Bearer-токены, API-ключи, базовую аутентификацию.
handlers.py: Нормализует ответы от разных API и анализирует ошибки GraphQL отдельно от ошибок HTTP.
Инструменты MCP (src/tools/mcp_tools.py)
Инструмент | Описание |
| Получение данных из настроенного API (авто-OAuth при необходимости) |
| Отправка данных (POST/PUT) в настроенный API (авто-OAuth при необходимости) |
| Выполнение GraphQL-запроса или мутации (авто-OAuth при необходимости) |
| Список всех настроенных API-сервисов |
| Показать статус аутентификации и подключения |
Поток аутентификации
Когда Claude вызывает инструмент, требующий аутентификации:
1. Claude invokes tool (e.g., fetch_data)
↓
2. MCP checks credentials in keyring
↓
3a. Valid token → Proceed with API call
3b. Missing/Expired → Open browser popup for OAuth
↓
4. User logs in via browser
↓
5. Local callback server receives auth code
↓
6. Exchange auth code for access token
↓
7. Store token in keyring
↓
8. Resume original tool callТехнологический стек
Python 3.10+
mcp — Python SDK для Model Context Protocol
httpx — Асинхронный HTTP-клиент (REST + GraphQL)
keyring — Кроссплатформенное безопасное хранилище учетных данных
pydantic — Валидация и моделирование данных
python-dotenv — Управление переменными окружения
Установка
Предварительные требования
Python 3.10 или выше
pip или uv (рекомендуется)
Установка
# Clone the repository
cd /Users/chawengwit/Documents/MCP
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Copy environment template
cp .env.example .env
# Edit .env with your OAuth credentials and API settingsКонфигурация
1. Переменные окружения (.env)
# OAuth credentials (per provider)
OAUTH_CLIENT_ID=your_client_id
OAUTH_CLIENT_SECRET=your_client_secret
OAUTH_REDIRECT_URI=http://localhost:8765/callback
# Server settings
MCP_LOG_LEVEL=INFO # DEBUG | INFO | WARN | ERROR
MCP_LOG_FILE= # Optional path to log file (default: stderr only)
MCP_DEBUG=false # Enable verbose request tracing
MCP_MAX_RESPONSE_BYTES=1048576 # Response size cap (1 MB default)
OAUTH_CALLBACK_PORT=87652. Конфигурации API (config/api_configs.json)
{
"apis": {
"example_api": {
"base_url": "https://api.example.com",
"type": "rest",
"auth": {
"method": "oauth2",
"provider": "custom",
"authorize_url": "https://auth.example.com/oauth/authorize",
"token_url": "https://auth.example.com/oauth/token",
"scopes": ["read", "write"]
},
"endpoints": {
"get_users": {"method": "GET", "path": "/users"},
"create_user": {"method": "POST", "path": "/users"}
}
}
}
}Использование
Запуск MCP-сервера
python -m src.serverПодключение к Claude Code
Добавьте эту конфигурацию в настройки MCP вашего Claude Code:
{
"mcpServers": {
"data-gateway": {
"command": "python",
"args": ["-m", "src.server"],
"cwd": "/Users/chawengwit/Documents/MCP"
}
}
}Примеры взаимодействия
После подключения Claude может:
Перечислить настроенные API: "Покажи мне доступные API-сервисы"
Получить данные: "Получи список пользователей из example_api"
Отправить данные: "Создай новую запись в example_api с этими данными..."
Выполнить GraphQL: "Выполни этот GraphQL-запрос к моему API..."
При первом использовании Claude инструмента, требующего аутентификации, ваш браузер автоматически откроется для входа через OAuth.
Формат ответа
Все инструменты MCP возвращают структурированный JSON для единообразного парсинга.
Успех:
{
"data": <api response>,
"metadata": { "source": "...", "endpoint": "...", "timestamp": "...", "duration_ms": 142 }
}Ошибка:
{
"error": { "code": "AUTH_REQUIRED", "message": "...", "details": { ... } }
}Стандартные коды ошибок: AUTH_REQUIRED, AUTH_FAILED, API_NOT_CONFIGURED, ENDPOINT_NOT_FOUND, RATE_LIMITED, UPSTREAM_ERROR, VALIDATION_ERROR, RESPONSE_TOO_LARGE.
JSON/текстовые ответы, превышающие MCP_MAX_RESPONSE_BYTES, обрезаются и возвращаются как успешные с metadata.truncated: true плюс курсоры пагинации. Только бинарные или потоковые полезные нагрузки выдают RESPONSE_TOO_LARGE (их нельзя безопасно обрезать). Бинарные данные кодируются в base64 с метаданными content_type. Ответы GraphQL отображают как data, так и errors, поэтому частичные успехи остаются пригодными для использования.
Подробности см. в CLAUDE.md.
Отладка
Быстрая диагностика
Симптом | Попробуйте |
Инструмент зависает при первом вызове | Проверьте, свободен ли |
| Установите |
401 после успешной работы | Удалите запись из keyring, пройдите аутентификацию заново |
GraphQL "успешен", но данных нет | Проверьте |
Обрезанный ответ | Используйте пагинацию или увеличьте |
Включение режима отладки
MCP_DEBUG=true MCP_LOG_LEVEL=DEBUG python -m src.serverЭто выводит полные HTTP-обмены (с замаскированными секретами) в stderr. Никогда не выводите в stdout — stdout передает поток протокола MCP JSON-RPC.
Примечания по логированию
Все логи направляются в
stderr(или опционально вMCP_LOG_FILE).Токены, API-ключи, заголовки
Authorizationи учетные данные автоматически маскируются перед логированием.Логи представляют собой структурированный JSON (одно событие на строку) для удобного парсинга с помощью
jq.
См. CLAUDE.md для получения полной стратегии отладки.
Дорожная карта разработки
Фаза 1: Настройка проекта
[x]
requirements.txtс зафиксированными зависимостями[x]
.gitignoreдля секретов и кэшей[x]
.env.exampleс описанием переменных окружения[ ] Инициализация структуры пакета
src/[ ] Начальный шаблон
config/api_configs.json
Фаза 2: Основной MCP-сервер
[ ] Инициализация MCP-сервера
[ ] Определение схем инструментов
[ ] Логирование и обработка ошибок
Фаза 3: Аутентификация
[ ] Поток кода авторизации OAuth 2.0
[ ] Локальный HTTP-сервер обратного вызова
[ ] Хранение токенов на основе keyring
[ ] Логика обновления токенов
Фаза 4: API-шлюз
[ ] Универсальный REST-клиент
[ ] Поддержка GraphQL-запросов/мутаций
[ ] Поддержка нескольких методов аутентификации
[ ] Обработчики запросов/ответов
Фаза 5: Инструменты и интеграция
[ ] Реализация инструмента
fetch_data[ ] Реализация инструмента
send_data[ ] Реализация инструмента
execute_graphql[ ] Реализация инструментов
list_apisиget_status
Фаза 6: Тестирование и полировка
[ ] Модульные тесты для каждого модуля
[ ] Интеграционные тесты с фиктивными API
[ ] Примеры конфигурации
[ ] Документация для пользователей
Будущие улучшения
MCP App: Автономный веб-интерфейс в качестве фронтенда поверх этого шлюза
Постоянное хранилище: SQLite/PostgreSQL для истории данных и журналов аудита
Ограничение скорости (Rate Limiting): Ограничение скорости и очередь запросов для каждого API
Кэширование: Кэширование ответов с настраиваемым TTL
Мультиарендность (Multi-Tenant): Поддержка нескольких пользователей с отдельными хранилищами учетных данных
Вебхуки: Получение данных через входящие вебхуки
Конвейеры преобразования данных: Цепочки преобразований между API
Безопасность
Все учетные данные хранятся в безопасной системной связке ключей (Keychain в macOS, Диспетчер учетных данных в Windows, Secret Service в Linux)
Файл
.envисключен из системы контроля версий через.gitignoreOAuth использует стандартный поток кода авторизации (без implicit grant)
Токены никогда не логируются и не отображаются в сообщениях об ошибках
Локальный сервер обратного вызова прослушивает только
localhostи только во время процесса OAuth
Лицензия
Будет определено позже
Участие в разработке
Проект находится на ранней стадии разработки. Руководство по участию будет добавлено, как только основная реализация станет стабильной.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/Chawengwit/MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server