Skip to content

About

Reduce MCP token usage by 90%+ — Load Docker MCP servers on-demand instead of exposing all tools at once

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Docker MCP Orchestrator

🎯 Описание

Docker MCP Orchestrator — это интеллектуальная система управления MCP серверами, которая работает как proxy/gateway между AI-клиентом (Cursor) и множеством MCP серверов. Orchestrator предоставляет инструменты для управления серверами и проксирует все взаимодействие с запущенными серверами.

Ключевые возможности

  • ✅ Управление MCP серверами: Запуск, остановка, получение информации о серверах
  • ✅ Proxy функциональность: Все взаимодействие с запущенными серверами идет через Orchestrator
  • ✅ Управление конфигурацией: Настройка серверов, управление секретами
  • ✅ Управление промптами: Автоматическое извлечение и предоставление промптов для серверов
  • ✅ Кэширование: Эффективное кэширование метаданных для производительности
  • ✅ 14 Tools: Полный набор инструментов для управления MCP серверами

📋 Требования

  • Docker и Docker Compose
  • Docker Desktop с установленным MCP Toolkit
  • MCP серверы, добавленные в Docker MCP Catalog

🚀 Установка и запуск

Проект запускается ТОЛЬКО через Docker контейнер. Управление зависимостями осуществляется через Poetry.

1. Сборка Docker образа

docker build -t docker-mcp-orchestrator .

2. Запуск контейнера

docker run -it --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $(pwd)/config:/app/config:ro \
  docker-mcp-orchestrator

Или используя docker-compose:

docker-compose up -d

3. Публикация образа в Docker Registry

Образ уже опубликован в Docker Hub: semenovsd/docker-mcp-orchestrator

Доступные теги:

  • semenovsd/docker-mcp-orchestrator:latest - последняя версия
  • semenovsd/docker-mcp-orchestrator:0.1.0 - версия 0.1.0

Использование опубликованного образа:

# Скачать и запустить образ из Docker Hub
docker run -it --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $(pwd)/config:/app/config:ro \
  semenovsd/docker-mcp-orchestrator:latest

Для публикации новой версии:

# Сборка образа
docker build -t docker-mcp-orchestrator:latest .

# Тегирование для публикации
docker tag docker-mcp-orchestrator:latest semenovsd/docker-mcp-orchestrator:latest
docker tag docker-mcp-orchestrator:latest semenovsd/docker-mcp-orchestrator:0.1.0

# Публикация в Docker Hub
docker push semenovsd/docker-mcp-orchestrator:latest
docker push semenovsd/docker-mcp-orchestrator:0.1.0

4. Добавление в Cursor

Добавьте Orchestrator в конфигурацию Cursor MCP серверов (.cursor/mcp.json):

{
  "mcpServers": {
    "docker-mcp-orchestrator": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-v", "/var/run/docker.sock:/var/run/docker.sock",
        "-v", "/path/to/docker-mcp-orchestrator/config:/app/config:ro",
        "docker-mcp-orchestrator"
      ]
    }
  }
}

Или используя опубликованный образ из Docker Hub:

{
  "mcpServers": {
    "docker-mcp-orchestrator": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-v", "/var/run/docker.sock:/var/run/docker.sock",
        "-v", "/path/to/docker-mcp-orchestrator/config:/app/config:ro",
        "semenovsd/docker-mcp-orchestrator:latest"
      ]
    }
  }
}

Или используя docker-compose:

{
  "mcpServers": {
    "docker-mcp-orchestrator": {
      "command": "docker-compose",
      "args": [
        "-f", "/path/to/docker-mcp-orchestrator/docker-compose.yml",
        "exec",
        "-T",
        "orchestrator",
        "python",
        "-m",
        "orchestrator"
      ]
    }
  }
}

📚 Использование

Workflow работы с Orchestrator

  1. Получи список установленных серверов:

    list_installed_servers()
    
  2. Изучи возможности сервера:

    get_server_tools(server="github-mcp")
    get_server_info(server="github-mcp")
    
  3. Настрой конфигурацию (если необходимо):

    secret_set(key="GITHUB_TOKEN", value="your-token")
    config_set(server="postgres-mcp", config={"DATABASE_URL": "postgres://..."})
    
  4. Запусти нужные серверы:

    start_servers(servers=["github-mcp", "postgres-mcp"])
    

    После запуска вы получите:

    • Список доступных tools
    • Промпты для добавления в контекст (если есть)
  5. Используй tools через proxy:

    call_tool(tool_name="github_create_repo", arguments={"name": "my-repo"})
    
  6. Останови серверы после завершения:

    stop_servers(servers=["github-mcp", "postgres-mcp"])
    

Доступные Tools

Управление серверами (5 tools)

  • list_installed_servers - Список установленных серверов
  • list_catalog_servers - Список серверов в каталоге
  • start_servers - Запуск серверов
  • stop_servers - Остановка серверов
  • get_active_servers - Список активных серверов

Информация о серверах (2 tools)

  • get_server_tools - Метаданные о tools сервера
  • get_server_info - Детальная информация о сервере

Управление конфигурацией (5 tools)

  • config_set - Установка конфигурации
  • config_get - Получение конфигурации
  • secret_set - Установка секрета
  • secret_list - Список секретов
  • secret_remove - Удаление секрета

Proxy (2 tools)

  • call_tool - Вызов tool через proxy
  • list_active_tools - Список активных tools

🤖 AI Prompt Rules

Файл .cursorrules уже создан с кратким промптом (1 предложение) для экономии токенов.

Содержимое:

Все вызовы tools от запущенных MCP серверов идут ТОЛЬКО через call_tool(tool_name, arguments). 
Начинай с list_installed_servers(), настраивай конфигурацию перед запуском через start_servers(), 
и обязательно добавляй промпты в контекст при запуске серверов.

Перезапусти Cursor для применения правил.

Полная документация: prompts/ai_rules.md (для справки, не загружается автоматически)


🏗️ Архитектура

Компоненты

  1. Orchestrator MCP Server - Основной сервер с 14 tools
  2. Docker MCP Client - Интеграция с Docker MCP Toolkit
  3. Connection Pool - Управление соединениями с MCP серверами
  4. Proxy Layer - Маршрутизация запросов к серверам
  5. Cache Manager - Кэширование метаданных
  6. Prompt Manager - Управление промптами

Схема взаимодействия

Cursor → Orchestrator MCP Server (14 tools)
              │
              ├─► Docker MCP Toolkit CLI
              │
              └─► Proxy Layer
                  ├─► Connection Pool
                  │   ├─► github-mcp
                  │   ├─► postgres-mcp
                  │   └─► ...
                  │
                  └─► Tool Router

📝 Конфигурация

Конфигурация находится в config/config.yaml:

orchestrator:
  cache:
    servers_ttl: 300  # 5 минут
    tools_ttl: 600    # 10 минут
  
  docker_mcp:
    catalog: "docker-mcp"
    command_timeout: 30
    
  proxy:
    connection_pool_size: 10
    connection_timeout: 30
    reconnect_attempts: 3

🔧 Разработка

Структура проекта

docker-mcp-orchestrator/
├── src/
│   └── orchestrator/
│       ├── __init__.py
│       ├── __main__.py            # Точка входа
│       ├── server.py              # Основной MCP сервер
│       ├── docker_client.py       # Docker MCP Toolkit клиент
│       ├── cache.py                # Кэширование
│       ├── connection_pool.py      # Пул соединений
│       ├── proxy.py                # Proxy layer
│       ├── prompt_manager.py       # Управление промптами
│       ├── models.py               # Модели данных
│       ├── exceptions.py           # Исключения
│       ├── utils.py                # Утилиты
│       └── tools/                  # Все tools
├── config/
│   └── config.yaml                 # Конфигурация
├── prompts/
│   └── ai_rules.md                 # AI правила
├── Dockerfile                      # Docker образ
├── docker-compose.yml              # Docker Compose конфигурация
├── .dockerignore                   # Исключения для Docker
├── .gitignore                      # Исключения для Git
├── README.md
└── pyproject.toml                   # Poetry конфигурация

Управление зависимостями

Проект использует Poetry для управления зависимостями. Все зависимости определены в pyproject.toml.

Для обновления зависимостей:

# Внутри Docker контейнера
poetry lock
poetry install

Сборка образа

docker build -t docker-mcp-orchestrator .

⚠️ Важные замечания

Connection Pool

Важно: Механизм подключения к запущенным MCP серверам требует уточнения. В текущей реализации connection_pool.py содержит placeholder, который нужно будет реализовать после определения того, как Docker MCP Toolkit предоставляет доступ к запущенным серверам.

Варианты реализации:

  1. Через Docker MCP Toolkit gateway API
  2. Прямое подключение к контейнерам через stdio
  3. Использование SSE/streaming transport

Proxy функциональность

Все взаимодействие с запущенными серверами идет через Orchestrator proxy. AI должен использовать call_tool() для вызова tools, а не пытаться вызывать их напрямую.


📚 Документация


🐛 Известные проблемы

  1. Connection Pool: Требуется реализация механизма подключения к серверам
  2. MCP API: Формат возвращаемых значений может потребовать уточнения в зависимости от версии MCP библиотеки

📄 Лицензия

MIT License


🤝 Вклад

Вклад приветствуется! Пожалуйста, создавайте issue или pull request для предложений и исправлений.


📞 Поддержка

При возникновении проблем:

  1. Проверьте DEPLOYMENT.md для инструкций по развертыванию
  2. Проверьте раздел "Устранение неполадок" в README
  3. Создайте issue в репозитории GitHub

About

Reduce MCP token usage by 90%+ — Load Docker MCP servers on-demand instead of exposing all tools at once

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages