Сервер протокола контекста модели (MCP)
Простая серверная реализация для протокола контекста модели, которая предоставляет унифицированный API для нескольких поставщиков моделей ИИ.
Функции
Унифицированный API для нескольких поставщиков ИИ (Anthropic, OpenAI)
Поддержка завершения чата и устаревших завершений
Поддержка вызова инструмента
Обработка контекстных/системных сообщений
Конфигурация на основе среды
База данных MongoDB для сохранения и управления состоянием
История и аналитика выполнения инструмента
Related MCP server: Model Control Plane (MCP) Server
Установка
# Clone the repository
git clone <repository-url>
cd testmcp
# Install dependencies
npm install
# Run the interactive setup
npm run setupСкрипт настройки поможет вам настроить необходимые ключи API:
ANTHROPIC_API_KEY- Для моделей КлодаOPENAI_API_KEY— для моделей GPT и генерации образов DALL-ESTABILITY_API_KEY— для генерации стабильного диффузионного изображенияGOOGLE_CSE_API_KEYиGOOGLE_CSE_ID— для функциональности веб-поискаBING_SEARCH_API_KEY— для резервного веб-поиска
При желании вы также можете вручную отредактировать файл .env .
Настройка MongoDB
Сервер MCP использует MongoDB для сохранения данных. У вас есть несколько вариантов настройки MongoDB:
Вариант 1: Автоматическая настройка (рекомендуется)
Запустите скрипт установки MongoDB, который проведет вас через весь процесс:
# Run the MongoDB setup script
npm run setup-mongodbЭтот скрипт:
Проверьте, доступен ли Docker
Запустите MongoDB с помощью Docker Compose (если доступно)
Настройте соединение в вашем .env-файле
Проверьте соединение с MongoDB
Вариант 2: Ручная настройка Docker
Самый простой способ начать работу с MongoDB — использовать включенную конфигурацию Docker Compose:
# Start MongoDB and Mongo Express in Docker
docker compose up -d
# Update your .env file with the connection string
echo "MONGODB_URI=mongodb://mcpuser:mcppassword@localhost:27017/mcp-server" >> .envMongoDB будет доступен по адресу mongodb://mcpuser:mcppassword@localhost:27017/mcp-server
Mongo Express (веб-администратор) будет доступен по адресу http://localhost:8081
Вариант 3: Локальная установка MongoDB
Если вы предпочитаете установить MongoDB локально:
Установите MongoDB с https://www.mongodb.com/try/download/community
Запустите службу MongoDB
Обновите файл
.envследующим образом:MONGODB_URI=mongodb://localhost:27017/mcp-server
Вариант 4: MongoDB Atlas (Облако)
Для производственного использования рекомендуется использовать MongoDB Atlas:
Создайте учетную запись на https://www.mongodb.com/cloud/atlas
Создать новый кластер
Настройте пользователя базы данных и добавьте свой IP-адрес в белый список
Получите строку подключения и обновите файл
.env:MONGODB_URI=mongodb+srv://<username>:<password>@<cluster>.mongodb.net/mcp-server?retryWrites=true&w=majority
Миграция базы данных
Чтобы перенести существующие данные в MongoDB:
# Run the migration script
npm run migrate-mongodbЭтот скрипт:
Перенос определений инструментов в MongoDB
Перенос конфигураций (например, ключей API) в MongoDB
Импортируйте любые резервные данные, если таковые имеются.
Использование
Запустить сервер
# Interactive startup (checks for API keys)
npm start
# Development mode with auto-reload
npm run dev
# Quick start (skips environment checks)
npm run quick-start
# Start server with PM2 process manager
npm run pm2:start
# Start server with PM2 in production mode
npm run pm2:start:prodСервер будет работать по адресу http://localhost:3000 (или по порту, указанному вами в .env).
Параметры запуска
Стандартный запуск (
npm start):Проверяет, настроены ли ключи API
Запрашивает настройку, если ключи не найдены
Рекомендуется для начинающих пользователей.
Режим разработки (
npm run dev):Использует nodemon для автоматической перезагрузки при изменении кода
Продолжает выполнять проверки окружающей среды
Лучшее для развития
Быстрый старт (
npm run quick-start):Обходит все проверки среды
Немедленно запускает сервер
Полезно, когда вы знаете, что ваша конфигурация верна.
Режим производства PM2 (
npm run pm2:start:prod):Запускает сервер с помощью менеджера процессов PM2
Автоматически перезапускается в случае сбоя сервера
Оптимизировано для производственных сред
Обходит проверки окружающей среды
Использование диспетчера процессов PM2
Сервер может работать с PM2, менеджером производственных процессов для приложений Node.js. PM2 предоставляет такие функции, как:
Управление процессами (перезапуск при сбое)
Управление журналами
Мониторинг производительности
Балансировка нагрузки (для нескольких экземпляров)
Команды PM2
# Start the server with PM2
npm run pm2:start
# Start in production mode
npm run pm2:start:prod
# View logs
npm run pm2:logs
# Monitor performance
npm run pm2:monit
# Restart the server
npm run pm2:restart
# Stop the server
npm run pm2:stop
# Remove the server from PM2
npm run pm2:deleteКонфигурация PM2 хранится в файле ecosystem.config.js . Вы можете изменить этот файл, чтобы изменить:
Имя процесса
Переменные среды
Ограничения памяти
Конфигурация развертывания
Количество экземпляров (для балансировки нагрузки)
Конечные точки API
POST /mcp/:provider
Делайте запросы к моделям ИИ через унифицированный API.
Параметры URL:
provider: Используемый поставщик ИИ (anthropicилиopenai)
Текст запроса:
{
"messages": [
{ "role": "user", "content": "Your prompt here" }
],
"model": "claude-3-opus-20240229", // Optional, provider-specific model name
"tools": [...], // Optional, tools for function calling
"context": "System message or context" // Optional
}ИЛИ (устаревший формат):
{
"prompt": "Your prompt here",
"model": "claude-3-opus-20240229", // Optional
"context": "System message or context" // Optional
}Ответ: возвращает необработанный ответ от API провайдера.
GET /tools/available
Получите полный список всех доступных инструментов с подробной информацией.
Параметры запроса:
format- Формат ответа:json(по умолчанию),yaml,tableилиhtmlcategory- Фильтрация инструментов по категории (необязательно)enabled- Фильтр по статусу включения:true(по умолчанию) илиfalsesearch- Поиск инструментов по названию, описанию или тегамprovider- Фильтрация инструментов по поставщику (например,openai,google)limit- Максимальное количество возвращаемых инструментов (для пагинации)offset- Смещение для пагинации (по умолчанию: 0)
Ответ (формат JSON):
{
"success": true,
"count": 10,
"metadata": {
"categories": ["web", "image", "utility"],
"providers": ["openai", "anthropic", "internal"],
"totalCount": 24,
"offset": 0,
"limit": 10
},
"tools": [
{
"name": "web_search",
"description": "Search the web for information",
"category": "web",
"version": "1.0.0",
"provider": "google",
"enabled": true,
"parameters": {
"query": {
"type": "string",
"description": "The search query",
"required": true
},
"limit": {
"type": "number",
"description": "Maximum number of results",
"required": false,
"default": 5
}
},
"usage": {
"endpoint": "/tools/web/search",
"method": "POST",
"parameters": { /* same as above */ }
},
"metadata": {
"createdAt": "2023-10-15T12:00:00Z",
"updatedAt": "2024-04-20T09:30:00Z",
"usageCount": 1245
}
}
// ... more tools
]
}GET /health
Конечная точка проверки работоспособности, которая возвращает статус 200, если сервер работает.
Управление данными
Резервное копирование баз данных
Вы можете создавать и управлять резервными копиями баз данных:
# Create a full backup
npm run backup-mongodb
# Create a backup with execution history
npm run backup-mongodb -- --with-executions
# List existing backups
npm run backup-mongodb -- --listТестирование соединения с базой данных
Чтобы проверить настройку MongoDB:
# Run the database test script
npm run test-mongodbПримеры клиентов
Клиент командной строки
Тестовый клиент включен в src/client.js . Чтобы запустить его:
node src/client.jsВеб-клиент
Простой веб-интерфейс доступен по адресу http://localhost:3000 , когда сервер запущен. Вы можете использовать его для тестирования API прямо из браузера.
Доступные инструменты
Сервер MCP предоставляет конечную точку обнаружения инструментов, которая позволяет пользователям и агентам ИИ программно перечислять все доступные инструменты:
Инструменты Discovery
GET /tools/available — выводит список всех доступных инструментов с подробной информацией.
Поддерживает несколько форматов: JSON, YAML, HTML и таблицы ASCII.
Обеспечивает фильтрацию по категории, поставщику и поисковым запросам.
Включает подробные метаданные и примеры использования для каждого инструмента.
Пример использования:
# Get all tools in JSON format
curl http://localhost:3000/tools/available
# Get tools in a specific category
curl http://localhost:3000/tools/available?category=web
# Search for image-related tools
curl http://localhost:3000/tools/available?search=image
# Get a formatted HTML page of all tools
curl http://localhost:3000/tools/available?format=html > tools.htmlИнструменты веб-поиска
Сервер включает в себя встроенные инструменты веб-поиска и извлечения:
Поиск в Интернете (
/tools/web/search)Поиск информации в Интернете по заданному запросу
Параметры:
query(обязательно),limit(необязательно)Требуется: переменные среды
GOOGLE_CSE_API_KEYиGOOGLE_CSE_IDВозвращается к
BING_SEARCH_API_KEY, если поиск Google не удался
Веб-контент (
/tools/web/content)Извлечение и извлечение контента из определенного URL-адреса
Параметры:
url(обязательно),useCache(необязательно)
Веб-пакет (
/tools/web/batch)Параллельное извлечение контента из нескольких URL-адресов
Параметры:
urls(обязательный массив),useCache(необязательно)
Инструменты создания изображений
Сервер также включает в себя инструменты для создания, редактирования и варьирования изображений:
Создать изображение (
/tools/image/generate)Сгенерировать изображение на основе текстовой подсказки
Параметры:
prompt(обязательно): Подробное описание изображенияprovider(необязательно):openaiилиstability(по умолчаниюopenai)options(необязательно): параметры, зависящие от поставщика
Редактировать изображение (
/tools/image/edit)Редактировать существующее изображение с помощью текстовой подсказки
Параметры:
imagePath(обязательно): Путь к редактируемому изображению.prompt(обязательно): Описание вносимого измененияmaskPath(необязательно): Путь к изображению маски
Создать вариацию изображения (
/tools/image/variation)Создайте вариант существующего изображения
Параметры:
imagePath(обязательно): Путь к изображению для создания вариаций
Примечание: Чтобы использовать эти инструменты, вам необходимо установить ключи API в вашем файле
.env:
Для изображений OpenAI:
OPENAI_API_KEYДля изображений ИИ стабильности:
STABILITY_API_KEYДля веб-поиска:
GOOGLE_CSE_API_KEYиGOOGLE_CSE_ID
Интеграция инструментов с моделями ИИ
Сервер MCP автоматически обрабатывает вызов и выполнение инструментов с моделями ИИ. Когда модель решает использовать инструмент, сервер:
Выполняет запрошенный инструмент с указанными параметрами.
Возвращает ответ инструмента на модель
Затем модель может включить ответ инструмента в свой окончательный ответ.
Поиск инструментов для моделей ИИ
Модели ИИ могут использовать конечную точку /tools/available чтобы узнать, какие инструменты доступны и как их использовать. Это особенно полезно для:
Динамическое обнаружение инструментов во время выполнения
Самодокументирование для агентов ИИ
Предоставление возможности системам ИИ адаптироваться к имеющимся возможностям
Пример системного запроса для моделей ИИ:
You have access to external tools through the MCP server.
Before using any tools, you should check what tools are available by calling:
GET /tools/available
This will return a list of all available tools with their parameters and usage instructions.
You can then use these tools by following the provided usage patterns.Пример использования инструмента
Пример кода, демонстрирующий использование инструмента, можно найти в каталоге /examples
Добавление новых поставщиков или инструментов
Добавление новых поставщиков ИИ
Чтобы добавить новых поставщиков ИИ:
Добавьте SDK провайдера в проект
Создайте новую функцию-обработчик в
server.jsДобавить новый случай в обработчик основного маршрута
Добавление новых инструментов
Чтобы добавить новые инструменты на сервер:
Создайте новую реализацию инструмента в каталоге
/src/toolsДобавьте определение инструмента в
tool-definitions.jsОбновите функции выполнения инструмента в
server.jsДобавить новые конечные точки API для прямого использования инструмента (при необходимости)
Лицензия
МСК