Skip to main content
Glama
DunkelCloud

ToolMesh

Official
by DunkelCloud

ToolMesh — Позвольте ИИ-агентам взаимодействовать с реальными системами. Безопасно.

Недостающий уровень управления между ИИ-агентами и корпоративными системами. ToolMesh превращает неконтролируемые вызовы инструментов ИИ в управляемый, проверяемый процесс — и подключает любой REST API или MCP-сервер за минуты, а не месяцы.

Go License CI Go Report Card

30 строк YAML. Никаких серверов для сборки.

На практике MCP-серверы предоставляют лишь малую часть REST API, которые они оборачивают — и вы быстро столкнетесь с ограничениями. ToolMesh позволяет заменить уровень обертки файлами .dadl — декларативным форматом YAML, который описывает любой REST API как инструменты MCP. Не нужно создавать, развертывать или поддерживать сервер-обертку.

Current:    Claude → ToolMesh → MCP Server → REST API
With DADL:  Claude → ToolMesh → REST API (via .dadl file)

Вам не нужно писать YAML вручную. Вы просите LLM. Claude, GPT, Gemini — любая модель, знающая спецификацию DADL, создаст рабочий файл .dadl за секунды. Опишите, что вам нужно, поместите файл в config/dadl/, готово.

"Создай DADL для API GitHub — список репозиториев, открытие тикетов и создание pull-запросов."

10 секунд. Работает с любой LLM, понимающей формат.

И в отличие от MCP-шлюзов, которые просто передают вызовы инструментов, ToolMesh добавляет то, что действительно необходимо для промышленного развертывания:

  • Безопасность учетных данных — секреты внедряются во время выполнения, никогда не попадают в промпты или конфигурации клиентов LLM

  • Авторизация — детальный контроль пользователь → план → инструмент (OpenFGA)

  • Фильтрация входных и выходных данных — политики JS блокируют конфиденциальные данные и фильтруют ответы

  • Журнал аудита — каждый вызов инструмента записывается в структурированный лог или доступную для запросов базу данных SQLite

Related MCP server: MCPGate

Шесть столпов

Столп

Что делает

На чем основано

Любой бэкенд

30 строк DADL заменяют целый MCP-сервер. Также проксирует существующие MCP-серверы.

Go MCP SDK + DADL (файлы .dadl)

Режим кода

15 MCP-серверов одновременно? Без ToolMesh это невозможно. Режим кода сокращает 50 000+ токенов до ~1 000.

Вызовы инструментов, распарсенные через AST

Хранилище учетных данных

Секреты внедряются во время выполнения — никогда не попадают в промпты или конфигурации клиентов LLM

Внедрение для каждого запроса через конвейер Executor

OpenFGA

Детальная авторизация (пользователь → план → инструмент). Пример: бесплатные пользователи получают доступ только для чтения, Pro — полный доступ.

OpenFGA

Шлюз (Gate)

Блокировка конфиденциальных данных перед выполнением, маскирование PII в ответах

goja

Аудит

Каждый вызов инструмента записывается и доступен для запросов — отвечайте на вопрос "что сделал этот агент?" с помощью SQL

slog / SQLite

Попробуйте демо

Хотите попробовать ToolMesh перед установкой? Подключитесь к нашему публичному демо-экземпляру — без Docker, без конфигурации, без API-ключей:

demo.toolmesh.io — API Hacker News через ToolMesh. Работает с Claude Desktop, Claude Code и ChatGPT. Логин: dadl / toolmesh.

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

# Clone
git clone https://github.com/DunkelCloud/ToolMesh.git
cd ToolMesh

# Configure
cp .env.example .env
# IMPORTANT: Set a password — without it, all requests are rejected:
#   TOOLMESH_AUTH_PASSWORD=my-secret-password
# Or set an API key for programmatic access:
#   TOOLMESH_API_KEY=my-api-key

# Optional: local overrides (build locally, enable OpenFGA, HTTPS proxy, ...)
# cp docker-compose.override.yml.example docker-compose.override.yml
# # then edit docker-compose.override.yml — picked up automatically by Docker Compose

# Start (runs in bypass mode by default — no authz required)
docker compose up -d

# Verify it's running (default port: 8123)
curl http://localhost:8123/health

# MCP endpoint: http://localhost:8123/mcp
# Note: Most MCP clients require HTTPS — see TLS section below

TLS (важно)

Сам ToolMesh работает по обычному HTTP. Большинство MCP-клиентов, включая Claude Desktop, требуют HTTPS и будут отклонять URL-адреса http://. Вам нужен обратный прокси-сервер с поддержкой TLS перед ToolMesh:

Опция

Когда использовать

Caddy

Самохостинг с публичным доменом — автоматические сертификаты Let's Encrypt

Cloudflare Tunnel

Не нужны открытые порты, настройка TLS не требуется

nginx / Traefik

Уже есть в вашем стеке

Только для локальной разработки вы можете обойти TLS, отредактировав claude_desktop_config.json вручную (графический интерфейс требует https://).

Подключение к Claude Desktop

Добавьте в конфигурацию MCP Claude Desktop:

{
  "mcpServers": {
    "toolmesh": {
      "url": "https://toolmesh.example.com/mcp"
    }
  }
}

Для локальной разработки без TLS-прокси:

{
  "mcpServers": {
    "toolmesh": {
      "url": "http://localhost:8123/mcp"
    }
  }
}

Подключение к Claude.ai (пользовательский коннектор)

ToolMesh поддерживает OAuth 2.1 с PKCE S256 для удаленного доступа. Настройте пользователей в config/users.yaml и используйте публичный HTTPS URL в качестве конечной точки MCP.

Аутентификация

ToolMesh поддерживает два метода аутентификации, которые можно использовать независимо или вместе. Все состояние OAuth (токены, коды авторизации, клиенты) сохраняется в Redis и переживает перезагрузки сервера.

OAuth 2.1 (интерактивный вход)

Определите пользователей в config/users.yaml с паролями, хешированными через bcrypt:

users:
  - username: admin
    password_hash: "$2a$10$..."
    company: dunkelcloud
    plan: pro
    roles: [admin]

Генерируйте хеши паролей с помощью любой утилиты, поддерживающей bcrypt:

htpasswd -nbBC 10 "" "my-password" | cut -d: -f2

Для однопользовательских настроек TOOLMESH_AUTH_PASSWORD по-прежнему работает как резервный вариант. Настройте идентификацию с помощью TOOLMESH_AUTH_USER, TOOLMESH_AUTH_PLAN и TOOLMESH_AUTH_ROLES (по умолчанию: owner, pro, admin).

API-ключи (программный доступ)

Определите API-ключи в config/apikeys.yaml с хешированными ключами:

keys:
  - key_hash: "$2a$10$..."
    user_id: claude-code-user
    company_id: dunkelcloud
    plan: pro
    roles: [tool-executor]

Каждый ключ сопоставляется с отдельной идентификацией пользователя с собственным планом и ролями, которые передаются в авторизацию OpenFGA.

Для настроек с одним ключом TOOLMESH_API_KEY по-прежнему работает как резервный вариант. Те же переменные TOOLMESH_AUTH_USER, TOOLMESH_AUTH_PLAN и TOOLMESH_AUTH_ROLES управляют идентификацией.

Ограничение частоты DCR

Динамическая регистрация клиентов (DCR) ограничена 5 регистрациями в час на IP-адрес для предотвращения злоупотреблений.

Режим авторизации

OPENFGA_MODE управляет тем, применяется ли авторизация OpenFGA:

Режим

Поведение

bypass (по умолчанию)

Все вызовы инструментов разрешены без проверок авторизации

restrict

OpenFGA обеспечивает авторизацию пользователь → план → инструмент (требуется OPENFGA_STORE_ID)

Начните с bypass, чтобы быстро запустить систему, затем переключитесь на restrict после настройки OpenFGA.

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

См. docs/configuration.md для получения информации обо всех переменных окружения.

Настройка тайм-аутов

Переменная

По умолчанию

Описание

TOOLMESH_MCP_TIMEOUT

120

Тайм-аут HTTP-клиента (в секундах) для вызовов нижестоящих MCP-серверов

TOOLMESH_EXEC_TIMEOUT

120

Тайм-аут выполнения инструмента (в секундах) — дедлайн контекста для вызовов бэкенда

Увеличьте эти значения для бэкендов, которым требуется больше времени (например, веб-парсерам на базе браузера):

TOOLMESH_MCP_TIMEOUT=180
TOOLMESH_EXEC_TIMEOUT=180

Логирование

ToolMesh использует структурированное логирование через slog. Уровень по умолчанию — debug для полной отслеживаемости MCP «из коробки» — установите LOG_LEVEL=info или выше для продакшена, так как отладочные логи включают полные полезные нагрузки запросов/ответов. Файлы отладки для каждого бэкенда, форматы логов и все переменные логирования описаны в docs/configuration.md.

Архитектура

См. docs/architecture.md для получения полной документации по архитектуре.

                          ┌─────────────────────────────────┐
                          │          ToolMesh               │
                          │                                 │
                          │  Redis · OpenFGA · Audit        │
                          │  Credential Store · JS Gate     │
                          │                                 │
AI Agent ──MCP──────────▶ │   AuthZ ▸ Creds ▸ Gate ▸ Exec  │
                          │                                 │
                          └──┬──────┬───────┬───────┬───────┘
                             │      │       │       │
                          MCP Client  .dadl   .dadl   .dadl
                             │      │       │       │
                             ▼      ▼       ▼       ▼
                          MCP     Stripe  GitHub  Vikunja
                          Server   API     API     API

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

Создайте или отредактируйте config/backends.yaml:

backends:
  - name: memorizer
    transport: http
    url: "https://memorizer.example.com/mcp"
    api_key_env: "MEMORIZER_API_KEY"

Установите учетные данные в качестве переменной окружения:

CREDENTIAL_MEMORIZER_API_KEY=sk-mem-xxxxx

Инструменты из каждого бэкенда предоставляются с префиксом (например, memorizer_retrieve_knowledge). Учетные данные внедряются исполнителем (Executor) во время выполнения через CredentialStore — LLM никогда не видит API-ключи.

Режим REST-прокси (DADL)

Когда MCP-сервер не предоставляет нужную вам конечную точку, опишите ее в файле .dadl, и ToolMesh вызовет REST API напрямую — сервер-обертка не нужен. Оба режима работают параллельно.

Добавьте REST-бэкенд в config/backends.yaml:

backends:
  - name: vikunja
    transport: rest
    dadl: /app/dadl/vikunja.dadl
    url: "https://vikunja.example.com/api/v1"

Для внутренних сервисов с частными IP-адресами или самоподписанными сертификатами:

backends:
  - name: internal-api
    transport: rest
    dadl: internal.dadl
    url: "https://192.168.1.50:8443/api"
    allow_private_url: true    # allow private/loopback addresses (default: true)
    tls_skip_verify: true      # accept self-signed certificates (default: false)

Хотите, чтобы Claude выводил список тикетов GitHub? Вот все, что для этого нужно:

tools:
  list_issues:
    method: GET
    path: /repos/{owner}/{repo}/issues
    description: "List issues for a repository"
    params:
      owner: { type: string, in: path, required: true }
      repo:  { type: string, in: path, required: true }
      state: { type: string, in: query }

ToolMesh обрабатывает аутентификацию, пагинацию, повторные попытки и сопоставление ошибок. DADL поддерживает bearer-токены, OAuth2, сессионную аутентификацию, API-ключи, автоматическую пагинацию, повторные попытки с экспоненциальной задержкой, преобразование ответов, составные инструменты и многое другое.

Полную спецификацию, примеры и реестр сообщества см. на dadl.ai. Самый быстрый способ создать файл .dadl — попросить любую LLM, которая знает этот формат.

Режим кода

Подключить 15 MCP-серверов к одному ИИ-агенту? Без ToolMesh это просто не работает — контекстное окно заполняется, клиент «задыхается». Режим кода делает это возможным.

Вместо того чтобы предоставлять сотни отдельных определений инструментов (50 000+ токенов), ToolMesh предоставляет два мета-инструмента: list_tools и execute_code. LLM получает компактные интерфейсы TypeScript (~1 000 токенов) и пишет JavaScript для работы с ними:

const repos = await toolmesh.github_list_repos({ sort: "updated" });
const issues = await toolmesh.github_list_issues({
  owner: repos[0].owner.login,
  repo: repos[0].name,
  state: "open"
});

Несколько вызовов API за один цикл. ToolMesh анализирует код, извлекает вызовы инструментов и направляет их через полный конвейер выполнения.

Модель расширений

ToolMesh использует модель расширений на основе реестра, вдохновленную паттерном драйверов database/sql в Go. Три типа компонентов расширяемы через регистрацию init():

Компонент

Встроенный

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

Хранилище учетных данных

embedded

CREDENTIAL_STORE=<name>

Бэкенд инструментов

mcp, rest (DADL), echo

config/backends.yaml

Оценщик шлюза (Gate)

goja

GATE_EVALUATORS=<list>

Корпоративные расширения (InfisicalStore, VaultStore, Compliance-LLM и т. д.) запланированы и будут включены через теги сборки Go: go build -tags enterprise ./cmd/toolmesh.

См. docs/architecture.md для получения подробной информации.

Участие в разработке

См. CONTRIBUTING.md.

Лицензия

Apache 2.0 — Copyright 2025–2026 Dunkel Cloud GmbH

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Open-source MCP proxy that enforces security policies, content scanning, and audit logging between AI agents and tool servers
    25
    AGPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCPGate aggregates multiple MCP servers into a single unified endpoint, enabling centralized tool management with granular filtering, automatic namespacing, and observability. Features a real-time web dashboard and optional PostgreSQL-backed audit trails for monitoring and controlling AI tool access across local and remote deployments.
    6 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A secure tool-execution plane for agentic AI that enforces JWT authentication, rate limiting, prompt-injection inspection, and audit logging, while ingesting downstream OpenAPI endpoints as MCP tools.
    MIT