Redmineflux MCP Server

Redmineflux MCP Server

An MCP server that connects AI agents to Redmine project data, enabling natural language access to issues, projects, time entries, and more via the REST API.

Category
Visit Server

README

<p align="center"> <strong>Redmineflux MCP Server</strong><br/> <em>Connect AI agents to your Redmine project data through the Model Context Protocol</em> </p>

<p align="center"> <img src="https://img.shields.io/badge/Python-3.12+-3776AB?logo=python&logoColor=white" alt="Python 3.12+" /> <img src="https://img.shields.io/badge/MCP-1.26-blueviolet" alt="MCP SDK" /> <img src="https://img.shields.io/badge/Redmine-5.x%20%7C%206.x-red?logo=ruby&logoColor=white" alt="Redmine" /> <img src="https://img.shields.io/badge/Version-0.2.0--beta-yellow" alt="Version 0.2.0-beta" /> <img src="https://img.shields.io/badge/License-Commercial-lightgrey" alt="License" /> </p>

<p align="center"> <a href="https://www.redmineflux.com">Website</a> · <a href="https://www.redmineflux.com/knowledge-base">Knowledge Base</a> · <a href="https://www.redmineflux.com/support">Support</a> </p>


Why Redmineflux MCP Server?

Redmine holds your project data — issues, time entries, milestones, workload, agile boards, knowledge base articles. But accessing that data means clicking through multiple pages, running custom queries, and switching between plugins.

Redmineflux MCP Server makes all of that accessible to AI agents. Your team asks questions in natural language and gets answers backed by live project data. AI agents can read, create, and update issues, log time, check workload, and query across all your projects — in seconds.

Team member asks a question → AI Agent → MCP Server → Redmine REST API → Answer

Redmine holds the data. Redmineflux plugins enrich it. The MCP server makes it accessible to AI agents. Your team keeps working the way they always have — but now they can ask "what should I work on first?" or "how many bugs are open in Phoenix?" and get answers in seconds.


Why a Standalone Service? Why Python?

If you're a Redmineflux customer, you're used to plugins: drop into plugins/, run migrations, restart Redmine, done. So why is the MCP server different?

MCP servers and Redmine plugins serve different audiences through different protocols. A Redmine plugin renders HTML for humans in browsers over HTTP. An MCP server streams structured data to AI agents over stdio/SSE. These are fundamentally different runtime models — combining them would compromise both.

Factor Redmine Plugin (Ruby) MCP Server (Python)
Serves Humans via browsers AI agents via MCP protocol
Protocol HTTP request/response stdio streams / server-sent events
Lifecycle Tied to Redmine process Independent — update without restarting Redmine
MCP SDK Does not exist for Ruby Official Anthropic SDK (mcp package)
Ecosystem 0 MCP reference servers 100+ MCP reference servers

Why Python specifically:

  • Official SDK — Anthropic maintains the MCP Python SDK. Protocol changes are handled upstream. A Ruby implementation would mean building and maintaining the protocol from scratch.
  • Ecosystem — every major MCP server (GitHub, Slack, Notion, Linear) is Python or TypeScript. Customers using AI agents already expect this pattern.
  • Async HTTP — Python's httpx provides native async/await for efficient Redmine API communication.
  • AI/ML ready — if we add features like embeddings or summarization later, the Python ecosystem is already there.

Your Redmine stays untouched. The MCP server is a companion service that connects to Redmine through its standard REST API — the same API your browser uses. No database access, no Redmine internals, no risk to your existing setup.

For the full architectural decision record, see the Decision Document.


Key Features

  • 51 MCP Tools — full CRUD for issues, projects, time entries, users, versions, plus plugin-specific tools for DevOps, Timesheet, Workload, Agile Board, and Knowledge Base
  • Capability Injection — auto-detects which Redmineflux plugins are installed on your Redmine instance and loads only the relevant tools
  • Natural Language Access — ask questions about projects, issues, time, and milestones without learning Redmine's UI
  • Cross-Project Queries — "compare bugs across all 6 projects" in one question instead of 6 browser tabs
  • One-Sentence Actions — "log 4 hours and update to 80% done" replaces two separate Redmine forms
  • Observability — every tool call logged as JSON Lines with session tracking, user identity, and timing
  • MCP Standard — works with Claude Code, ChatGPT, GitHub Copilot, and any MCP-compatible AI agent

Tools

Core Tools (15)

Tool Description
redmineflux_core_list_projects List all projects with pagination
redmineflux_core_get_project Get project details by ID or identifier
redmineflux_core_list_issues List issues with filters (project, status, tracker, assignee, priority)
redmineflux_core_get_issue Get full issue details with journals, relations, attachments
redmineflux_core_create_issue Create a new issue with all fields
redmineflux_core_update_issue Update issue status, assignee, progress, add notes
redmineflux_core_log_time Log time against an issue
redmineflux_core_list_time_entries List time entries with date/project/user filters
redmineflux_core_list_users List all users
redmineflux_core_get_current_user Get the authenticated user's details
redmineflux_core_list_versions List project versions/milestones
redmineflux_core_list_statuses List all issue statuses
redmineflux_core_list_trackers List all trackers (Bug, Feature, Support)
redmineflux_core_list_priorities List all priorities (Low through Immediate)
redmineflux_core_list_time_entry_activities List time entry activities (Design, Development)

Convenience Tools (5)

Tool Description Replaces
redmineflux_core_project_stats Issue counts by status for one or all projects 12 API calls
redmineflux_core_my_workload Current user's tasks across all projects, priority-sorted 4 API calls
redmineflux_core_project_summary Full project overview: description, stats, milestones, activity 5 API calls
redmineflux_system_onboard New user orientation: projects, tasks, team directory 4 API calls
redmineflux_core_critical_issues Urgent/Immediate priority open issues across all projects 2 API calls

System Tools (1)

Tool Description
redmineflux_system_feedback Rate your MCP session (1-5) and leave feedback

Plugin Tools (30)

Plugin tools are automatically loaded when the corresponding Redmineflux plugin is detected on your Redmine instance.

Plugin Tools Description
DevOps 8 Builds, commits, pull requests, deployments, environments, releases, DORA metrics, alerts
Timesheet 6 Timesheets, submissions, approvals, team timesheets, settings
Workload 5 Resource allocation, capacity, team workload, utilization, forecasting
Agile Board 5 Board management, sprints, cards, swimlanes, WIP limits
Knowledge Base 6 Articles, categories, search, versions, attachments, popular articles

Screenshots

Screenshots coming soon — the MCP server is in active development.


Requirements

Component Version
Python 3.12+
Redmine 5.x or 6.x
MCP SDK 1.26+
httpx 0.27+

Installation

1. Clone

git clone https://github.com/zehntech/redmineflux-mcp.git
cd redmineflux-mcp

2. Install Dependencies

pip install -e .

3. Configure

cp .env.example .env
# Edit .env with your Redmine URL and API key
Variable Description Example
REDMINE_URL Your Redmine instance URL https://redmine.example.com
REDMINE_API_KEY Admin or user API key (My Account → API access key) abc123...

4. Connect to Your AI Agent

Option A: Generate config automatically (recommended for teams)

python3 -m src.setup

This auto-detects the install path and generates a ready-to-use .mcp.json. Admin runs it once, sends the output to the team — each person just replaces YOUR_API_KEY with their own Redmine API key.

Option B: Manual setup

Add to your project's .mcp.json:

{
  "mcpServers": {
    "redmineflux": {
      "command": "python3",
      "args": ["-m", "src.server"],
      "cwd": "/path/to/redmineflux-mcp",
      "env": {
        "REDMINE_URL": "https://redmine.example.com",
        "REDMINE_API_KEY": "your_api_key"
      }
    }
  }
}

Finding your API key: Redmine → My Account → API access key (right sidebar) → Show

The server communicates over stdio (standard MCP transport). Any MCP-compatible AI agent can connect using the same command.

5. Auto-Start on Boot (Optional)

If you're running the MCP server on a shared team server, you'll want it to start automatically.

Linux (systemd):

Create /etc/systemd/system/redmineflux-mcp.service:

[Unit]
Description=Redmineflux MCP Server
After=network.target

[Service]
Type=simple
User=redmine
WorkingDirectory=/opt/redmineflux-mcp
ExecStart=/opt/redmineflux-mcp/.venv/bin/python -m src.server
EnvironmentFile=/opt/redmineflux-mcp/.env
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable redmineflux-mcp
sudo systemctl start redmineflux-mcp

# Check status
sudo systemctl status redmineflux-mcp

macOS (launchd):

Create ~/Library/LaunchAgents/com.redmineflux.mcp.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.redmineflux.mcp</string>
    <key>ProgramArguments</key>
    <array>
        <string>/opt/redmineflux-mcp/.venv/bin/python</string>
        <string>-m</string>
        <string>src.server</string>
    </array>
    <key>WorkingDirectory</key>
    <string>/opt/redmineflux-mcp</string>
    <key>EnvironmentVariables</key>
    <dict>
        <key>REDMINE_URL</key>
        <string>https://redmine.example.com</string>
        <key>REDMINE_API_KEY</key>
        <string>your_api_key</string>
    </dict>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardOutPath</key>
    <string>/var/log/redmineflux-mcp.log</string>
    <key>StandardErrorPath</key>
    <string>/var/log/redmineflux-mcp.error.log</string>
</dict>
</plist>
launchctl load ~/Library/LaunchAgents/com.redmineflux.mcp.plist

# Check status
launchctl list | grep redmineflux

Docker:

docker run -d --name redmineflux-mcp \
  --restart unless-stopped \
  -e REDMINE_URL=https://redmine.example.com \
  -e REDMINE_API_KEY=your_api_key \
  redmineflux/mcp-server:latest

Note: For Claude Code's .mcp.json integration, auto-start is not needed — Claude Code launches the MCP server process automatically when it connects. Auto-start is for shared team servers where the MCP server runs as an HTTP/SSE endpoint for multiple agents.


Usage

Once connected, ask questions naturally:

You: What's the status of the Phoenix Platform project?
AI:  Phoenix Platform has 1,594 issues — 33% complete.
     New: 537 | In Progress: 304 | Resolved: 93 | Closed: 538
     Next milestone: v0.4 Frontend Shell (due 2026-03-31)

You: Show me critical bugs
AI:  10 critical issues (Urgent + Immediate) across 4 projects...

You: Log 4 hours of Development on issue #50, comment "API refactoring complete"
AI:  Logged 4.0h on issue #50 (entry id=1846)

You: I just joined the team, where do I start?
AI:  Welcome! You're assigned to 3 projects with 42 open issues...

Access Control & Permissions

The MCP server respects Redmine's permission model. You only see what your API key allows.

Each person connects with their own Redmine API key. That key inherits the same permissions as their Redmine user account — same projects, same roles, same visibility. If you can't see a project in Redmine's web UI, you won't see it through the MCP server either.

What Happens When You Don't Have Access

The server handles permission issues gracefully with clear messages:

You: Show me the status of the Secret-Project
AI:  Not found: project 'Secret-Project' does not exist, or you don't have
     permission to see it. Redmine returns 404 for both missing resources and
     resources you lack access to. Verify the ID is correct, or ask your
     Redmine administrator for access.

You: List all users
AI:  Access denied: you don't have permission to view users. Your API key
     only provides access to resources your Redmine account has been granted.
     Listing all users requires an admin API key. To see what you DO have
     access to, try listing your projects or checking your current user details.

Common Scenarios

Scenario What Happens
User asks about a project they're not a member of Clear "not found or no access" message with suggestion to request access
User tries to list all users (non-admin key) Explains that user listing requires admin privileges
User tries to create an issue in a project they can only view Explains the role limitation and suggests asking for a higher role
User asks "what projects do I have?" Works — returns only projects their key has access to
User's API key is expired or invalid Clear authentication error with instructions to get a new key

Best Practices for Admins

  • Give each person their own API key — don't share a single admin key. This ensures audit logs show who did what, and each person only sees their projects.
  • Use the setup script (python3 -m src.setup) to generate the config with your Redmine URL pre-filled. Send it to the team — they just add their own API key.
  • Admin keys see everything — only use admin keys for system-level agents (CI/CD bots, reporting agents), not for individual team members.

Who Is This For?

Role What They Can Do
Developers Check assigned issues, log time, update progress, triage bugs — all from the terminal
Project Managers Instant project stats, milestone tracking, cross-project comparison, resource allocation
QA Engineers Query bugs by priority/status, track regression patterns, monitor test coverage
Marketing & Sales Discover what features are being built, check release timelines, track product progress
AI Agents Autonomous task execution, spec-to-ticket pipelines, quality monitoring

Architecture

┌──────────────┐     ┌───────────────────────┐     ┌──────────────┐
│  AI Agent    │     │  Redmineflux MCP      │     │  Redmine     │
│  (Claude,    │────▶│  Server (Python)      │────▶│  REST API    │
│   ChatGPT,   │◀────│                       │◀────│              │
│   Copilot)   │     │  51 tools             │     │  + Plugins   │
└──────────────┘     │  Capability injection │     └──────────────┘
                     │  Observability layer  │
                     │  JSON audit logs      │
                     └───────────────────────┘

Modular design: Core tools (21) are always loaded. Plugin tools (30) are injected based on which Redmineflux plugins are installed on your Redmine instance — the server auto-detects capabilities at startup.


Security

The MCP server uses stdio transport — it runs as a local process with no network endpoint.

Question Answer
Can someone DDoS the MCP server? No. There is no port, no URL, no socket. Nothing to send traffic to.
Can someone intercept the communication? No. stdio is a local pipe between two processes. Not on the network.
What network calls does it make? Outbound HTTPS only — from the MCP server to your Redmine REST API.
Where does my API key go? Stays local. Loaded from .env, used in Redmine API calls. Never sent to Anthropic.
Does my data go to the cloud? Your questions and Redmine data pass through Anthropic's Claude API for AI reasoning. The MCP server itself stores nothing in the cloud.
What's the attack surface? Zero for the MCP server. Your Redmine instance's existing HTTPS exposure is unchanged.

Best practices: Use personal API keys (not shared admin keys), keep .env out of git, revoke keys immediately if compromised.

For the full security analysis, see How MCP Routing Works.


Works With

Plugin Integration
Redmineflux Timesheet Query timesheets, check submission status, view approvals via AI
Redmineflux Workload Check resource allocation, capacity, and utilization across teams
Redmineflux Agile Board Manage sprints, move cards, check WIP limits
Redmineflux DevOps Query builds, deployments, DORA metrics, releases
Redmineflux Knowledge Base Search articles, browse categories, find documentation
Redmineflux CRM Coming soon
Redmineflux Helpdesk Coming soon

FAQ

Q: Does the MCP server require direct database access? No. The server communicates exclusively through Redmine's REST API. No database credentials or direct connections needed.

Q: Which AI agents are supported? Any agent that supports the Model Context Protocol (MCP) — Claude Code, ChatGPT (with MCP plugin), GitHub Copilot, and custom agents built with the Anthropic SDK.

Q: Do I need all Redmineflux plugins installed? No. The server auto-detects which plugins are available and loads only the relevant tools. Core Redmine tools (21) always work, even without any Redmineflux plugins installed.

Q: Is my data sent to third parties? The MCP server runs locally on your machine. It communicates with your Redmine instance via its REST API. Your project data stays between the server and your Redmine — the MCP server does not send data anywhere else.

Q: Can I restrict which tools are available? Yes. The server respects Redmine's permission model — users only see data they have access to based on their API key's role and project memberships.

Q: What about audit logging? Every tool call is logged as JSON Lines in the logs/ directory with session ID, user identity, tool name, parameters, timing, and result status. Sensitive fields are redacted automatically.

Q: Can I see MCP activity inside Redmine? A Redmine dashboard plugin is planned (Phase 6) that will show connection status, agent activity feed, and usage statistics directly in the Redmine UI. The MCP server itself remains external — the dashboard reads its audit logs.


Beta Mode

The MCP server ships with beta mode enabled by default. When active, every AI response includes a notice directing users to report issues:

This is a BETA version of Redmineflux MCP Server. If you encounter any issues or have feedback, please log a ticket on the 'ztmcp' project in Redmine.

This works through the MCP instructions field — the AI agent reads it on connect and appends the notice to every response. No tool output is modified.

Configuration:

Variable Default Description
REDMINEFLUX_BETA true Set to false to disable the notice
REDMINEFLUX_FEEDBACK_PROJECT ztmcp Redmine project where users should log feedback
REDMINEFLUX_BETA_NOTICE (auto-generated) Override with a custom message

To disable beta mode when going to GA: set REDMINEFLUX_BETA=false in your .env — no code change or restart needed beyond reloading the server.


Roadmap

Phase Scope Status
Phase 1 Core Redmine tools (21) + observability Done
Phase 2 Capability injection system Done
Phase 3 DevOps + Timesheet + Workload + Agile + KB (30 tools) Done
Phase 4 CRM + Testcase Management Planned
Phase 5 Helpdesk + Dashboard plugin tools Planned
Phase 6 MCP Dashboard — Redmine plugin for monitoring MCP activity Planned
Phase 7 PyPI packaging Planned

Phase 6 Preview: MCP Dashboard Plugin

A lightweight Redmine plugin (redmineflux_mcp_dashboard) that gives project managers and admins visibility into how AI agents are interacting with their Redmine data — without leaving the Redmine UI.

Planned features:

  • Connection status — is the MCP server online? Last heartbeat, uptime, version
  • Live activity feed — recent tool calls: who asked what, which tool, when, how long
  • Usage dashboard — calls per day, most-used tools, busiest projects, response times
  • Agent sessions — which AI agents connected, session duration, tools used per session
  • Audit log viewer — searchable view of the MCP server's JSON Lines audit logs

This plugin reads the MCP server's audit logs — it does NOT embed MCP functionality into Redmine. The MCP server remains a standalone Python service; the dashboard is a read-only window into its activity.


Release Notes

v0.2.0 (2026-03-30)

  • Beta mode — configurable notice appended to every AI response, directing users to log feedback tickets. Toggle with REDMINEFLUX_BETA=true/false.
  • Graceful permission handling — human-readable error messages for 401 (invalid key), 403 (access denied), 404 (not found / no access), and 422 (validation). Explains what went wrong and how to fix it.
  • Team setup scriptpython3 -m src.setup auto-generates .mcp.json with correct paths. Admin runs once, sends to team.
  • Access control documentation — 10 permission denial scenarios (ACL-01 through ACL-10) added to test suite and use cases.
  • Architecture decision record — documented why the MCP server is a standalone Python service, not a Redmine plugin.
  • Auto-start guides — systemd (Linux), launchd (macOS), and Docker instructions for running as a service.
  • MCP Dashboard spec — Phase 6 roadmap for a Redmine plugin that shows MCP activity, agent sessions, and usage stats.

v0.1.0 (2026-03-29)

  • Initial release with 51 MCP tools (21 core + 30 plugin)
  • Capability injection — auto-detects installed Redmineflux plugins
  • Observability layer with JSON Lines audit logging
  • 5 plugin modules: DevOps, Timesheet, Workload, Agile Board, Knowledge Base
  • Docker development environment (Redmine 5.1 + PostgreSQL 16)
  • 47 integration tests, Claude API e2e test, role-based scenario tests

Support


<p align="center"> <strong>Redmineflux MCP Server</strong> is developed by <a href="https://www.zehntech.com">Zehntech Technologies Inc.</a><br/> Part of the <a href="https://www.redmineflux.com">Redmineflux</a> plugin suite for Redmine. </p>

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured