Skip to content
Agentmart
Submit a tool

Redmine MCP Server

MCP server that lets AI assistants manage Redmine issues, projects, wikis, and time tracking

Connector by jztan · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 85
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/jztan-redmine-mcp-server

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

MCP server that lets AI assistants manage Redmine issues, projects, wikis, and time tracking

Use cases: project-management

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
37 read · 20 write · 11 delete · 1 not yet classified
Secrets
2 (API keys, tokens or passwords)
Install scripts
None found
Runs as
Python package

Tools by what they do 69

Read from the source code; the running server may list different tools.

Read 37 · Look things up without changing anything.

  • get_checklist
  • get_current_user
  • get_gantt_chart
  • get_mcp_server_info
  • get_private_notes
  • get_project_dashboard_data
  • get_project_modules
  • get_project_timeline_data
  • get_redmine_issue
  • get_redmine_news
  • get_triage_board_data
  • list_contact_tags
Show 25 more tools
  • list_crm_queries
  • list_deal_statuses
  • list_files
  • list_project_issue_custom_fields
  • list_project_members
  • list_project_trackers
  • list_redmine_issue_priorities
  • list_redmine_issue_statuses
  • list_redmine_issues
  • list_redmine_news
  • list_redmine_projects
  • list_redmine_queries
  • list_redmine_roles
  • list_redmine_trackers
  • list_redmine_users
  • list_redmine_versions
  • list_subtasks
  • list_time_entries
  • list_time_entry_activities
  • search_entire_redmine
  • search_redmine_issues
  • show_project_dashboard
  • show_project_timeline
  • show_triage_board
  • summarize_project_status

Write 20 · Create, change, send or run things.

  • add_deal_product
  • copy_issue
  • create_checklist_item
  • create_redmine_issue
  • create_upload_ticket
  • import_time_entries
  • manage_contact
  • manage_crm_note
  • manage_deal
  • manage_document
  • manage_helpdesk_ticket
  • manage_issue_note
Show 8 more tools
  • manage_product
  • manage_redmine_news
  • manage_redmine_project
  • manage_time_entry
  • send_helpdesk_email_reply
  • update_checklist_item
  • update_redmine_issue
  • upload_file

Delete 11 · Delete, drop, revoke or wipe things.

  • cleanup_attachment_files
  • delete_file
  • delete_redmine_issue
  • delete_redmine_news
  • manage_deal_category
  • manage_issue_category
  • manage_issue_relation
  • manage_issue_watcher
  • manage_project_member
  • manage_redmine_version
  • manage_redmine_wiki_page

Not yet classified 1 · We could not tell from the name and description.

  • get_redmine_attachment

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • REDMINE_API_KEY
  • REDMINE_PASSWORD

Other settings (environment variables or headers).

  • ATTACHMENTS_DIR
  • ATTACHMENT_EXPIRES_MINUTES
  • AUTO_CLEANUP_ENABLED
  • CLEANUP_INTERVAL_MINUTES
  • PUBLIC_HOST
  • PUBLIC_PORT
  • REDMINE_URL
  • REDMINE_USERNAME
  • SERVER_HOST
  • SERVER_PORT

Network hosts it talks to 2

  • github.com · found in code
  • your-redmine-server.com · found in code

Files it touches

  • /tmp/requirements-audit.txt
  • C:\\windows\\system32\\cmd.exe
  • Any path the agent passes to its tools

Tools (69)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_deal_product

    Add a product line to a RedmineUP CRM deal. The plugin recalculates the deal's ``price`` from its lines after each addition. Read the lines back with ``manage_deal(action="get", include="lines")``. Requires ``REDMINE_DEALS_ENABLED=true`` and ``REDMINE_PRODUCTS_ENABLED=true`` (the endpoint only exists when the RedmineUP Products plugin is installed next to CRM). Args: deal_id: The deal to add the line to (required). product_id: Catalogue product to add. Its description and price are used unless overridden. Optional when ``description`` is given, which creates a free-fo…

  • cleanup_attachment_files

    Clean up expired attachment files and return storage statistics. **Operator tool, gated by REDMINE_MCP_EXPOSE_ADMIN_TOOLS=true.** The background cleanup task in ``_cleanup.py`` already runs this on the configured interval (``CLEANUP_INTERVAL_MINUTES``, default 10), so an LLM agent should almost never need to invoke it. Gating it off the default MCP surface removes a piece of discovery-noise that an agent could waste a turn investigating. To expose it (for operators driving cleanup via the MCP surface), set ``REDMINE_MCP_EXPOSE_ADMIN_TOOLS=true``. Returns: A dictionary containing cleanup…

  • copy_issue

    Duplicate an existing Redmine issue with optional field overrides. Uses Redmine's native copy mechanism (``copy_from`` parameter) which preserves the original issue's fields while allowing selected overrides. Args: issue_id: ID of the source issue to copy. project_id: Target project for the new issue (ID or identifier). Defaults to the source issue's project when omitted. subject: Optional new subject for the copy. Defaults to the source issue's subject when omitted. link_original: When True (default), creates a ``copied_to``/ ``copied_from`` relation …

  • create_checklist_item

    Create a new checklist item (or section header) on a Redmine issue. Requires the RedmineUP Checklists plugin and ``REDMINE_CHECKLISTS_ENABLED=true``. This is a write operation and is blocked when ``REDMINE_MCP_READ_ONLY=true``. Set ``is_section=True`` to create a bold section header with no checkbox. Args: issue_id: The ID of the issue to add the item to. subject: The checklist item text (required, non-blank). is_section: Whether this item is a section header (default False). is_done: Initial done state (default False). position: Optional 1-based ordering position. Retur…

  • create_redmine_issue

    Create a new issue in Redmine. Open a ticket, file a bug, submit a feature request, log a support case, or report a task. Use this tool to create a single issue with a subject and optional description, plus any standard or custom fields (``tracker_id``, ``status_id``, ``priority_id``, ``assigned_to_id``, ``fixed_version_id``, ``parent_issue_id``, ``start_date``, ``due_date``, custom field values, etc.). For duplicating an existing issue see ``copy_issue``; for editing an existing issue see ``update_redmine_issue``. Compatibility notes: - Supports serialized ``fields`` payload (JSON object st…

  • create_upload_ticket

    Reserve a slot for a file on the caller's own machine, and say where to send it. Use this whenever the file to attach lives on the caller's side. It is the only route that does not put the file's bytes through the conversation: there is no way to pipe a file into a tool argument, so a ``content_base64`` payload is written out character by character by the model, and a payload of a few thousand characters does not reliably survive that (#305). Three steps: 1. Call this. It answers with ``upload_url``, ``ticket`` and ``expires_at``. 2. Send the file to ``upload_url`` in one HTTP request, w…

  • delete_file

    Delete a file from a Redmine project. **Important:** Redmine's ``DELETE /attachments/{id}.json`` endpoint removes ANY attachment by ID, not just project files. If ``file_id`` refers to an issue/wiki attachment (e.g., from ``get_redmine_issue(include_attachments=True)``), that attachment will be deleted from its issue. To avoid accidentally removing issue attachments when you meant to remove a project file, the tool verifies the target attachment is project-scoped (its ``container_type`` is ``Project``) before deleting. Pass ``confirm_delete_any_attachment=True`` to bypass this check when you…

  • delete_redmine_issue

    Hard-delete an issue via ``DELETE /issues/{id}.json``. Issue deletion in Redmine is **irreversible** and cascades to the issue's children (subtasks), journals (comments), attachments, time entries, and inbound relations from issues that referenced it. To prevent accidental destruction, this tool refuses unless the caller passes ``confirm_delete=True``; the refusal envelope includes a structured ``impact`` preview (counts of cascaded items) so a caller can decide whether to proceed. If the issue has subtasks, ``confirm_delete=True`` alone is not enough -- the tool also requires ``confirm_dele…

  • delete_redmine_news

    Hard-delete a news item via ``DELETE /news/{id}.json``. Deletion is **irreversible** and takes the item's comments and attachments with it. Like the other destructive tools here, this one refuses unless ``confirm_delete=True``, and the refusal carries a preview of what would be lost. Needs a Redmine that exposes the news write endpoints, as core Redmine has since 4.1. For the other operations use ``manage_redmine_news`` (create, update), ``get_redmine_news`` or ``list_redmine_news``. Args: news_id: ID of the news item to delete. confirm_delete: When ``False`` (default), the tool ref…

  • get_checklist

    Retrieve all checklist items for a Redmine issue. Requires the RedmineUP Checklists plugin and ``REDMINE_CHECKLISTS_ENABLED=true``. Args: issue_id: The ID of the issue whose checklist to retrieve. Returns: A dictionary with an ``items`` list of checklist item dicts, each containing ``id``, ``subject``, ``is_done``, ``position``, ``created_at``, and ``updated_at``. Also includes ``total_count``. Returns an error dict if the plugin is disabled or on failure.

  • get_current_user

    Retrieve the currently authenticated user's profile. Resolves to ``GET /users/current.json`` under the hood. Works for any authenticated user, not admin-only. Useful when an LLM needs to identify "me" — for example, when a user says "log 2h on this issue for me", the LLM can call this tool to get the current user's ID. With ``include_memberships`` it also answers "which projects am I a member of, and with which roles" in that same request. The only other way to get that is ``list_project_members`` once per project. Each membership is ``{id, project: {id, name}, roles: [{id, name}]}``. A rol…

  • get_gantt_chart

    Retrieve project timeline (Gantt) data: issues with dates, dependencies, and milestones. Composite tool that aggregates ``GET /issues.json`` (with relations) and ``GET /projects/{id}/versions.json`` into a single structured response suitable for timeline analysis. Returns structured data, not an image. Use cases: "What's the current timeline for project X?", "Which issues are overdue?", "Show me the dependency chain on this project". Uses the core Redmine REST API only — no plugin required. Performance note: Redmine paginates issues at 25 per HTTP call by default, so a request for ``limit=…

  • get_mcp_server_info

    Return the MCP server's version, enabled-feature flags, and current user. Use this tool to: - Detect deployment lag: compare ``server_version`` against the release you expect before relying on a recently-shipped fix. - Understand who ``"me"`` resolves to: ``current_user`` shows the identity behind the configured API key. When a shared or robot API key is in use, ``assigned_to_id="me"`` will match **that** account, not the human operator — call this tool first if issue queries assigned to "me" return unexpectedly empty results. - Check which plugin-gated tool families are active. R…

  • get_private_notes

    Retrieve only the private notes/journals of a Redmine issue. Fetches the issue's journals and filters for entries where ``private_notes`` is true. The authenticated user must have the "View private notes" permission for non-empty results. Args: issue_id: ID of the issue. include_journal_values: Return the before/after text of any field changes on these journals in full rather than by length. See ``get_redmine_issue`` for why the default is ``False``. Returns: List of private journal dictionaries, each containing ``id``, ``user``, ``notes``, ``created_on``, an…

  • get_project_dashboard_data

    Backend data source for the project dashboard's Refresh button. Returns the same payload as ``show_project_dashboard`` without a UI resource; the dashboard's iframe calls this over ``tools/call``. Pass the same arguments the dashboard was opened with, so a refresh redraws the same view. Read-only. Args: project_id: The project whose dashboard is being refreshed, as a numeric ID or string identifier (e.g. ``1`` or ``"web"``). filters: Optional extra Redmine filter dict, the same shape ``list_redmine_issues`` accepts (e.g. ``{"tracker_id": 1}``).

Show 54 more tools
  • get_project_modules

    Retrieve the enabled modules for a Redmine project. Modules control which features are visible/usable in a project (e.g., ``issue_tracking``, ``time_tracking``, ``wiki``, ``repository``). Args: project_id: Project identifier (numeric ID or string identifier). Returns: Dictionary with ``project_id``, ``project_name`` and ``enabled_modules`` (list of module name strings). On failure a dict with an ``"error"`` key is returned. Example: >>> await get_project_modules("my-project") { "project_id": 1, "project_name": "My Project", "enabled_modules":…

  • get_project_timeline_data

    Backend data source for the project timeline's Refresh button. Returns the same payload as ``show_project_timeline`` without a UI resource; the timeline's iframe calls this over ``tools/call`` with the arguments the view was opened with. Read-only. Args: project_id: The project whose timeline is being refreshed, as a numeric ID or string identifier (e.g. ``1`` or ``"web"``). start_date: Optional window start, ``YYYY-MM-DD``. end_date: Optional window end, ``YYYY-MM-DD``. filters: Optional extra Redmine filter dict, the same shape ``list_redmine_issues`` accept…

  • get_redmine_attachment

    Download a Redmine attachment and return a usable reference to it. Downloads the attachment to local disk and returns either an HTTP URL (when the server has a publicly reachable hostname configured) or an absolute local file path (in stdio mode). The caller does not need to know which mode is active. **HTTP mode** (any explicit ``PUBLIC_HOST``, or a non-loopback ``SERVER_HOST``): Returns a dict with ``uri``, ``uri_type: "http"``, filename, content_type, size, expires_at, and attachment_id. An explicit ``PUBLIC_HOST=localhost`` also selects this mode so Docker port-forwarded deployments prod…

  • get_redmine_issue

    Retrieve a specific Redmine issue by ID. Fetch issue details, view a ticket, show a bug report, get issue with comments, journals, attachments, or related metadata. Use this tool to pull a single issue with full context: comments (journals), attachments, custom fields, watchers, relations, subtasks/children, and (when ``REDMINE_AGILE_ENABLED=true``) agile metadata. For listing or filtering across multiple issues see ``list_redmine_issues``; for text search across issues see ``search_redmine_issues``. Args: issue_id: The ID of the issue to retrieve include_journals: Whether to include…

  • get_redmine_news

    Retrieve one news item, with its comments and attachments. Args: news_id: ID of the news item. include_comments: Include the comment thread (default ``True``). Comments are where a discussion about an announcement lives, so they are on by default -- unlike the issue tools, a news item without them is usually just three fields. include_attachments: Include attachment metadata (default ``True``). Returns: A news dictionary; ``comments`` and ``attachments`` are present only when requested *and* non-empty. On failure, a dict with an ``"error"`` key…

  • get_triage_board_data

    Backend data source for the triage board's Refresh button. Returns the same payload as ``show_triage_board`` without a UI resource; the board's iframe calls this over ``tools/call``. Pass the same arguments the board was opened with, so a refresh redraws the same view. Read-only. Args: project_id: The project whose board is being refreshed, as a numeric ID or string identifier (e.g. ``1`` or ``"testing-project1"``). filters: Optional extra Redmine filter dict, the same shape ``list_redmine_issues`` accepts (e.g. ``{"assigned_to_id": "me"}`` or ``{"trac…

  • import_time_entries

    Bulk import multiple time entries in a single call. **Use this tool (NOT ``manage_time_entry(action="create")`` in a loop) whenever the user asks to:** - import a timesheet / weekly timesheet / monthly report - bulk log, batch log, or log multiple entries at once - import several entries, or any list of 2+ time entries - backfill time across many issues or dates - log the same activity for multiple team members at once - log a day's work spanning multiple issues **Prefer this tool over calling ``manage_time_entry(action="create")`` N times** -- it reports partial fail…

  • list_contact_tags

    List the tags in use on RedmineUP CRM contacts. Use it to discover valid names for the ``tags`` filter of ``manage_contact(action="list")`` and for ``tag_list`` on create/update. Requires ``REDMINE_CRM_ENABLED=true``. Returns: A list of ``{id, name, color}`` ordered by name, or ``{"error": ...}``.

  • list_crm_queries

    List saved RedmineUP CRM queries for contacts or deals. Saved queries are the named filters users build in the CRM's contact and deal lists. Available with ``REDMINE_CRM_ENABLED`` (``contact``) or ``REDMINE_DEALS_ENABLED`` (``deal``). Args: object_type: ``contact`` or ``deal``. limit: Queries per call, 1 to 100 (default 25). offset: Paging offset (default 0). Returns: A list of ``{id, name, is_public, project_id}`` (``project_id`` is ``None`` for global queries), or ``{"error": ...}``.

  • list_deal_statuses

    List RedmineUP CRM deal statuses, and a project's deal categories. Call this before ``manage_deal(action="create")``, which requires a numeric ``status_id`` and accepts an optional ``category_id``. Requires ``REDMINE_DEALS_ENABLED=true`` and the CRM plugin, Pro edition. Args: project_id: Optional project identifier or id. When given, the project's deal categories are returned as well (categories are defined per project). Returns: ``statuses``: list of ``{id, name, position, is_default, status_type (open|won|lost), status_type_id, color}`` ordered by position…

  • list_files

    List all files uploaded to a Redmine project. Returns file metadata (id, filename, size, content type, description, download URL, author, optional version/release) for every file uploaded under Project > Files. Note: This lists files from Redmine's core "Files" module (enabled per project via Settings > Modules > Files). It does NOT list issue attachments (use ``get_redmine_issue`` with ``include_attachments=True`` for those) and does NOT list DMSF documents (pending separate tools). Args: project_id: Project identifier (numeric ID or string identifier). Returns: A list of file met…

  • list_project_issue_custom_fields

    List the ids and names of the issue custom fields enabled for a project. Against a stock Redmine only ``id`` and ``name`` carry data. ``field_format``, ``is_required``, ``multiple``, ``default_value``, ``possible_values`` and ``trackers`` come back ``null``, meaning "not readable on this token" -- ``null`` is not ``false`` and not an empty list. In particular ``is_required: null`` does not mean a field is optional, so a create or update can still reject on a field listed here. To set a field, key it in ``fields`` by name or as ``cf_<id>`` with an id from here, or pass ``extra_fields={"custom_…

  • list_project_members

    List members of a Redmine project. Returns all users and groups that are members of the specified project, along with their assigned roles. A role that comes from a group the user belongs to, or from the parent project when this one inherits members, carries ``inherited: true``; Redmine omits the key for a role held directly, and so does this tool -- so test for the key, do not expect ``inherited: false``. A role held both ways appears twice on the same row, once with the key and once without. Args: project_id: Project identifier (ID number or string identifier) Returns: A list of …

  • list_project_trackers

    List the trackers (issue types) enabled for a specific Redmine project. Unlike ``list_redmine_trackers`` (which returns every tracker defined in the instance), this returns only the trackers available on the given project. Use it to discover valid ``tracker_id`` values before creating an issue in that project. Args: project_id: Project identifier (numeric id or string identifier). Returns: A list of tracker dicts with ``id`` and ``name``. On failure, a list containing a single dict with an ``"error"`` key. Examples: >>> await list_project_trackers("my-project") [{"id": …

  • list_redmine_issue_priorities

    List all issue priority levels defined in the Redmine instance. Use this tool to discover valid ``priority_id`` values before calling ``create_redmine_issue`` or ``update_redmine_issue``. Returns: A list of priority dictionaries with ``id``, ``name``, ``active``, and ``is_default``. On failure, a dict with an ``"error"`` key. Example: >>> await list_redmine_issue_priorities() [ {"id": 1, "name": "Low", "active": True, "is_default": False}, {"id": 2, "name": "Normal", "active": True, "is_default": True}, {"id": 3, "name": "High", "active": True, "i…

  • list_redmine_issue_statuses

    List all issue statuses defined in the Redmine instance. Use this tool to discover valid ``status_id`` values before calling ``update_redmine_issue``. You can also pass a status name via the ``status_name`` field in ``update_redmine_issue``, which internally resolves the ID. Returns: A list of status dictionaries with ``id``, ``name``, and ``is_closed`` (whether this status counts as "closed"). On failure, a dict with an ``"error"`` key. Example: >>> await list_redmine_issue_statuses() [ {"id": 1, "name": "New", "is_closed": False}, {"id": 2, "name": "In …

  • list_redmine_issues

    List Redmine issues with flexible filtering and pagination support. A general-purpose tool for listing issues from Redmine. Supports filtering by project, status, assignee, tracker, priority, and any other Redmine issue filter. Use this to list all issues in a project, find unassigned issues, or apply any combination of filters. A call with no filter returns the open issues of every project the caller can see, 25 per call, each with its full description. Scope a read with ``project_id`` or another filter, and pass ``fields`` when descriptions are not needed. Args: project_id: Filter by …

  • list_redmine_news

    List Redmine news (project announcements), newest first. Without ``project_id`` this spans every project the caller can see. Comments and attachments are not included -- the list endpoint does not serve them; use ``get_redmine_news`` for one item's full context. Args: project_id: Restrict to one project (numeric ID or string identifier). Redmine narrows the collection server-side, and answers 404 for a project that does not exist. limit: Maximum news items to return (default 25, max 100). offset: Items to skip, for paging. Returns: A list of news dictionaries…

  • list_redmine_projects

    Lists accessible projects in Redmine. Returns ONLY active projects unless ``filters`` says otherwise. Redmine's ``ProjectQuery`` starts out with a ``status = 1`` filter already set, so a call that passes no ``status`` answers with active projects alone while looking like the whole list. Pass ``filters={"status": "1|5"}`` to get closed projects alongside active ones. ``status`` takes only the ``=`` and ``!`` operators, so ``"*"`` is not a way to ask for every status -- it would be read as a literal value and match nothing. ``filters`` narrows the collection server-side. A filter Redmine canno…

  • list_redmine_queries

    List all saved custom queries visible to the current user. Custom queries are saved issue filters (defined via the Redmine web UI). Once discovered, the ``id`` can be passed to ``list_redmine_issues`` via a ``query_id`` filter to run the query. Note: This tool only READS queries. Redmine's REST API does not support creating, updating, or deleting saved queries. Returns: A list of query dictionaries with ``id``, ``name``, ``is_public``, and ``project_id`` (may be ``None`` for cross-project queries). On failure, a dict with an ``"error"`` key. Example: >>> await list_redm…

  • list_redmine_roles

    List all roles defined in the Redmine instance. Returns basic role metadata (``id`` and ``name``) for every role configured in Redmine. Use this tool BEFORE calling ``add_project_member`` or ``update_project_member`` to discover the correct ``role_ids`` — role IDs vary between Redmine instances and must not be guessed. Returns: A list of role dictionaries, each with ``id`` and ``name``. On failure, a dict with an ``"error"`` key. Example: >>> await list_redmine_roles() [ {"id": 3, "name": "Manager"}, {"id": 4, "name": "Developer"}, {"id": 5, "name": "…

  • list_redmine_trackers

    List all trackers (issue types) defined in the Redmine instance. Trackers classify issues (e.g., Bug, Feature, Support). Use this tool to discover valid ``tracker_id`` values before calling ``create_redmine_issue`` or ``update_redmine_issue``. Returns: A list of tracker dictionaries with ``id``, ``name``, and ``description``. On failure, a dict with an ``"error"`` key. Example: >>> await list_redmine_trackers() [ {"id": 1, "name": "Bug", "description": ""}, {"id": 2, "name": "Feature", "description": ""}, {"id": 3, "name": "Support", "description": ""…

  • list_redmine_users

    List Redmine users with optional filtering. Admin permission is required to list all users. Non-admin users may receive a 403. Use this tool to discover valid user IDs (e.g., for assignment, watchers, or time-entry authoring). Args: name: Optional case-insensitive substring to filter by (matches against login, firstname, lastname, and email). group_id: Optional group ID to filter users who belong to a specific group. limit: Maximum users to return (default 25, max 100). offset: Pagination offset. Default 0. Returns: A list of user dictionaries with ``id``…

  • list_redmine_versions

    List versions (roadmap milestones) for a Redmine project. Args: project_id: The project ID (numeric) or identifier (string). status_filter: Optional filter by version status. Allowed values: open, locked, closed. When None, all versions are returned. Returns: A list of version dictionaries. On failure, a dict with an ``"error"`` key is returned (callers should check ``isinstance(result, dict)`` to distinguish failure from an empty list).

  • list_subtasks

    List subtasks (child issues) of a given Redmine issue. Retrieves all issues whose ``parent_issue_id`` equals the given ``issue_id``. To create a new subtask, use ``create_redmine_issue`` with the ``parent_issue_id`` field set. Args: issue_id: ID of the parent issue. Returns: List of child issue dictionaries. On failure a list containing a single dictionary with an ``"error"`` key is returned.

  • list_time_entries

    List time entries from Redmine with filtering and pagination. Retrieve time entries with optional filtering by project, issue, user, and date range. Supports pagination for handling large result sets. Args: project_id: Filter by project (ID number or string identifier). issue_id: Filter by issue ID. user_id: Filter by user ID. Accepts a numeric user ID or the literal string ``"me"`` (retrieves the currently authenticated user's entries). Arbitrary strings are rejected at the FastMCP boundary. from_date: Start date filter (YYYY-MM-DD format). to_dat…

  • list_time_entry_activities

    List available time entry activities from Redmine. Returns activity types that can be used when creating or updating time entries (e.g., Development, Design, Testing). When called without ``project_id``, returns all global activity types. When called with ``project_id``, returns project-specific activities via ``GET /projects/:id.json?include=time_entry_activities`` (Redmine 3.4.0+). Project-specific IDs differ from global ones — always use project-scoped activities when logging time against a specific project to avoid ``"Activity is not included in the list"`` errors. Args: project_id…

  • manage_contact

    RedmineUP CRM (Contacts) plugin tool. Combined CRUD-by-action. Actions: ``list``, ``get``, ``create``, ``update``, ``delete``, ``assign_to_project``, ``remove_from_project``. Requires ``REDMINE_CRM_ENABLED=true`` and the RedmineUP CRM plugin. One flat signature serves every action, so most parameters apply to some actions and are ignored by the rest. ``search``, ``tags`` and ``assigned_to_id`` narrow a ``list`` on every CRM build. The contact attributes narrow one only on the plugin's Pro build, which registers them as query filters; the Light build registers ``tags`` and nothing else, and…

  • manage_crm_note

    RedmineUP CRM notes on contacts and deals. Combined CRUD-by-action. Notes are the CRM's activity log ("called them", "sent proposal"). Available when ``REDMINE_CRM_ENABLED`` or ``REDMINE_DEALS_ENABLED`` is set; a note on a deal additionally needs deals enabled and a note on a contact needs CRM enabled. There is no list action: read a parent's notes with ``manage_deal(action="get", include="notes")``. Args: action: ``get``, ``create``, ``update`` or ``delete``. note_id: Required by every action except ``create``. source_type: ``create`` only, required: ``contact`` or ``deal``. …

  • manage_deal

    RedmineUP CRM (Deals) plugin tool. Combined CRUD-by-action. Actions: ``list``, ``get``, ``create``, ``update``, ``delete``. Requires ``REDMINE_DEALS_ENABLED=true`` and the RedmineUP CRM plugin. One flat signature serves every action, so most parameters apply to some actions and are ignored by the rest. Which is which: Args: action: Which operation to run. project_id: On ``list``, restrict to deals in this project. On ``create``, the project to file the new deal under (required). search: ``list`` only. Free-text search over the deal name. status_id: **``list`` return…

  • manage_deal_category

    List, create, rename, or delete RedmineUP CRM deal categories. Categories are defined per project and referenced by ``category_id`` on deals. Requires ``REDMINE_DEALS_ENABLED=true``; writes need the plugin's ``manage_deals`` permission. Args: action: ``list``, ``create``, ``update`` or ``delete``. project_id: Required for ``list`` and ``create``. category_id: Required for ``update`` and ``delete``. name: Required for ``create`` and ``update``; at most 30 characters and unique within the project. reassign_to_id: ``delete`` only. Category to move the deleted …

  • manage_document

    Manage DMSF documents (list / get / create / update). Requires the ``redmine_dmsf`` plugin and ``REDMINE_DMSF_ENABLED=true``. Actions: * ``list`` — list documents in a project (or a DMSF folder). * ``get`` — fetch a single document's metadata by ID. * ``create`` — upload a new document. Two-step under the hood: ``POST /uploads.json`` → token, then ``POST /projects/{id}/dmsf/commit.json``. Accepts file content as ``content_base64`` (capped at 50 MiB decoded). DMSF's commit response only …

  • manage_helpdesk_ticket

    Read a RedmineUP Helpdesk ticket, or change its customer contact. Actions: ``get`` (read-only) and ``set_contact``. ``get`` returns the Helpdesk data ``get_redmine_issue`` does not carry: the ticket's ``contact`` (``{id, name}``), ``from_address`` (where replies go), ``to_address``, ``cc_address``, ``message_id``, ``source``, ``is_incoming``, ``ticket_date``, the response-time metrics, ``vote``, ``vote_comment`` and ``content`` (the customer's original message). Customer-controlled text is wrapped in boundary tags. ``set_contact`` moves the ticket to another existing contact, given either `…

  • manage_issue_category

    List, create, update, or delete a Redmine issue category. Args: action: One of: ``list``, ``create``, ``update``, ``delete``. project_id: Project ID or identifier. Required for ``list`` and ``create``. category_id: Category ID. Required for ``update`` and ``delete``. name: Category name. Required for ``create``, optional for ``update`` (cannot be blank). assigned_to_id: Default assignee user ID. Optional for ``create`` and ``update``. reassign_to_id: Reassign existing issues to this category ID on ``delete``. Optional. Returns: ``li…

  • manage_issue_note

    Edit text or toggle privacy of a Redmine journal (issue note). Both actions are writes and are blocked in read-only mode. Args: action: One of: ``edit``, ``set_private``. journal_id: ID of the journal entry (required for both actions). notes: New notes text for ``edit``; may be an empty string to clear the note. Mutually exclusive with ``notes_upload_id``, and one of the two is required. notes_upload_id: Take the new note from a file staged with ``create_upload_ticket``, decoded as UTF-8. **Prefer this for a long note**: the text travels from d…

  • manage_issue_relation

    List, create, or delete a Redmine issue relation. Args: action: One of: ``list``, ``create``, ``delete``. issue_id: Source issue ID. Required for ``list`` and ``create``. issue_to_id: Target issue ID. Required for ``create``. relation_id: Relation ID. Required for ``delete``. relation_type: One of: ``relates``, ``duplicates``, ``duplicated``, ``blocks``, ``blocked``, ``precedes``, ``follows``, ``copied_to``, ``copied_from``. Defaults to ``relates`` for ``create``. delay: Delay in days for ``precedes`` / ``follows`` relations. Returns: ``lis…

  • manage_issue_watcher

    Add or remove a watcher on a Redmine issue. Requires Redmine 2.3.0+. Args: action: One of: ``add``, ``remove``. issue_id: ID of the issue. user_id: ID of the user to add or remove as a watcher. Returns: ``{"success": True, "issue_id": ..., "user_id": ...}`` on success. On error: ``{"error": "..."}``.

  • manage_product

    RedmineUP Products plugin tool. Combined CRUD-by-action. Actions: ``list``, ``get``, ``create``, ``update``. The plugin exposes no delete endpoint, so there is no ``delete`` action. Requires ``REDMINE_PRODUCTS_ENABLED=true`` and the RedmineUP Products plugin. One flat signature serves every action, so most parameters apply to some actions and are ignored by the rest. The two write actions do not take their payload the same way: ``create`` reads the flat parameters below, while ``update`` reads ``fields`` and ignores every flat one. Args: action: Which operation to run. project_id: O…

  • manage_project_member

    Add, update, or remove a Redmine project membership. Args: action: Operation to perform. One of: ``add``, ``update``, ``remove``. project_id: Project ID or identifier. Required for ``action="add"``. membership_id: Membership ID. Required for ``action="update"`` and ``action="remove"``. user_id: User ID. Exactly one of ``user_id`` or ``group_id`` required for ``action="add"``. group_id: Group ID. Exactly one of ``user_id`` or ``group_id`` required for ``action="add"``. role_ids: Non-empty list of role IDs. Required for ``action="add"`` an…

  • manage_redmine_news

    Create or update a Redmine news item (project announcement). Needs a Redmine that exposes the news write endpoint -- core Redmine has since 4.1. A server without it answers with an error rather than silently doing nothing. Deleting is a separate tool, ``delete_redmine_news``, so a deployment can offer announcements without offering their destruction. Args: action: One of ``create``, ``update``. project_id: Project to announce in. Required for ``create``; ignored by ``update``, since news cannot move between projects. news_id: Item to change. Required for ``update``. …

  • manage_redmine_project

    Create a Redmine project, edit its settings, or close and reopen it. Use this tool to set up a new project, rename one, change its description, homepage, parent, visibility, enabled modules, trackers or custom field values, or to close a finished project and reopen it later. A closed project stays visible and readable but accepts no edits. This tool writes the project record itself. Its contents have their own tools: ``manage_redmine_version`` for versions, ``manage_project_member`` for memberships, ``manage_issue_category`` for issue categories. Archiving is not offered. Redmine gates ``ar…

  • manage_redmine_version

    Create, update, or delete a Redmine version (milestone/roadmap entry). Args: action: Operation to perform. One of: ``create``, ``update``, ``delete``. project_id: Project ID or string identifier. Required for ``action="create"``. version_id: Numeric version ID. Required for ``action="update"`` and ``action="delete"``. name: Version name. Required for ``action="create"``, optional for ``action="update"``. description: Version description text. status: Version status. Allowed values: ``open``, ``locked``, ``closed``. Defaults to ``…

  • manage_redmine_wiki_page

    List, get, create, update, delete, or rename a Redmine wiki page. Args: action: One of: ``list``, ``get``, ``create``, ``update``, ``delete``, ``rename``. project_id: Project identifier (required for all actions). wiki_page_title: Wiki page title. Required for all actions except ``list``. version: Specific version to retrieve (``get`` only, optional). include_attachments: Include attachment metadata in ``get`` response. Default ``True``. text: Page content. Required for ``create``. Required for ``update`` unless ``uploads`` is given, in …

  • manage_time_entry

    Create or update a Redmine time entry. Args: action: One of: ``create``, ``update``. hours: Hours spent. Required for ``create``; optional for ``update`` (must be positive if provided). project_id: Project to log against. Required for ``create`` if ``issue_id`` is not provided. issue_id: Issue to log against. Required for ``create`` if ``project_id`` is not provided. user_id: Log on behalf of this user (``create`` only). Requires ``log_time_for_other_users`` permission. time_entry_id: Entry to update. Required for ``update``. activit…

  • search_entire_redmine

    Search for issues, wiki pages and news across the Redmine instance. Args: query: Text to search for. Case sensitivity controlled by server DB config. resources: Filter by resource types. Allowed: ['issues', 'wiki_pages', 'news']. Default: None (searches all three) limit: Maximum number of results to return (max 100) offset: Pagination offset for server-side pagination Returns: Dictionary containing search results, counts, and metadata. On error, returns {"error": "message"}. Note: Only 'issues', 'wiki_pages' and 'news' are supported; Redmine se…

  • search_redmine_issues

    Search Redmine issues matching a query string with pagination support. Performs text search across issues using the Redmine Search API (/search.json), then transparently hydrates the matching ids via /issues.json so structured fields (subject, status, priority, project, assigned_to, author, timestamps) are populated in the response. The follow-up fetch is skipped when ``fields`` only requests id and/or description, which /search.json can serve on its own. Supports server-side pagination to prevent MCP token overflow. Args: query: Text to search for in issues. limit: Maximum number o…

  • send_helpdesk_email_reply

    Email a reply to the customer of a Helpdesk ticket. Unlike ``update_redmine_issue(notes=...)``, which only adds an internal journal, this sends ``content`` as an outgoing email to the ticket's requester and records it on the ticket. The email cannot be recalled once sent, so confirm the wording before calling. Works only on a Helpdesk ticket, meaning an issue with a customer attached. The plugin's endpoint checks no project role or permission (per a reading of its 4.2.9 controller in #301), so any authenticated Redmine user can send through it. Requires the RedmineUP Helpdesk plugin and ``R…

  • show_project_dashboard

    Show a live project dashboard (health snapshot) for a project. Use this whenever the user wants an overview, snapshot, health check, or "how is project X doing" view: open vs closed counts, overdue and due-this-week issues, an open-by-priority breakdown, and recent activity. Natural requests include: "how is <project> doing", "show the dashboard for <project>", "project overview / health / status at a glance", or "what needs attention in <project>". Renders an interactive dashboard in clients that support MCP Apps; other clients receive the same structured data. Prefer ``summarize_project_st…

  • show_project_timeline

    Show a project's schedule as an interactive timeline (Gantt view). Use this when the user wants a timeline, schedule, roadmap, or Gantt view, or asks when a version ships or what is planned over a period: "show the timeline for <project>", "what is the schedule this quarter", "when does v3.0 ship". Issues are drawn as bars from their start and due dates, grouped by target version, with a milestone on each version's due date and a Done section for recently closed work. Renders in clients that support MCP Apps; other clients receive the same structured data. Prefer ``get_gantt_chart`` for raw …

  • show_triage_board

    Show a project's issues as a live, interactive board (Kanban view). Use this whenever the user wants to see, view, browse, open, or triage a project's issues visually instead of as a text list. Natural requests that should call this tool include: "show me the board", "open the issue board for <project>", "give me a kanban / board view", "let me see project X's issues", "triage <project>", "what's the status breakdown for <project>", or any ask to display, visualize, or get an overview of a project's issues. Renders the issues grouped into columns by status in clients that support interactive…

  • summarize_project_status

    Provide a summary of project status based on issue activity over the specified time period. Args: project_id: The ID of the project to summarize days: Number of days to look back for analysis. Defaults to 30. Returns: A dictionary containing project status summary with issue counts, activity metrics, and trends. On error, returns a dictionary with an "error" key.

  • update_checklist_item

    Update a checklist item's text, done state, or position. Requires the RedmineUP Checklists plugin and ``REDMINE_CHECKLISTS_ENABLED=true``. This is a write operation and is blocked when ``REDMINE_MCP_READ_ONLY=true``. Args: checklist_item_id: The ID of the checklist item to update. subject: New text for the checklist item (optional). is_done: New done state (optional). position: New position/order (optional). Returns: A success dict with the updated fields, or an error dict on failure.

  • update_redmine_issue

    Update an existing Redmine issue. In addition to standard Redmine fields, a ``status_name`` key may be provided in ``fields``. When present and ``status_id`` is not supplied, the function will look up the corresponding status ID and use it for the update. When ``REDMINE_AGILE_ENABLED=true``, RedmineUP Agile fields may also be set: ``story_points``, ``agile_sprint_id`` (set to ``0``/null to remove the issue from its sprint), and ``position`` (also accepted as ``agile_position``). Each may be given top-level in ``fields`` or nested under an ``agile_data_attributes`` dict. They are routed to th…

  • upload_file

    Upload a file to a Redmine project's Files section. This is the project's document store, not an attachment on something. To attach a file to an issue, pass ``uploads`` to ``create_redmine_issue`` or ``update_redmine_issue``; to a wiki page, to ``manage_redmine_wiki_page``. All three take the same content sources as this tool. **Content sources — provide exactly ONE of:** - ``upload_id``: a file already staged with ``create_upload_ticket``. **The way to send a file that lives on the caller's own machine.** The caller POSTs the bytes to the ticket's ``upload_url`` in one HTTP request, …

Signals

Stars
85
Forks
42
Open issues
3
Contributors
20
Weekly downloads
492
Last commit
Oct 17, 2026 (12 days ago)
Last release
Oct 17, 2026 (12 days ago)
Last package publish
Oct 17, 2026 (12 days ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.jztan/redmine-mcp-server
Version
2.19.0
Auth
API key
Packages
pypi redmine-mcp-server
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from jztan

Cite this page

Redmine MCP Server. Agent Mart. https://agentmart.dev/connectors/jztan-redmine-mcp-server (last updated 2026-10-24)