ClaudeCodeMod

All shelves / MCP servers

Redmine Fastmcp Server With Oauth

tuzumkuru/mcp-redmine-oauth · 10 stars · Python

MCP server A centrally-deployed MCP server for Redmine with OAuth 2.0 authentication. An administrator deploys it once; users connect by authorizing through Redmine — no API keys or per-user setup required. Built with FastMCP 3.

Install

The repo has no one-line install. Follow its README.

Open the repo

Files

README.md

mcp-redmine-oauth — Redmine FastMCP Server with OAuth

A centrally-deployed MCP server for Redmine with OAuth 2.0 authentication. An administrator deploys it once; users connect by authorizing through Redmine — no API keys or per-user setup required. Built with FastMCP 3.

How it works

MCP Client (Claude Desktop, MCP Inspector, …)
        │  MCP over Streamable HTTP
        │  Authorization: Bearer <fastmcp-jwt>
        ▼
┌─────────────────────────────┐
│      FastMCP 3 Server       │
│  OAuthProxy (port 8000)     │──── token exchange ────▶ Redmine OAuth
│  Token store (in-memory)    │◀─── access token ────────
│                             │
│  Tools                      │──── REST API ───────────▶ Redmine API
└─────────────────────────────┘

The MCP client only ever sees a FastMCP-issued JWT. The Redmine OAuth token is stored server-side and never exposed to the client.

Prerequisites

  • Python 3.11+
  • A running Redmine 6.1+ instance with REST API enabled
  • An OAuth application registered in Redmine (see below)

Redmine Setup

1. Enable the REST API

Administration → Settings → API → Enable REST web service (check and save).

2. Register an OAuth Application

Administration → Applications → New Application

Field Value
Redirect URI http://<MCP_BASE_URL>/auth/callback
Confidential client Yes
Scopes Enable all required scopes for full functionality

Copy the generated Client ID, Client Secret.

Setup

git clone https://github.com/tuzumkuru/mcp-redmine-oauth.git
cd mcp-redmine-oauth
cp .env.example .env

Fill in your values:

REDMINE_URL=http://your-redmine-host
REDMINE_CLIENT_ID=your-client-id
REDMINE_CLIENT_SECRET=your-client-secret

Running

pip install -e .
mcp-redmine-oauth

The MCP server will be available at http://localhost:8000/mcp.

To test with MCP Inspector:

npx @modelcontextprotocol/inspector

Open http://localhost:6274, set transport to Streamable HTTP, and enter http://localhost:8000/mcp.

Running with Docker

docker compose up --build

The container reads configuration from .env. Make sure MCP_BASE_URL is set to the externally-reachable URL of the server (not localhost if clients connect from other machines).

Set MCP_HOST_PORT in .env to change the host-side port (default 8000).

Environment Variables

Variable Required Default Description
REDMINE_URL Yes — Base URL of your Redmine instance
REDMINE_CLIENT_ID Yes — OAuth app Client ID
REDMINE_CLIENT_SECRET Yes — OAuth app Client Secret
REDMINE_SCOPES No (all declared) Allowlist filter: space-separated scopes your Redmine app supports (see Scope Handling)
MCP_HOST No 0.0.0.0 Bind host
MCP_PORT No 8000 Bind port
MCP_BASE_URL No http://localhost:MCP_PORT Public-facing URL used for OAuth redirects

Available Tools & Resources

Component Type Required Scopes Description
get_issue_details Tool view_issues Fetch a Redmine issue by ID with description, custom fields, and journals
search_issues Tool view_issues, search_project Full-text search across issues with pagination
list_issues Tool view_issues List issues with filters (project, assignee, status, tracker, sort)
get_issue_relations Tool view_issues Get issue relations (blocking, blocked-by, related, etc.)
get_project_details Tool view_project Project details with trackers, categories, and enabled modules
get_project_versions Tool view_project Project versions/milestones with status and due dates
list_time_entries Tool view_time_entries List time entries with filters (project, user, date range)
create_issue Tool add_issues Create a new issue with subject, tracker, priority, assignee, etc.
update_issue Tool edit_issues Update an existing issue (status, assignee, notes, etc.)
create_project Tool add_project Create a new Redmine project
update_project Tool edit_project Update project name, description, visibility, trackers
get_wiki_page Tool view_wiki_pages Get a wiki page from a project
update_wiki_page Tool edit_wiki_pages Create or update a wiki page
rename_wiki_page Tool rename_wiki_pages Rename a wiki page with optional redirect
summarize_ticket Prompt view_issues Generate a concise summary of an issue with next steps
draft_bug_report Prompt view_project Draft a structured bug report from rough notes
redmine://projects/active Resource view_project List active projects
redmine://trackers Resource view_project List available trackers
redmine://issue-statuses Resource view_issues All issue statuses with IDs and closed flags
redmine://enumerations/priorities Resource view_issues Issue priority levels with IDs
redmine://users/me Resource (auth only) Current authenticated user profile

Planned: persistent token storage, dynamic tool disabling by scope, structured logging.

Required Redmine Scopes

Enable these scopes on your Redmine OAuth application (Administration → Applications). They are grouped by the Redmine category as shown in the application settings.

Project

Redmine Permission Scope Identifier Used By
View projects view_project get_project_details, get_project_versions, redmine://projects/active, redmine://trackers, draft_bug_report
Search projects search_project search_issues
Create project add_project create_project
Edit project edit_project update_project

Issue tracking

Redmine Permission Scope Identifier Used By
View Issues view_issues get_issue_details, search_issues, list_issues, get_issue_relations, redmine://issue-statuses, redmine://enumerations/priorities, summarize_ticket
Add issues add_issues create_issue
Edit issues edit_issues update_issue

Time tracking

Redmine Permission Scope Identifier Used By
View spent time view_time_entries list_time_entries

Wiki

Redmine Permission Scope Identifier Used By
View wiki view_wiki_pages get_wiki_page
Edit wiki pages edit_wiki_pages update_wiki_page
Rename wiki pages rename_wiki_pages rename_wiki_page

If a scope is not enabled, the tools that require it will return a descriptive error at call time.

Scope Handling

Each tool and resource declares its required OAuth scopes via the @requires_scopes decorator. The server automatically collects all declared scopes and requests them during OAuth authorization.

If your Redmine OAuth app is configured with only a subset of the scopes above, set REDMINE_SCOPES to avoid the error "The requested scope is invalid, unknown, or malformed":

REDMINE_SCOPES=view_issues view_project

When set, only the intersection of tool-declared scopes and REDMINE_SCOPES is requested. Tools whose scopes aren't fully covered (e.g. search_issues needs search_project) will return a descriptive error at call time instead of breaking the entire OAuth flow.

When omitted, all tool-declared scopes are requested — this works when your Redmine app has all of them enabled.

Architecture

See docs/architecture.md for the detailed OAuth flow, token storage, and module design.

Facts

Kind
MCP server
Repo
tuzumkuru/mcp-redmine-oauth
Group
Uncategorized
Stars
10
Language
Python
Last push
2026-10-07
Forks
1

More on this shelf

  1. 1REAio.github.morluto/reaReverse engineer anything from your terminal or agent with one CLI and MCP server.125.3k
  2. 2com.browser-use/browser-usecom.browser-use/browser-useControl a real Chrome browser to complete any task: fill forms, extract data, book flights.117.7k
  3. 3World Monitorapp.worldmonitor/mcpLive markets, conflicts, country risk, chokepoints, energy, and China decision signals. 93 tools.88.3k
  4. 4Scrapling MCP Serverd4vinci/scrapling🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scraplingdev86.9k
  5. 5Everythingmodelcontextprotocol/serversThis MCP server attempts to exercise all the features of the MCP protocol. It is not intended to be a useful server, but rather a test server for builders of MCP clients. It implements prompts, tools, resources, sampling, and more to showcase MCP capabilities.85.8k
  6. 6Fetchmodelcontextprotocol/serversA Model Context Protocol server that provides web content fetching capabilities. This server enables LLMs to retrieve and process content from web pages, converting HTML to markdown for easier consumption.85.8k