Skip to main content
Glama

Redmine MCP Server

by snowild
CLAUDE.md7.64 kB
# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## 專案概述 這是一個 MCP (Model Context Protocol) 伺服器專案,用於與 Redmine 系統整合。使用 Python 3.12+ 和 uv 包管理器。 ## 開發環境設置 ### 依賴管理 - 使用 `uv` 作為包管理器 - 安裝依賴:`uv sync` - 執行測試:`uv run python -m pytest` ### 專案結構 ``` redmine-mcp/ ├── src/redmine_mcp/ # 主要原始碼 │ ├── __init__.py # 套件初始化 │ ├── server.py # MCP 服務器主程式 ✓ 已完成 │ ├── redmine_client.py # Redmine API 客戶端 ✓ 已完成 │ ├── config.py # 配置管理 ✓ 已完成 ├── tests/ # 測試檔案 ├── docs/ # 文件目錄 │ ├── issues/ # 開發問題記錄 │ └── manuals/ # 技術手冊 ├── pyproject.toml # 專案配置和依賴 ├── uv.lock # 鎖定的依賴版本 └── .env # 環境變數 (待建立) ``` ## MCP 開發說明 ### 技術棧 - **MCP SDK**: mcp[cli] >= 1.9.4 (使用 FastMCP) - **HTTP 客戶端**: requests >= 2.31.0 - **配置管理**: python-dotenv >= 1.0.0 - **Python 版本**: >= 3.12 ### MCP 服務器架構 - 使用 FastMCP 建立服務器 - 工具註冊使用 `@mcp.tool()` 裝飾器 - 支援非同步操作和類型安全 ### Redmine API 整合 - **議題管理**: 查詢、建立、更新、刪除議題 - **專案管理**: 查詢、建立、更新、刪除、封存專案 - **用戶管理**: 查詢用戶、取得當前用戶資訊 - **元數據查詢**: 狀態、優先級、追蹤器列表 - **觀察者管理**: 新增/移除議題觀察者 - **完整篩選支援**: 多條件篩選和排序 ## Claude Code 整合 ### 安裝到 Claude Code ```bash # 安裝 MCP 服務器 uv tool install . # 或使用 pip pip install . # 添加到 Claude Code claude mcp add redmine "redmine-mcp" \ -e REDMINE_DOMAIN="https://your-redmine-domain.com" \ -e REDMINE_API_KEY="your_api_key_here" \ -e REDMINE_MCP_LOG_LEVEL="INFO" \ -e REDMINE_MCP_TIMEOUT="30" ``` ### 環境變數說明 為避免與其他專案的環境變數衝突,redmine-mcp 使用專屬前綴: - **必要變數**: - `REDMINE_DOMAIN`: Redmine 伺服器網址 - `REDMINE_API_KEY`: Redmine API 金鑰 - **日誌級別控制**: - `REDMINE_MCP_LOG_LEVEL`: 本專案專屬日誌級別(預設:INFO) - `FASTMCP_LOG_LEVEL`: FastMCP 內建變數(可選) - 如果不設定,系統會自動使用 `REDMINE_MCP_LOG_LEVEL` 的值 - 設定此變數可單獨控制 FastMCP 的日誌輸出 - **其他配置**: - `REDMINE_MCP_TIMEOUT`: 請求超時時間(秒) - `REDMINE_TIMEOUT`: 向後相容的超時設定 ### 可用的 MCP 工具(22 個) - **管理工具**: server_info, health_check, refresh_cache ✨ 新增 - **查詢工具**: get_issue, list_project_issues, get_projects, get_issue_statuses, get_trackers, get_priorities, get_time_entry_activities, get_document_categories, search_issues, get_my_issues - **用戶工具**: search_users, list_users, get_user ✨ 新增 - **編輯工具**: update_issue_status, update_issue_content, add_issue_note ✨ 時間記錄支援, assign_issue, close_issue ✨ 名稱參數支援 - **建立工具**: create_new_issue ✨ 名稱參數支援 ## 常用指令 ```bash # 安裝依賴 uv sync # 執行 MCP 服務器 uv run python -m redmine_mcp.server # 測試 Claude Code 整合 uv run python tests/scripts/claude_integration.py # 執行單元測試 uv run python -m pytest tests/unit/ # 執行所有測試 uv run python -m pytest tests/ # 添加新依賴 uv add <package-name> ``` ## 智慧快取系統 ✨ ### 快取機制特色 - **Multi-Domain 支援**: 根據 Redmine domain 自動建立獨立快取檔案 - **自動更新**: 24小時自動刷新快取資料 - **完整覆蓋**: 快取列舉值(優先權、狀態、追蹤器)和用戶資料 - **檔案位置**: `~/.redmine_mcp/cache_{domain}_{hash}.json` ### 可用的輔助函數 ```python client = get_client() # 列舉值查詢 priority_id = client.find_priority_id_by_name("低") # → 5 status_id = client.find_status_id_by_name("實作中") # → 2 tracker_id = client.find_tracker_id_by_name("臭蟲") # → 1 # 用戶查詢 user_id = client.find_user_id("Redmine Admin") # 智慧查詢(姓名或登入名) user_id = client.find_user_id_by_name("Redmine Admin") # 僅姓名查詢 user_id = client.find_user_id_by_login("admin") # 僅登入名查詢 # 時間追蹤活動查詢 activity_id = client.find_time_entry_activity_id_by_name("開發") # → 11 # 取得所有選項 priorities = client.get_available_priorities() # {"低": 5, "正常": 6, ...} users = client.get_available_users() # {"by_name": {...}, "by_login": {...}} activities = client.get_available_time_entry_activities() # {"設計": 10, "開發": 11, ...} # 手動刷新 client.refresh_cache() ``` ### MCP 工具 - `refresh_cache()`: 手動刷新快取並顯示統計資訊 ## 名稱參數支援 ✨ ### 支援名稱參數的 MCP 工具 以下工具現在支援使用名稱而不僅僅是 ID: ```python # 更新議題狀態(使用名稱) update_issue_status(issue_id=1, status_name="實作中") # 更新議題內容(使用名稱) update_issue_content( issue_id=1, priority_name="高", tracker_name="臭蟲" ) # 指派議題(使用名稱) assign_issue(issue_id=1, user_name="Redmine Admin") assign_issue(issue_id=1, user_login="admin") # 建立新議題(使用名稱) create_new_issue( project_id=1, subject="新功能開發", priority_name="正常", tracker_name="功能", assigned_to_name="Redmine Admin" ) ``` ### 錯誤處理 如果提供的名稱不存在,工具會自動顯示可用選項: ``` 找不到優先級名稱:「超高」 可用優先級: - 低 - 正常 - 高 - 緊急 ``` ## 時間記錄功能 ✨ ### add_issue_note 時間記錄支援 現在可以在新增議題備註時同時記錄工作時間: ```python # 新增備註並記錄時間(使用活動名稱) add_issue_note( issue_id=1, notes="完成功能開發", spent_hours=2.5, activity_name="開發" ) # 新增備註並記錄時間(使用活動 ID) add_issue_note( issue_id=1, notes="修復 bug", spent_hours=1.0, activity_id=12, spent_on="2025-06-25" # 指定記錄日期 ) # 私有備註 + 時間記錄 add_issue_note( issue_id=1, notes="內部討論記錄", private=True, spent_hours=0.5, activity_name="討論" ) # 僅新增備註(向後相容) add_issue_note(issue_id=1, notes="一般備註") ``` ### 時間追蹤活動支援 系統支援以下預設活動: - 設計 (ID: 10) - 開發 (ID: 11) - 除錯 (ID: 12) - 調查 (ID: 13) - 討論 (ID: 14) - 測試 (ID: 15) - 維護 (ID: 16) - 文件 (ID: 17) - 教學 (ID: 18) - 翻譯 (ID: 19) - 其他 (ID: 20) ### 特色功能 - **智慧快取**: 時間追蹤活動資訊自動快取,提升查詢效率 - **名稱參數**: 支援使用活動名稱而非 ID,使用更直觀 - **向後相容**: 保持原有 `add_issue_note` 功能完全相容 - **錯誤提示**: 無效活動名稱時自動顯示可用選項 - **彈性日期**: 可指定記錄日期,預設為今日 ## 注意事項 - 專案正在開發初期階段 - 後續會根據開發進度更新此檔案內容

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/snowild/redmine-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server