redmine-mcp-server について
redmine-mcp-serverは、MCP経由でRedmineを操作するチーム向けに、RedmineインスタンスをAIアシスタントへ接続します。課題、プロジェクト、工数、Wiki、ファイルなどのツールを提供し、複数の認証方式と読み取り専用制御に対応します。
主な機能
- 01課題、プロジェクト、ニュースの管理
- 02工数、Wiki、ファイルの操作
- 03ガント、メンバー、プラグインへの対応
- 04複数の認証方式
- 05読み取り専用とツールのアクセス制限
- 06MCP Appsによるボード表示
活用シーン
- 01会話から課題を整理・割り当て
- 02プロジェクトの工数とWikiを確認
- 03ボードで未対応の課題を確認
MCP 対応
MCPサーバーはRedmineのプロジェクト、課題、工数、Wikiページ、ファイルをツールとしてMCPクライアントに公開します。HTTPトランスポートに加え、stdioモードにも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx redmine-mcp-serverREDMINE_URLURL of your Redmine server (e.g., https://your-redmine-server.com)REDMINE_USERNAMERedmine username for authentication (alternative to API key)REDMINE_PASSWORDシークレットRedmine password for authentication (alternative to API key)REDMINE_API_KEYシークレットRedmine API key for authentication (alternative to username/password)SERVER_HOSTHost address for the MCP server (default: 0.0.0.0)SERVER_PORTPort for the MCP server (default: 8000)PUBLIC_HOSTPublic hostname for file download URLs (default: localhost)PUBLIC_PORTPublic port for file download URLs (default: 8000)ATTACHMENTS_DIRDirectory for storing downloaded attachments (default: ./attachments)AUTO_CLEANUP_ENABLEDEnable automatic cleanup of expired files (default: true)CLEANUP_INTERVAL_MINUTESInterval between cleanup runs in minutes (default: 10)ATTACHMENT_EXPIRES_MINUTESDefault expiry time for attachments in minutes (default: 60)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Redmine MCP Server
AI アシスタントを Redmine に接続する Model Context Protocol(MCP)サーバーです。Redmine インスタンスのプロジェクト、チケット、時間管理、Wiki ページ、ファイルを MCP ツールとして公開します。
mcp-name: io.github.jztan/redmine-mcp-server
redmine-mcp-server を通じて Redmine のスプリントをトリアージする AI エージェント。ライブデモを試す →
ツールリファレンス | 変更履歴 | コントリビューション | トラブルシューティング
機能
- 標準の Redmine で 53 個、RedmineUP と DMSF プラグインを使うと 68 個の MCP ツール(さらに、
REDMINE_MCP_EXPOSE_ADMIN_TOOLS=trueで有効になるオペレーター用ツール 1 個):チケット、プロジェクト、ニュース、時間管理、Wiki、ガントチャート、ファイル操作、メンバー管理、製品、連絡先と取引(CRM)、DMSF ドキュメント、Helpdesk のメール返信とチケット連絡先など - インタラクティブなカンバンボード:
show_triage_boardは MCP Apps 拡張機能を介して、チャット内にドラッグ&ドロップ可能なライブのチケットボードを表示します - 柔軟な認証:API キー、ユーザー名とパスワード、ユーザーごとの OAuth2 トークン、または OAuth に対応していない Redmine での、各ユーザー自身の API キーを使ったブラウザーログイン
- プロンプトインジェクション対策:ユーザーが制御するコンテンツを境界タグで囲み、LLM が安全に扱えるようにします
- 読み取り専用モード:
REDMINE_MCP_READ_ONLY環境変数で読み取り専用操作に制限します - HTTP ファイル配信:有効期限が自動設定される UUID ベースの URL を使って、添付ファイルに安全にアクセスできます
- ページネーション対応:設定可能な上限を使って大規模な結果セットを処理できます
- MCP 準拠:HTTP トランスポートを備えた FastMCP 上に構築されています
- Docker 対応:Dockerfile、docker-compose のセットアップ、GHCR 上のビルド済みイメージを用意しています
クイックスタート
- パッケージをインストールする
pip install redmine-mcp-server - Redmine の認証情報を記載した
.envファイルを作成する(テンプレートはインストールを参照) - サーバーを起動する
redmine-mcp-server - MCP クライアントの設定にあるガイドのいずれかを使って、サーバーを MCP クライアントに追加する
起動すると、サーバーは http://localhost:8000 でリクエストを受け付けます。MCP エンドポイントは /mcp、ヘルスチェックは /health、ファイル配信は /files/{file_id} です。
インストール
前提条件
- Python 3.10 以降(ローカルインストールの場合)
- Docker(代替のデプロイ方法。Python 3.13 を使用)
- Redmine インスタンスへのアクセス
Redmine との互換性
統合テストは、Redmine 6.1 および 7.0 で完全に成功します。これより古いバージョンはテストされていません。各ツールには、判明している場合は個別の最小バージョンが記載されています(全体検索には 3.3.0 以降、課題のウォッチャーには 2.3.0 以降、プロジェクトの時間記録のアクティビティには 3.4.0 以降が必要です)。そのため、古いサーバーでは該当するツールのみが失敗し、サーバー全体が失敗することはありません。
ユーザーごとの認証はどのバージョンでも機能します。OAuth2 では Doorkeeper を利用するために Redmine 6.1 以降が必要ですが、他のユーザーごとの認証方式には必要ありません。認証方式の選択については、認証を参照してください。
PyPI からインストール(推奨)
# Install the package
pip install redmine-mcp-server
# Create configuration file .env
cat > .env << 'EOF'
# Redmine connection (required)
REDMINE_URL=https://your-redmine-server.com
# Authentication - Use either API key (recommended) or username/password
REDMINE_API_KEY=your_api_key
# OR use username/password:
# REDMINE_USERNAME=your_username
# REDMINE_PASSWORD=your_password
# Server configuration (optional, defaults shown)
SERVER_HOST=0.0.0.0
SERVER_PORT=8000
# Public URL for file serving (optional)
PUBLIC_HOST=localhost
PUBLIC_PORT=8000
# File management (optional)
ATTACHMENTS_DIR=./attachments
AUTO_CLEANUP_ENABLED=true
CLEANUP_INTERVAL_MINUTES=10
ATTACHMENT_EXPIRES_MINUTES=60
EOF
# Edit .env with your actual Redmine settings
nano .env # or use your preferred editor
# Run the server
redmine-mcp-server
# Or alternatively:
python -m redmine_mcp_server.main
サーバーは http://localhost:8000 で動作し、MCP エンドポイントは /mcp、ヘルスチェックは /health、ファイル配信は /files/{file_id} で利用できます。
環境変数の設定
環境変数
| 変数 | 必須 | デフォルト | 説明 | |----------|----------|---------|-------------| | `REDMINE_URL` | はい | – | Redmine インスタンスのベース URL | | `REDMINE_AUTH_MODE` | いいえ | `legacy` | 認証モード:`legacy`、`legacy-per-user`、`oauth`、`oauth-proxy`、または `api-key-login`([認証](#authentication)を参照) | | `REDMINE_PER_USER_TRUST_PROXY` | はい* | `false` | `legacy-per-user` モードで必須です。運用者の確認事項:「このサーバーは TLS の背後にあり、プロキシはクライアントの `X-Forwarded-Proto` を転送しません。」 | | `REDMINE_PER_USER_AUDIT_IDENTITY` | いいえ | `false` | `legacy-per-user` 専用:リクエストごとに Redmine のユーザー ID を特定してログに記録します(追加のラウンドトリップが 1 回発生します) | | `REDMINE_API_KEY_LOGIN_ALLOW_ADMIN` | いいえ | `false` | `api-key-login` 専用:Redmine 管理者の API キーを受け入れます。どちらの場合も、トークンに `admin` スコープが付与されることはありません([詳細](docs/api-key-login-auth.md#administrator-accounts)) | | `REDMINE_API_KEY_LOGIN_ALLOW_HTTP` | いいえ | `false` | `api-key-login` 専用:`REDMINE_MCP_BASE_URL` に `http://` を許可します。ローカル開発専用です | | `REDMINE_API_KEY_LOGIN_SESSION_DAYS` | いいえ | `30` | `api-key-login` 専用:ユーザーが再ログインするまでのセッション期間です。正の値を指定してください | | `REDMINE_API_KEY_LOGIN_RATE_LIMIT` | いいえ | `300` | `api-key-login` 専用:1 分あたりのログイン試行回数。プロセス全体に適用される安全上限です | | `REDMINE_API_KEY_LOGIN_BINDING_CRYPTO` | いいえ | `server-secret` | `api-key-login` 専用:`server-secret` または `token-derived`。`token-derived` は、サーバー側からの読み取りができなくなる代わりに、保存された API キーをボリュームと署名キーの両方を持つ者から保護します([詳細](docs/api-key-login-auth.md#binding-protection)) | | `REDMINE_API_KEY` | はい† | – | API キー(legacy モード専用) | | `REDMINE_USERNAME` | はい† | – | Basic 認証用のユーザー名(legacy モード専用) | | `REDMINE_PASSWORD` | はい† | – | Basic 認証用のパスワード(legacy モード専用) | | `REDMINE_MCP_BASE_URL` | はい‡¶ | `http://localhost:3040` | このサーバーの公開ベース URL。末尾にスラッシュは付けません(OAuth モードおよび `api-key-login`) | | `FASTMCP_STREAMABLE_HTTP_PATH` | いいえ | `/mcp` | `REDMINE_MCP_BASE_URL` 内の MCP トランスポートパス | | `REDMINE_INTROSPECT_CLIENT_ID` | はい‡ | – | MCP サーバーが Bearer トークンをイントロスペクションする際に使用する Doorkeeper OAuth クライアント ID(RFC 7662)。Redmine に機密 OAuth アプリを登録してください([`docs/oauth-setup.md`](docs/oauth-setup.md) のステップ 2 を参照)。 | | `REDMINE_INTROSPECT_CLIENT_SECRET` | はい‡ | – | イントロスペクションクライアントのシークレット | | `REDMINE_MCP_JWT_SIGNING_KEY` | はい§¶ | – | FastMCP OAuthProxy トークンとストレージ、および `api-key-login` ストアで使用する、変更しない署名/暗号化キーです。変更すると全員がログアウトします | | `REDMINE_OAUTH_CLIENT_ID` | いいえ | – | `oauth-proxy` 用の任意の Redmine 上流 OAuth クライアント ID。デフォルトは `REDMINE_INTROSPECT_CLIENT_ID` です | | `REDMINE_OAUTH_CLIENT_SECRET` | いいえ | – | `oauth-proxy` 用の任意の Redmine 上流 OAuth クライアントシークレット。デフォルトは `REDMINE_INTROSPECT_CLIENT_SECRET` です | | `FASTMCP_HOME` | いいえ | プラットフォームのデフォルト(Docker では `/app/data/fastmcp`) | FastMCP のデータディレクトリです。`oauth-proxy` モードでは暗号化された OAuthProxy の状態が `FASTMCP_HOME/oauth-proxy/` 以下に、`api-key-login` モードでは `FASTMCP_HOME/api-key-login/` 以下に保存されます。コンテナの再ビルド後も保持するには、いずれも永続ボリューム上に配置する必要があります | | `REDMINE_MCP_ALLOWED_CLIENT_REDIRECT_URIS` | いいえ | ループバックのみ | `oauth-proxy` および `api-key-login` のクライアントリダイレクト URI 許可リスト(glob パターン、カンマまたはスペース区切り)。未設定の場合は `http://localhost:*` と `http://127.0.0.1:*` が許可されます。`*` はすべて許可します | | `REDMINE_MCP_ACCESS_TOKEN_EXPIRY_SECONDS` | いいえ | Redmine の `expires_in`(2h) | `oauth-proxy` 専用。プロキシがクライアントに発行するアクセストークンの有効期間です。クライアントがまれにしか更新しなくなるよう、値を大きくしてください(例:`604800`)。上流の Redmine トークンは引き続きサーバー側で更新されます。未設定または `0` の場合は Redmine と同じ値を使用します | | `HEALTH_INTROSPECTION_TTL_SECONDS` | いいえ | `30` | `/health` の Doorkeeper イントロスペクションプローブキャッシュの TTL(秒)。キャッシュを無効にするには `0` を設定します。 | | `SERVER_HOST` | いいえ | `0.0.0.0` | MCP サーバーがバインドするホスト/IP | | `SERVER_PORT` | いいえ | `8000` | MCP サーバーがリッスンするポート | | `REDMINE_MCP_TRANSPORT` | いいえ | `http` | `http` は `/mcp` で MCP を提供します。`stdio` は、ポートもブリッジも使用せず、サーバー自体を起動するクライアントに標準入力/標準出力経由で MCP を提供します。`legacy` モード専用です。それ以外の値を指定すると起動を拒否します([詳細](#stdio-transport)) | | `PUBLIC_HOST` | いいえ | `localhost` | ダウンロード URL の生成に使用するホスト名 | | `PUBLIC_PORT` | いいえ | `8000` | ダウンロード URL に使用する公開ポート | | `PUBLIC_SCHEME` | いいえ | 自動判定 | ダウンロード URL のスキーム(`http` または `https`)。未設定の場合、`PUBLIC_PORT=443` なら `https`、それ以外なら `http` と判定されます。標準以外のポートで TLS を使用する場合は明示的に設定してください。生成される URL ではデフォルトポート(80/443)が省略されます。 | | `REDMINE_PUBLIC_URL` | いいえ | – | 外部からアクセス可能な Redmine インスタンスの URL。設定すると、添付ファイルで返される `content_url` のオリジンが `REDMINE_URL` からこの URL に書き換えられます(パス/クエリ/フラグメントおよびリバースプロキシのサブパスは保持されます)。`REDMINE_URL` が MCP クライアントから到達できない内部コンテナホスト名の場合に便利です。未設定の場合は、Redmine が返す未加工の URL が返されます。 | | `ATTACHMENTS_DIR` | いいえ | `./attachments` | ダウンロードした添付ファイルの保存ディレクトリ | | `ATTACHMENT_MAX_DOWNLOAD_BYTES` | いいえ | `209715200`(200 MB) | コンテンツタイプにかかわらず、すべての `get_redmine_attachment` ダウンロードに適用される上限です。上限を超えるとダウンロードはストリームの途中で中止され、不完全なファイルは削除されます。 | | `REDMINE_MCP_UPLOAD_FILE_ROOTS` | いいえ | – | `file_path` によるアップロード元として許可する追加ディレクトリ(OS のパス区切り文字で区切ります)。`ATTACHMENTS_DIR` は常に許可されます。未設定の場合、アップロード元は `ATTACHMENTS_DIR` のみに制限されます。 | | `AUTO_CLEANUP_ENABLED` | いいえ | `true` | 期限切れの添付ファイルを自動でクリーンアップするかどうかを切り替えます | | `CLEANUP_INTERVAL_MINUTES` | いいえ | `10` | クリーンアップタスクの間隔(`oauth-proxy` および `api-key-login` モードでは期限切れの OAuth 状態も削除します) | | `ATTACHMENT_EXPIRES_MINUTES` | いいえ | `60` | 生成されたダウンロード URL の有効期間 | | `REDMINE_MCP_JOURNAL_VALUE_MAX_CHARS` | いいえ | `500` | この文字数を超えると、ジャーナルのフィールド変更では変更前後のテキスト全体の代わりに、`old_value_length`/`new_value_length` と `elided: true` が返されます。Redmine は説明の編集時に両方のテキストを記録するため、何度も編集されたチケットでは説明が複数回返されることがあります。省略を無効にするには `0` を設定します。`get_redmine_issue` と `get_private_notes` では、呼び出しごとに `include_journal_values=true` を指定できます。 | | `REDMINE_MCP_EXPOSE_ADMIN_TOOLS` | いいえ | `false` | MCP インターフェースに運用者/管理者向けツールを公開します。現在は `cleanup_attachment_files` の公開を制御します。このフラグにかかわらず、バックグラウンドのクリーンアップタスクは実行されます。 | | `REDMINE_SSL_VERIFY` | いいえ | `true` | SSL 証明書の検証を有効/無効にします | | `REDMINE_SSL_CERT` | いいえ | – | カスタム CA 証明書ファイルのパス | | `REDMINE_SSL_CLIENT_CERT` | いいえ | – | 相互 TLS 用のクライアント証明書のパス | | `REDMINE_TIMEOUT` | いいえ | `30` | 呼び出しを失敗とするまで Redmine の HTTP 応答を待つ秒数です。接続タイムアウトは最大 10 秒、読み取りタイムアウトは指定値全体として適用されます。無期限に待機するには `0` を設定します。これにより以前の動作に戻り、リクエストがハングする可能性があります。 | | `REDMINE_MCP_READ_ONLY` | いいえ | `false` | `true` に設定すると、すべての書き込み操作(作成/更新/削除)をブロックします | | `REDMINE_MCP_ALLOW_TOOLS` | いいえ | – | ここで指定したツールのみを公開します(名前をカンマ区切りで指定)。未設定の場合はすべて公開されます。設定してもツール名が指定されていない場合は起動を拒否します。公開範囲を狭めるだけです。リストにあるツールでも、プラグインフラグがオフなら非表示のままです。ツール全体が対象となるため、`manage_X` のアクションごとの制御は引き続き `REDMINE_MCP_READ_ONLY` で行います。一致するツール名がない場合は起動時に警告されます([詳細](docs/tool-reference.md#tool-allow-list)) | | `REDMINE_MCP_ALLOW_TOOLS_FILE` | いいえ | – | 許可するツール名を 1 行に 1 つずつ記載したファイルのパス(`#` でコメントを開始します)。`REDMINE_MCP_ALLOW_TOOLS` が未設定または空の場合に使用します | | `REDMINE_MCP_EXTENSIONS` | いいえ | – | 社内 Redmine プラグイン用のツールを登録するため、起動時にインポートする Python モジュール(カンマまたは空白区切り。記載順にインポートされます)。未設定の場合はインポートしません。インポートに失敗するモジュールや、すでに使用されているファミリー名またはツール名を登録しようとするモジュールがあると、サーバーは停止します([詳細](docs/extensions.md)) | | `REDMINE_OAUTH_SCOPE_ENFORCEMENT` | いいえ | `on` | OAuth モードおよび `api-key-login` 専用:アクセストークンにツールの Redmine 権限スコープが含まれていない場合はツール呼び出しを拒否し、それに応じて `tools/list` もフィルタリングします。以前のトークンで再度同意を求める間、一時的に `off` に設定できます([詳細](docs/oauth-setup.md#scope-enforcement)) | | `REDMINE_OAUTH_DISCOVERY_AS` | いいえ | `redmine` | OAuth モード専用:認可サーバーのディスカバリー情報でどちらを通知するかを指定します。`redmine` は Redmine を示します。`self` はこのサーバーを通知し(issuer = `REDMINE_MCP_BASE_URL`)、RFC 8414 メタデータを自身の正規の well-known ロケーションで提供します。Cursor など、この場所を確認するクライアントに必要です([詳細](docs/oauth-setup.md#cursor-and-self-as-discovery)) | | `REDMINE_MCP_SCOPES` | いいえ | – | OAuth モードおよび `api-key-login` 専用:ディスカバリー情報で通知するスコープを、Redmine OAuth アプリケーションで実際に有効にしている権限に合わせて限定します。クライアントが通知されたスコープの一覧全体を要求した際の、同意画面での `invalid_scope` を回避できます。`api-key-login` では、このサーバーが提供するスコープを限定するだけです | | `REDMINE_AGILE_ENABLED` | いいえ | `false` | RedmineUP Agile プラグインのサポートを有効にします。`get_redmine_issue` は `story_points`、`agile_sprint_id`、`agile_position` を返し、`update_redmine_issue` は `story_points` を受け付けます | | `REDMINE_CHECKLISTS_ENABLED` | いいえ | `false` | RedmineUP Checklists プラグインのサポートを有効にします:`get_checklist`、`create_checklist_item`、`update_checklist_item`(Checklists Pro プラグインが必要です) | | `REDMINE_PRODUCTS_ENABLED` | いいえ | `false` | RedmineUP Products プラグインのサポートを有効にします:`manage_product`(action=list/get/create/update) | | `REDMINE_CRM_ENABLED` | いいえ | `false` | RedmineUP CRM プラグインのサポートを有効にします:`manage_contact`(action=list/get/create/update/delete/assign_to_project/remove_from_project)、`list_contact_tags`、`manage_crm_note`(連絡先のメモ)、および `list_crm_queries`。Redmine サーバーに CRM プラグインがあり、`view_contacts`/`view_private_contacts` 権限に加えて、書き込みアクション用の `add_contacts`/`edit_contacts`/`delete_contacts` 権限が必要です。OAuth モードでは、このフラグが設定されている場合に限り、これらがスコープとして通知されるため、OAuth アプリケーションでも許可する必要があります。 | | `REDMINE_CRM_EDITION` | いいえ | `light` | Redmine サーバーで稼働している CRM プラグインのビルド:`light` または `pro`。2 つのビルドでは連絡先クエリフィルターが異なります。Pro ビルドでは連絡先フィールドが登録され、Light ビルドでは `tags` のみが登録されます。Redmine は未登録のフィルターパラメーターをエラーにせず無視し、コレクション全体を返します。そのため `pro` でない場合、`manage_contact` は `list` で `first_name`、`last_name`、`middle_name`、`company`、`job_title`、`email`、`phone`、`author_id` を拒否します。そうしないと、フィルターが適用されていないことに気付かないままリストが返されるためです。ビルドは検出できません。Redmine がプラグインのバージョンを公開するのは、HTML 形式で管理者のみがアクセスできる `admin/plugins` を通じてのみです。 | | `REDMINE_DEALS_ENABLED` | いいえ | `false` | RedmineUP CRM の**案件**サポートを有効にします:`manage_deal`(action=list/get/create/update/delete)、`list_deal_statuses`、`manage_deal_category`、`manage_crm_note`(案件のメモ)、`list_crm_queries`、および `REDMINE_PRODUCTS_ENABLED` と併用する `add_deal_product`。CRM プラグインの Light エディションには案件機能がなく、案件関連の権限も定義されていないため、このフラグは `REDMINE_CRM_ENABLED` とは別です。併せて通知すると同意に失敗するためです。CRM プラグインの**Pro**エディション、プロジェクトで有効になっている `deals` プロジェクトモジュール、および `view_deals` 権限に加えて、書き込みアクション用の `add_deals`/`edit_deals`/`delete_deals` 権限が必要です。 | | `REDMINE_DMSF_ENABLED` | いいえ | `false` | DMSF 文書管理プラグインのサポートを有効にします:`manage_document`(action=list/get/create/update)。Redmine サーバーに `redmine_dmsf` プラグインが必要です。 | | `REDMINE_HELPDESK_ENABLED` | いいえ | `false` | RedmineUP Helpdesk プラグインのサポートを有効にします:`send_helpdesk_email_reply`(チケットの顧客に返信メールを送信します)。Redmine サーバーに Helpdesk プラグインが必要です。 | | `REDMINE_HELPDESK_TICKETS_ENABLED` | いいえ | `false` | RedmineUP Helpdesk チケットのサポートを有効にします:`manage_helpdesk_ticket`(action=get/set_contact)はチケットの Helpdesk データを読み取り、別の既存連絡先に変更します。Helpdesk プラグインと CRM プラグインが必要です。このフラグは `REDMINE_HELPDESK_ENABLED` とは別です。OAuth では `view_helpdesk_tickets`、`view_contacts`、`view_private_contacts`、`edit_helpdesk_tickets` が通知されるため、フラグを有効にする前に Redmine OAuth アプリケーションで許可する必要があります。 | | `REDMINE_TAGS_ENABLED` | いいえ | `false` | AlphaNodes additional_tags プラグインのサポートを有効にします。`get_redmine_issue` は `tags` 配列を返し、`create_redmine_issue`/`update_redmine_issue` は `tag_list` を受け付けます。Redmine サーバーに `additional_tags` プラグインと、`view_issue_tags`/`create_issue_tags`/`edit_issue_tags` 権限が必要です。 | | `REDMINE_AUTOFILL_REQUIRED_CUSTOM_FIELDS` | いいえ | `false` | 不足している必須カスタムフィールドを補完して、チケット作成を 1 回再試行できるようにします | | `REDMINE_REQUIRED_CUSTOM_FIELD_DEFAULTS` | いいえ | `{}` | チケット作成時に代替値として使用する、必須カスタムフィールド名と値の対応を定義した JSON オブジェクト | | `REDMINE_ALLOW_PRIVATE_FETCH_URLS` | いいえ | `false` | **警告:**添付ファイルの取得に対するすべての SSRF 保護を無効にします。本番環境では決して `true` に設定しないでください。 | *\* `REDMINE_AUTH_MODE=legacy-per-user` の場合に必須です。* *† `REDMINE_AUTH_MODE=legacy` の場合に必須です。`REDMINE_API_KEY` または `REDMINE_USERNAME`+`REDMINE_PASSWORD` のいずれかを設定する必要があります。API キーを推奨します。* *‡ `REDMINE_AUTH_MODE=oauth` または `REDMINE_AUTH_MODE=oauth-proxy` の場合に必須です。* *§ `REDMINE_AUTH_MODE=oauth-proxy` の場合に必須です。* *¶ `REDMINE_AUTH_MODE=api-key-login` の場合に必須です。* シークレット値は、Docker/Kubernetes 形式のファイル変数(`REDMINE_INTROSPECT_CLIENT_SECRET_FILE`、`REDMINE_MCP_JWT_SIGNING_KEY_FILE`、`REDMINE_OAUTH_CLIENT_SECRET_FILE`)でも指定できます。REDMINE_AUTOFILL_REQUIRED_CUSTOM_FIELDS=true の場合、create_redmine_issue は、関連するカスタムフィールドの検証エラー(例:<Field Name> cannot be blank や <Field Name> is not included in the list)が発生すると、1 回再試行し、次の値のみを入力します。
- Redmine のカスタムフィールドの
default_value、または REDMINE_REQUIRED_CUSTOM_FIELD_DEFAULTS
実際には、2 つ目の方法のみが有効です。サーバーは GET /projects/{id}.json?include=issue_custom_fields からプロジェクトのカスタムフィールドを読み込みますが、Redmine はこれを ID と名前のみで表示するため、default_value を取得できません。詳しくは、list_project_issue_custom_fields を参照してください。自動入力で使用する値を設定するには、環境変数のマップを設定してください。
例:
REDMINE_AUTOFILL_REQUIRED_CUSTOM_FIELDS=true
REDMINE_REQUIRED_CUSTOM_FIELD_DEFAULTS='{"Required Field A":"Value A","Required Field B":"Value B"}'
SSL 証明書の設定
自己署名証明書または内部 CA インフラストラクチャを使用する Redmine サーバーの SSL 証明書処理を設定します。
自己署名証明書
Redmine サーバーが自己署名証明書または内部 CA を使用している場合:
# In .env file
REDMINE_URL=https://redmine.company.com
REDMINE_API_KEY=your_api_key
REDMINE_SSL_CERT=/path/to/ca-certificate.crt
対応する証明書形式:.pem、.crt、.cer
相互 TLS(クライアント証明書)
クライアント証明書による認証が必要な環境の場合:
# In .env file
REDMINE_URL=https://secure.redmine.com
REDMINE_API_KEY=your_api_key
REDMINE_SSL_CERT=/path/to/ca-bundle.pem
REDMINE_SSL_CLIENT_CERT=/path/to/cert.pem,/path/to/key.pem
注記:秘密鍵は暗号化されていない必要があります(Python の requests ライブラリの要件)。
SSL 検証を無効にする(開発環境のみ)
⚠️ 警告:開発/テスト環境でのみ使用してください!
# In .env file
REDMINE_SSL_VERIFY=false
SSL 検証を無効にすると、中間者攻撃に対して接続が脆弱になります。
SSL のトラブルシューティングについては、トラブルシューティングガイドを参照してください。
認証
このサーバーは、REDMINE_AUTH_MODE で選択する 5 つの認証モードに対応しています。デフォルトは legacy であり、既存のデプロイは変更なしで引き続き動作します。OAuth2 のサポートは既存機能への追加のみです。
| 状況 | モード | Redmine |
|---|---|---|
| 単一の共有認証情報を使う、最もシンプルな設定 | legacy(デフォルト) | 任意 |
| マルチユーザーで、MCP クライアントを自分で管理する | oauth | 6.1+ |
| ホスト型サーバーで、クライアントが自己登録する(DCR) | oauth-proxy | 6.1+ |
| マルチユーザーで、Redmine に OAuth がなく、ユーザーがブラウザーでログインする | api-key-login | 任意。Easy Redmine を含む |
| マルチユーザーで、Redmine に OAuth がなく、ユーザーがクライアントで自分のキーを設定する | legacy-per-user | 任意 |
高度なモードは以下に折りたたまれています。設定の詳細は、oauth と oauth-proxy については OAuth2 設定ガイド、api-key-login については api-key-login ガイド、legacy-per-user については legacy-per-user ガイド を参照してください。
レガシーモード(デフォルト)
.env で一度だけ設定する、共有認証情報(API キーまたはユーザー名とパスワード)です。Redmine へのすべてのリクエストで同じユーザーとして認証されます。
REDMINE_AUTH_MODE=legacy # or omit entirely; this is the default
REDMINE_URL=https://redmine.example.com
REDMINE_API_KEY=your_api_key
# OR:
# REDMINE_USERNAME=your_username
# REDMINE_PASSWORD=your_password
OAuth2 モード(マルチユーザー、Redmine 6.1+)
各 MCP リクエストには個別の Authorization: Bearer <token> が含まれるため、各ユーザーは自身の Redmine アカウントで認証されます。サーバーはリクエストを転送する前に、Doorkeeper のイントロスペクションエンドポイントで各トークンを検証し、クライアントが必要とする OAuth2 ディスカバリーエンドポイントと /revoke エンドポイントを公開します。
REDMINE_AUTH_MODE=oauth
REDMINE_URL=https://redmine.example.com
REDMINE_MCP_BASE_URL=https://redmine-mcp.example.com # public URL of this server
# Confidential OAuth app registered in Redmine admin (see setup guide)
REDMINE_INTROSPECT_CLIENT_ID=...
REDMINE_INTROSPECT_CLIENT_SECRET=...
OAuth アプリは Redmine の管理画面 → アプリケーション で手動登録します(Dynamic Client Registration はありません)。手順の詳細、エンドポイントのリファレンス、トラブルシューティングについては、OAuth2 セットアップガイドをご覧ください。
OAuthProxy モード(クライアントのセルフ登録が可能なホステッドデプロイ)
FastMCP が MCP 側の認可サーバーとして機能し、MCP クライアントの DCR を処理した後、同意を得るために上流の OAuth プロバイダーである Redmine にユーザーをリダイレクトします。クライアント(例:Claude Desktop、VS Code)自身での登録が想定されている場合に使用します。
REDMINE_AUTH_MODE=oauth-proxy
REDMINE_URL=https://redmine.example.com
REDMINE_MCP_BASE_URL=https://redmine-mcp.example.com # public URL of this server
# Confidential OAuth app registered in Redmine admin (see setup guide)
REDMINE_INTROSPECT_CLIENT_ID=...
REDMINE_INTROSPECT_CLIENT_SECRET=...
REDMINE_MCP_JWT_SIGNING_KEY=...
上流の Redmine アプリでは、${REDMINE_MCP_BASE_URL}/auth/callback をリダイレクト URI として登録する必要があります。ストレージ、スケーリング、認証情報の再利用に関する注意事項は、OAuth2 セットアップガイドをご覧ください。
api-key-login モード(OAuth なしでユーザーごとに認証:Easy Redmine、Redmine 6.1 より前のバージョン)
サーバー自身が OAuth 認可サーバーとして機能するため、MCP クライアントはサーバーの URL だけで接続できます。初回利用時にクライアントがブラウザーを開き、ユーザーがこのサーバーの提供するページに個人用の Redmine API キーを貼り付けます。それ以降のすべてのツール呼び出しは、そのユーザーとして実行されます。クライアント設定にキーを記載する必要はなく、パスワードを求められることもありません。
REDMINE_AUTH_MODE=api-key-login
REDMINE_URL=https://redmine.example.com
REDMINE_MCP_BASE_URL=https://redmine-mcp.example.com # public https URL of this server
REDMINE_MCP_JWT_SIGNING_KEY=... # encrypts the stored keys
サーバーは各ユーザーのキーを FASTMCP_HOME/api-key-login/ 以下に暗号化して保存するため、このディレクトリには永続ボリュームが必要であり、このモードは単一レプリカで実行します。ここでの OAuth スコープは、クライアントが要求する範囲を狭めるものであり、Redmine の権限を表すものではありません。権限の境界となるのは、引き続き Redmine 自身の権限です。有効化する前に、セキュリティモデル、セッションルール、クライアントの設定について、api-key-login ガイドをご覧ください。
legacy-per-user モード(Redmine 6.1 より前のバージョン)
OAuth に対応するには古すぎる Redmine インスタンスでは、各ユーザーの MCP クライアントが、X-Redmine-API-Key ヘッダーで各自の Redmine API キーを送信します。各リクエストは、そのユーザーの権限に基づき、そのユーザーとして実行されます。
これは高度な設定が必要なオプトインモードです。 エンドツーエンドの TLS と、正しく設定されたリバースプロキシが必要です。有効化する前に、脅威モデル、ファイアウォールのガイダンス、キー失効時の手順について、docs/legacy-per-user-auth.mdをご覧ください。
mcp-remote(推奨):
{ "mcpServers": { "redmine": {
"command": "npx",
"args": ["mcp-remote", "https://your-host/mcp",
"--header", "X-Redmine-API-Key:${RM_KEY}"],
"env": { "RM_KEY": "<your redmine api key>" }
}}}
X-Redmine-API-Key:${RM_KEY} では、コロンの前後にスペースがない点に注意してください。これにより、Windows 上の Cursor と Claude Desktop で発生する引数のエスケープに関するバグを回避できます。
VS Code(mcp.json):
.vscode/mcp.json(ワークスペースファイル)またはユーザープロファイルの mcp.json を使用してください。ワークスペースの .mcp.json は headers を黙って破棄するため(microsoft/vscode#319528)、使用しないでください。VS Code 1.102 以降を指定してください。
{
"servers": {
"redmine": {
"type": "http",
"url": "https://your-host/mcp",
"headers": { "X-Redmine-API-Key": "${input:rmKey}" },
"inputs": [{ "id": "rmKey", "type": "promptString",
"description": "Redmine API key", "password": true }]
}
}
}
非対応: カスタムリクエストヘッダーを設定できないクライアント、または独自の OAuth フロー用に Authorization ヘッダーを確保しているクライアント。
MCP クライアントの設定
サーバーは http://127.0.0.1:8000/mcp で HTTP エンドポイントを公開します。以下の手順に従って、お好みの MCP 対応エージェントに登録してください。MCP サーバーを自分で起動するクライアントの場合は、実行中のサーバーやブリッジを介さずに、このサーバーを stdio で実行することもできます。詳しくはstdio トランスポートをご覧ください。
以下の例では、
legacyまたはoauthモードを想定しています。legacy-per-userモードでは、各クライアントはX-Redmine-API-Keyヘッダーも送信する必要があります。ヘッダーに対応した設定については、上記のlegacy-per-user モードをご覧ください。
Visual Studio Code(ネイティブ MCP サポート)
VS Code は GitHub Copilot を通じて MCP を標準でサポートしています(VS Code 1.102 以降が必要です)。
CLI を使用する(最速):
code --add-mcp '{"name":"redmine","type":"http","url":"http://127.0.0.1:8000/mcp"}'
コマンドパレットを使用する:
- コマンドパレット(
Cmd/Ctrl+Shift+P)を開きます MCP: Open User Configuration(グローバル設定の場合)またはMCP: Open Workspace Folder Configuration(プロジェクト固有の設定の場合)を実行します- 設定を追加します:
{ "servers": { "redmine": { "type": "http", "url": "http://127.0.0.1:8000/mcp" } } } - ファイルを保存します。VS Code が MCP サーバーを自動的に読み込みます。
手動で設定する:
ワークスペースに .vscode/mcp.json(またはユーザープロファイルディレクトリに mcp.json)を作成します:
{
"servers": {
"redmine": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}
Claude Code
CLI コマンドを使用して Claude Code に追加します:
claude mcp add --transport http redmine http://127.0.0.1:8000/mcp
または、Claude Code の設定ファイル(~/.claude.json)で手動設定します:
{
"mcpServers": {
"redmine": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}
Claude Desktop(macOS と Windows)
Claude Desktop の設定ファイルがサポートするのは stdio トランスポートのみです。uv 経由で FastMCP のプロキシを使用し、この HTTP サーバーに接続します。
セットアップ:
- Claude Desktop を開きます
- Claude メニュー(macOS のメニューバー/Windows のタイトルバー)> Settings... をクリックします
- Developer タブ > Edit Config をクリックします
- 次の設定を追加します:
{
"mcpServers": {
"redmine": {
"command": "uv",
"args": [
"run",
"--with", "fastmcp",
"fastmcp",
"run",
"http://127.0.0.1:8000/mcp"
]
}
}
}
- ファイルを保存し、Claude Desktop を完全に終了してから再起動します
- 入力エリアにツールアイコンが表示されていることを確認し、接続を確かめます
設定ファイルの場所:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
注: Claude Desktop を起動する前に、Redmine MCP サーバーが実行されている必要があります。
Cursor
Cursor はブリッジなしで HTTP MCP サーバーに直接接続します。
~/.cursor/mcp.json(すべてのプロジェクトで有効)またはプロジェクトのルートに.cursor/mcp.json(そのプロジェクトのみで有効)を作成します:{ "mcpServers": { "redmine": { "url": "http://127.0.0.1:8000/mcp" } } }- ファイルを保存します。Cursor はサーバーを自動的に認識します。MCP 設定にはサーバーと読み込まれたツールが表示されます。
注: Cursor は url のみでリモートサーバーを識別し、上記の VS Code や Claude Code の設定とは異なり、type フィールドはありません。
legacy-per-user モードの場合、API キーヘッダーを追加します:
{
"mcpServers": {
"redmine": {
"url": "https://your-host/mcp",
"headers": { "X-Redmine-API-Key": "<your redmine api key>" }
}
}
}
oauth モードの場合、MCP サーバーで REDMINE_OAUTH_DISCOVERY_AS=self を設定します。Cursor は正規の well-known URL で認可サーバーのメタデータを探します。デフォルトの(redmine)ディスカバリープロファイルではそこにメタデータが提供されないため、この設定がないとフローが停止します(#188)。Cursor と self-AS ディスカバリーをご覧ください。
Codex CLI
コマンドを使用して Codex CLI に追加します:
codex mcp add redmine -- npx -y mcp-client-http http://127.0.0.1:8000/mcp
または、~/.codex/config.toml で手動設定します:
[mcp_servers.redmine]
command = "npx"
args = ["-y", "mcp-client-http", "http://127.0.0.1:8000/mcp"]
注: Codex CLI が主にサポートするのは stdio ベースの MCP サーバーです。上記では、HTTP トランスポートへのブリッジとして mcp-client-http を使用しています。
Kiro
Kiro が主にサポートするのは stdio ベースの MCP サーバーです。HTTP サーバーには、HTTP から stdio へのブリッジを使用します:
- ワークスペースの
.kiro/settings/mcp.jsonを作成または編集します:{ "mcpServers": { "redmine": { "command": "npx", "args": [ "-y", "mcp-client-http", "http://127.0.0.1:8000/mcp" ], "disabled": false } } } - ファイルを保存し、Kiro を再起動します。Redmine ツールが MCP パネルに表示されます。
注: Kiro の HTTP トランスポートの直接サポートは限定的です。上記の設定では、HTTP MCP サーバーへの接続にブリッジとして mcp-client-http を使用しています。
汎用 MCP クライアント
ほとんどの MCP クライアントは標準的な設定形式を使用します。HTTP サーバーの場合:
{
"mcpServers": {
"redmine": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}
HTTP ブリッジを使ったコマンドベースの方法が必要なクライアントの場合:
{
"mcpServers": {
"redmine": {
"command": "npx",
"args": ["-y", "mcp-client-http", "http://127.0.0.1:8000/mcp"]
}
}
}
REDMINE_MCP_TRANSPORT=stdio の場合、クライアントはサーバーを独立したプロセスとして起動し、stdin/stdout 経由で通信します。ポートをリッスンすることはなく、上記の HTTP ブリッジも必要ありません。ほかのモードでは各 HTTP リクエストを認証するため、これは legacy モードでのみ動作します。
Claude Code:
claude mcp add redmine \
-e REDMINE_URL=https://your-redmine-server.com \
-e REDMINE_API_KEY=your_api_key \
-e REDMINE_MCP_TRANSPORT=stdio \
-e ATTACHMENTS_DIR=/absolute/path/to/redmine-attachments \
-- uvx redmine-mcp-server
Claude Desktop、Codex CLI、Kiro、その他のコマンドベースのクライアント:
{
"mcpServers": {
"redmine": {
"command": "uvx",
"args": ["redmine-mcp-server"],
"env": {
"REDMINE_URL": "https://your-redmine-server.com",
"REDMINE_API_KEY": "your_api_key",
"REDMINE_MCP_TRANSPORT": "stdio",
"ATTACHMENTS_DIR": "/absolute/path/to/redmine-attachments"
}
}
}
}
HTTP サーバーがない場合、共有する URL がないため、get_redmine_attachment はローカルの file_path を返し、create_upload_ticket はリクエストを拒否します。代わりに file_path を指定してローカルファイルを添付してください(許可されるフォルダー:ATTACHMENTS_DIR と REDMINE_MCP_UPLOAD_FILE_ROOTS)。ATTACHMENTS_DIR には絶対パスを設定してください。デフォルトの ./attachments は、クライアントがサーバーを起動したフォルダーからの相対パスです。このフォルダーは、開いているプロジェクトであることがよくあります。
セットアップのテスト
# Test connection by checking health endpoint
curl http://localhost:8000/health
サポート対象の Redmine プラグイン
このサーバーは、標準の Redmine インスタンスで動作します。6 つのオプションプラグインを追加できます。CRM の案件と Helpdesk のチケットにはそれぞれ独自のフラグがあるため、以下では 8 行で示しています。プラグインを使用するには、Redmine サーバーにインストールし、対応する環境変数を設定してください。プラグインを使わない場合、そのプラグインの機能だけが利用できません。
プラグインの環境変数が設定されている場合にのみ、クライアントのツール一覧にそのプラグインのツールが表示されます。フラグがオフの場合、MCP サーフェスには登録されません。
| プラグイン | ベンダー | 環境変数 | 追加される機能 |
|---|---|---|---|
| Agile | RedmineUP | REDMINE_AGILE_ENABLED | get_redmine_issue が story_points、agile_sprint_id、agile_position を返します。update_redmine_issue は story_points を受け付けます |
| Checklists | RedmineUP(Pro) | REDMINE_CHECKLISTS_ENABLED | 3 つのツール:get_checklist、create_checklist_item、update_checklist_item |
| Products | RedmineUP | REDMINE_PRODUCTS_ENABLED | 1 つのツール:manage_product。REDMINE_DEALS_ENABLED も設定されている場合は add_deal_product も追加されます |
| CRM | RedmineUP | REDMINE_CRM_ENABLED | 2 つのツール:manage_contact、list_contact_tags。さらに、共通の CRM ツール manage_crm_note と list_crm_queries も利用できます。いずれかの CRM フラグを有効にすると、OAuth の検出に *_contacts と note のスコープが追加されます |
| CRM deals | RedmineUP(Pro) | REDMINE_DEALS_ENABLED | 3 つのツール:manage_deal、list_deal_statuses、manage_deal_category。さらに、上記の共通 CRM ツールと、REDMINE_PRODUCTS_ENABLED も設定されている場合は add_deal_product も利用できます。有効にすると、OAuth の検出に *_deals と note のスコープが追加されます。CRM と同じプラグインですが、Light エディションには案件機能がありません |
| DMSF | danmunn(オープンソース) | REDMINE_DMSF_ENABLED | 1 つのツール:manage_document |
| Helpdesk | RedmineUP | REDMINE_HELPDESK_ENABLED | 1 つのツール:send_helpdesk_email_reply |
| Helpdesk tickets | RedmineUP | REDMINE_HELPDESK_TICKETS_ENABLED | 1 つのツール:manage_helpdesk_ticket。OAuth スコープを追加するため、Helpdesk と同じプラグインですが、独自のフラグを使用します |
| Additional Tags | AlphaNodes(オープンソース) | REDMINE_TAGS_ENABLED | get_redmine_issue が tags 配列を返します。create_redmine_issue / update_redmine_issue は tag_list を受け付けます |
Agile と Additional Tags は、すでに利用できるツールにフィールドを追加するため、新しいツールは登録しません。ほかの 7 つはそれぞれ独自のツールを追加します。これらはどちらの場合も tools/list に表示されますが、フラグを設定するまでは機能が無効であることを示すエラーを返します。Tags を使用するには、Redmine サーバーで view_issue_tags、create_issue_tags、edit_issue_tags の権限も必要です。
社内で開発した Redmine プラグイン用のツールは、このサーバーをフォークせずに別パッケージから追加できます。拡張機能を参照してください。
利用可能なツール
デプロイ時に REDMINE_MCP_ALLOW_TOOLS を指定すると、これらの一部のみを公開できます。それ以外のツールは tools/list から除外され、call_tool での呼び出しも拒否されます。
この MCP サーバーは、Redmine と連携するためのコアツールを 53 個提供します。さらに、対応する REDMINE_*_ENABLED フラグが設定されている場合にのみ一覧に表示されるプラグインツールが 15 個あり、合計 68 個です。また、REDMINE_MCP_EXPOSE_ADMIN_TOOLS=true で公開されるオペレーターツールが 1 個あり、最大 69 個になります。標準の Redmine に接続したクライアントに表示されるのは、コアツールの 53 個のみです。各ツールの詳細については、ツールリファレンスを参照してください。
コアツール(53 個、常に利用可能): プロジェクト管理(10)、チケット操作(13)、時間管理(4)、探索/列挙(7)、検索と Wiki(2)、ニュース(4)、ファイル操作(5)、ガント(1)、インタラクティブアプリ(6)、メタ(1)。
プラグインで有効化されるツール(15 個、対応するフラグが設定されている場合のみ一覧に表示): チェックリスト(3)、製品(1)、連絡先/CRM(2)、商談/CRM(3)、CRM の共通メモと保存済みクエリ(2、いずれかの CRM フラグ)、商談の製品明細(1、商談と製品の両方が必要)、ドキュメント/DMSF(1)、ヘルプデスク(1)、ヘルプデスクのチケット(1)。各ツールを利用するには、対応する Redmine プラグインがインストールされ、かつ環境フラグが設定されている必要があります。フラグがオフの場合、ツールは MCP インターフェースに登録されません。
オペレーターツール(1 個、管理者向け): cleanup_attachment_files は、REDMINE_MCP_EXPOSE_ADMIN_TOOLS=true の場合のみ登録されます。
ツール一覧と説明
コアツール(53 個、常に利用可能)
これらのツールを使用するには、Redmine インスタンスと認証情報のみが必要です。追加のプラグインや機能フラグは必要ありません。
-
プロジェクト管理(10 個)
list_redmine_projects- アクセス可能なプロジェクトを一覧表示します(filtersで追加の指定がない限り、アクティブなプロジェクトのみ)。サーバー側で絞り込み、必要に応じてページ分割しますlist_project_issue_custom_fields- プロジェクトに設定されているチケットのカスタムフィールドを一覧表示しますlist_redmine_versions- プロジェクトのバージョン/マイルストーンを一覧表示しますmanage_redmine_version- バージョン/マイルストーンを作成、更新、または削除しますmanage_redmine_project- プロジェクトを作成し、設定を編集するか、プロジェクトをクローズまたは再開します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- 新しいチケットを作成します。uploadsパラメーターを使ってファイルを添付することもできますupdate_redmine_issue- 既存のチケットを更新します。uploadsパラメーターを使ってファイルを添付することもできます(ジャーナルの注記にファイルを添付するにはnotesと併用します)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 呼び出しで時間エントリーを一括インポートし、各エントリーのエラーを報告します
-
検出/列挙(7 ツール):作成/更新ツールを呼び出す前に、LLM が有効な ID を見つけるのに役立ちます
list_redmine_trackers- すべてのトラッカー(バグ、機能、サポートなど)を一覧表示しますlist_project_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_redmine_news- ニュースの一覧を取得します。特定のプロジェクトに限定することもできますget_redmine_news- コメントと添付ファイルを含むニュース項目を1件読み込みますmanage_redmine_news- ニュース項目を作成または更新します(Redmine 4.1+)delete_redmine_news- 確認のうえ、ニュース項目を削除します(Redmine 4.1+)
-
ファイル操作(5 ツール)
list_files- プロジェクトの「ファイル」セクションにアップロードされたファイルの一覧を取得しますcreate_upload_ticket- アップロード枠を予約し、1回限りの URL を返します。これにより、呼び出し元のマシン上のファイルを、モデルを経由してバイト列を送信することなくサーバーに届けられますupload_file- 新しいファイルをプロジェクトにアップロードします(ステージング済みのupload_id、URL、base64 コンテンツ、またはサーバー側のfile_pathを使用)。バージョンに関連付けることもできますdelete_file- プロジェクトからファイルを削除しますget_redmine_attachment- 添付ファイルをダウンロードします(HTTP モードと stdio モードの両方で動作します)
-
ガントチャート(1 ツール)
get_gantt_chart- 日付、依存関係、マイルストーンを含む、プロジェクトのタイムラインデータを取得します
-
インタラクティブアプリ(4 ツール):MCP Apps 拡張機能を介してチャット内にライブ UI を表示します(対応クライアントが必要です)
show_triage_board- プロジェクトのチケットをステータス別にまとめたインタラクティブなカンバンボードとして表示します。ドラッグ操作によるステータス変更を反映しますget_triage_board_data- ボードの「更新」アクションで使用するデータソースですshow_project_dashboard- 未完了/完了、期限超過、今週が期限、優先度別の未完了件数、最近のアクティビティを含む、プロジェクトの最新スナップショットをインタラクティブなダッシュボードとして表示します。一致するチケット一覧へのドリルダウンもできますget_project_dashboard_data- ダッシュボードの「更新」アクションで使用するアプリ専用データソースですshow_project_timeline- バージョンごとのチケットバー、マイルストーンのダイヤモンド、今日を示す線を含む、プロジェクトのスケジュールをインタラクティブなタイムラインとして表示しますget_project_timeline_data- タイムラインの「更新」アクションで使用するアプリ専用データソースです
-
メタ(1 ツール)
get_mcp_server_info- サーバーのバージョン、認証モード、読み取り専用状態、認証済みユーザー(current_user)、およびプラグインが有効化の条件となるツール群のうち有効なものを報告します。最近リリースされた修正に依存する前にデプロイの遅延を検出したり、assigned_to_id="me"が誰に解決されるかを確認したりするのに使います。
プラグインが有効化の条件となるツール(15、環境変数でオプトイン)
これらのツールを使うには、対応する Redmine プラグインがサーバーにインストールされており、かつ MCP サーバーで対応する環境変数が true に設定されている必要があります。フラグが設定されている場合にのみ tools/list に表示されます。フラグがオフの場合、MCP のインターフェースには登録されず、直接呼び出しても機能が無効であることを示すエラーが返されます。
-
チェックリスト(3 ツール):
REDMINE_CHECKLISTS_ENABLED=trueを設定します。RedmineUP Checklists Pro プラグインが必要です。get_checklist- チケットのすべてのチェックリスト項目を取得しますcreate_checklist_item- チケットに新しいチェックリスト項目を追加しますupdate_checklist_item- チェックリスト項目のテキスト、完了状態、または位置を更新します
-
製品(1 ツール):
REDMINE_PRODUCTS_ENABLED=trueを設定します。RedmineUP Products プラグインが必要です。manage_product- 製品の一覧表示、取得、作成、または更新を行います
-
連絡先(CRM)(2 ツール):
REDMINE_CRM_ENABLED=trueを設定します。RedmineUP CRM プラグインが必要です。OAuth モードでは、このフラグによって公開されるスコープに CRM の権限も追加されるため、OAuth アプリケーションでそれらの権限を付与し、ユーザーに再度同意してもらってください。Pro インストールでREDMINE_CRM_EDITION=proを設定すると、Light ビルドでは登録されない連絡先のlistフィルターを使用できます。manage_contact- 連絡先の一覧表示、取得、作成、更新、削除、またはプロジェクトとの関連付けの設定・解除を行いますlist_contact_tags- 連絡先で使用されているタグを色とともに取得します。tagsフィルターとtag_listで使用します
-
案件(CRM)(3 ツール):
REDMINE_DEALS_ENABLED=trueを設定します。同じ CRM プラグインの Pro エディションと、プロジェクトで有効になっているdealsプロジェクトモジュールが必要です。Light エディションでは案件の権限が定義されていないため、Light のデプロイ環境で同意に問題が発生しないよう、案件には独自のフラグがあります。manage_deal- 案件の一覧表示、取得、作成、更新、または削除を行いますlist_deal_statuses- 案件のステータス(プラグイン側では管理者専用)と、案件作成前に使用するプロジェクトの案件カテゴリを取得しますmanage_deal_category- プロジェクトの案件カテゴリの一覧表示、作成、名前変更、または削除を行います
-
CRM のメモと保存済みクエリ(共有 2 ツール):
REDMINE_CRM_ENABLEDまたはREDMINE_DEALS_ENABLEDのいずれかを設定すると利用できます。各呼び出しは、メモまたはクエリのソースに対応するフラグによって制御されます。manage_crm_note- 連絡先と案件の CRM メモを取得、作成、更新、または削除しますlist_crm_queries- 保存済みの連絡先または案件のクエリを取得します
-
案件の商品明細(1 ツール):
REDMINE_DEALS_ENABLED=trueとREDMINE_PRODUCTS_ENABLED=trueの両方が必要です。このエンドポイントは、Products プラグインが CRM と併せてインストールされている場合にのみ存在します。add_deal_product- カタログ商品または自由入力の商品明細を案件に追加します
-
ドキュメント(DMSF)(1 ツール):
REDMINE_DMSF_ENABLED=trueを設定します。redmine_dmsfプラグインが必要です。manage_document- DMSF ドキュメントの一覧表示、取得、作成(アップロード)、または更新(新しいリビジョンの作成)を行います
-
ヘルプデスク(1 ツール):
REDMINE_HELPDESK_ENABLED=trueを設定します。RedmineUP Helpdesk プラグインが必要です。send_helpdesk_email_reply- ヘルプデスクチケットの顧客にメールで返信します。必要に応じてチケットのステータスも変更できます
-
ヘルプデスクチケット(1 ツール):
REDMINE_HELPDESK_TICKETS_ENABLED=trueを設定します。RedmineUP Helpdesk プラグインと RedmineUP CRM プラグインが必要です。manage_helpdesk_ticket- チケットのヘルプデスクデータを読み取るか、別の既存の連絡先に移動します
オペレーターツール(1件、管理者限定)
デフォルトでは tools/list に表示されません。MCP サーフェスに登録するには、REDMINE_MCP_EXPOSE_ADMIN_TOOLS=true を設定してください。このフラグにかかわらず、基盤となるバックグラウンドタスクは実行されます。これらを公開すると、MCP 経由で実行する選択肢が追加されます。
cleanup_attachment_files- 期限切れの添付ファイルを手動でクリーンアップします(バックグラウンドのクリーンアップタスクは、設定にかかわらず自動的に実行されます)
Docker によるデプロイ
Docker ですぐに始める
# Configure environment
cp .env.docker.example .env.docker
# Edit .env.docker with your Redmine settings
# Run with docker-compose
docker-compose up --build
# Or run directly
docker build -t redmine-mcp-server .
docker run -p 8000:8000 --env-file .env.docker redmine-mcp-server
公開済みイメージを使用する
ビルド済みのマルチアーキテクチャイメージ(linux/amd64、linux/arm64)は、リリースごとに
GitHub Container Registry に公開されます。そのため、自分でビルドしなくてもサーバーを実行できます。
docker pull ghcr.io/jztan/redmine-mcp-server:latest
docker run -p 8000:8000 --env-file .env.docker ghcr.io/jztan/redmine-mcp-server:latest
正確なバージョン(例:ghcr.io/jztan/redmine-mcp-server:2.2.0)を指定するか、
マイナー系列(例::2.2)を追跡してください。公開済みイメージは、次回の
リリースから利用できます。
本番環境へのデプロイ
自動デプロイスクリプトを使用してください。
chmod +x deploy.sh
./deploy.sh
トラブルシューティング
問題が発生した場合は、トラブルシューティングガイドを確認してください。
ロードマップ
予定されている機能と今後の開発については、ロードマップをご覧ください。
コントリビューション
コントリビューションを歓迎します。詳しくはコントリビューションガイドをご覧ください。
コントリビューター
コード、レビュー、テスト、機能リクエストを通じて、このプロジェクトの改善に協力してくださった皆さまに感謝します。
@sebastianelsner · @mihajlovicjj · @timcomport · @aadnehovda · @Vitexus · @Bricklou · @martindglaser · @LaurensRietveld · @pdostal · @stevehollis-orderflow · @knasiotis · @azelcs · @fionnb · @goizper · @mmahmed · @andilem · @gino8080 · @siva01c · @chesterXalan · @mliebischer
リリースごとのコントリビューターへの謝辞は、変更履歴に記載されています。
また、CRM ツールと Helpdesk ツールを実際の Pro インスタンスで検証できるよう、CRM PRO と Helpdesk PRO の評価版を提供してくださった RedmineUP にも感謝します。
ライセンス
このプロジェクトは MIT License のもとでライセンスされています。詳細は LICENSE ファイルをご覧ください。
ブログ記事
リリースの背景にあるストーリー。 このサーバーを開発するなかで、予想外の発見が何度もありました。すべての API にアクセスできるようにしたのは間違いだったこと、69 個あったツールを 43 個にする必要があったこと、そしてコントリビューターが実際の Redmine 6 インスタンスでフローを実行したときに初めて判明した OAuth スコープのバグなどです。特に大きな学びの多くは、自分ではなく他の人の環境での運用から得られました。こうした考えをThe Dispatchで紹介しています。興味があれば、ぜひご覧ください。
このサーバーの開発に関する背景、設計メモ、事後分析:
始める
- Redmine MCP Server:AI エージェントにプロジェクトの最新データを提供:サーバーの機能、ツールの範囲を API 全体の単なる複製ではなく厳選している理由、Redmine MCP サーバーの選び方
- MCP を使ってレガシーシステムを最新の AI エージェントに接続した方法:このプロジェクトのきっかけとなった課題と、最初に作成した 2 つの読み取り専用ツール
ツールの設計とアーキテクチャ
- 信頼性の高い MCP サーバーの設計:エージェント型アーキテクチャで得た 3 つの厳しい教訓:エージェントに API へのフルアクセスを与えたのが間違いだった理由と、それに代わる仕組み
- MCP ツールの乱立:デコレーターを使って 69 個のツールを 43 個に削減した方法:v2 での統合により、コンテキストのオーバーヘッドを削減し、エージェントによるツール選択を改善した方法
本番環境
- MCP のファイルアップロード:Base64 のツール引数がファイルを破損させる理由:モデルが Base64 を再入力したことで 3 KB の PNG から 32 文字が気づかれないまま失われた理由と、それに代わる SHA-256 チェック付きのサイドチャネルアップロード
- LLM で MCP サーバーを評価する方法:発見して修正した 17 件のバグ:エージェントを使ってサーバーを実行したところ、テストスイートでは見逃されていた問題が 17 件見つかりました。その中には、昇格したロールをひそかに割り当ててしまう
role_ids=[True]のバグも含まれていました - Redmine 向けの MCP サーバーを本番環境にリリースするために実際に必要なこと:プロトタイプから本番環境までの全行程
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。