OpenProject MCP server
io.github.alex13slem/openproject·v0.5.0Manage OpenProject projects, work packages, files, relations, boards, users, and notifications.
0 stars35 downloads/wk
Reviews
Write oneNobody has reviewed OpenProject yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
OpenProject tools (38, 11 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
add_work_package_commentAppend a Markdown comment to one work package and return the activity plus work-package URL. Use for progress notes or follow-ups, not field changes; this creates a permanent activity and can notify subscribed users.
add_work_package_watcherSubscribe a user as a watcher of one work package so OpenProject can notify them about changes. Use only for an explicit subscription request; adding an existing watcher is idempotent.
count_projectsReturn only the total number of projects matching native OpenProject filters. Use instead of list_projects when no project records are needed; this is read-only and minimizes response size.
count_work_packagesReturn only the total number of work packages matching native filters and an optional project. Use instead of search_work_packages when no task records are needed; all filters are combined with AND.
create_projectwrite actionCreate a project or subproject immediately. Use only after confirming a new project is wanted; parentId creates it below an existing project. Requires add-project permission and is not idempotent.
create_work_packagewrite actionCreate a work package and return the created resource plus browser URL. Use only for a new task in a resolved project; this writes immediately and may notify interested users unless notify is false. Omit typeId to select the project's Task type or first available type.
create_work_package_relationwrite actionCreate a directed typed relation from one work package to another, such as blocks, precedes, duplicates, or relates. Use after verifying both IDs and existing relations; this writes immediately and duplicate validity is enforced by OpenProject.
delete_projectwrite actionPermanently schedule deletion of a project by numeric ID. Use only after get_project verifies an explicit deletion target. OpenProject archives it immediately and deletes it asynchronously; this destructive action cannot be undone through this server.
delete_work_packagewrite actionPermanently delete one work package by ID. Use only for an explicit deletion request after verifying the target with get_work_package; this is destructive and cannot be undone through this server.
delete_work_package_attachmentwrite actionPermanently delete one attachment by attachment ID. Use only after list_work_package_attachments verifies the file and ID; this is destructive and does not delete the work package.
delete_work_package_relationwrite actionPermanently delete one relation without deleting either work package. Use only after list_work_package_relations confirms the relation ID; this destructive change removes the dependency or association.
get_boardGet one OpenProject board by grid ID, including its widget and column configuration. Use when the board ID is already known; use list_boards for project discovery or list_board_lanes for cards.
get_current_userReturn the current OpenProject user authenticated by the API token. Use to identify 'me' or verify credentials; unlike list_users, this does not require global user-management permission.
get_notificationGet one in-app notification by ID with actor, project, activity, and related-resource links. Use after list_notifications when full context for a known notification is required; it remains unread.
get_openproject_apiRead an OpenProject API v3 endpoint not covered by a focused tool. Use only as a read-only escape hatch after checking the typed tools. The path must be relative under /api/v3; absolute URLs, other origins, writes, and filesystem access are rejected.
get_projectGet one complete project by numeric ID or identifier. Use when the target is already known and full project fields or links are needed; use list_projects for discovery. This is read-only.
get_userGet one OpenProject user by numeric ID. Use when the ID is already known; use list_available_assignees for assignment choices and list_users for administrator-level discovery.
get_work_packageGet the complete HAL+JSON representation of one work package by numeric ID. Use after search when full descriptions, links, custom fields, or lockVersion are required; this performs no write.
get_work_package_attachmentDownload one verified attachment from a work package. Use after listing attachments. Text files return readable text; binary files return an embedded base64 MCP resource. The call fails before or during transfer if maxBytes is exceeded and does not write to disk.
get_work_package_relationGet one relation by relation ID, including its from/to links, type, description, and lag. Use after listing relations when complete details for a known relation are needed.
list_available_assigneesList users permitted as assignees for exactly one project or work package. Use this before assignment when the global user list is unavailable; provide projectId or workPackageId, never both. This is read-only.
list_board_lanesResolve one board's work-package query widgets into lanes with card summaries and pagination metadata. Use after list_boards identifies a board; pageSize limits cards per lane. This is read-only and does not move cards.
list_boardsList paginated Kanban-style boards scoped to one project ID or identifier. Use to discover board grid IDs; use get_board for configuration or list_board_lanes for cards. This read-only call may return no boards when the module is disabled.
list_notificationsList paginated in-app notifications for the authenticated user, optionally unread only. Use for inbox triage; this leaves read state unchanged. Use get_notification for one item's details and mark tools only after review.
list_project_versionsList version or milestone IDs globally or for one project. Use before assigning a work package to a version; projectId returns only versions available in that project. This is read-only.
list_projectsList visible projects with native filters, sorting, and pagination. Use this to discover project IDs or identifiers; use get_project when the target is already known and count_projects when only a total is needed.
list_usersList or search the global OpenProject user directory with native filters and pagination. Use for administrator-level discovery; for ordinary task assignment prefer list_available_assignees because OpenProject may restrict this endpoint to user managers. This is read-only.
list_work_package_activitiesList paginated comments and field-change history for one work package. Use for audit context or conversation history; use get_work_package for current state and add_work_package_comment to append a new note. This is read-only.
list_work_package_attachmentsList metadata for files attached directly to a work package. Use before get_work_package_attachment to verify the attachment ID and size; no file content is downloaded.
list_work_package_relationsList all typed relations involving one work package, including direction and lag. Use to inspect dependencies or duplicates before creating or deleting a relation; this is read-only.
list_work_package_watchersList current watchers of one work package. Use before adding or removing a watcher to verify membership and user IDs; this does not change subscriptions.
mark_all_notifications_readMark every visible in-app notification as read for the authenticated user. Use only for an explicit clear-inbox request; this bulk state change is idempotent and does not modify related work packages.
mark_notification_readMark one in-app notification as read for the authenticated user. Use after the notification has been reviewed; this changes inbox state but not the related project resource.
remove_work_package_watcherwrite actionUnsubscribe a user from one work package's watchers. Use only after verifying workPackageId and userId; this changes notification behavior but does not delete the user or work package.
search_work_packagesSearch visible work packages with focused fields plus optional native filters, sorting, and pagination. Use this for discovery or lists; use get_work_package for the complete resource once an ID is known and count_work_packages for totals only.
update_projectwrite actionPatch only the supplied fields on an existing project. Use for renaming, description, visibility, activation, or archival changes; omitted fields are preserved. Requires project administration permission.
update_work_packagewrite actionUpdate only the supplied fields on an existing work package and return its browser URL. The tool fetches the current lockVersion first to prevent stale overwrites; null clears supported optional links. It writes immediately and may notify users unless notify is false.
upload_work_package_attachmentwrite actionRead one explicit allowlisted local file and upload it to a work package. Use only when the user identified both the file and target task. Paths must be under OPENPROJECT_ALLOWED_UPLOAD_DIRS (default: current working directory). The call rejects files above maxBytes, sends bytes only to the configured OpenProject origin, creates a permanent attachment, and never modifies the local file.
Public scan report
scanner v0.1.9 · 2026-09-25 · same rubric, same numbers if you re-run it
- Code scan2 source files scanned20/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitystatic API keys via environment variables6/15
- Maintenancelast push 73 days ago12/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
Findings (1)
- mediumeval / new Function used
exec.evaldist/openproject-mcp.js: …eCode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.de…
How OpenProject compares
Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 71/100
- higher than 36% of 48,255 servers
- Tools
- 38
- the typical server has 7
- Tools that change things
- 29%
- typical: 0%. Fewer write tools means less an agent can break
- Downloads a week
- 35
- more than 25% of 12,191 servers with a package
What its tools let an agent do: 23 read · 6 create · 4 change · 5 delete
Install OpenProject in Claude Code, Cursor or VS Code
Runs npx -y openproject-codex-plugin on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add openproject -- npx -y openproject-codex-plugin
What the publisher says
From the OpenProject repository's README, as published. We do not edit it. Read it on GitHub
OpenProject for Codex
Manage OpenProject from Codex — projects, work packages, attachments, relations, boards, users, watchers, and notifications. This free, open-source integration exposes 41 focused API v3 tools and is designed to work with OpenProject Community and Enterprise editions.
Why this project
attachments, connect related tasks, inspect boards, and handle notifications.
- Broad read and write coverage: manage projects and work packages, upload
API v3 rather than requiring the OpenProject MCP Enterprise add-on.
- Community Edition friendly: it uses the generally available OpenProject
can safely turn natural-language requests into explicit OpenProject actions.
- Codex-native workflow: tools and guidance are packaged together so Codex
OpenProject remains the source of truth for permissions.
- Runs locally: credentials stay in a private file on your machine, and
OpenProject also provides an official MCP server in Professional plans and above. As of July 2026, that server exposes read-only tools. This community project is a good fit when you need write operations, Codex-specific guidance, or support for Community Edition. See the official MCP documentation for the current capabilities of OpenProject's server.
What it can do
accountable users, priorities, statuses, and versions.
- Create, inspect, update, count, archive, and delete projects.
- Search work packages with native filters, sorting, and pagination.
- Create and update tasks, dates, estimates, progress, hierarchy, assignees,
escape hatch.
- Read activity history, add comments, and delete work packages.
- List, download, upload, and delete attachments with size limits.
- Create and inspect work-package relations and manage watchers.
- Find users and valid assignees, including without global user-list access.
- Read and clear notifications and inspect Kanban-style boards.
- Discover statuses, priorities, types, and project versions.
- Read otherwise unsupported API v3 resources through a restricted GET-only
- Guide Codex toward safe, explicit OpenProject write operations.
Example workflow
You: Find checkout-related tasks in the Storefront project.
Codex: I found #142 "Handle expired checkout sessions" and
#157 "Add payment retry telemetry".
You: Add a comment to #142 saying the API fix is ready for review.
Codex: Added the comment to work package #142.Codex resolves the request through MCP tools, while OpenProject remains the source of truth for permissions and work-package state.
Requirements
- Bun 1.3 or newer
- Codex CLI with MCP support
- An OpenProject API token with access to the projects you want to manage
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
OpenProject: common questions
- Is OpenProject MCP server safe?
- Mostly: it is graded B (71/100). Read the OpenProject safety report
- How do I install OpenProject?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does OpenProject need an API key?
- Yes. The registry entry asks for
OPENPROJECT_API_TOKEN. - Is OpenProject maintained?
- The last commit was 113 days ago (2026-07-14). The latest release is v0.5.0.
- How does OpenProject compare with other MCP servers?
- safety score 71/100 (higher than 36% of 48,255 servers); tools 38 (the typical server has 7); tools that change things 29% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.