Redmine MCP Server Documentation - v0.1.0
    Preparing search index...

    Class RedmineMCPServer

    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.

    Index

    Constructors

    • Creates a new RedmineMCPServer instance

      Initializes the MCP server with Redmine API configuration and sets up the HTTP client for making API requests.

      Returns RedmineMCPServer

    Properties

    fetchRedmine: <T = unknown>(
        path: string,
        options?: RedmineFetchOptions,
    ) => Promise<T>

    Type Declaration

      • <T = unknown>(path: string, options?: RedmineFetchOptions): Promise<T>
      • Makes an HTTP request to the Redmine API using native fetch

        Type Parameters

        • T = unknown

        Parameters

        • path: string

          API endpoint path (e.g., "/issues.json")

        • options: RedmineFetchOptions = {}

          Fetch options including method, body, etc.

          Options for making HTTP requests to the Redmine API

          • Optionalbody?: unknown
          • Optionalmethod?: string
          • Optionalparams?: Record<string, string | number>

        Returns Promise<T>

        Promise resolving to the parsed JSON response

        When the request fails or returns non-OK status

    server: McpServer

    Methods

    • Creates a new issue in Redmine

      Parameters

      • args: {
            assigned_to_id?: number;
            category_id?: number;
            custom_fields?: { id: number; value: string | number | boolean }[];
            description?: string;
            done_ratio?: number;
            due_date?: string;
            estimated_hours?: number;
            fixed_version_id?: number;
            parent_issue_id?: number;
            priority_id?: number;
            project_id: string;
            start_date?: string;
            subject: string;
            tracker_id?: number;
        }

        Issue creation parameters

        • Optionalassigned_to_id?: number

          User ID to assign the issue to

        • Optionalcategory_id?: number
        • Optionalcustom_fields?: { id: number; value: string | number | boolean }[]
        • Optionaldescription?: string

          Issue description

        • Optionaldone_ratio?: number
        • Optionaldue_date?: string
        • Optionalestimated_hours?: number
        • Optionalfixed_version_id?: number
        • Optionalparent_issue_id?: number
        • Optionalpriority_id?: number

          Priority ID for the issue

        • project_id: string

          Project ID where to create the issue (required)

        • Optionalstart_date?: string
        • subject: string

          Issue subject/title (required)

        • Optionaltracker_id?: number

      Returns Promise<{ content: { text: string; type: "text" }[] }>

      Promise resolving to created issue data

    • Retrieves information about the current user based on API token

      Parameters

      • args: { include?: string }

        Arguments for getting current user (optional include parameter)

      Returns Promise<{ content: { text: string; type: "text" }[] }>

      Promise resolving to current user information

    • Retrieves a specific issue by its ID from Redmine

      Parameters

      • args: { issue_id: number }

        Issue lookup parameters

        • issue_id: number

          The ID of the issue to retrieve

      Returns Promise<{ content: { text: string; type: "text" }[] }>

      Promise resolving to formatted issue data

    • Retrieves issues from Redmine with optional filtering

      Parameters

      • args: {
            assigned_to_id?: string;
            issue_id?: string;
            limit?: number;
            parent_id?: string;
            project_id?: string;
            status_id?: string;
            subject?: string;
        }

        Filter parameters for issues query

        • Optionalassigned_to_id?: string

          User ID to filter issues assigned to specific user

        • Optionalissue_id?: string

          Single issue ID or comma-separated list of issue IDs

        • Optionallimit?: number

          Maximum number of issues to return

        • Optionalparent_id?: string
        • Optionalproject_id?: string

          Project ID to filter by

        • Optionalstatus_id?: string

          Status ID to filter by ('open', 'closed', or specific ID)

        • Optionalsubject?: string

          Search text in issue subject/title

      Returns Promise<{ content: { text: string; type: "text" }[] }>

      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.

      Parameters

      • args: { limit?: number; offset?: number; project_id: string | number }

        Filter criteria including project_id (numeric or identifier), limit, offset

      Returns Promise<{ content: { text: string; type: "text" }[] }>

      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.

      Parameters

      • Optionalargs: { name?: string }

        Optional filter arguments

        • Optionalname?: string

          Optional case-insensitive substring to filter project names

      Returns Promise<{ content: { text: string; type: "text" }[] }>

      Promise resolving to formatted project data with name-to-ID mappings

    • Retrieves projects resource for MCP resource access

      Returns Promise<{ contents: { mimeType: string; text: string; uri: string }[] }>

      Promise resolving to projects resource data

    • Retrieves recent issues resource for MCP resource access

      Returns Promise<{ contents: { mimeType: string; text: string; uri: string }[] }>

      Promise resolving to recent issues resource data (last 10 updated)

    • Retrieves recent time entries resource for MCP resource access

      Returns Promise<{ contents: { mimeType: string; text: string; uri: string }[] }>

      Promise resolving to recent time entries resource data (last 10 entries)

    • Retrieves available time tracking activities for a project or globally

      Parameters

      • args: { project_id?: number }

        Activity lookup parameters

        • Optionalproject_id?: number

          Project ID to get project-specific activities (optional)

      Returns Promise<{ content: { text: string; type: "text" }[] }>

      Promise resolving to available time tracking activities

    • Retrieves time entries from Redmine with optional filtering

      Parameters

      • args: {
            activity_id?: string;
            from?: string;
            issue_id?: string;
            limit?: number;
            project_id?: string;
            spent_on?: string;
            to?: string;
            user_id?: string;
        }

        Filter parameters for time entries query

        • Optionalactivity_id?: string
        • Optionalfrom?: string

          Start date (YYYY-MM-DD format)

        • Optionalissue_id?: string

          Issue ID to filter time entries by

        • Optionallimit?: number

          Maximum number of time entries to return

        • Optionalproject_id?: string

          Project ID to filter time entries by

        • Optionalspent_on?: string
        • Optionalto?: string

          End date (YYYY-MM-DD format)

        • Optionaluser_id?: string

          User ID to filter time entries by

      Returns Promise<{ content: { text: string; type: "text" }[] }>

      Promise resolving to formatted time entries data

    • Logs time spent on an issue or project in Redmine

      Parameters

      • args: {
            activity_id: number;
            comments?: string;
            custom_fields?: { id: number; value: string | number | boolean }[];
            hours: number;
            issue_id?: number;
            project_id?: number;
            spent_on?: string;
        }

        Time logging parameters

        • activity_id: number

          Activity ID for the time entry (required)

        • Optionalcomments?: string

          Comments for the time entry

        • Optionalcustom_fields?: { id: number; value: string | number | boolean }[]
        • hours: number

          Hours to log (required)

        • Optionalissue_id?: number

          Issue ID to log time against

        • Optionalproject_id?: number

          Project ID to log time against

        • Optionalspent_on?: string

          Date when time was spent (YYYY-MM-DD format)

      Returns Promise<{ content: { text: string; type: "text" }[] }>

      Promise resolving to time entry creation confirmation

    • Starts the MCP server and connects to stdio transport

      Returns Promise<void>

      Promise that resolves when server is running

    • Sets up MCP protocol handlers for tools, resources, and prompts

      Configures the server to handle:

      • Tool execution (get_issues, create_issue, etc.)
      • Resource access (projects, recent issues, time entries)
      • Prompt responses (issue summaries, time reports)

      Returns void

    • Updates an existing issue in Redmine

      Parameters

      • args: {
            assigned_to_id?: number;
            category_id?: number;
            custom_fields?: { id: number; value: string | number | boolean }[];
            description?: string;
            done_ratio?: number;
            due_date?: string;
            estimated_hours?: number;
            fixed_version_id?: number;
            issue_id: number;
            notes?: string;
            parent_issue_id?: number;
            priority_id?: number;
            start_date?: string;
            status_id?: number;
            subject?: string;
            tracker_id?: number;
        }

        Issue update parameters

        • Optionalassigned_to_id?: number

          New assignee user ID

        • Optionalcategory_id?: number
        • Optionalcustom_fields?: { id: number; value: string | number | boolean }[]
        • Optionaldescription?: string

          New issue description

        • Optionaldone_ratio?: number

          Completion percentage (0-100)

        • Optionaldue_date?: string

          Due date in YYYY-MM-DD format

        • Optionalestimated_hours?: number
        • Optionalfixed_version_id?: number
        • issue_id: number

          ID of the issue to update (required)

        • Optionalnotes?: string

          Notes to add to the issue history

        • Optionalparent_issue_id?: number
        • Optionalpriority_id?: number

          New priority ID

        • Optionalstart_date?: string
        • Optionalstatus_id?: number

          New status ID

        • Optionalsubject?: string

          New issue subject/title

        • Optionaltracker_id?: number

      Returns Promise<{ content: { text: string; type: "text" }[] }>

      Promise resolving to success confirmation