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-приложения в будущем
Related MCP server: OpenAPI MCP Server
Функции
Функция | Описание |
Поддержка нескольких 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
Лицензия
Будет определено позже
Участие в разработке
Проект находится на ранней стадии разработки. Руководство по участию будет добавлено, как только основная реализация станет стабильной.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
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 Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Unified MCP Server is a remote MCP connector for AI agents and vertical AI products that provides access to 22,000+ authorized SaaS tools across 400+ integrations and 24 categories directly inside LLMs (Claude, GPT, Gemini, Cohere). Tools operate only on explicitly authorized customer connections, enabling agents to safely read and write against live third-party systems.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceAn MCP server that enables Claude Code to access Auth0-protected APIs by handling OAuth authentication flows and securely proxying API requests with user credentials.-
- AlicenseNot gradedqualityCmaintenanceA generic MCP server that dynamically converts OpenAPI-defined REST APIs into tools for LLMs like Claude. It supports multiple authentication methods and transport protocols, enabling seamless interaction with any OpenAPI-compliant API.21MIT
- AlicenseAqualityCmaintenanceA single MCP server that fronts multiple REST APIs, each configured via environment variables, allowing Claude to orchestrate across several SaaS backends with namespaced tools.21MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that connects Claude to Acumatica ERP with per-user OAuth authentication, role-based access control, and automatic redaction of sensitive fields.Apache 2.0
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/Chawengwit/MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server