Skip to main content
Glama

redmine-mcp

ci license: MIT python container

Stateless-сервер Model Context Protocol для Redmine. Разверните его перед любым экземпляром Redmine, и позвольте Claude (или любому MCP-совместимому LLM-клиенту) читать и создавать задачи, регистрировать время, просматривать вики и искать проекты от имени пользователя, используя API-ключ каждого пользователя.

  • Без состояния: нет базы данных, нет сессий, нет общих секретов. Сервер пересылает каждый запрос в Redmine, используя API-ключ, который поступил вместе с ним.

  • Один сервер, много пользователей: единственное, что настраивает оператор — это REDMINE_URL. Каждый MCP-клиент предоставляет свой собственный X-Redmine-API-Key. Права доступа определяются настройками Redmine.

  • Покрытие: задачи (CRUD + заметки), проекты, членство, пользователи, записи времени, вики (PUT-upsert), вложения (загрузка + скачивание), полнотекстовый поиск, статусы, трекеры, категории, пользовательские поля, перечисления.

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

Локально (uv)

uv sync
REDMINE_URL=https://redmine.example.com uv run redmine-mcp

Теперь MCP-эндпоинт доступен по адресу http://127.0.0.1:8080/mcp.

Контейнер (GHCR)

docker run --rm -p 8080:8080 \
  -e REDMINE_URL=https://redmine.example.com \
  ghcr.io/kalvadtech/redmine-mcp:latest

Образ основан на многоэтапной сборке Alpine, работает от имени пользователя без прав root и слушает порт 8080.

Related MCP server: Redmine MCP Server

Подключение к вашему MCP-клиенту

Найдите свой API-ключ Redmine в разделе Моя учетная запись > Ключ доступа к API. Оба клиента ниже взаимодействуют с одним и тем же MCP-эндпоинтом через Streamable HTTP; никакой другой настройки клиента не требуется.

Claude Code

Файл .mcp.json в корне вашего проекта:

{
  "mcpServers": {
    "redmine": {
      "type": "http",
      "url": "http://127.0.0.1:8080/mcp",
      "headers": {
        "X-Redmine-API-Key": "your-40-char-key"
      }
    }
  }
}

opencode

Файл opencode.json в корне вашего проекта (или в директории конфигурации opencode):

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "redmine": {
      "type": "remote",
      "url": "http://127.0.0.1:8080/mcp",
      "enabled": true,
      "headers": {
        "X-Redmine-API-Key": "{env:REDMINE_API_KEY}"
      }
    }
  }
}

opencode поддерживает интерполяцию {env:VAR} в headers, поэтому API-ключ не попадает в файл конфигурации: REDMINE_API_KEY=... opencode.

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

Переменная

Обязательно

По умолчанию

Назначение

REDMINE_URL

да

-

Базовый URL экземпляра Redmine (http или https)

CLI-флаги для redmine-mcp:

--host        bind address (default 127.0.0.1)
--port        port (default 8080)
--log-level   uvicorn log level (default info)

Сервер немедленно завершает работу при запуске, если REDMINE_URL отсутствует или не является http(s).

Модель аутентификации

URL Redmine не предоставляется пользователем; он фиксируется для каждого развертывания через REDMINE_URL. Это исключает риск SSRF: клиенты не могут направить сервер на произвольные хосты.

Единственные учетные данные, которые отправляет клиент — это его собственный API-ключ Redmine в заголовке X-Redmine-API-Key. Сервер пересылает его как тот же заголовок в Redmine (чтобы он не попадал в логи доступа Redmine в виде строки запроса), использует его для выполнения одного запроса, а затем отбрасывает. Кэширование, общие сервисные учетные записи или олицетворение отсутствуют.

Инструменты

59 инструментов охватывают все семейства ресурсов, которые Redmine предоставляет через свой REST API. Инструменты списка возвращают {items, total_count, limit, offset} для удобной пагинации.

Задачи

  • list_issues (проект, статус, исполнитель, трекер, категория, версия, сохраненный запрос, произвольный текстовый запрос, сортировка, включение)

  • get_issue (включение: журналы, вложения, связи, дочерние элементы, наблюдатели)

  • create_issue (вкл. токены uploads, custom_fields, watcher_user_ids)

  • update_issue (вкл. notes, private_notes)

  • add_issue_note (легкая обертка)

  • delete_issue

Связи задач

  • list_issue_relations, get_relation, create_issue_relation (связывает / блокирует / предшествует / и т.д., с delay для предшествует/следует за), delete_relation

Журналы (заметки к задачам)

  • update_journal_note — редактирование текста или приватности существующей заметки. Используйте add_issue_note для добавления новой заметки.

Проекты и версии

  • list_projects, get_project

  • list_versions, get_version, create_version, update_version, delete_version

Членство

  • list_memberships, get_membership, add_project_member (пользователь или группа), update_membership, remove_membership

Пользователи, моя учетная запись, группы, роли

  • list_users, get_user (принимает литеральную строку "current")

  • get_my_account, update_my_account

  • list_groups, get_group, create_group, update_group, delete_group, add_user_to_group, remove_user_from_group

  • list_roles, get_role (с правами доступа)

Записи времени

  • list_time_entries (диапазоны дат, пользователь, проект, задача)

  • create_time_entry (задача или проект, часы, активность, spent_on, комментарии)

  • update_time_entry, delete_time_entry

Вики

  • list_wiki_pages, get_wiki_page (с версией)

  • create_or_update_wiki_page (PUT-upsert)

  • delete_wiki_page

Вложения и файлы

  • get_attachment, download_attachment (ограничено 25 МБ, вывод в base64)

  • upload_attachment (возвращает токен для прикрепления через uploads при create_issue / update_issue)

  • list_files, upload_file (однократная загрузка + прикрепление к области файлов проекта, с опциональными version_id и описанием)

Новости, запросы, поиск и метаданные

  • list_news (межпроектные или по проектам)

  • list_queries (сохраненные запросы; передайте id как query_id в list_issues)

  • search (полнотекстовый поиск по задачам, новостям, документам, вики и т.д.)

  • list_issue_statuses, list_trackers, list_issue_categories, list_custom_fields

  • list_issue_priorities, list_time_entry_activities, list_document_categories

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

Для одного экземпляра Redmine запускайте один контейнер на среду:

docker run -d --name redmine-mcp \
  --restart unless-stopped \
  -p 8080:8080 \
  -e REDMINE_URL=https://redmine.example.com \
  ghcr.io/kalvadtech/redmine-mcp:latest

Разместите его за вашим обычным обратным прокси-сервером с TLS-терминацией. Протокол MCP на стороне сервера работает только по HTTP; пользователи получают TLS через ваш прокси.

Для нескольких экземпляров Redmine запускайте по одному контейнеру на каждый экземпляр со своим REDMINE_URL и маршрутизируйте по имени хоста / пути на прокси-сервере.

Разработка

uv sync
uv run pytest
uv run ruff check .
uv run mypy src

Набор тестов полностью автономен и использует respx для имитации HTTP API Redmine. Интеграционные тесты против реального Redmine отсутствуют; используйте свой собственный.

Вклад в проект

Pull-запросы приветствуются. Пожалуйста:

  • следуйте Conventional Commits,

  • делайте изменения краткими и сфокусированными (одно логическое изменение на коммит),

  • добавляйте или обновляйте тесты для любых изменений поведения,

  • запускайте pytest, ruff и mypy перед открытием PR.

Лицензия

MIT (c) 2026 Kalvad.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server providing 63 tools to interact with Redmine instances, covering issues, projects, time entries, and wiki pages. It utilizes streamable HTTP transport and supports per-client authentication for secure management of Redmine resources.
    6 npm
    -
  • A
    license
    B
    quality
    D
    maintenance
    MCP server for Redmine project management, enabling tools for managing projects, issues, users, time entries, groups, memberships, versions, wiki, news, attachments, search, and Agile sprints via the Redmine REST API.
    89
    11 npm
    1
    MIT