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
- Go to Administration → Applications
- Click New Application
- Fill in the details:
- Name: Mitigate AI Platform
- Redirect URI:
https://ai-platform.mitigate.dev/connector_connections/callback - Scopes: Leave blank (uses default)
- 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:
| Field | Value |
|---|---|
| Integration Type | MCP |
| Name | Redmine |
| URL | (URL of your hosted Redmine MCP server)/mcp |
| Transport Type | Streamable HTTP |
| Authentication Type | OAuth 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 Group | Scopes | Tools Covered |
|---|---|---|
| Projects | view_project, view_members, manage_members | List projects, list/add/update/remove members, get modules |
| Search | search_project | Search issues, search entire Redmine |
| Issues (read) | view_issues | Get issue, list issues, list subtasks |
| Issues (write) | add_issues, edit_issues, copy_issues, delete_issues | Create, update, copy, delete issues |
| Relations & Subtasks | manage_issue_relations, manage_subtasks | Create/delete relations, manage parent-child links |
| Notes | add_issue_notes, edit_issue_notes, view_private_notes, set_notes_private | Add/edit journal notes, toggle private flag |
| Watchers | view_issue_watchers, add_issue_watchers, delete_issue_watchers | List/add/remove watchers |
| Categories | manage_categories | List/create/update/delete issue categories |
| Time Tracking | log_time, log_time_for_other_users, view_time_entries, edit_time_entries | List/read time entries, create/import entries, update entries, log for other users |
| Files | view_files, manage_files | List/upload/delete project files and issue attachments |
| Wiki | view_wiki_pages, edit_wiki_pages, rename_wiki_pages, delete_wiki_pages | List/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".
| Plugin | Scopes to add | Tools Covered |
|---|---|---|
| redmine_dmsf (open-source) | view_dmsf_folders view_dmsf_files file_manipulation folder_manipulation | List/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
- Ensure Redmine REST API is enabled
- Check OAuth credentials in the connector configuration
- Verify the redirect URI matches exactly
"Unauthorized" Error
- The OAuth token may have expired - disconnect and reconnect
- 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, ordelete(required) - project_id - Required for
create - version_id - Required for
updateanddelete - name - Required for
create, optional forupdate - description - Version description
- status -
open,locked, orclosed. Defaults toopenoncreate - due_date - YYYY-MM-DD
- sharing -
none,descendants,hierarchy,tree, orsystem. Defaults tononeoncreate - 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, orremove(required) - project_id - Required for
add - membership_id - Required for
updateandremove - user_id - For
add, exactly one ofuser_idorgroup_idis required - group_id - For
add, exactly one ofuser_idorgroup_idis required - role_ids - Non-empty list of role IDs. Required for
addandupdate
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_pointsis 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
trueto actually delete. Otherwise the tool refuses withcode: CONFIRMATION_REQUIRED - confirm_delete_with_children - Must be
trueto delete an issue that has subtasks (cascade). Without this flag, deleting a parent issue returnscode: CHILDREN_PRESENT
Manage Issue Relation
manage_issue_relation
List, create, or delete an issue relation.
Parameters:
- action -
list,create, ordelete(required) - issue_id - Required for
listandcreate - 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 torelates - 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 -
addorremove(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 -
editorset_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, ordelete(required) - project_id - Required for
listandcreate - category_id - Required for
updateanddelete - name - Required for
create, optional forupdate - assigned_to_id - Default assignee user ID (for
createandupdate) - 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 -
createorupdate(required) - hours - Required for
create, optional forupdate. Must be positive - project_id - For
create, required ifissue_idis not provided - issue_id - For
create, required ifproject_idis not provided - user_id - Log on behalf of another user (
createonly). Requireslog_time_for_other_userspermission - 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) plusproject_id/issue_id; optionaluser_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, orrename(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
createandupdate - comments - Comment for the change log (for
create/update) - new_title - Required for
rename. Must differ fromwiki_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 withsource_urlif 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=trueon the MCP server. - Products: Listing and editing products requires the RedmineUP Products plugin. Enable by setting
REDMINE_PRODUCTS_ENABLED=trueon the MCP server. - CRM / Contacts: Listing and managing contacts requires the RedmineUP CRM plugin. Enable by setting
REDMINE_CRM_ENABLED=trueon 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=trueon the MCP server. - Agile: Optional Agile fields (
story_points,agile_sprint_id,agile_position) appear onget_redmine_issueand are writable viaupdate_redmine_issuewhenREDMINE_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, orupdate(required) - project_id - Optional for
list(filter),create(associate) - limit - Maximum products for
list(max 100). Defaults to 100 - product_id - Required for
getandupdate - 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, orremove_from_project(required) - project_id - Optional for
list; required forcreate,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
listandcreate - 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 oncreatefor 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, orupdate(required) - project_id - Required for
listandcreate - folder_id - Scope listing to a folder (for
list), or place new document in a folder (forcreate) - limit - Maximum results for
list(1-100) - document_id - Required for
getandupdate - 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 (includingfilename) are silently filtered