openproject-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OPENPROJECT_API_KEY | Yes | API token from My account > Access tokens > API in OpenProject | |
| OPENPROJECT_BASE_URL | Yes | The base URL of your OpenProject instance, e.g. https://community.openproject.org | |
| OPENPROJECT_PAGE_SIZE | No | Default page size for list endpoints | 25 |
| OPENPROJECT_TIMEOUT_MS | No | HTTP request timeout in milliseconds | 30000 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| op_list_projectsA | List OpenProject projects visible to the API key. Supports OpenProject filter syntax. Common fields: "active" ("=" true/false), "name_and_identifier" ("~" substring), "parent_id" ("=" id). |
| op_get_projectB | Get a single project by numeric id or identifier slug. |
| op_create_projectA | Create a new project. Requires admin or "add project" permission. Pass either a parent identifier or numeric id via _links.parent.href if creating a sub-project. |
| op_update_projectB | Patch an existing project. Only include the fields you want to change. |
| op_delete_projectA | Delete a project. Destructive; requires admin permission. The deletion is processed asynchronously by OpenProject. |
| op_list_work_packagesA | List work packages, optionally scoped to a project. Supports OpenProject filter syntax. Common filter fields: "status_id", "assignee", "project", "type", "priority", "subject" ("~" search), "updatedAt". |
| op_get_work_packageB | Fetch a single work package by numeric id with full HAL detail. |
| op_create_work_packageA | Create a work package in a project. At minimum provide subject, projectId, and typeId. When patching dates use ISO YYYY-MM-DD strings. |
| op_update_work_packageA | Patch fields on a work package. You MUST pass the current lockVersion (fetch it first with op_get_work_package) or OpenProject will reject the update with a stale-object error. |
| op_delete_work_packageA | Permanently delete a work package. Destructive. |
| op_list_work_package_activitiesB | List activities (comments and changes) on a work package, oldest first. |
| op_comment_work_packageB | Add a markdown comment to a work package activity stream. Optionally attach a file and embed it inline using attachFilePath. |
| op_current_userA | Return the user associated with the configured API key. |
| op_list_usersC | List users visible to the current API key. Supports filters such as "name" ("~" search), "status" ("=" "active"/"locked"/"invited"), "login" ("=" exact). |
| op_get_userA | Fetch a user by numeric id. |
| op_list_typesA | List work package types (Task, Bug, Feature, Milestone, etc.). Optionally scope to a project. |
| op_list_statusesA | List all work package statuses defined on the instance. |
| op_list_prioritiesA | List all priorities defined on the instance. |
| op_list_versionsB | List versions, optionally filtered to a project. |
| op_api_passthroughA | Escape hatch: call any GET endpoint under /api/v3 directly. Path should start with "/" (e.g. "/queries/42"). Use sparingly — prefer the typed tools above. |
| op_list_relationsC | List relations for a work package. Relation types: relates, duplicates, duplicated, blocks, blocked, precedes, follows, includes, partOf, requires, required. |
| op_get_relationC | Fetch a single relation by id. |
| op_create_relationA | Create a relation between two work packages. Types: relates, duplicates, blocks, precedes, follows, includes, partOf, requires. |
| op_delete_relationB | Delete a relation between work packages. |
| op_list_attachmentsB | List attachments on a work package. |
| op_get_attachmentA | Fetch attachment metadata by id. Set saveTo to download the file content to a local path and also return embedLocations showing where the file is referenced in the work package (description and comments). |
| op_upload_attachmentA | Upload a file from the local filesystem as an attachment on a work package. Provide the absolute path to the file. Optionally override the file name. Set embedIn to "comment" or "description" to also insert an image reference ( |
| op_delete_attachmentC | Delete an attachment. Destructive. |
| op_list_notificationsA | List in-app notifications for the current user. Common filters: "readIAN" ("=" "t"/"f"), "reason" ("=" "assigned"/"mentioned"/"watched"). |
| op_get_notificationB | Fetch a single notification by id. |
| op_mark_notification_readC | Mark a single notification as read. |
| op_mark_all_notifications_readA | Mark all notifications as read for the current user. |
| op_list_watchersC | List users watching a work package. |
| op_add_watcherC | Add a user as a watcher to a work package. |
| op_remove_watcherB | Remove a user from watching a work package. |
| op_list_boardsA | List boards (Kanban-style) for a project. Boards are stored as grids scoped to /projects/{id}/boards. |
| op_get_boardA | Fetch a single board (grid) by id, including its widget/column configuration. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/OliverRhyme/openproject-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server