# OpenProject [Health: Active]

**Category:** 📋 Product Management  
**Repository:** https://github.com/kar-thik/openproject-mcp  
**GitHub Stars:** 6  
**Views:** 4  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/openproject

## Description
72 tools for the OpenProject API v3: work packages, attachments, git activity, time, reporting

## Tools
Capabilities this server exposes over MCP:

- **search_work_packages** — Find work packages by text when you do not know their ids.
- **list_work_packages** — List work packages with structured filters — the workhorse read tool.
- **get_work_package** — Read one work package in full: description, dates, custom fields, parent and progress.
- **create_work_package** — Create a work package, validated through OpenProject's own form endpoint first.
- **update_work_package** — Change any writable field of a work package, with optimistic locking.
- **bulk_update_work_packages** — Preview or apply up to 50 updates with per-item diffs, validation and conflict results.
- **delete_work_package** — Permanently delete a work package and everything attached to it.
- **list_work_package_comments** — Read the comment thread and change history of a work package.
- **add_work_package_comment** — Post a comment on a work package.
- **edit_work_package_comment** — Rewrite the text of an existing work-package comment.
- **add_work_package_watcher** — Subscribe a user to a work package's notifications.
- **remove_work_package_watcher** — Unsubscribe a user from a work package's notifications.
- **create_work_package_relation** — Link two work packages (blocks, follows, duplicates, relates, ...).
- **update_work_package_relation** — Change an existing relation's type, lag or description.
- **delete_work_package_relation** — Remove the link between two work packages.
- **toggle_comment_reaction** — React to a work-package comment with an emoji, or take the reaction back.
- **set_work_package_reminder** — Set, change or clear your personal reminder on a work package.
- **list_reminders** — List your own upcoming work-package reminders.
- **execute_custom_action** — Run an instance-defined one-click action on a work package.
- **list_attachments** — List the files attached to one container.
- **download_attachment** — Download an attachment's bytes to a file on the machine running this server.
- **upload_attachment** — Attach a local file to a work package, wiki page, meeting, document, budget or comment.
- **delete_attachment** — Permanently delete one attached file from OpenProject.
- **list_file_links** — List the external-storage files (Nextcloud, OneDrive/SharePoint) linked to a work package.
- **get_work_package_git_activity** — Show the code behind a work package: commits, pull/merge requests and CI status.
- **get_github_pull_request** — Read one linked GitHub pull request in full, including its CI check runs.
- **list_projects** — List projects, filtered server-side, one page at a time.
- **get_project** — Read one project in full.
- **create_project** — Create a project, validated through OpenProject's own form endpoint first.
- **update_project** — Change a project's name, description, visibility, parent, status or archived state.
- **delete_project** — Schedule the permanent deletion of a project and everything inside it.
- **copy_project** — Copy a project — its settings, and optionally its work packages — into a new one.
- **get_job_status** — Check whether a background job (a project copy, a scheduled deletion) has finished.
- **set_project_favorite** — Add or remove a project from the authenticated user's favorites (OpenProject 17+).
- **list_project_phase_definitions** — List the instance-wide phase catalog (Initiating, Planning, ...) with start/finish gates (OpenProject 16.1+).
- **get_project_phase** — Read one project's phase record; ids come from a work package's `project_phase` reference.
- **list_queries** — List the saved work-package views (queries) this user can open.
- **run_query** — Run a saved view and get its work packages as they are right now.
- **save_query** — Save a filter set as a reusable OpenProject view the whole team can open.
- **list_notifications** — Read the authenticated user's OpenProject inbox.
- **mark_notifications** — Mark specific notifications read (or unread) in one bulk request.
- **mark_all_notifications_read** — Mark everything matching the filters as read — the whole inbox by default.
- **list_time_entries** — List logged time, filtered server-side, with an optional accurate total.
- **log_time** — Book time against a work package or a project.
- **update_time_entry** — Correct an existing time entry.
- **delete_time_entry** — Permanently delete a logged time entry.
- **list_versions** — List versions (releases, milestones, sprints) you can assign work packages to.
- **list_sprints** — List sprints (Scrum timeboxes) you can plan work packages into.
- **get_sprint** — Read one sprint in full: dates, workspace and lifecycle status.
- **create_version** — Create a version (release, milestone or sprint) inside a project.
- **update_version** — Change a version's name, dates, description, status or sharing.
- **delete_version** — Permanently delete a version.
- **search_principals** — Find users, groups and placeholder users, and get their ids.
- **get_user** — Read one user's profile: name, login, email, admin flag and status.
- **list_memberships** — List who has access to which project, and with which roles.
- **create_membership** — Grant a principal one or more roles in a project.
- **update_membership** — Replace the roles of an existing membership.
- **delete_membership** — Revoke a principal's access to a project.
- **list_roles** — List the roles this instance defines, with their ids.
- **get_instance_info** — Check the OpenProject connection and report what this instance supports.
- **get_project_metadata** — List the ids and names (types, statuses, priorities, ...) that are actually valid on this instance.
- **get_work_package_schema** — Show which fields a work package of this type accepts in this project.
- **list_permissions** — List what the authenticated user is allowed to do, globally or in one project.
- **enable_tool_group** — Re-enable a tool group hidden by `OPENPROJECT_MCP_PROFILE=core` for this session; never calls OpenProject.
- **list_meetings** — List meetings: what is coming up, what already ran.
- **get_meeting** — Read one meeting in full: participants, the agenda, and any recorded outcomes.
- **create_meeting** — Schedule a meeting in a project and optionally invite participants.
- **update_meeting** — Change a meeting's title, time, place or invite list — or move its lifecycle state.
- **delete_meeting** — Permanently delete a meeting, together with its agenda and recorded outcomes.
- **add_meeting_agenda_item** — Add one item to a meeting's agenda, optionally pinned to a work package.
- **update_meeting_agenda_item** — Edit one agenda item: retitle it, rewrite its notes, retime, reorder or re-link it.
- **delete_meeting_agenda_item** — Permanently delete one agenda item, with any outcomes recorded against it.
- **add_meeting_outcome** — Record an outcome — a decision, a note, a follow-up ticket — against an agenda item.
- **update_meeting_outcome** — Correct a recorded outcome's kind, text or linked work package.
- **delete_meeting_outcome** — Permanently delete a recorded outcome from a running meeting's minutes.
- **list_recurring_meetings** — List recurring meeting series — the repetition rules, not the individual meetings.
- **get_recurring_meeting** — Read one recurring series in full: the schedule plus its next occurrences.
- **create_recurring_meeting** — Create a recurring meeting series: a schedule plus a template the occurrences copy.
- **delete_recurring_meeting** — Permanently delete a recurring series: template, schedule, and every occurrence.
- **init_recurring_meeting_occurrence** — Materialize one occurrence of a series as a real meeting, copied from the template.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `uvx` (confidence: high):

```json
"mcpServers": {
  "openproject": {
    "command": "uvx",
    "args": ["openproject-mcp-server"],
    "env": {
      "OPENPROJECT_URL": "",
      "OPENPROJECT_API_KEY": ""
    }
  }
}
```

**Requires environment variables:** `OPENPROJECT_URL`, `OPENPROJECT_API_KEY` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What the OpenProject MCP server does

The OpenProject MCP server exposes OpenProject API v3 operations as MCP tools. Its work-package coverage includes text search, filtered listing, detailed retrieval, creation, updates, deletion, comments, watchers, reminders, reactions, relations, custom actions, and bulk updates. Bulk changes can be previewed or applied for up to 50 items, with validation, diffs, and conflict results.

Project tools list, read, create, and update projects. Attachment tools can enumerate files, download an attachment to the machine running the server, upload a local file to supported OpenProject objects, and delete files. Other documented areas include Git activity, linked GitHub pull requests, time tracking, saved queries, notifications, versions, people, memberships, meetings, news, documents, budgets, and reporting.

## How it works

The OpenProject MCP server translates MCP tool calls into requests to an OpenProject instance. Errors use a structured envelope containing an error type, upstream HTTP status, message, and correction hint.

Behavior adapts to the target OpenProject installation. The server detects API differences through a cached feature probe, and reports unavailable modules or inaccessible data as notes instead of treating those cases as successful operations. Destructive operations require a confirmation guard, and the server supports a read-only mode plus configurable tool disabling by group.

## Setup and configuration

Install the Python package with `uvx openproject-mcp-server`, `uv tool install openproject-mcp-server`, or `pip install openproject-mcp-server`. The project requires Python 3.12 or newer. Configure the OpenProject MCP server with these environment variables:

- `OPENPROJECT_URL`: The base URL of the OpenProject instance.
- `OPENPROJECT_API_KEY`: An API token created under OpenProject's **My account → Access tokens** page.

Run `openproject-mcp-server --check` to validate configuration without contacting the instance. For a live connection test after adding it to a client, use the documented `get_instance_info` tool. Claude Code can register the service with `claude mcp add`; Claude Desktop and other clients use their equivalent `mcpServers` configuration with the command and environment values.

## Tools and capabilities

The listed tools support common project-management workflows:

- Find, filter, inspect, create, edit, bulk-update, and delete work packages.
- Read and modify comments, watchers, reminders, reactions, and work-package relations.
- Upload, download, list, link, and remove attachments.
- Inspect commits, pull or merge requests, and CI status associated with work packages.
- List, inspect, create, and update projects.
- Generate reports and access additional documented areas such as time, people, meetings, documents, budgets, and notifications.

## Limitations and notes

The OpenProject MCP server targets OpenProject 14 LTS through 17.x and requires API v3 access. Available results depend on the OpenProject version, enabled modules, and the authenticated user's permissions.

Enterprise editions may include their own built-in MCP integration, so this project is most relevant when an external MCP service is needed for a Community instance. TLS verification remains enabled, and credentials are not written to logs. Deleting work packages or attachments is permanent, so clients should handle confirmation requirements carefully.

_Full upstream README: https://allmcps.com/mcp/openproject/readme_

