redmine-mcp-server: Redmine project management for AI agents
redmine-mcp-server is an open-source MCP (Model Context Protocol) server that lets AI agents read and manage a Redmine instance: issues, projects, wikis, time tracking, versions, Gantt data, files, and contacts. It ships as a Python package and a container image, and connects to Claude Desktop, Claude Code, Cursor, VS Code Copilot, Codex CLI, Kiro, and any MCP-compatible client. Its integration suite passes in full against Redmine 6.1 and 7.0.
What it does
Redmine has a capable REST API, but wiring an agent to it directly means handing the model raw HTTP access, which is slow, error-prone, and unsafe. redmine-mcp-server exposes 53 purpose-built tools instead. An agent can list and filter issues, read a ticket with its full history, update status and assignee, add notes, log time, manage wiki pages, pull Gantt timelines, upload and download attachments, and run global search, each as a single typed tool call with predictable, serialized JSON. It can also render interactive apps directly in the chat through the MCP Apps extension: show_triage_board draws a project's issues as drag-and-drop status columns that write back to Redmine, show_project_dashboard renders a live, read-only project snapshot with click-through drill-ins to matching issue lists, and show_project_timeline lays out the schedule as a read-only Gantt view grouped by version.
How it stays safe
The server runs on your own infrastructure and talks to your Redmine and your MCP client, plus any URL an agent explicitly asks it to upload a file from. A read-only mode (REDMINE_MCP_READ_ONLY=true) blocks every write while you evaluate. In OAuth mode, each tool call is checked against the Redmine permission scopes the tool actually uses, per action for the manage_* tools, with unmapped tools denied by default and tools/list filtered to the token's scopes. User-controlled text is wrapped in boundary tags before it reaches the model, URL-based uploads are SSRF-checked, and issue deletion is refused without an explicit confirmation flag, with a cascade-impact preview in the refusal.
What the demo shows
The browser demo is a scripted simulation of a triage workflow against canned data. The JSON returned by each tool matches the real server's response shape field-for-field, including the <insecure-content> boundary tags that wrap user-controlled text (descriptions, notes, comments) so an LLM treats them as untrusted data rather than instructions. Nothing connects to a live Redmine; the point is to show the agent's tool loop, not to be a hosted service.
Install
redmine-mcp-server is MIT-licensed and published on PyPI. Install with pip install redmine-mcp-server, then point it at your Redmine URL with an API key, OAuth2, or per-user auth. The source is on GitHub and the package on PyPI. For a full tour of the server, see the launch post on giving AI agents live project data. For the story behind it, see the blog post on linking a legacy system to a modern AI agent.