mcpField
R
Redmine Fastmcp Server With Oauth

Redmine Fastmcp Server With Oauth

リモート
github.com/tuzumkuru開発ツール101 週間前に更新
リポジトリ

Redmine Fastmcp Server With Oauth について

Redmine Fastmcp Server With Oauth は、Redmine OAuth でユーザーが認証するチーム向けの集中デプロイ型 MCP サーバーです。Redmine のアクセストークンをサーバー側に保管し、チケット、プロジェクト、作業時間、Wiki 用のツール、プロンプト、リソースを提供します。

主な機能

  1. 01Redmine OAuth 2.0 によるユーザー認証
  2. 02チケットの検索、一覧、作成、更新
  3. 03プロジェクトとバージョンの管理
  4. 04Wiki ページの読み取りと更新
  5. 05作業時間と Redmine リソースへのアクセス

活用シーン

  1. 01チケットを検索して詳細を確認
  2. 02ユーザー認証のもとでチケットを作成・更新
  3. 03プロジェクトのバージョンと作業時間を確認
  4. 04プロジェクト Wiki ページの取得や編集

MCP 対応

Streamable HTTP 経由で Redmine の操作を MCP ツール、プロンプト、リソースとして公開します。クライアントには FastMCP 発行の JWT を渡し、Redmine OAuth トークンはサーバー側に保持します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイント<<YourServerURL>>
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

mcp-redmine-oauth — OAuth 対応 Redmine FastMCP サーバー

OAuth 2.0 認証を使用する、Redmine 向けの一元デプロイ型 MCP サーバーです。管理者が一度デプロイすれば、ユーザーは Redmine で認証するだけで接続できます。API キーやユーザーごとのセットアップは不要です。FastMCP 3 で構築されています。

仕組み

MCP Client (Claude Desktop, MCP Inspector, …)
        │  MCP over Streamable HTTP
        │  Authorization: Bearer <fastmcp-jwt>
        ▼
┌─────────────────────────────┐
│      FastMCP 3 Server       │
│  OAuthProxy (port 8000)     │──── token exchange ────▶ Redmine OAuth
│  Token store (in-memory)    │◀─── access token ────────
│                             │
│  Tools                      │──── REST API ───────────▶ Redmine API
└─────────────────────────────┘

MCP クライアントに渡されるのは、FastMCP が発行する JWT だけです。Redmine の OAuth トークンはサーバー側に保存され、クライアントに公開されることはありません。

前提条件

  • Python 3.11+
  • REST API が有効になっている Redmine 6.1+ の稼働インスタンス
  • Redmine に登録済みの OAuth アプリケーション(下記を参照)

Redmine のセットアップ

1. REST API を有効にする

管理 → 設定 → API → REST Web サービスを有効にする(チェックして保存します)。

2. OAuth アプリケーションを登録する

管理 → アプリケーション → 新しいアプリケーション

フィールド値
リダイレクト URIhttp://<MCP_BASE_URL>/auth/callback
機密クライアントはい
スコープすべての機能を利用するには、必須スコープをすべて有効にします

生成された Client ID と Client Secret をコピーします。

セットアップ

git clone https://github.com/tuzumkuru/mcp-redmine-oauth.git
cd mcp-redmine-oauth
cp .env.example .env

値を入力します。

REDMINE_URL=http://your-redmine-host
REDMINE_CLIENT_ID=your-client-id
REDMINE_CLIENT_SECRET=your-client-secret

実行

pip install -e .
mcp-redmine-oauth

MCP サーバーは http://localhost:8000/mcp で利用できます。

MCP Inspector でテストするには、次のようにします。

npx @modelcontextprotocol/inspector

http://localhost:6274 を開き、トランスポートを Streamable HTTP に設定して、http://localhost:8000/mcp を入力します。

Docker での実行

docker compose up --build

コンテナは .env から設定を読み込みます。MCP_BASE_URL はサーバーに外部からアクセスできる URL に設定してください(他のマシンからクライアントが接続する場合は、localhost にしないでください)。

ホスト側のポートを変更するには、.env の MCP_HOST_PORT を設定します(デフォルトは 8000 です)。

環境変数

変数必須デフォルト説明
REDMINE_URLはい—Redmine インスタンスのベース URL
REDMINE_CLIENT_IDはい—OAuth アプリの Client ID
REDMINE_CLIENT_SECRETはい—OAuth アプリの Client Secret
REDMINE_SCOPESいいえ(宣言されたすべてのスコープ)許可リストフィルター:Redmine アプリがサポートするスコープをスペース区切りで指定します(スコープの処理を参照)
MCP_HOSTいいえ0.0.0.0バインドするホスト
MCP_PORTいいえ8000バインドするポート
MCP_BASE_URLいいえhttp://localhost:MCP_PORTOAuth リダイレクトに使用する外部公開 URL
REDMINE_PUBLIC_URLいいえREDMINE_URLユーザーがブラウザーで開く Redmine の URL。下書きリンクに使用します。サーバーが内部アドレスで Redmine にアクセスする場合に設定します

利用可能なツールとリソース

コンポーネント種類必要なスコープ説明
get_issue_detailsツールview_issues説明、カスタムフィールド、履歴を含むRedmineのチケットをIDで取得します
search_issuesツールview_issues, search_projectページネーションに対応したチケットの全文検索です
list_issuesツールview_issuesフィルター(プロジェクト、担当者、ステータス、トラッカー、並べ替え)を指定してチケットを一覧表示します
get_issue_relationsツールview_issuesチケットの関連(ブロック、ブロックされている、関連など)を取得します
get_project_detailsツールview_projectトラッカー、カテゴリ、有効なモジュールを含むプロジェクトの詳細です
get_project_versionsツールview_projectステータスと期日を含むプロジェクトのバージョン/マイルストーンです
list_time_entriesツールview_time_entriesフィルター(プロジェクト、ユーザー、日付範囲)を指定して作業時間を一覧表示します
create_issueツールadd_issues件名、トラッカー、優先度、担当者などを指定して新しいチケットを作成します
update_issueツールedit_issues既存のチケットを更新します(ステータス、担当者、メモなど)
create_projectツールadd_project新しいRedmineプロジェクトを作成します
update_projectツールedit_projectプロジェクト名、説明、公開設定、トラッカーを更新します
get_wiki_pageツールview_wiki_pagesプロジェクトのWikiページを取得します
update_wiki_pageツールedit_wiki_pagesWikiページを作成または更新します
rename_wiki_pageツールrename_wiki_pagesオプションでリダイレクトを設定してWikiページの名前を変更します
draft_new_issueツール(ログインのみ)提案された値を入力済みのRedmineの新規チケットフォームへのリンクです。ユーザーが送信するまで保存されません
draft_issue_updateツール(ログインのみ)提案された変更とコメントを入力済みのチケット編集フォームへのリンクと、チケットページへのリンクです
draft_new_projectツール(ログインのみ)入力済みのRedmineの新規プロジェクトフォームへのリンクです。プロジェクトの追加が許可されているユーザー、または親プロジェクトのサブプロジェクトの場合のみ利用できます
summarize_ticketプロンプトview_issues次のステップを含む、チケットの簡潔な要約を生成します
draft_bug_reportプロンプトview_project簡単なメモから、構成化されたバグレポートの草案を作成します
redmine://projects/activeリソースview_projectアクティブなプロジェクトを一覧表示します
redmine://trackersリソースview_project利用可能なトラッカーを一覧表示します
redmine://issue-statusesリソースview_issuesIDとクローズ済みフラグを含むすべてのチケットステータスです
redmine://enumerations/prioritiesリソースview_issuesIDを含むチケットの優先度レベルです
redmine://users/meリソース(認証のみ)現在認証されているユーザーのプロフィールです

予定:トークンの永続ストレージ、スコープに応じたツールの動的な無効化、構造化ログ。

必要なRedmineスコープ

Redmine OAuthアプリケーションでこれらのスコープを有効にしてください(管理 → アプリケーション)。アプリケーション設定に表示されるRedmineのカテゴリごとに分類されています。

プロジェクト
Redmineの権限スコープ識別子使用箇所
プロジェクトの表示view_projectget_project_details、get_project_versions、redmine://projects/active、redmine://trackers、draft_bug_report
プロジェクトの検索search_projectsearch_issues
プロジェクトの作成add_projectcreate_project
プロジェクトの編集edit_projectupdate_project
チケット管理
Redmineの権限スコープ識別子使用箇所
チケットの表示view_issuesget_issue_details、search_issues、list_issues、get_issue_relations、redmine://issue-statuses、redmine://enumerations/priorities、summarize_ticket
チケットの追加add_issuescreate_issue
チケットの編集edit_issuesupdate_issue
作業時間の記録
Redmineの権限スコープ識別子使用箇所
作業時間の表示view_time_entrieslist_time_entries
Wiki
Redmine の権限スコープ識別子使用するツール
Wiki の表示view_wiki_pagesget_wiki_page
Wiki ページの編集edit_wiki_pagesupdate_wiki_page
Wiki ページの名前変更rename_wiki_pagesrename_wiki_page

スコープが有効になっていない場合、それを必要とするツールは呼び出し時に説明的なエラーを返します。

スコープの処理

各ツールとリソースは、@requires_scopes デコレーターを使用して必要な OAuth スコープを宣言します。サーバーは宣言されたすべてのスコープを自動的に収集し、OAuth 認証時に要求します。

Redmine の OAuth アプリが上記のスコープの一部のみで設定されている場合、エラー "The requested scope is invalid, unknown, or malformed" を回避するため、REDMINE_SCOPES を設定してください。

REDMINE_SCOPES=view_issues view_project

設定すると、ツールで宣言されたスコープと REDMINE_SCOPES の共通部分のみが要求されます。必要なスコープがすべて含まれていないツール(例:search_issues には search_project が必要)は、OAuth フロー全体を中断する代わりに、呼び出し時に説明的なエラーを返します。

省略した場合は、ツールで宣言されたすべてのスコープが要求されます。Redmine アプリですべてのスコープが有効になっている場合は、この設定で動作します。

アーキテクチャ

OAuth フロー、トークンの保存、モジュール設計の詳細については、docs/architecture.md を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。