Creates a new RedmineMCPServer instance
Initializes the MCP server with Redmine API configuration and sets up the HTTP client for making API requests.
Private
fetchMakes an HTTP request to the Redmine API using native fetch
API endpoint path (e.g., "/issues.json")
Fetch options including method, body, etc.
Options for making HTTP requests to the Redmine API
Optional
body?: unknownOptional
method?: stringOptional
params?: Record<string, string | number>Promise resolving to the parsed JSON response
Private
serverCreates a new issue in Redmine
Issue creation parameters
Optional
assigned_to_id?: numberUser ID to assign the issue to
Optional
category_id?: numberOptional
custom_fields?: { id: number; value: string | number | boolean }[]Optional
description?: stringIssue description
Optional
done_ratio?: numberOptional
due_date?: stringOptional
estimated_hours?: numberOptional
fixed_version_id?: numberOptional
parent_issue_id?: numberOptional
priority_id?: numberPriority ID for the issue
Project ID where to create the issue (required)
Optional
start_date?: stringIssue subject/title (required)
Optional
tracker_id?: numberPromise resolving to created issue data
Retrieves information about the current user based on API token
Arguments for getting current user (optional include parameter)
Promise resolving to current user information
Retrieves a specific issue by its ID from Redmine
Issue lookup parameters
The ID of the issue to retrieve
Promise resolving to formatted issue data
Retrieves issues from Redmine with optional filtering
Filter parameters for issues query
Optional
assigned_to_id?: stringUser ID to filter issues assigned to specific user
Optional
issue_id?: stringSingle issue ID or comma-separated list of issue IDs
Optional
limit?: numberMaximum number of issues to return
Optional
parent_id?: stringOptional
project_id?: stringProject ID to filter by
Optional
status_id?: stringStatus ID to filter by ('open', 'closed', or specific ID)
Optional
subject?: stringSearch text in issue subject/title
Promise resolving to formatted issue data
Get memberships (users and groups) for a specific project
Retrieves all users and groups assigned to a project along with their roles. Supports pagination for projects with many members.
Filter criteria including project_id (numeric or identifier), limit, offset
Promise resolving to MCP response with membership data
Retrieves all projects from Redmine
Automatically fetches all projects using internal pagination to ensure complete project list is returned. Supports optional case-insensitive name filtering.
Optional
args: { name?: string }Optional filter arguments
Optional
name?: stringOptional case-insensitive substring to filter project names
Promise resolving to formatted project data with name-to-ID mappings
Private
getRetrieves projects resource for MCP resource access
Promise resolving to projects resource data
Private
getRetrieves recent issues resource for MCP resource access
Promise resolving to recent issues resource data (last 10 updated)
Private
getRetrieves recent time entries resource for MCP resource access
Promise resolving to recent time entries resource data (last 10 entries)
Retrieves available time tracking activities for a project or globally
Activity lookup parameters
Optional
project_id?: numberProject ID to get project-specific activities (optional)
Promise resolving to available time tracking activities
Retrieves time entries from Redmine with optional filtering
Filter parameters for time entries query
Optional
activity_id?: stringOptional
from?: stringStart date (YYYY-MM-DD format)
Optional
issue_id?: stringIssue ID to filter time entries by
Optional
limit?: numberMaximum number of time entries to return
Optional
project_id?: stringProject ID to filter time entries by
Optional
spent_on?: stringOptional
to?: stringEnd date (YYYY-MM-DD format)
Optional
user_id?: stringUser ID to filter time entries by
Promise resolving to formatted time entries data
Logs time spent on an issue or project in Redmine
Time logging parameters
Activity ID for the time entry (required)
Optional
comments?: stringComments for the time entry
Optional
custom_fields?: { id: number; value: string | number | boolean }[]Hours to log (required)
Optional
issue_id?: numberIssue ID to log time against
Optional
project_id?: numberProject ID to log time against
Optional
spent_on?: stringDate when time was spent (YYYY-MM-DD format)
Promise resolving to time entry creation confirmation
Starts the MCP server and connects to stdio transport
Promise that resolves when server is running
Private
setupSets up MCP protocol handlers for tools, resources, and prompts
Configures the server to handle:
Updates an existing issue in Redmine
Issue update parameters
Optional
assigned_to_id?: numberNew assignee user ID
Optional
category_id?: numberOptional
custom_fields?: { id: number; value: string | number | boolean }[]Optional
description?: stringNew issue description
Optional
done_ratio?: numberCompletion percentage (0-100)
Optional
due_date?: stringDue date in YYYY-MM-DD format
Optional
estimated_hours?: numberOptional
fixed_version_id?: numberID of the issue to update (required)
Optional
notes?: stringNotes to add to the issue history
Optional
parent_issue_id?: numberOptional
priority_id?: numberNew priority ID
Optional
start_date?: stringOptional
status_id?: numberNew status ID
Optional
subject?: stringNew issue subject/title
Optional
tracker_id?: numberPromise resolving to success confirmation
Redmine MCP Server - Provides Model Context Protocol interface for Redmine API
This class implements an MCP server that exposes Redmine functionality through standardized tools, resources, and prompts for AI assistants and other clients.