Creates a new RedmineMCPServer instance
Initializes the MCP server with Redmine API configuration and sets up the HTTP client for making API requests.
PrivatefetchMakes 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
Optionalbody?: unknownOptionalmethod?: stringOptionalparams?: Record<string, string | number>Promise resolving to the parsed JSON response
PrivateserverCreates a new issue in Redmine
Issue creation parameters
Optionalassigned_to_id?: numberUser ID to assign the issue to
Optionalcategory_id?: numberOptionalcustom_fields?: { id: number; value: string | number | boolean }[]Optionaldescription?: stringIssue description
Optionaldone_ratio?: numberOptionaldue_date?: stringOptionalestimated_hours?: numberOptionalfixed_version_id?: numberOptionalparent_issue_id?: numberOptionalpriority_id?: numberPriority ID for the issue
Project ID where to create the issue (required)
Optionalstart_date?: stringIssue subject/title (required)
Optionaltracker_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
Optionalassigned_to_id?: stringUser ID to filter issues assigned to specific user
Optionalissue_id?: stringSingle issue ID or comma-separated list of issue IDs
Optionallimit?: numberMaximum number of issues to return
Optionalparent_id?: stringOptionalproject_id?: stringProject ID to filter by
Optionalstatus_id?: stringStatus ID to filter by ('open', 'closed', or specific ID)
Optionalsubject?: 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.
Optionalargs: { name?: string }Optional filter arguments
Optionalname?: stringOptional case-insensitive substring to filter project names
Promise resolving to formatted project data with name-to-ID mappings
PrivategetRetrieves projects resource for MCP resource access
Promise resolving to projects resource data
PrivategetRetrieves recent issues resource for MCP resource access
Promise resolving to recent issues resource data (last 10 updated)
PrivategetRetrieves 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
Optionalproject_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
Optionalactivity_id?: stringOptionalfrom?: stringStart date (YYYY-MM-DD format)
Optionalissue_id?: stringIssue ID to filter time entries by
Optionallimit?: numberMaximum number of time entries to return
Optionalproject_id?: stringProject ID to filter time entries by
Optionalspent_on?: stringOptionalto?: stringEnd date (YYYY-MM-DD format)
Optionaluser_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)
Optionalcomments?: stringComments for the time entry
Optionalcustom_fields?: { id: number; value: string | number | boolean }[]Hours to log (required)
Optionalissue_id?: numberIssue ID to log time against
Optionalproject_id?: numberProject ID to log time against
Optionalspent_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
PrivatesetupSets up MCP protocol handlers for tools, resources, and prompts
Configures the server to handle:
Updates an existing issue in Redmine
Issue update parameters
Optionalassigned_to_id?: numberNew assignee user ID
Optionalcategory_id?: numberOptionalcustom_fields?: { id: number; value: string | number | boolean }[]Optionaldescription?: stringNew issue description
Optionaldone_ratio?: numberCompletion percentage (0-100)
Optionaldue_date?: stringDue date in YYYY-MM-DD format
Optionalestimated_hours?: numberOptionalfixed_version_id?: numberID of the issue to update (required)
Optionalnotes?: stringNotes to add to the issue history
Optionalparent_issue_id?: numberOptionalpriority_id?: numberNew priority ID
Optionalstart_date?: stringOptionalstatus_id?: numberNew status ID
Optionalsubject?: stringNew issue subject/title
Optionaltracker_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.