@chspower1/mcp-for-redmine
Version:
MCP Server for interacting with a Redmine instance.
278 lines (209 loc) • 8.88 kB
Markdown
<div align="center">
<img src="./assets/cover.png" alt="MCP-FOR-REDMINE" />
</div>
# MCP-For-Redmine · [](https://github.com/toss/slash/blob/main/LICENSE)
English | [한국어](./README-ko_kr.md) | [日本語](./README-ja_jp.md) | [简体中文](./README-zh_cn.md)
This project is a Model-Context-Protocol (MCP) server for interacting with Redmine. With an MCP-compatible client, you can easily manage Redmine projects, issues, users, and time entries.
Currently, only the standard input/output (`stdio`) transport is supported.
## Requirements
- Node.js 18 or higher
- Redmine API key (your personal API key from your Redmine account)
Compatibility baseline: Redmine 6.0.6
## Getting Started
How to configure the MCP server for each environment:
<details>
<summary><b>Cursor</b></summary>
File (top-left) -> Preferences -> Cursor Settings -> MCP & Integrations -> New MCP Server
<b>Config file</b>: `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (per-project)
📚 <b>Docs</b>: [Cursor MCP documentation](https://docs.cursor.com/en/context/mcp)
[](https://cursor.com/en/install-mcp?name=mcp-for-redmine&config=eyJjb21tYW5kIjoibnB4IC15IEBjaHNwb3dlcjEvbWNwLWZvci1yZWRtaW5lQGxhdGVzdCIsImVudiI6eyJSRURNSU5FX0JBU0VfVVJMIjoiaHR0cHM6Ly95b3VyLnJlZG1pbmUudGxkIiwiUkVETUlORV9BUElfS0VZIjoieW91cl9hcGlfa2V5X2hlcmUifX0%3D)
```json
{
"mcpServers": {
"mcp-for-redmine": {
"command": "npx",
"args": ["-y", "@chspower1/mcp-for-redmine@latest"],
"env": {
"REDMINE_BASE_URL": "https://your.redmine.tld",
"REDMINE_API_KEY": "your_api_key_here"
}
}
}
}
```
</details>
<details>
<summary><b>Claude Desktop</b></summary>
<b>Config files</b>:
- <b>Windows</b>: `%APPDATA%\Claude\claude_desktop_config.json`
- <b>macOS</b>: `~/Library/Application Support/Claude/claude_desktop_config.json`
📚 <b>Docs</b>: [Claude Desktop MCP guide](https://support.anthropic.com/en/articles/10949351-getting-started-with-local-mcp-servers-on-claude-desktop)
```json
{
"mcpServers": {
"mcp-for-redmine": {
"command": "npx",
"args": ["-y", "@chspower1/mcp-for-redmine@latest"],
"env": {
"REDMINE_BASE_URL": "https://your.redmine.tld",
"REDMINE_API_KEY": "your_api_key_here"
}
}
}
}
```
</details>
<details>
<summary><b>Claude Code</b></summary>
📚 <b>Docs</b>: [Claude Code MCP documentation](https://docs.anthropic.com/en/docs/claude-code/mcp)
<b>Set environment variables and run CLI</b>:
```bash
# Set environment variables
export REDMINE_BASE_URL=https://your.redmine.tld
export REDMINE_API_KEY=your_api_key_here
# Add MCP server
claude mcp add mcp-for-redmine -- npx -y @chspower1/mcp-for-redmine@latest
```
<b>Or edit the settings file directly</b>: `~/.claude/settings.local.json`
```json
{
"mcpServers": {
"mcp-for-redmine": {
"command": "npx",
"args": ["-y", "@chspower1/mcp-for-redmine@latest"],
"env": {
"REDMINE_BASE_URL": "https://your.redmine.tld",
"REDMINE_API_KEY": "your_api_key_here"
}
}
}
}
```
</details>
<details>
<summary><b>Gemini CLI</b></summary>
<b>Config file</b>: `~/.gemini/settings.json` (global) or `.gemini/settings.json` (per-project)
📚 <b>Docs</b>: [Gemini CLI MCP guide](https://gemini-cli.xyz/docs/en/tools/mcp-server)
```json
{
"mcpServers": {
"mcp-for-redmine": {
"command": "npx",
"args": ["-y", "@chspower1/mcp-for-redmine@latest"],
"env": {
"REDMINE_BASE_URL": "https://your.redmine.tld",
"REDMINE_API_KEY": "your_api_key_here"
}
}
}
}
```
</details>
<details>
<summary><b>OpenAI Codex</b></summary>
<b>Config file</b>: `~/.codex/config.toml`
📚 <b>Docs</b>: [OpenAI MCP documentation](https://platform.openai.com/docs/mcp)
```toml
[[mcp_servers]]
name = "mcp-for-redmine"
command = "npx"
args = ["-y", "@chspower1/mcp-for-redmine@latest"]
[mcp_servers.env]
REDMINE_BASE_URL = "https://your.redmine.tld"
REDMINE_API_KEY = "your_api_key_here"
```
</details>
## Configuration Options
The server reads configuration in the following priority:
<details>
<summary><b>CLI flags (highest priority)</b></summary>
- `-u, --url <url>`
- `-k, --api-key <key>`
- ```json
{
"mcpServers": {
"mcp-for-redmine": {
"command": "npx",
"args": [
"-y",
"@chspower1/mcp-for-redmine@latest",
"--url",
"https://your.redmine.tld",
"--api-key",
"YOUR_API_KEY"
]
}
}
}
```
</details>
<details><summary><b>Environment variables</b></summary>
- `REDMINE_BASE_URL` or `REDMINE_URL`
- `REDMINE_API_KEY` or `REDMINE_TOKEN`
- ```json
{
"mcpServers": {
"mcp-for-redmine": {
"command": "npx",
"args": ["-y", "@chspower1/mcp-for-redmine@latest"],
"env": {
"REDMINE_BASE_URL": "https://your.redmine.tld",
"REDMINE_API_KEY": "your_api_key_here"
}
}
}
}
```
</details>
<details><summary><b>.env file values</b></summary>
<b>Supported variables:</b>
- `REDMINE_BASE_URL` or `REDMINE_URL` — Redmine server URL
- `REDMINE_API_KEY` or `REDMINE_TOKEN` — Redmine API key
</details>
## Key Features
Currently available tools:
**Stable API**
- **Users**: `users_create`, `users_get`, `users_current`, `users_list`, `users_update`, `users_delete`
- **Projects**: `projects_list`, `projects_get`, `projects_create`, `projects_update`, `projects_archive`, `projects_unarchive`, `projects_delete`
- **Issues**: `issues_list`, `issues_get`, `issues_create`, `issues_update`, `issues_delete`
- **Time Entries**: `time_entries_list`, `time_entries_get`, `time_entries_create`, `time_entries_update`, `time_entries_delete`
**Alpha API**
- **Enumerations**: `enumerations_issue_priorities_list`, `enumerations_time_entry_activities_list`
- **Memberships**: `memberships_list_project_memberships`, `memberships_get`, `memberships_create`, `memberships_update`, `memberships_delete`
- **Issue Relations**: `issue_relations_list`, `issue_relations_get`, `issue_relations_create`, `issue_relations_delete`
- **Versions**: `versions_list`, `versions_get`, `versions_create`, `versions_update`, `versions_delete`
- **Wiki Pages**: `wiki_pages_list`, `wiki_pages_get`, `wiki_pages_create_or_update`, `wiki_pages_delete`
- **Queries**: `queries_list`
- **Files**: `files_list`
- **Attachments**: `attachments_get`, `attachments_delete`, `attachments_upload`
- **Issue Statuses**: `issue_statuses_list`
- **Trackers**: `trackers_list`
- **Roles**: `roles_list`, `roles_get`
- **Groups**: `groups_list`, `groups_get`, `groups_create`, `groups_update`, `groups_delete`, `groups_add_user`, `groups_remove_user`
- **Custom Fields**: `custom_fields_list`
- **Issue Categories**: `issue_categories_list`, `issue_categories_get`, `issue_categories_create`, `issue_categories_update`, `issue_categories_delete`
- **My Account**: `my_account_get`
- **Search**: `search`
The input schema for each tool is defined in `src/schema/*.schema.ts`. Results are returned as JSON-formatted text.
## Common Input Rules (dev)
- **Collection pagination**: most list tools support `offset` and `limit` (default 25, max 100)
- **Association expansion**: some `get`/`list` tools support `include` (e.g., issues: `children,attachments,journals,...`)
- **Attachment upload token**: `attachments_upload` sends a Base64 file to `/uploads.json` and returns a token. Use this token in the `uploads` field of `issues_create/update` or `wiki_pages_create_or_update` to associate attachments.
- **Tool-specific extras/constraints**: for detailed constraints (e.g., issue `custom_fields`, `watcher_user_ids`, etc.), see each tool’s schema in `src/schema/*.schema.ts`.
## Troubleshooting Guide
- **Configuration errors**
- **Example messages**: `❌ Redmine URL is required!` or `❌ Redmine API key is required!`
- **How to fix**: Choose one of the configuration methods shown in the error message. For security, environment variables are recommended.
- **Node.js/ESM-related errors**
- Ensure you are using Node.js 18 or higher.
- **Authentication and network errors (401, 403, etc.)**
- Verify your API key permissions and URL, and check for network issues.
- **Execution issues on Windows**
- Try running with `cmd /c npx ...` as shown in the guide.
## Security & Permissions
- API keys are sensitive; avoid exposing them in Git commits, logs, or shared repositories.
- For irreversible actions like deleting projects or issues, double-check permissions and proceed carefully.
## Roadmap
We plan to deepen coverage of beta endpoints (e.g., attachment upload flows), add SSE (Server-Sent Events), and enhance examples/tests.
## License
MIT