この記事はまだ構築して検証確認中です!
最近は「とりあえず全データをベクトルDBへ投入してRAG化」という構成が多いですが、Redmineのようなチケット管理システムでは、
- チケットが増え続ける
- コメントが大量に存在する
- ベクトル化コストが高い
- 最新情報との同期が必要
という問題があります。(私も何とかDifyで取ってきてRAG化しようと頑張ってみたけどループの制限など色々躓きポイントが多く、チケットが膨大になるとRAG化は厳しいと感じていました)
そこで、
「ナレッジを事前にRAG化するのではなく、LLMにRedmineの検索方法を教え、必要に応じてMCP経由でRedmineを検索させる」
という人間的アプローチはできないかと検索していたところ、なんとMCPでRedmineを操作できるツールを作っておられる方がいらっしゃるではないですか!
MCPを利用することで、RedmineそのものをAIの知識ソース兼業務システムとして利用するAIエージェント としての価値が生まれます。
構成は以下になります。
利用者
↓
OpenWebUI
↓
Ollama
↓Tool Calling
↓
Redmine MCP Server
↓
Redmine
├ チケット
├ コメント
├ Wiki
├ 添付ファイル
├ ガントチャート
└ カスタムフィールド
構築手順
1. Ollama導入
例:※ここは以前の記事を参照下さい
curl -fsSL https://ollama.com/install.sh | sh
モデル取得
ollama pull qwen3:32b
または
ollama pull llama3.3
他にもGemmaなど、GPUの性能など環境にあったモデルを選択下さい。
2. OpenWebUI導入
openwebuiをdocker-composeで立ち上げます。アクセスは http://127.0.0.1:3000/ です。
mkdir -p ~/work/openwebui/data
cd ~/work/openwebui/
vi docker-compose.yml
```yaml
version: "3.9"
services:
open-webui:
image: ghcr.io/open-webui/open-webui
container_name: open-webui
restart: unless-stopped
ports:
- "3000:8080"
volumes:
- ./data:/app/backend/data
```
ollamaが同じホストのホストOS上で立ち上げている場合は、以下を追加しておいて下さい。コンテナや別ホストなら以下設定は不要です。
extra_hosts:
- "host.docker.internal:host-gateway"
3. Redmine API有効化
Redmineはすでに動作しているものとします。必要な権限があるアカウントのAPIを取得してください。
管理
↓
設定
↓
API
↓
REST APIを有効
APIキー取得
個人設定
↓
APIアクセスキー
4. redmine-mcp-server導入
今回は、「https://github.com/jztan/redmine-mcp-server」を使わせていただきます。
これは、Redmineプロジェクト管理システムと連携するモデルコンテキストプロトコル(MCP)サーバー。このサーバーはMCPツールを介してRedmineデータへのシームレスなアクセスを提供し、AIアシスタントがRedmineインスタンスと連携できるようにします。
特徴
- 45個のMCPツール(加えて、1つのオペレーターツールは制限付き
REDMINE_MCP_EXPOSE_ADMIN_TOOLS=true):課題、プロジェクト、時間追跡、Wiki、ガントチャート、ファイル操作、メンバーシップ管理、製品、連絡先(CRM)、DMSFドキュメントなど - 柔軟な認証方式:APIキー、ユーザー名/パスワード、またはOAuth2ユーザーごとのトークン
- プロンプトインジェクション保護:安全なLLM消費のために境界タグでラップされたユーザー制御コンテンツ
- 読み取り専用モード
REDMINE_MCP_READ_ONLY:環境変数を使用して読み取り専用操作に制限します - HTTPファイル配信:UUIDベースのURLによる安全な添付ファイルアクセスと自動有効期限設定
- ページネーションサポート:設定可能な制限により、大量の結果セットを効率的に処理します。
- MCP準拠:FastMCPとHTTPトランスポートによる完全なモデルコンテキストプロトコルサポート
- Docker対応:完全なコンテナ化サポート
クイックスタート
ここでは、予め作成されたDockerイメージを利用します。
githubからリポジトリをダウンロードし、Docker用の設定ファイル[.env.docker]を設定します。
git clone https://github.com/jztan/redmine-mcp-server.git
cd redmine-mcp-server/
cp .env.docker.example .env.docker
vi .env.docker
---
<略>
REDMINE_URL=http://[REDMINEサーバのURL]
#REDMINE_USERNAME=your_username ← APIを使うのでコメントアウト
#REDMINE_PASSWORD=your_password ← APIを使うのでコメントアウト
REDMINE_API_KEY=[REDMINEから取得したAPIキー]
REDMINE_AUTH_MODE=legacy
# Server configuration
SERVER_HOST=0.0.0.0
SERVER_PORT=8000
# Public URL configuration for file serving
PUBLIC_HOST=localhost
PUBLIC_PORT=8000
# File management
ATTACHMENTS_DIR=./attachments
# ATTACHMENT_MAX_DOWNLOAD_BYTES=209715200 # get_redmine_attachmentのdownloadは200MB制限
AUTO_CLEANUP_ENABLED=true
CLEANUP_INTERVAL_MINUTES=10
ATTACHMENT_EXPIRES_MINUTES=60
<略>
dockerイメージをビルドして起動します。
docker compose up --build
サーバーが起動すると、http://localhost:8000MCPエンドポイントは/mcp、ヘルスチェックは/health、ファイル配信はでリッスンします/files/{file_id}。
http://localhost:8000/health
---
{"status":"ok","service":"redmine_mcp_tools","auth_mode":"legacy","checks":{"redmine":"ok"}}
ひとまず、上記の通り出力されていれば、redmine-mcp-serverはredmineサーバにAPIで接続できています。
MCPツール設計
利用可能なツール
この MCP サーバーは、Redmine と連携するための 45 個のツールを提供します (さらにREDMINE_MCP_EXPOSE_ADMIN_TOOLS=true、によって公開される 1 つのオペレーター ツールと、環境変数でオプトインする 5 つのプラグイン ゲート ツールがあり、すべて有効にすると最大 46 個になります)。詳細なドキュメントについては、ツール リファレンスを参照してください。
コアツール(40種類、常時利用可能)
これらのツールに必要なのは、Redmineのインスタンスと認証情報だけで、追加のプラグインや機能フラグは必要ありません。
- プロジェクト管理(9つのツール)
list_redmine_projects- アクセス可能なプロジェクトをすべて一覧表示しますlist_project_issue_custom_fields- プロジェクト用に設定された課題カスタムフィールドの一覧表示list_redmine_versionsプロジェクトのバージョン/マイルストーンを一覧表示するmanage_redmine_versionバージョン/マイルストーンの作成、更新、または削除list_project_membersプロジェクトのメンバーと役割を一覧表示します。summarize_project_status- プロジェクトの包括的なステータス概要を取得するlist_redmine_roles- Redmineインスタンスで定義されているすべてのロールを一覧表示します(有効なロールを見つけるためrole_ids)get_project_modulesプロジェクトで有効になっているモジュールを取得します。manage_project_memberプロジェクトメンバーシップの追加、更新、または削除
- 問題発生時の操作(13種類のツール)
get_redmine_issue- 詳細な問題情報を取得します(ジャーナルのページネーション、ウォッチャー、関連情報、子情報に対応)。list_redmine_issues- 柔軟なフィルタリング機能(プロジェクト、ステータス、担当者など)を使用して課題を一覧表示します。search_redmine_issues- テキストクエリで問題を検索create_redmine_issue- 新しい課題を作成するupdate_redmine_issue- 既存の問題を更新するdelete_redmine_issue- 不可逆的な削除を行う前に、必要な確認フラグと連鎖的な影響のプレビューを表示して、課題を完全に削除します。copy_issue- オプションのフィールドオーバーライドを使用して既存の問題を複製するlist_subtasks- 特定の親タスクのサブタスク(子タスク)を一覧表示するget_private_notes- 問題に関する非公開メモを取得するmanage_issue_relation- 課題関連のリスト表示、作成、または削除manage_issue_watcher- 課題のウォッチャーを追加または削除するmanage_issue_noteジャーナルノートのテキストを編集したり、プライバシー設定を切り替えたりするmanage_issue_category- 問題カテゴリの一覧表示、作成、更新、または削除- 注:名前でカスタムフィールド
get_redmine_issueを含めcustom_fieldsたりupdate_redmine_issue更新したりできます (例{"size": "S"})。
- 時間管理(4つのツール)
list_time_entriesプロジェクト、課題、ユーザー、日付範囲でフィルタリングして時間エントリを一覧表示するmanage_time_entry- タイムエントリを作成または更新する(user_id他のユーザーに代わってログを記録する場合に使用)list_time_entry_activities- 時間入力に利用可能なアクティビティの種類を確認するimport_time_entries- エントリごとのエラー報告機能を備えた、シーケンシャルなAPI呼び出しによるタイムエントリの一括インポート
- 発見/列挙(6つのツール):LLMが作成/更新ツールを呼び出す前に有効なIDを見つけるのを支援します
list_redmine_trackers- すべてのトラッカー(バグ、機能、サポートなど)を一覧表示します。list_redmine_issue_statuses- すべての課題ステータスとそのis_closedフラグを一覧表示しますlist_redmine_issue_priorities- すべての優先度レベルを一覧表示しますlist_redmine_users- ユーザーのフィルタリング/一覧表示(管理者のみ利用可能。名前とグループのフィルタリングに対応)get_current_user- 認証済みユーザーのプロファイルを取得します(管理者以外のユーザーにも有効です)list_redmine_queries- 保存済みのカスタムクエリの一覧表示(読み取り専用)
- 検索とWiki(2つのツール)
search_entire_redmine- 課題とWikiページ全体を対象としたグローバル検索(Redmine 3.3.0以降)manage_redmine_wiki_page- Wikiページの一覧表示、取得、作成、更新、削除、または名前変更
- ファイル操作(4つのツール)
list_filesプロジェクトのファイルセクションにアップロードされたファイルを一覧表示するupload_file- プロジェクトに新しいファイル(base64 コンテンツ)をアップロードします。必要に応じてバージョンに紐付けます。delete_fileプロジェクトからファイルを削除するget_redmine_attachment- 添付ファイルをダウンロードする(HTTPモードとstdioモードの両方で動作します)
- ガントチャート(ツール1つ)
get_gantt_chart- プロジェクトのタイムラインデータを取得する:日付、依存関係、マイルストーンに関する問題
- メタ(1ツール)
get_mcp_server_info- サーバーのバージョン、認証モード、読み取り専用状態、認証されたユーザー (current_user)、およびどのプラグインゲートツールファミリーが有効になっているかを報告します。最近リリースされた修正に依存する前にデプロイメントの遅延を検出したり、assigned_to_id="me"が に解決されることを確認したりするために使用します。
この他、Redmineにプラグインを入れることで利用できる機能があります。詳細はGitHubのREADMEをご確認下さい。
OpenWebUIへMCP登録
管理画面
Admin
↓
Tools
↓
MCP
登録
redmine-mcp-server
システムプロンプト
ここが重要です。
あなたはRedmineのナレッジ検索アシスタントです。
質問に回答する前に、
必要に応じてRedmineを検索してください。
検索結果から
・発生原因
・対応内容
・関連チケット
を整理して回答してください。
推測ではなくRedmineの内容を優先してください。
動作例
利用者
VPN接続が失敗する場合の対応方法を教えて
LLM
VPN
↓
search_issues()
MCP
#123
#456
#789
LLM
get_issue(123)
get_issue(456)
回答
過去の障害事例では
・証明書期限切れ
・FWポリシー変更
・DNS設定誤り
が主な原因でした。
特にチケット#456では
証明書更新で復旧しています。
この方式の最大の利点
RAGの場合
検索
↓
類似文書
↓
回答
になります。
MCPの場合
検索
↓
詳細取得
↓
追加検索
↓
分析
↓
回答
になります。
つまり
「AIがRedmineを操作して調査する」
という人間の保守担当者に近い動きになります。
Redmineのように「チケット」「コメント」「添付ファイル」「履歴」が蓄積される運用システムでは、RAGよりもMCPの方が自然に機能するケースが多いようです。
