Mitigate AI Platform

Redmine

How to configure the Redmine MCP connector with OAuth2 authentication

The Redmine integration allows the chatbot to interact with Redmine for project management tasks using OAuth2 authentication.

Requirements

  • Redmine 6.1+ (required for OAuth2 support)
  • Redmine instance with REST API enabled

Redmine Configuration

1. Enable REST API

In Redmine, go to Administration → Settings → API and enable:

  • REST web service
  • JSONP support (optional)

2. Register OAuth Application

  1. Go to Administration → Applications
  2. Click New Application
  3. Fill in the details:
    • Name: Mitigate AI Platform
    • Redirect URI: https://ai-platform.mitigate.dev/connector_connections/callback
    • Scopes: Leave blank (uses default)
  4. Save and note the Client ID and Client Secret

MCP Server Setup

The Redmine MCP server needs to be hosted separately and pointed at your Redmine instance. You can host it yourself using the redmine-mcp-server repository, or we can host it for you — contact us at ai@mitigate.dev.

Create Connector

In the chatbot admin panel (Admin → Connectors), create a new connector:

FieldValue
Integration TypeMCP
NameRedmine
URL(URL of your hosted Redmine MCP server)/mcp
Transport TypeStreamable HTTP
Authentication TypeOAuth 2.1
OAuth Client ID(from Redmine)
OAuth Client Secret(from Redmine)
OAuth Scopes(see recommended scopes below)

OAuth Scopes

OAuth scopes control what the connector can do on behalf of the authenticated user. The scopes must be configured both in the Redmine OAuth application (as available scopes) and in the connector configuration (as requested scopes).

Recommended scopes for a standard Redmine instance (space-separated, paste into the OAuth Scopes field):

view_project search_project view_members manage_members view_issues add_issues edit_issues copy_issues delete_issues manage_issue_relations manage_subtasks add_issue_notes edit_issue_notes view_private_notes set_notes_private view_issue_watchers add_issue_watchers delete_issue_watchers manage_categories log_time log_time_for_other_users view_time_entries edit_time_entries view_files manage_files view_wiki_pages edit_wiki_pages rename_wiki_pages delete_wiki_pages
Scope GroupScopesTools Covered
Projectsview_project, view_members, manage_membersList projects, list/add/update/remove members, get modules
Searchsearch_projectSearch issues, search entire Redmine
Issues (read)view_issuesGet issue, list issues, list subtasks
Issues (write)add_issues, edit_issues, copy_issues, delete_issuesCreate, update, copy, delete issues
Relations & Subtasksmanage_issue_relations, manage_subtasksCreate/delete relations, manage parent-child links
Notesadd_issue_notes, edit_issue_notes, view_private_notes, set_notes_privateAdd/edit journal notes, toggle private flag
Watchersview_issue_watchers, add_issue_watchers, delete_issue_watchersList/add/remove watchers
Categoriesmanage_categoriesList/create/update/delete issue categories
Time Trackinglog_time, log_time_for_other_users, view_time_entries, edit_time_entriesList/read time entries, create/import entries, update entries, log for other users
Filesview_files, manage_filesList/upload/delete project files and issue attachments
Wikiview_wiki_pages, edit_wiki_pages, rename_wiki_pages, delete_wiki_pagesList/get/create/update/rename/delete wiki pages

Optional plugin scopes

Append these to the recommended list only if the corresponding plugin is installed on the Redmine instance. Including a scope that Redmine doesn't recognise will cause the OAuth authorize step to reject the whole request with "The requested scope is invalid, unknown, or malformed".

PluginScopes to addTools Covered
redmine_dmsf (open-source)view_dmsf_folders view_dmsf_files file_manipulation folder_manipulationList/get/create/update DMSF documents

After changing scopes, disconnect and reconnect the connector so Redmine issues a new token with the updated scopes.

Assign to Workspace

In Admin → Workspaces, edit your workspace and add the Redmine connector.

Usage Examples

Once connected, users can interact with Redmine through natural language:

  • "List my Redmine projects"
  • "Show me open issues in project X"
  • "Create a new issue titled 'Bug in login form' in project X"
  • "Log 2 hours on issue #123 with comment 'Fixed the bug'"
  • "Update issue #456 status to resolved"

Troubleshooting

"Failed to connect" Error

  1. Ensure Redmine REST API is enabled
  2. Check OAuth credentials in the connector configuration
  3. Verify the redirect URI matches exactly

"Unauthorized" Error

  1. The OAuth token may have expired - disconnect and reconnect
  2. Verify the user has permission in Redmine for the requested action

Tools

The Redmine MCP server exposes its tools grouped by domain. Many CRUD-style operations are bundled into a single manage_* tool that takes an action parameter (e.g. manage_redmine_version with action: create | update | delete) — this keeps the tool surface compact for the LLM. Tools that depend on a commercial or optional plugin are listed under Plugin Integrations.

Project Management

List Redmine Projects

list_redmine_projects

Lists all accessible projects in the Redmine instance.

List Project Issue Custom Fields

list_project_issue_custom_fields

Lists issue custom fields configured for a project, including allowed values and tracker bindings.

Parameters:

  • project_id - Project ID (numeric) or identifier (string)
  • tracker_id - Restrict output to fields applicable to the given tracker ID

Summarize Project Status

summarize_project_status

Provides a comprehensive summary of project status based on issue activity over a specified time period, including activity metrics, status breakdowns, and trends.

Parameters:

  • project_id - The ID of the project to summarize
  • days - Number of days to analyze. Defaults to 30

List Redmine Versions

list_redmine_versions

Lists versions (roadmap milestones) for a project.

Parameters:

  • project_id - Project ID or identifier
  • status_filter - Filter by version status. Allowed: open, locked, closed. Defaults to all

Manage Redmine Version

manage_redmine_version

Creates, updates, or deletes a project version (milestone).

Parameters:

  • action - create, update, or delete (required)
  • project_id - Required for create
  • version_id - Required for update and delete
  • name - Required for create, optional for update
  • description - Version description
  • status - open, locked, or closed. Defaults to open on create
  • due_date - YYYY-MM-DD
  • sharing - none, descendants, hierarchy, tree, or system. Defaults to none on create
  • wiki_page_title - Associated wiki page title

List Project Members

list_project_members

Lists all members (users and groups) of a project along with their assigned roles.

Parameters:

  • project_id - Project ID or identifier

List Redmine Roles

list_redmine_roles

Lists all roles defined in the Redmine instance with id and name.

Get Project Modules

get_project_modules

Retrieves the list of enabled modules for a project (e.g. issue_tracking, time_tracking, wiki, repository).

Parameters:

  • project_id - Project ID (numeric) or identifier (string)

Manage Project Member

manage_project_member

Adds, updates, or removes a project membership.

Parameters:

  • action - add, update, or remove (required)
  • project_id - Required for add
  • membership_id - Required for update and remove
  • user_id - For add, exactly one of user_id or group_id is required
  • group_id - For add, exactly one of user_id or group_id is required
  • role_ids - Non-empty list of role IDs. Required for add and update

Issue Operations

Get Redmine Issue

get_redmine_issue

Retrieves detailed information about a specific issue.

Parameters:

  • issue_id - The ID of the issue (required)
  • include_journals - Include comments/journal entries. Defaults to true
  • include_attachments - Include attachment metadata. Defaults to true
  • include_custom_fields - Include custom fields. Defaults to true
  • journal_limit - Maximum journals to return (enables pagination)
  • journal_offset - Number of journals to skip. Defaults to 0
  • include_watchers - Include watcher list. Defaults to false
  • include_relations - Include issue relations. Defaults to false
  • include_children - Include child issues. Defaults to false

When REDMINE_AGILE_ENABLED=true, the result also includes Agile fields (story_points, agile_sprint_id, agile_position).

List Redmine Issues

list_redmine_issues

Lists Redmine issues with flexible filtering and pagination.

Parameters:

  • project_id - Filter by project
  • status_id - Filter by status
  • tracker_id - Filter by tracker
  • assigned_to_id - Filter by assignee. Use "me" for current user
  • priority_id - Filter by priority
  • fixed_version_id - Filter by target version
  • sort - e.g. "updated_on:desc"
  • limit - Maximum entries (max 1000). Defaults to 25
  • offset - Pagination offset. Defaults to 0
  • include_pagination_info - Include pagination metadata. Defaults to false
  • fields - Array of field names. Use ["*"] or ["all"] for everything

Search Redmine Issues

search_redmine_issues

Searches issues using text queries with pagination, field selection, and scope filtering. For advanced filtering by specific field values, use list_redmine_issues instead.

Parameters:

  • query - Text to search for (required)
  • limit - Maximum results (max 1000). Defaults to 25
  • offset - Pagination offset. Defaults to 0
  • include_pagination_info - Include pagination metadata. Defaults to false
  • fields - Array of field names. Use ["*"] or ["all"] for everything
  • scope - "all", "my_project", or "subprojects". Defaults to "all"
  • open_issues - Restrict to open issues only. Defaults to false

Create Redmine Issue

create_redmine_issue

Creates a new issue in the specified project.

Parameters:

  • project_id - Target project ID (required)
  • subject - Issue subject/title (required)
  • description - Issue description
  • fields - Additional fields as object or JSON string (e.g. {"priority_id": 3, "tracker_id": 1})
  • extra_fields - Additional fields merged with fields

Update Redmine Issue

update_redmine_issue

Updates an existing issue. Supports status_name (auto-resolved to ID) and custom fields by name.

Parameters:

  • issue_id - ID of the issue to update (required)
  • fields - Object of fields to update (e.g. {"status_name": "Resolved", "notes": "Fixed"}). When Agile is enabled, story_points is supported

Copy Issue

copy_issue

Duplicates an existing issue using Redmine's native copy mechanism, with optional field overrides and subtask/attachment copying.

Parameters:

  • issue_id - Source issue ID (required)
  • project_id - Target project for the copy. Defaults to source's project
  • subject - New subject. Defaults to source subject
  • link_original - Create a copied_to/copied_from relation. Defaults to true
  • copy_subtasks - Recursively copy subtasks. Defaults to true
  • copy_attachments - Copy attachments. Defaults to true
  • field_overrides - Object or JSON string of field values to override

Delete Redmine Issue

delete_redmine_issue

Permanently deletes an issue via DELETE /issues/{id}.json. Requires explicit confirmation; subtask cascade requires a second opt-in flag. Blocked when REDMINE_MCP_READ_ONLY=true.

Parameters:

  • issue_id - ID of the issue to delete (required)
  • confirm_delete - Must be true to actually delete. Otherwise the tool refuses with code: CONFIRMATION_REQUIRED
  • confirm_delete_with_children - Must be true to delete an issue that has subtasks (cascade). Without this flag, deleting a parent issue returns code: CHILDREN_PRESENT

Manage Issue Relation

manage_issue_relation

List, create, or delete an issue relation.

Parameters:

  • action - list, create, or delete (required)
  • issue_id - Required for list and create
  • issue_to_id - Required for create
  • relation_id - Required for delete
  • relation_type - relates, duplicates, duplicated, blocks, blocked, precedes, follows, copied_to, copied_from. Defaults to relates
  • delay - Delay in days (only meaningful for precedes/follows)

List Subtasks

list_subtasks

Lists subtasks (child issues) of a given issue, including closed ones.

Parameters:

  • issue_id - ID of the parent issue

Manage Issue Watcher

manage_issue_watcher

Adds or removes a watcher on an issue. Requires Redmine 2.3.0+.

Parameters:

  • action - add or remove (required)
  • issue_id - The issue ID (required)
  • user_id - The user to add or remove (required)

Manage Issue Note

manage_issue_note

Edits a journal note's text or toggles its private flag.

Parameters:

  • action - edit or set_private (required)
  • journal_id - ID of the journal entry (required)
  • notes - New notes text. Required for edit (may be empty to clear)
  • private_notes - Optionally toggle the private flag during edit
  • is_private - Required for set_private

Get Private Notes

get_private_notes

Retrieves only the private notes (journals with private_notes=true) of an issue.

Parameters:

  • issue_id - The issue ID

Manage Issue Category

manage_issue_category

List, create, update, or delete an issue category.

Parameters:

  • action - list, create, update, or delete (required)
  • project_id - Required for list and create
  • category_id - Required for update and delete
  • name - Required for create, optional for update
  • assigned_to_id - Default assignee user ID (for create and update)
  • reassign_to_id - Reassign existing issues to this category on delete

Time Tracking

List Time Entries

list_time_entries

Lists time entries with optional filters and pagination.

Parameters:

  • project_id - Filter by project
  • issue_id - Filter by issue
  • user_id - Filter by user. Use "me" for current user
  • from_date - YYYY-MM-DD
  • to_date - YYYY-MM-DD
  • limit - Maximum entries (max 100). Defaults to 25
  • offset - Pagination offset. Defaults to 0

Manage Time Entry

manage_time_entry

Creates or updates a time entry. Supports logging on behalf of another user.

Parameters:

  • action - create or update (required)
  • hours - Required for create, optional for update. Must be positive
  • project_id - For create, required if issue_id is not provided
  • issue_id - For create, required if project_id is not provided
  • user_id - Log on behalf of another user (create only). Requires log_time_for_other_users permission
  • time_entry_id - Required for update
  • activity_id - Activity type
  • comments - Description of work performed. Empty string clears the field on update
  • spent_on - YYYY-MM-DD

List Time Entry Activities

list_time_entry_activities

Lists available time entry activity types (e.g. Development, Design). Use this to discover valid activity_id values. Supports project-scoped lookup on Redmine 3.4.0+.

Parameters:

  • project_id - When provided, returns project-specific activities

Discovery / Enumeration

List Redmine Trackers

list_redmine_trackers

Lists all trackers (Bug, Feature, Support, etc.) for discovering valid tracker_id values.

List Redmine Issue Statuses

list_redmine_issue_statuses

Lists all issue statuses with id, name, and is_closed flag.

List Redmine Issue Priorities

list_redmine_issue_priorities

Lists all priority levels with id, name, active, and is_default.

List Redmine Users

list_redmine_users

Lists Redmine users with optional filtering. Admin-only endpoint.

Parameters:

  • name - Case-insensitive substring filter on login, firstname, lastname, email
  • group_id - Filter by group ID
  • limit - Maximum users (1-100). Defaults to 25
  • offset - Pagination offset

Get Current User

get_current_user

Retrieves the currently authenticated user's profile. Works for any authenticated user (not admin-only).

List Redmine Queries

list_redmine_queries

Lists all saved custom queries (issue filters) visible to the current user. Read-only — Redmine's REST API does not support creating, updating, or deleting saved queries.

Import Time Entries

import_time_entries

Bulk-imports multiple time entries via sequential API calls with per-entry error reporting.

Parameters:

  • entries - List of time entry dicts (or JSON string). Each: hours (required) plus project_id/issue_id; optional user_id, activity_id, comments, spent_on
  • stop_on_error - Abort on the first error. Defaults to false

Search & Wiki

Search Entire Redmine

search_entire_redmine

Searches across issues and wiki pages. Requires Redmine 3.3.0+.

Parameters:

  • query - Text to search for (required)
  • resources - ["issues"], ["wiki_pages"], or both. Defaults to both
  • limit - Maximum results (max 100). Defaults to 100
  • offset - Pagination offset. Defaults to 0

Manage Redmine Wiki Page

manage_redmine_wiki_page

List, get, create, update, delete, or rename a wiki page.

Parameters:

  • action - list, get, create, update, delete, or rename (required)
  • project_id - Project ID or identifier (required)
  • wiki_page_title - Required for all actions except list
  • version - Specific version number (for get). Defaults to latest
  • include_attachments - Include attachment metadata (for get). Defaults to true
  • text - Required for create and update
  • comments - Comment for the change log (for create/update)
  • new_title - Required for rename. Must differ from wiki_page_title
  • redirect_existing_links - Create a redirect from old to new title (for rename). Defaults to true

File Operations

List Files

list_files

Lists all files uploaded to a project's Files section (not issue attachments, not DMSF documents).

Parameters:

  • project_id - Project ID or identifier

Upload File

upload_file

Uploads a file to a project's Files section. Provide exactly one of source_url or content_base64. Max 50 MiB.

Parameters:

  • project_id - Project ID or identifier (required)
  • filename - Required when using content_base64; inferred from URL/headers with source_url if omitted
  • source_url - HTTP(S) URL to download from
  • content_base64 - File content as base64
  • description - Human-readable description
  • version_id - Version/release ID to attach the file to

Delete File

delete_file

Deletes a file from a project's Files section. By default refuses to delete non-Project attachments (issue/wiki/news) unless explicitly confirmed.

Parameters:

  • file_id - ID of the attachment to delete (required)
  • confirm_delete_any_attachment - Bypass the project-scope safety check. Defaults to false

Get Redmine Attachment

get_redmine_attachment

Downloads a Redmine attachment and returns a usable reference (HTTP URL in HTTP mode, local file path in stdio mode).

Parameters:

  • attachment_id - The ID of the attachment to download

Cleanup Attachment Files

cleanup_attachment_files

Removes expired attachment files cached by the MCP server and reports cleanup statistics. Local maintenance operation; continues to work in read-only mode.

Plugin Integrations

Some tools require optional Redmine plugins. These are gated behind environment variables on the MCP server and return a descriptive error when the plugin is not available or the flag is off.

  • Checklists: Reading and updating issue checklists requires the RedmineUP Checklists Pro plugin. Enable by setting REDMINE_CHECKLISTS_ENABLED=true on the MCP server.
  • Products: Listing and editing products requires the RedmineUP Products plugin. Enable by setting REDMINE_PRODUCTS_ENABLED=true on the MCP server.
  • CRM / Contacts: Listing and managing contacts requires the RedmineUP CRM plugin. Enable by setting REDMINE_CRM_ENABLED=true on the MCP server.
  • Documents (DMSF): Managing project documents and folders requires the redmine_dmsf plugin (GPL v2, open-source) which replaces Redmine's built-in Documents module. Enable by setting REDMINE_DMSF_ENABLED=true on the MCP server.
  • Agile: Optional Agile fields (story_points, agile_sprint_id, agile_position) appear on get_redmine_issue and are writable via update_redmine_issue when REDMINE_AGILE_ENABLED=true.

Get Checklist

get_checklist

Retrieves all checklist items for an issue, including completion status and position.

Parameters:

  • issue_id - The ID of the issue

Update Checklist Item

update_checklist_item

Updates a checklist item's text, done state, or position. At least one of subject, is_done, or position must be provided.

Parameters:

  • checklist_item_id - ID of the checklist item to update (required)
  • subject - New text for the checklist item
  • is_done - Set completion state (true/false)
  • position - New position (1-based)

Get Gantt Chart

get_gantt_chart

Aggregates issues with scheduling fields (start/due dates, progress, dependencies) plus project versions into a single structured timeline response. Uses core Redmine REST API — no plugin required, listed here as it relates to project planning workflows.

Parameters:

  • project_id - Project identifier (required)
  • start_date_after - Filter to issues with start_date >= this date (YYYY-MM-DD)
  • due_date_before - Filter to issues with due_date <= this date (YYYY-MM-DD)
  • include_closed - Include closed issues. Defaults to false
  • limit - Maximum issues to return (1-500). Defaults to 250

Manage Product

manage_product

List, get, create, or update a RedmineUP product. No delete action — the plugin does not expose product deletion.

Parameters:

  • action - list, get, create, or update (required)
  • project_id - Optional for list (filter), create (associate)
  • limit - Maximum products for list (max 100). Defaults to 100
  • product_id - Required for get and update
  • name - Required for create
  • status_id - 1=Active, 2=Inactive. Defaults to 1 on create
  • description - For create
  • code - Product code/SKU (for create)
  • price - Numeric price (for create)
  • currency - Currency code, e.g. "USD" (for create)
  • category_id - Category ID (for create)
  • tag_list - Comma-separated tags (for create)
  • custom_fields - List of custom field value dicts (for create)
  • fields - Dict of fields to update. Allowed keys: name, description, price, currency, status_id, code, project_id, category_id, tag_list, custom_fields

Manage Contact

manage_contact

List, get, create, update, delete, or change project association for a RedmineUP CRM contact.

Parameters:

  • action - list, get, create, update, delete, assign_to_project, or remove_from_project (required)
  • project_id - Optional for list; required for create, assign_to_project, remove_from_project
  • search - Free-text search across name, company, email (for list)
  • tags - Comma-separated tag filter (for list)
  • assigned_to_id - Filter by assigned user (for list)
  • limit - Maximum contacts for list (max 100). Defaults to 100
  • contact_id - Required for all actions except list and create
  • include - Comma-separated includes for get: notes, deals, contacts
  • first_name - Required for create
  • last_name - For create
  • company - For create
  • email - For create
  • phone - For create
  • is_company - Whether this contact represents a company (for create). Defaults to false
  • visibility - 0=Project, 1=Public, 2=Private (for create). Defaults to 0
  • fields - For update, dict of fields. Allowed keys: first_name, last_name, middle_name, company, job_title, phone, email, website, skype_name, birthday, background, address_attributes, tag_list, is_company, assigned_to_id, custom_fields, visibility, project_id. Also accepted on create for additional fields beyond the named parameters

Manage Document

manage_document

List, get, create, or update a DMSF document. Every update creates a new DMSF revision (no in-place mutation); filenames are immutable after creation.

Parameters:

  • action - list, get, create, or update (required)
  • project_id - Required for list and create
  • folder_id - Scope listing to a folder (for list), or place new document in a folder (for create)
  • limit - Maximum results for list (1-100)
  • document_id - Required for get and update
  • filename - Required for create. Becomes the immutable filename for all future revisions
  • content_base64 - Required for create. Raw file bytes encoded as base64. Max 50 MiB after decoding
  • title - Optional title (for create)
  • description - Optional description (for create)
  • comment - Optional revision comment (for create)
  • version - Optional initial version label (for create)
  • custom_fields - Optional custom field values (for create)
  • fields - Required for update. Allowed keys: title, description, comment, custom_fields. Unknown keys (including filename) are silently filtered

On this page