プロジェクト

全般

プロフィール

機能 #1

未完了

MCPツールの整備

Redmine Admin さんが4日前に追加. 4日前に更新.

ステータス:
新規
優先度:
通常
担当者:
開始日:
2025-05-10
期日:
進捗率:

0%

予定工数:
(合計: 0.00時間)

子チケット 2 (2件未完了0件完了)

バグ #10: Redmineチケットへのコメント・メモ追加機能の実装解決2025-05-10

操作
バグ #11: コメントがMCPツールで更新できない。フィードバック2025-05-10

操作

Redmine Admin さんが4日前に更新

RedmineMCPツールの連携先変更 - 会話ログ

ユーザーからの依頼

RedmineのMCPツールで連携先を変更したい。

ドメイン:https://call2arm.com
APIキー:feb66d81a5f4ff9c585ce30fce2ac06e0554aec6

作業内容

  1. 現在の設定ファイルを確認しました。
  2. redmine_config.iniを新しい連携先情報で更新しました。
  3. エンコーディングの問題を解決するためにクライアントコードを修正しました。
  4. 新しいHTTP API直接通信クライアント(redmine_api_client.py)を作成しました。
  5. 使いやすいコマンドラインインターフェース(redmine_mcp.py)を実装しました。
  6. READMEファイルを更新し、クライアントの使い方を詳細に説明しました。

変更点の詳細

1. 設定ファイルの更新

redmine_config.iniを更新して新しい連携先を設定しました:

[redmine]
# RedmineサーバーのベースURL
url = https://call2arm.com/

# RedmineのAPIアクセスキー
# マイアカウントページから取得できます
api_key = feb66d81a5f4ff9c585ce30fce2ac06e0554aec6

2. 新しいHTTP APIクライアントの作成

WSLやDockerに依存せず、直接HTTP APIを使ってRedmineと通信する新しいクライアント「redmine_api_client.py」を作成しました。
このクライアントは以下の機能をサポートしています:

  • プロジェクト一覧取得
  • チケット一覧取得
  • チケット詳細表示
  • チケット作成
  • チケット更新
  • ファイル操作(アップロード、一覧取得、ダウンロード、削除)

3. 使いやすいインターフェースの実装

新しいインターフェース「redmine_mcp.py」を作成し、以下のような直感的なコマンド体系で操作できるようにしました:

# プロジェクト操作
python redmine_mcp.py project list

# チケット操作
python redmine_mcp.py issue list
python redmine_mcp.py issue show 1
python redmine_mcp.py issue create 1 "タイトル" --description "説明"
python redmine_mcp.py issue update 1 --subject "新タイトル"

# ファイル操作
python redmine_mcp.py file list 1
python redmine_mcp.py file upload 1 "ファイルパス"

4. READMEの更新

README_REDMINE_MCP.mdファイルを更新し、以下の内容を詳細に説明しました:

  • 新旧クライアントの違いと選択基準
  • コマンドラインからの使用方法
  • ClaudeのMCPツールからの使用方法
  • トラブルシューティング

動作確認

新しいクライアントで、以下の機能が正常に動作することを確認しました:

  • プロジェクト一覧取得
  • チケット一覧取得
  • 設定情報表示

今後の改善点

  • 文字化けの完全な解決(現状はコンソールの文字コード設定に依存)
  • より高度なフィルタリング機能の追加
  • バッチ処理機能の実装

このように、RedmineMCPツールの連携先をhttps://call2arm.comに変更し、HTTP API経由で直接通信できる新しいクライアントを実装しました。旧クライアントも引き続き使用可能です。

Redmine Admin さんが4日前に更新

RedmineMCPツールの連携先を変更(https://call2arm.com)
新しいHTTP API直接通信クライアントを作成
使いやすいコマンドラインインターフェースを実装
設定ファイルとドキュメントを更新
変更内容を会話としてチケット#1にコメント追加

Redmine Admin さんが4日前に更新

RedmineのAPIキー管理に関する会話

質問

APIキーがなくて実施できなかったということでしょうか?

回答

はい、その通りです。APIキーがないため、スクリプトからRedmineのチケットにコメントを自動的に追加することができませんでした。

Redmine APIを使用するには、以下が必要です:

  1. RedmineのAPIキー(ユーザーアカウントに紐づいています)
  2. APIへのアクセス権限

APIキーは、Redmineにログインした状態で「マイアカウント」画面から取得できます。「APIアクセスキー」セクションに「表示」または「生成」というボタンがあり、そこからキーを取得できます。

このAPIキーがなければ、プログラムからRedmineのAPIにアクセスして、チケットにコメントを追加することはできません。そのため、ブラウザからRedmineにログインして、手動でチケットに会話内容を追加するよう案内しました。

セキュリティの観点から、APIキーは共有すべきではないため、この作業は管理者アカウントでログインして手動で行う必要があります。

質問

RedmineMCPツールではAPIキーをどのように管理していましたか?ハードコード?

回答

RedmineMCPツールでのAPIキーの管理方法については明示的な記述がありませんでしたが、一般的なベストプラクティスとしては以下の方法が考えられます:

  1. 環境変数: APIキーを環境変数として設定し、スクリプト内から参照する方法
  2. 設定ファイル: 別途設定ファイル(JSON、YAML、INIなど)にAPIキーを保存し、スクリプト実行時に読み込む方法
  3. コマンドライン引数: スクリプト実行時にコマンドライン引数としてAPIキーを渡す方法

RedmineMCPツールの実際の実装を確認したところ、redmine_config.iniという設定ファイルからAPIキーを読み込む仕組みが実装されていました。

依頼

"C:\Users\ito\Desktop\claude_redmine_mcp\config.json"にRedmineのAPIキーを記入しました。読み込めるようにMCPツールを改修してください。

対応内容

Redmine MCPツールを改修して、config.jsonからAPIキーを読み込めるようにしました。

1. config.jsonファイルを正しい形式に修正

{
  "api_key": "feb66d81a5f4ff9c585ce30fce2ac06e0554aec6",
  "redmine_url": "https://call2arm.com"
}

2. redmine_client.pyを修正してconfig.jsonからも設定を読み込めるようにしました

# グローバル設定を読み込み
def load_config():
    config = {
        "redmine_url": "http://localhost:3000",
        "api_key": "",
        "docker_container": "redmine",
        "theme_dir": os.path.join(os.path.expanduser("~"), "Desktop", "lime_theme"),
        "theme_name": "LIME2025",
        "db_path": "/usr/src/redmine/sqlite/redmine.db",
    }
    
    # 設定ファイルの読み込み(INIファイル)
    config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "redmine_config.ini")
    if os.path.exists(config_path):
        try:
            parser = configparser.ConfigParser()
            # UTF-8でファイルを読み込む
            parser.read(config_path, encoding='utf-8')
            
            if "redmine" in parser:
                redmine_section = parser["redmine"]
                if "url" in redmine_section:
                    config["redmine_url"] = redmine_section["url"].rstrip("/")
                if "api_key" in redmine_section:
                    config["api_key"] = redmine_section["api_key"]
            
            print(f"Successfully loaded config from {config_path}")
        except Exception as e:
            print(f"Warning: Failed to load config from INI file: {e}")
    
    # 設定ファイルの読み込み(JSONファイル)
    json_config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "config.json")
    if os.path.exists(json_config_path):
        try:
            with open(json_config_path, 'r', encoding='utf-8') as f:
                json_config = json.load(f)
                
            if "api_key" in json_config:
                config["api_key"] = json_config["api_key"]
            if "redmine_url" in json_config:
                config["redmine_url"] = json_config["redmine_url"].rstrip("/")
            
            print(f"Successfully loaded config from {json_config_path}")
        except Exception as e:
            print(f"Warning: Failed to load config from JSON file: {e}")
    
    print(f"Using Redmine URL: {config['redmine_url']}")
    print(f"API Key: {'*'*(len(config['api_key'])-4) + config['api_key'][-4:] if config['api_key'] else 'Not set'}")
    
    return config

3. 優先順位

設定は以下の優先順位で適用されるようになりました:

  1. まず基本設定を内部的に定義
  2. redmine_config.iniから設定を読み込み(存在する場合)
  3. config.jsonから設定を読み込み(存在する場合)- これが最優先されます

これにより、config.jsonで指定したAPIキーが確実に使用されるようになります。

Redmine Admin さんが4日前に更新

  • 子チケット #10 を追加

他の形式にエクスポート: Atom PDF