Skip to main content
Glama

MCP Tool Hub

Модульный, расширяемый мультисерверный хаб Model Context Protocol, созданный на TypeScript для команд автоматизации ИТ.

Предоставьте вашей LLM доступ к реальным инструментам: файлам, Git, веб-контенту и постоянной памяти. Развертывайте на любое количество клиентских машин одновременно с помощью Ansible.


Архитектура

mcp-tool-hub/
├── packages/
│   ├── core/              ← Shared types + BaseMCPServer abstract class
│   ├── server-filesystem/ ← Sandboxed local file access (read/write/list/delete)
│   ├── server-git/        ← Git log, diff, file contents, branches, status
│   ├── server-fetch/      ← Web fetching: HTML, JSON APIs, URL health checks
│   └── server-memory/     ← Persistent JSON knowledge base (survives restarts)
├── host/                  ← Orchestrator: registry + CLI + stdio JSON interface
├── ansible/               ← Playbook, inventory, systemd service templates
└── docs/                  ← How to add new servers (with template)

Архитектура следует шаблону Model Context Protocol:

  • Каждый сервер полностью независим — свой пакет, своя сборка

  • Реестр в хосте сопоставляет toolName → server во время выполнения

  • CLI предоставляет интерфейс stdio JSON — любая интеграция с LLM отправляет {"toolName":"...", "arguments":{...}} в stdin и считывает результат из stdout

  • Добавление нового сервера = создание пакета, расширение BaseMCPServer, регистрация в cli.ts


Быстрый старт

1. Установка и сборка

git clone https://github.com/your-org/mcp-tool-hub.git
cd mcp-tool-hub
npm install
npm run build

2. Настройка

cp .env.example .env
# Edit .env with your paths and settings

3. Запуск

# Via npm
npm run start --workspace=host

# Or directly
node host/dist/cli.js

4. Вызов инструмента

Отправьте JSON в stdin, получите JSON из stdout:

echo '{"toolName":"read_file","arguments":{"path":"hello.txt"}}' | node host/dist/cli.js

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

📁 Сервер файловой системы

Все операции ограничены песочницей MCP_FS_ROOT. Обход путей (../) заблокирован.

Инструмент

Описание

read_file

Чтение содержимого файла (utf8 или base64)

write_file

Запись или добавление в файл

list_directory

Список содержимого директории (опционально рекурсивно)

delete_file

Удаление файла

move_file

Перемещение или переименование файла

get_file_info

Получение размера, дат и типа пути

🔀 Сервер Git

Только для чтения. Операции записи отсутствуют.

Инструмент

Описание

git_log

История коммитов для репозитория или файла

git_show_file

Содержимое файла в конкретном коммите/ветке

git_diff

Разница между двумя ссылками (refs)

git_status

Статус рабочего дерева

git_branches

Список веток (локальные + опционально удаленные)

git_show_commit

Полные детали коммита и diff

🌐 Сервер Fetch

Поддерживает опциональный список разрешенных доменов через MCP_FETCH_ALLOWED_DOMAINS.

Инструмент

Описание

fetch_url

Получение HTML или текста по URL

fetch_json

Получение и разбор ответа JSON API

check_url

Проверка доступности URL (HEAD-запрос)

🧠 Сервер памяти

Постоянная память между перезапусками. Работает на основе JSON-файла.

Инструмент

Описание

memory_set

Сохранение значения с ключом, пространством имен и тегами

memory_get

Получение значения по ключу

memory_search

Полнотекстовый поиск по всем записям

memory_delete

Удаление записи

memory_list_namespaces

Список всех пространств имен с количеством записей

memory_clear_namespace

Удаление всех записей в пространстве имен


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

Развертывание на все клиентские машины одновременно:

cd ansible

# First time
ansible-playbook -i inventory.yml deploy-mcp-hub.yml

# Update only (rebuild + restart)
ansible-playbook -i inventory.yml deploy-mcp-hub.yml --tags update

# Deploy to specific group
ansible-playbook -i inventory.yml deploy-mcp-hub.yml --limit servers

Плейбук:

  1. Устанавливает Node.js 20 (если отсутствует)

  2. Создает выделенного системного пользователя mcp-hub

  3. Копирует и собирает проект

  4. Записывает конфигурацию .env из ваших переменных Ansible

  5. Устанавливает и запускает systemd-службу (автоматический перезапуск при сбое)

Переменные для каждого хоста в inventory.yml позволяют настраивать разные разрешенные домены, уровни логирования и пути для каждой группы машин.


Добавление нового сервера

См. docs/adding-a-new-server.template.ts для получения полного шаблона с комментариями.

Вкратце:

// 1. Create packages/server-myservice/src/my-server.ts
export class MyServer extends BaseMCPServer {
  constructor(options: MyOptions) {
    super(SERVER_INFO, options);
    this.registerTool("my_tool", this.handleMyTool.bind(this));
  }
  private async handleMyTool(args) {
    return this.ok({ result: "done" });
  }
}

// 2. Register in host/src/cli.ts
hub.use(new MyServer({ apiKey: process.env.MY_API_KEY! }));

Идеи: server-slack, server-postgres, server-docker, server-ansible, server-ssh, server-jira


Переменные окружения

Переменная

По умолчанию

Описание

MCP_DATA_DIR

./mcp-data

Корневая директория для всех данных хаба

MCP_FS_ROOT

./mcp-data/files

Корень песочницы файловой системы

MCP_GIT_WORKSPACE

./mcp-data/repos

Базовый путь для репозиториев Git

MCP_MEMORY_PATH

./mcp-data/memory.json

Файл хранилища памяти

MCP_FETCH_ALLOWED_DOMAINS

(пусто = все)

Список разрешенных доменов через запятую

MCP_LOG_LEVEL

info

debug|info|warn|error


Примечания по безопасности

  • Файловая система: Строго ограничена песочницей. Атаки обхода путей возвращают ошибку, а не данные.

  • Git: Только чтение. Операции commit, push или clone не предоставляются.

  • Fetch: Опциональный список разрешенных доменов предотвращает SSRF к внутренним сервисам.

  • Systemd-служба: Запускается от имени пользователя без прав root с параметрами PrivateTmp=true и NoNewPrivileges=true.


Требования

  • Node.js ≥ 18 (для нативного API fetch)

  • Git (для server-git)

  • Linux с systemd (для развертывания через Ansible)

F
license - not found
-
quality - not tested
C
maintenance

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/TOMJARA/mcp-tool-hub'

If you have feedback or need assistance with the MCP directory API, please join our Discord server