经 AI Skill Hub 精选评估,Redmine MCP服务器 获评「强烈推荐」。这款MCP工具在功能完整性、社区活跃度和易用性方面表现出色,AI 评分 8.2 分,适合有一定技术背景的用户使用。
为Redmine项目管理系统设计的生产级MCP服务器,提供安全认证、分页查询和企业级功能。支持AI Agent与Redmine深度集成,适合需要自动化项目管理工作流的团队和开发者。
Redmine MCP服务器 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
为Redmine项目管理系统设计的生产级MCP服务器,提供安全认证、分页查询和企业级功能。支持AI Agent与Redmine深度集成,适合需要自动化项目管理工作流的团队和开发者。
Redmine MCP服务器 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
# 方式一:通过 Claude Code CLI 一键安装
claude skill install https://github.com/jztan/redmine-mcp-server
# 方式二:手动配置 claude_desktop_config.json
{
"mcpServers": {
"redmine-mcp---": {
"command": "npx",
"args": ["-y", "redmine-mcp-server"]
}
}
}
# 配置文件位置
# macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
# Windows: %APPDATA%/Claude/claude_desktop_config.json
# 安装后在 Claude 对话中直接使用 # 示例: 用户: 请帮我用 Redmine MCP服务器 执行以下任务... Claude: [自动调用 Redmine MCP服务器 MCP 工具处理请求] # 查看可用工具列表 # 在 Claude 中输入:"列出所有可用的 MCP 工具"
// claude_desktop_config.json 配置示例
{
"mcpServers": {
"redmine_mcp___": {
"command": "npx",
"args": ["-y", "redmine-mcp-server"],
"env": {
// "API_KEY": "your-api-key-here"
}
}
}
}
// 保存后重启 Claude Desktop 生效
A Model Context Protocol (MCP) server that connects AI assistants to Redmine. It exposes your Redmine instance's projects, issues, time tracking, wiki pages, and files as MCP tools.
mcp-name: io.github.jztan/redmine-mcp-server
<p align="center"> <a href="https://redmine-mcp-server.jztan.com"> <img src="https://raw.githubusercontent.com/jztan/redmine-mcp-server/develop/assets/redmine-mcp-demo.gif" alt="An AI agent triaging a Redmine sprint backlog through redmine-mcp-server" width="820" /> </a> </p>
<p align="center"><sub>An AI agent triaging a Redmine sprint through redmine-mcp-server. <a href="https://redmine-mcp-server.jztan.com">Try the live demo →</a></sub></p>
REDMINE_MCP_EXPOSE_ADMIN_TOOLS=true): Issues, projects, time tracking, wiki, Gantt, file operations, membership management, products, contacts and deals (CRM), DMSF documents, and moreshow_triage_board renders a live, drag-and-drop issue board right in the chat via the MCP Apps extensionREDMINE_MCP_READ_ONLY environment variableThe integration suite passes in full against Redmine 6.1 and 7.0. Older versions are untested. Individual tools list their own minimum where one is known (global search needs 3.3.0+, issue watchers 2.3.0+, project time-entry activities 3.4.0+), so on an older server those specific tools fail rather than the whole server.
OAuth2 is the one hard requirement: it needs Redmine 6.1+ for Doorkeeper support. See docs/oauth-setup.md.
```bash
pip install redmine-mcp-server
REDMINE_INTROSPECT_CLIENT_ID=... REDMINE_INTROSPECT_CLIENT_SECRET=...
You register the OAuth app manually in Redmine admin → **Applications** (no Dynamic Client Registration). Full walkthrough, endpoint reference, and troubleshooting: [OAuth2 Setup Guide](./docs/oauth-setup.md).
</details>
<details>
<summary><strong>OAuthProxy mode</strong> (hosted deployments with client self-registration)</summary>
FastMCP acts as the MCP-facing authorization server: it handles DCR for MCP clients, then redirects users to Redmine as the upstream OAuth provider for consent. Use this when clients (e.g. Claude Desktop, VS Code) expect to register themselves.
bash 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
REDMINE_INTROSPECT_CLIENT_ID=... REDMINE_INTROSPECT_CLIENT_SECRET=... REDMINE_MCP_JWT_SIGNING_KEY=...
The upstream Redmine app must register `${REDMINE_MCP_BASE_URL}/auth/callback` as its redirect URI. Storage, scaling, and credential-reuse notes are in the [OAuth2 Setup Guide](./docs/oauth-setup.md).
</details>
<details>
<summary><strong>legacy-per-user mode</strong> (Redmine older than 6.1)</summary>
For Redmine instances too old for OAuth, each user's MCP client sends its own Redmine API key in an `X-Redmine-API-Key` header. Each request runs as that user's identity with that user's permissions.
**This is an advanced, opt-in mode.** It requires TLS end-to-end and a correctly configured reverse proxy. Read [`docs/legacy-per-user-auth.md`](docs/legacy-per-user-auth.md) for the threat model, firewall guidance, and revocation runbook before enabling it.
**`mcp-remote` (recommended):**
json { "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>" } }}}
Note the colon with no surrounding spaces in `X-Redmine-API-Key:${RM_KEY}`. This avoids an arg-escaping bug in Cursor and Claude Desktop on Windows.
**VS Code (`mcp.json`):**
Use `.vscode/mcp.json` (workspace file) or the user profile `mcp.json`. The workspace `.mcp.json` silently drops `headers` (see microsoft/vscode#319528), so do not use that file. Pin VS Code 1.102 or newer.
json { "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 }] } } } ```
Unsupported: any client that cannot set a custom request header, or that reserves the Authorization header for its own OAuth flow.
</details>
```bash
```bash
docker-compose up --build
Use the automated deployment script:
chmod +x deploy.sh
./deploy.sh
1. Install the package
pip install redmine-mcp-server
2. Create a .env file with your Redmine credentials (see Installation for template) 3. Start the server redmine-mcp-server
4. Add the server to your MCP client using one of the guides in MCP Client Configuration.
Once running, the server listens on http://localhost:8000 with the MCP endpoint at /mcp, health check at /health, and file serving at /files/{file_id}.
cat > .env << 'EOF'
SERVER_HOST=0.0.0.0 SERVER_PORT=8000
PUBLIC_HOST=localhost PUBLIC_PORT=8000
ATTACHMENTS_DIR=./attachments AUTO_CLEANUP_ENABLED=true CLEANUP_INTERVAL_MINUTES=10 ATTACHMENT_EXPIRES_MINUTES=60 EOF
nano .env # or use your preferred editor
<details> <summary><strong>Environment Variables</strong></summary>
| Variable | Required | Default | Description |
|---|---|---|---|
REDMINE_URL | Yes | – | Base URL of your Redmine instance |
REDMINE_AUTH_MODE | No | legacy | Authentication mode: legacy, legacy-per-user, oauth, or oauth-proxy (see [Authentication](#authentication)) |
REDMINE_PER_USER_TRUST_PROXY | Yes* | false | Required for legacy-per-user mode. Operator attestation: "this server sits behind TLS and my proxy does not forward client X-Forwarded-Proto." |
REDMINE_PER_USER_AUDIT_IDENTITY | No | false | legacy-per-user only: resolve and log the Redmine user ID per request (adds one extra round-trip) |
REDMINE_API_KEY | Yes† | – | API key (legacy mode only) |
REDMINE_USERNAME | Yes† | – | Username for basic auth (legacy mode only) |
REDMINE_PASSWORD | Yes† | – | Password for basic auth (legacy mode only) |
REDMINE_MCP_BASE_URL | Yes‡ | http://localhost:3040 | Public base URL of this server, no trailing slash (OAuth modes only) |
FASTMCP_STREAMABLE_HTTP_PATH | No | /mcp | MCP transport path inside REDMINE_MCP_BASE_URL |
REDMINE_INTROSPECT_CLIENT_ID | Yes‡ | – | Doorkeeper OAuth client ID used by the MCP server to introspect Bearer tokens (RFC 7662). Register a confidential OAuth app in Redmine (see [docs/oauth-setup.md](docs/oauth-setup.md) Step 2). |
REDMINE_INTROSPECT_CLIENT_SECRET | Yes‡ | – | Secret for the introspection client |
REDMINE_MCP_JWT_SIGNING_KEY | Yes§ | – | Stable signing/encryption key used by FastMCP OAuthProxy tokens and storage |
REDMINE_OAUTH_CLIENT_ID | No | – | Optional upstream Redmine OAuth client ID for oauth-proxy; defaults to REDMINE_INTROSPECT_CLIENT_ID |
REDMINE_OAUTH_CLIENT_SECRET | No | – | Optional upstream Redmine OAuth client secret for oauth-proxy; defaults to REDMINE_INTROSPECT_CLIENT_SECRET |
FASTMCP_HOME | No | platform default (/app/data/fastmcp in Docker) | FastMCP data directory. In oauth-proxy mode, encrypted OAuthProxy state is stored below FASTMCP_HOME/oauth-proxy/, and must be on a persistent volume to survive a container rebuild |
REDMINE_MCP_ALLOWED_CLIENT_REDIRECT_URIS | No | loopback only | oauth-proxy client redirect-URI allowlist (glob patterns, comma/space separated). Unset = http://localhost:* and http://127.0.0.1:*; * = allow any |
HEALTH_INTROSPECTION_TTL_SECONDS | No | 30 | TTL (seconds) for the /health Doorkeeper introspection probe cache. Set to 0 to disable caching. |
SERVER_HOST | No | 0.0.0.0 | Host/IP the MCP server binds to |
SERVER_PORT | No | 8000 | Port the MCP server listens on |
PUBLIC_HOST | No | localhost | Hostname used when generating download URLs |
PUBLIC_PORT | No | 8000 | Public port used for download URLs |
PUBLIC_SCHEME | No | derived | Scheme for download URLs (http or https). When unset, https is derived from PUBLIC_PORT=443, otherwise http. Set explicitly for TLS on a nonstandard port. Default ports (80/443) are omitted from generated URLs. |
REDMINE_PUBLIC_URL | No | – | Publicly-reachable URL of your Redmine instance. When set, content_url values returned on attachments are rewritten from REDMINE_URL's origin to this one (preserving path/query/fragment and any reverse-proxy subpath). Useful when REDMINE_URL is the internal container hostname unreachable from MCP clients. When unset, the raw URL Redmine echoes back is returned. |
ATTACHMENTS_DIR | No | ./attachments | Directory for downloaded attachments |
ATTACHMENT_MAX_DOWNLOAD_BYTES | No | 209715200 (200 MB) | Cap applied to every get_redmine_attachment download regardless of content type. Exceeding the cap aborts the download mid-stream and deletes the partial file. |
REDMINE_MCP_UPLOAD_FILE_ROOTS | No | – | Extra directories allowed as file_path upload sources (OS path separator-separated). ATTACHMENTS_DIR is always allowed. Unset restricts uploads to ATTACHMENTS_DIR only. |
AUTO_CLEANUP_ENABLED | No | true | Toggle automatic cleanup of expired attachments |
CLEANUP_INTERVAL_MINUTES | No | 10 | Interval for cleanup task |
ATTACHMENT_EXPIRES_MINUTES | No | 60 | Expiry window for generated download URLs |
REDMINE_MCP_EXPOSE_ADMIN_TOOLS | No | false | Expose operator/admin tools on the MCP surface. Currently gates cleanup_attachment_files. The background cleanup task runs regardless of this flag. |
REDMINE_SSL_VERIFY | No | true | Enable/disable SSL certificate verification |
REDMINE_SSL_CERT | No | – | Path to custom CA certificate file |
REDMINE_SSL_CLIENT_CERT | No | – | Path to client certificate for mutual TLS |
REDMINE_TIMEOUT | No | 30 | Whole seconds to wait for a Redmine HTTP response before failing the call. Applied as a connect timeout of at most 10s plus a read timeout of the full value. Set to 0 to wait indefinitely, which restores the previous behavior and can hang the request. |
REDMINE_MCP_READ_ONLY | No | false | Block all write operations (create/update/delete) when set to true |
REDMINE_MCP_ALLOW_TOOLS | No | – | Expose only these tools (comma-separated names). Unset exposes all; set but naming no tool refuses to start. Narrows the surface only: a listed tool whose plugin flag is off stays hidden. Whole tools, so per-action control on manage_X remains REDMINE_MCP_READ_ONLY's job. Names matching no tool are warned about at startup ([details](docs/tool-reference.md#tool-allow-list)) |
REDMINE_MCP_ALLOW_TOOLS_FILE | No | – | Path to a file with one allowed tool name per line (# starts a comment). Used when REDMINE_MCP_ALLOW_TOOLS is unset or empty |
REDMINE_OAUTH_SCOPE_ENFORCEMENT | No | on | OAuth modes only: deny tool calls whose access token lacks the tool's Redmine permission scopes, and filter tools/list accordingly. Set to off temporarily while re-consenting older tokens ([details](docs/oauth-setup.md#scope-enforcement)) |
REDMINE_OAUTH_DISCOVERY_AS | No | redmine | OAuth modes only: which authorization server discovery advertises. redmine names your Redmine; self advertises this server (issuer = REDMINE_MCP_BASE_URL) and serves RFC 8414 metadata at its own canonical well-known location, which clients that probe there need, Cursor among them ([details](docs/oauth-setup.md#cursor-and-self-as-discovery)) |
REDMINE_MCP_SCOPES | No | – | OAuth modes only: advertise a subset of scopes in discovery, matching the permissions your Redmine OAuth Application actually enables. Avoids invalid_scope at consent when a client requests the full advertised list |
REDMINE_AGILE_ENABLED | No | false | Enable RedmineUP Agile plugin support: get_redmine_issue returns story_points, agile_sprint_id, agile_position; update_redmine_issue accepts story_points |
REDMINE_CHECKLISTS_ENABLED | No | false | Enable RedmineUP Checklists plugin support: get_checklist, create_checklist_item, update_checklist_item (requires Checklists Pro plugin) |
REDMINE_PRODUCTS_ENABLED | No | false | Enable RedmineUP Products plugin support: manage_product (action=list/get/create/update) |
REDMINE_CRM_ENABLED | No | false | Enable RedmineUP CRM plugin support: manage_contact (action=list/get/create/update/delete/assign_to_project/remove_from_project) list_contact_tags, manage_crm_note (notes on contacts) and list_crm_queries. Requires the CRM plugin and the view_contacts / view_private_contacts permissions on the Redmine server, plus add_contacts / edit_contacts / delete_contacts for the write actions. In OAuth mode these are advertised as scopes only when this flag is set, so the OAuth application must grant them too. |
REDMINE_CRM_EDITION | No | light | Which build of the CRM plugin the Redmine server runs: light or pro. The two register different contact query filters — the Pro build registers the contact fields, the Light build registers only tags — and Redmine ignores an unregistered filter parameter without erroring, answering with the whole collection instead. So manage_contact refuses first_name, last_name, middle_name, company, job_title, email, phone and author_id on list unless this is pro, rather than returning a silently unfiltered list. The build cannot be detected: Redmine exposes plugin versions only through admin/plugins, which is HTML and admin-only. |
REDMINE_DEALS_ENABLED | No | false | Enable RedmineUP CRM **deals** support: manage_deal (action=list/get/create/update/delete), list_deal_statuses, manage_deal_category, manage_crm_note (notes on deals), list_crm_queries and, together with REDMINE_PRODUCTS_ENABLED, add_deal_product. Separate from REDMINE_CRM_ENABLED because the CRM plugin's Light edition ships no deals and defines none of the deal permissions, so advertising them there would make consent fail. Requires the CRM plugin's **Pro** edition, the deals project module enabled on the project, and the view_deals permission, plus add_deals / edit_deals / delete_deals for the write actions. |
REDMINE_DMSF_ENABLED | No | false | Enable DMSF document-management plugin support: manage_document (action=list/get/create/update). Requires redmine_dmsf plugin on the Redmine server. |
REDMINE_TAGS_ENABLED | No | false | Enable AlphaNodes additional_tags plugin support: get_redmine_issue returns a tags array, and create_redmine_issue/update_redmine_issue accept a tag_list. Requires the additional_tags plugin and the view_issue_tags / create_issue_tags / edit_issue_tags permissions on the Redmine server. |
REDMINE_AUTOFILL_REQUIRED_CUSTOM_FIELDS | No | false | Enable one retry for issue creation by filling missing required custom fields |
REDMINE_REQUIRED_CUSTOM_FIELD_DEFAULTS | No | {} | JSON object mapping required custom field names to fallback values used when creating issues |
REDMINE_ALLOW_PRIVATE_FETCH_URLS | No | false | **Warning:** disables all SSRF protection for attachment fetching. Never set to true in production. |
\ Required when REDMINE_AUTH_MODE=legacy-per-user. † Required when REDMINE_AUTH_MODE=legacy. Either REDMINE_API_KEY or REDMINE_USERNAME+REDMINE_PASSWORD must be set. API key is recommended. ‡ Required when REDMINE_AUTH_MODE=oauth or REDMINE_AUTH_MODE=oauth-proxy. § Required when REDMINE_AUTH_MODE=oauth-proxy.* Secret values can also be supplied with Docker/Kubernetes-style file variables: REDMINE_INTROSPECT_CLIENT_SECRET_FILE, REDMINE_MCP_JWT_SIGNING_KEY_FILE, and REDMINE_OAUTH_CLIENT_SECRET_FILE.
When REDMINE_AUTOFILL_REQUIRED_CUSTOM_FIELDS=true, create_redmine_issue retries once on relevant custom-field validation errors (for example <Field Name> cannot be blank or <Field Name> is not included in the list) and fills values only from: - the Redmine custom field default_value, or - REDMINE_REQUIRED_CUSTOM_FIELD_DEFAULTS
In practice only the second one can fire. The server reads project custom fields from GET /projects/{id}.json?include=issue_custom_fields, which Redmine renders as id and name only, so it never sees default_value -- see list_project_issue_custom_fields. Set the env map if you want autofill to have anything to work with.
Example:
REDMINE_AUTOFILL_REQUIRED_CUSTOM_FIELDS=true
REDMINE_REQUIRED_CUSTOM_FIELD_DEFAULTS='{"Required Field A":"Value A","Required Field B":"Value B"}'
</details>
Configure SSL certificate handling for Redmine servers with self-signed certificates or internal CA infrastructure.
<details> <summary><strong>Self-Signed Certificates</strong></summary>
If your Redmine server uses a self-signed certificate or internal CA:
```bash
REDMINE_URL=https://redmine.company.com REDMINE_API_KEY=your_api_key REDMINE_SSL_CERT=/path/to/ca-certificate.crt
Supported certificate formats: `.pem`, `.crt`, `.cer`
</details>
<details>
<summary><strong>Mutual TLS (Client Certificates)</strong></summary>
For environments requiring client certificate authentication:
bash
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
**Note**: Private keys must be unencrypted (Python requests library requirement).
</details>
<details>
<summary><strong>Disable SSL Verification (Development Only)</strong></summary>
⚠️ **WARNING**: Only use in development/testing environments!
bash
REDMINE_SSL_VERIFY=false ```
Disabling SSL verification makes your connection vulnerable to man-in-the-middle attacks.
</details>
For SSL troubleshooting, see the Troubleshooting Guide.
The server exposes an HTTP endpoint at http://127.0.0.1:8000/mcp. Register it with your preferred MCP-compatible agent using the instructions below.
The examples below assumelegacyoroauthmode. Inlegacy-per-usermode each client must also send anX-Redmine-API-Keyheader; see legacy-per-user mode above for header-aware configs.
<details> <summary><strong>Visual Studio Code (Native MCP Support)</strong></summary>
VS Code has built-in MCP support via GitHub Copilot (requires VS Code 1.102+).
Using CLI (Quickest):
code --add-mcp '{"name":"redmine","type":"http","url":"http://127.0.0.1:8000/mcp"}'
Using Command Palette: 1. Open Command Palette (Cmd/Ctrl+Shift+P) 2. Run MCP: Open User Configuration (for global) or MCP: Open Workspace Folder Configuration (for project-specific) 3. Add the configuration:
{
"servers": {
"redmine": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}
4. Save the file. VS Code will automatically load the MCP server.
Manual Configuration: Create .vscode/mcp.json in your workspace (or mcp.json in your user profile directory):
{
"servers": {
"redmine": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}
</details>
<details> <summary><strong>Claude Code</strong></summary>
Add to Claude Code using the CLI command:
claude mcp add --transport http redmine http://127.0.0.1:8000/mcp
Or configure manually in your Claude Code settings file (~/.claude.json):
{
"mcpServers": {
"redmine": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}
</details>
<details> <summary><strong>Claude Desktop (macOS & Windows)</strong></summary>
Claude Desktop's config file supports stdio transport only. Use FastMCP's proxy via uv to bridge to this HTTP server.
Setup: 1. Open Claude Desktop 2. Click the Claude menu (macOS menu bar / Windows title bar) > Settings... 3. Click the Developer tab > Edit Config 4. Add the following configuration:
{
"mcpServers": {
"redmine": {
"command": "uv",
"args": [
"run",
"--with", "fastmcp",
"fastmcp",
"run",
"http://127.0.0.1:8000/mcp"
]
}
}
}
Config file locations: - macOS: ~/Library/Application Support/Claude/claude_desktop_config.json - Windows: %APPDATA%\Claude\claude_desktop_config.json
Note: The Redmine MCP server must be running before starting Claude Desktop.
</details>
<details> <summary><strong>Cursor</strong></summary>
Cursor talks to HTTP MCP servers directly, with no bridge.
1. Create ~/.cursor/mcp.json (available in every project) or .cursor/mcp.json in your project root (that project only):
{
"mcpServers": {
"redmine": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}
2. Save the file. Cursor picks the server up automatically; its MCP settings list the server and the tools it loaded.
Note: Cursor identifies a remote server by a bare url and has no type field, unlike the VS Code and Claude Code configs above.
In legacy-per-user mode, add the API key header:
{
"mcpServers": {
"redmine": {
"url": "https://your-host/mcp",
"headers": { "X-Redmine-API-Key": "<your redmine api key>" }
}
}
}
In oauth mode, set REDMINE_OAUTH_DISCOVERY_AS=self on the MCP server. Cursor looks for authorization server metadata at its own canonical well-known location, which the default (redmine) discovery profile does not serve, so the flow stalls without it (#188). See Cursor and self-AS discovery.
</details>
<details> <summary><strong>Codex CLI</strong></summary>
Add to Codex CLI using the command:
codex mcp add redmine -- npx -y mcp-client-http http://127.0.0.1:8000/mcp
Or configure manually in ~/.codex/config.toml:
[mcp_servers.redmine]
command = "npx"
args = ["-y", "mcp-client-http", "http://127.0.0.1:8000/mcp"]
Note: Codex CLI primarily supports stdio-based MCP servers. The above uses mcp-client-http as a bridge for HTTP transport.
</details>
<details> <summary><strong>Kiro</strong></summary>
Kiro primarily supports stdio-based MCP servers. For HTTP servers, use an HTTP-to-stdio bridge:
1. Create or edit .kiro/settings/mcp.json in your workspace:
{
"mcpServers": {
"redmine": {
"command": "npx",
"args": [
"-y",
"mcp-client-http",
"http://127.0.0.1:8000/mcp"
],
"disabled": false
}
}
}
2. Save the file and restart Kiro. The Redmine tools will appear in the MCP panel.
Note: Direct HTTP transport support in Kiro is limited. The above configuration uses mcp-client-http as a bridge to connect to HTTP MCP servers.
</details>
<details> <summary><strong>Generic MCP Clients</strong></summary>
Most MCP clients use a standard configuration format. For HTTP servers:
{
"mcpServers": {
"redmine": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}
For clients that require a command-based approach with HTTP bridge:
{
"mcpServers": {
"redmine": {
"command": "npx",
"args": ["-y", "mcp-client-http", "http://127.0.0.1:8000/mcp"]
}
}
}
</details>
These tools require a corresponding Redmine plugin installed on the server and the matching environment variable set to true on the MCP server. They are listed in tools/list only when their flag is set; with the flag off they are not registered on the MCP surface (and a direct call still returns a feature-disabled error).
REDMINE_CHECKLISTS_ENABLED=true; requires the RedmineUP Checklists Pro pluginget_checklist - Retrieve all checklist items for an issuecreate_checklist_item - Add a new checklist item to an issueupdate_checklist_item - Update a checklist item's text, done state, or positionREDMINE_PRODUCTS_ENABLED=true; requires the RedmineUP Products pluginmanage_product - List, get, create, or update productsREDMINE_CRM_ENABLED=true; requires the RedmineUP CRM plugin. In OAuth mode the flag also adds the CRM permissions to the advertised scopes, so grant them on the OAuth application and have users re-consent. Set REDMINE_CRM_EDITION=pro on a Pro install to allow the contact list filters the Light build does not registermanage_contact - List, get, create, update, delete, or assign/remove project association for contactslist_contact_tags - Tags in use on contacts, with colors, for the tags filter and tag_listREDMINE_DEALS_ENABLED=true; requires the Pro edition of the same CRM plugin, and the deals project module enabled on the project. Deals have their own flag because the Light edition defines none of the deal permissions, so advertising them would break consent for Light deploymentsmanage_deal - List, get, create, update, or delete dealslist_deal_statuses - Deal statuses (admin-only on the plugin side) and a project's deal categories, for use before creating a dealmanage_deal_category - List, create, rename, or delete a project's deal categoriesREDMINE_CRM_ENABLED or REDMINE_DEALS_ENABLED is set; each call is gated on the flag matching the note's or query's sourcemanage_crm_note - Get, create, update, or delete CRM notes on contacts and dealslist_crm_queries - Saved contact or deal queriesREDMINE_DEALS_ENABLED=true and REDMINE_PRODUCTS_ENABLED=true; the endpoint exists only when the Products plugin is installed next to CRMadd_deal_product - Add a catalogue or free-form product line to a dealREDMINE_DMSF_ENABLED=true; requires the redmine_dmsf pluginmanage_document - List, get, create (upload), or update (new revision) DMSF documentscp .env.docker.example .env.docker
REDMINE_API_KEY=your_api_key
curl http://localhost:8000/health ```
The server works against a stock Redmine instance. Six optional plugins add more, shown as seven rows below because CRM's deals carry their own flag. To use one, install it on your Redmine server and set the matching env var. Skipping a plugin costs you only that plugin's features.
Plugin tools appear in the client's tool list only when their env var is set; with the flag off they are not registered on the MCP surface at all.
| Plugin | Vendor | Env var | What it adds |
|---|---|---|---|
| [Agile](https://www.redmineup.com/pages/plugins/agile) | RedmineUP | REDMINE_AGILE_ENABLED | get_redmine_issue returns story_points, agile_sprint_id, agile_position; update_redmine_issue accepts story_points |
| [Checklists](https://www.redmineup.com/pages/plugins/checklists) | RedmineUP (Pro) | REDMINE_CHECKLISTS_ENABLED | 3 tools: get_checklist, create_checklist_item, update_checklist_item |
| [Products](https://www.redmineup.com/pages/plugins/products) | RedmineUP | REDMINE_PRODUCTS_ENABLED | 1 tool: manage_product; with REDMINE_DEALS_ENABLED also add_deal_product |
| [CRM](https://www.redmineup.com/pages/plugins/crm) | RedmineUP | REDMINE_CRM_ENABLED | 2 tools: manage_contact, list_contact_tags; plus the 2 shared CRM tools manage_crm_note and list_crm_queries, which either CRM flag enables (adds the *_contacts and note scopes to OAuth discovery when enabled) |
| [CRM deals](https://www.redmineup.com/pages/plugins/crm) | RedmineUP (Pro) | REDMINE_DEALS_ENABLED | 3 tools: manage_deal, list_deal_statuses, manage_deal_category; plus the 2 shared CRM tools above, and add_deal_product when REDMINE_PRODUCTS_ENABLED is also set (adds the *_deals and note scopes to OAuth discovery when enabled). Same plugin as CRM, but the Light edition has no deals |
| [DMSF](https://github.com/danmunn/redmine_dmsf) | danmunn (open source) | REDMINE_DMSF_ENABLED | 1 tool: manage_document |
| [Additional Tags](https://github.com/alphanodes/additional_tags) | AlphaNodes (open source) | REDMINE_TAGS_ENABLED | get_redmine_issue returns a tags array; create_redmine_issue / update_redmine_issue accept tag_list |
Agile and Additional Tags add fields to tools you already have, so they register no new tools. The other five bring their own, which appear in tools/list either way but return a feature-disabled error until you set the flag. Tags also needs the view_issue_tags, create_issue_tags, and edit_issue_tags permissions on the Redmine server.
python -m redmine_mcp_server.main ```
The server runs on http://localhost:8000 with the MCP endpoint at /mcp, health check at /health, and file serving at /files/{file_id}.
If you run into any issues, checkout our troubleshooting guide.
Redmine MCP 服务是一款基于 Python 的服务,用于管理和维护 Redmine 项目。它提供了多种功能和工具,包括 MCP 工具、身份验证、防止注入攻击等。该服务可以通过 Docker 或 pip 安装。
Redmine MCP 服务提供了 45 个 MCP 工具(包括 1 个管理员工具),以及灵活的身份验证方式,包括 API 密钥、用户名/密码和 OAuth2 用户令牌。它还提供了防止注入攻击的保护机制,确保用户控制的内容安全。
Redmine MCP 服务需要 Python 3.10 或更高版本(用于本地安装)和 Docker(用于替代部署,使用 Python 3.13)。它还需要访问一个 Redmine 实例。
Redmine MCP 服务可以通过以下方式安装: 1. 使用 pip 安装:`pip install redmine-mcp-server` 2. 使用 Docker 部署:`docker run -p 8000:8000 jztan/redmine-mcp-server` 3. 从源码安装:`git clone https://github.com/jztan/redmine-mcp-server.git`
使用 Redmine MCP 服务,需要完成以下步骤: 1. 安装包:`pip install redmine-mcp-server` 2. 创建 `.env` 文件,填写 Redmine 凭据(见 [Installation](#installation) 中的模板) 3. 启动服务:`redmine-mcp-server` 4. 将服务添加到 MCP 客户端(见 [MCP Client Configuration](#mcp-client-configuration) 中的指南)
Redmine MCP 服务的配置文件是 `.env` 文件,包含了服务的配置选项,包括服务器主机和端口、公共 URL 等。用户可以通过修改 `.env` 文件来配置服务。
Redmine MCP 服务使用 API 密钥或用户名/密码或 OAuth2 用户令牌进行身份验证。用户可以通过 API 密钥或用户名/密码或 OAuth2 用户令牌来访问服务。
常见问题包括: * 如何安装 Redmine MCP 服务? * 如何配置 Redmine MCP 服务? * 如何使用 Redmine MCP 服务?
aiskill88点评:Production-ready的企业级工具,安全特性完善,分页设计考虑周周,与AI Agent生态契合度高,维护活跃度良好。
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
AI Skill Hub 点评:Redmine MCP服务器 的核心功能完整,质量优秀。对于Claude Desktop / Claude Code 用户来说,这是一个值得纳入个人工具库的选择。建议先在非生产环境试用,再逐步推广。
| 原始名称 | redmine-mcp-server |
| 原始描述 | 开源MCP工具:Production-ready MCP server for Redmine with security, pagination, and enterpris。⭐34 · Python |
| Topics | 项目管理Redmine集成MCP服务器企业级工具Python |
| GitHub | https://github.com/jztan/redmine-mcp-server |
| License | MIT |
| 语言 | Python |
收录时间:2026-05-22 · 更新时间:2026-05-30 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端