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 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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 | |