OpenProject MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OPENPROJECT_TIMEOUT | No | Request timeout in seconds | 12 |
| OPENPROJECT_BASE_URL | Yes | Base URL of your OpenProject instance, e.g. https://op.example.com | |
| OPENPROJECT_API_TOKEN | Yes | Personal API token | |
| OPENPROJECT_LOG_LEVEL | No | CRITICAL, ERROR, WARNING, or INFO | WARNING |
| OPENPROJECT_VERIFY_SSL | No | Verify TLS certificates | true |
| OPENPROJECT_MAX_RESULTS | No | Hard cap on total results returned by a tool | 100 |
| OPENPROJECT_MAX_PAGE_SIZE | No | Hard cap on results per request | 50 |
| OPENPROJECT_ALLOWED_PROJECTS | No | Backward-compatible alias for OPENPROJECT_ALLOWED_PROJECTS_READ | |
| OPENPROJECT_DEFAULT_PAGE_SIZE | No | Default results per page | 20 |
| OPENPROJECT_ENABLE_BOARD_READ | No | Boards and views | true |
| OPENPROJECT_AUTO_CONFIRM_WRITE | No | Skip the preview step for all writes | false |
| OPENPROJECT_ENABLE_ADMIN_WRITE | No | User and group management (create/update/delete/lock users, create/update/delete groups) | false |
| OPENPROJECT_ENABLE_BOARD_WRITE | No | Board create/update/delete | false |
| OPENPROJECT_HIDE_CUSTOM_FIELDS | No | Custom field names or keys to omit; * wildcards supported | |
| OPENPROJECT_AUTO_CONFIRM_DELETE | No | Skip the preview step for deletes; inherits OPENPROJECT_AUTO_CONFIRM_WRITE if not set | |
| OPENPROJECT_ENABLE_PROJECT_READ | No | Projects, documents, news, wiki, lifecycle | true |
| OPENPROJECT_ENABLE_VERSION_READ | No | Versions | true |
| OPENPROJECT_ENABLE_PROJECT_WRITE | No | Project create/update/delete, news, documents, grids | false |
| OPENPROJECT_ENABLE_VERSION_WRITE | No | Version create/update/delete | false |
| OPENPROJECT_HIDE_<ENTITY>_FIELDS | No | Comma-separated fields to omit from reads and reject on writes; * wildcards supported | |
| OPENPROJECT_ALLOWED_PROJECTS_READ | No | Readable projects; comma-separated identifiers, names, or glob patterns; * allows all visible projects | * |
| OPENPROJECT_ALLOWED_PROJECTS_WRITE | No | Writable projects; empty disables all project-scoped writes; always intersected with read scope | |
| OPENPROJECT_ENABLE_MEMBERSHIP_READ | No | Memberships, roles, principals | true |
| OPENPROJECT_ENABLE_MEMBERSHIP_WRITE | No | Project membership create/update/delete | false |
| OPENPROJECT_ENABLE_WORK_PACKAGE_READ | No | Work packages, relations, attachments, time entries | true |
| OPENPROJECT_ENABLE_WORK_PACKAGE_WRITE | No | Work-package create/update/delete, comments, relations, attachments, time entries | false |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_project_phase_definitionsA | List available project lifecycle phase definitions exposed by OpenProject. |
| get_project_phase_definitionA | Get a single project lifecycle phase definition by id. |
| get_instance_configurationA | Return instance-level OpenProject configuration and active feature flags. |
| list_statusesA | List all available work package statuses. Read-only: statuses cannot be created or modified via the OpenProject API (Community Edition); configure them in the web admin UI. |
| get_statusB | Get a single work package status by id. |
| list_prioritiesA | List all available work package priorities. |
| get_priorityA | Get a single work package priority by id. |
| list_typesA | List all available work package types, optionally filtered by project. Read-only: types cannot be created or modified via the OpenProject API (Community Edition); configure them in the web admin UI. |
| get_typeB | Get a single work package type by id. |
| get_cost_typeA | Get a cost type by id. Cost types are entirely read-only in OpenProject's API (Community Edition) -- there is no create/update/delete endpoint, and no collection GET either (no list_cost_types tool exists because the endpoint does not exist upstream). |
| get_github_pull_requestA | Get a single GitHub pull request by its own id. GitHub pull requests are read-only mirror rows synced by OpenProject's own GitHub App integration -- never creatable via this API. An empty or 404 result can mean either the pull request doesn't exist, or the GitHub App integration isn't configured on this instance; OpenProject's API does not distinguish these cases. Unlike work-package-scoped lookups in this domain, this global lookup relies on OpenProject's own visibility check (whether the linked work package is visible to the API token), not on this MCP's OPENPROJECT_READ_PROJECTS allowlist -- the pull request payload carries no project link for this MCP to check against. |
| list_rolesA | List OpenProject roles visible to the current user. select fields: id, name (see server instructions for select's general semantics). limit is capped at OPENPROJECT_MAX_PAGE_SIZE (default 50); pass the returned next_offset as the next call's offset to page past the cap. |
| get_current_userA | Return the currently authenticated user's profile. |
| list_actionsA | List API actions exposed by OpenProject. select fields: id, url (see server instructions for select's general semantics). limit is capped at OPENPROJECT_MAX_PAGE_SIZE (default 50); pass the returned next_offset as the next call's offset to page past the cap. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
Each tool targets a distinct resource (types, statuses, priorities, roles, phases, actions) with clear list/get separation, so an agent can tell them apart. A couple of outliers (get_cost_type with no list counterpart, get_github_pull_request which is unrelated to OpenProject's core domain) slightly muddy the surface but remain understandable.
All 14 tools follow a strict verb_noun pattern using list_* and get_* prefixes (list_types/get_type, list_statuses/get_status, list_priorities/get_priority, etc.). The convention is applied uniformly with no camelCase or stylistic drift.
14 tools is well within the ideal 3-15 range and each tool maps to a distinct reference-data endpoint. The count is proportionate to the narrow read-only scope the server declares.
The surface is entirely read-only reference data (types, statuses, priorities, roles, phases, actions) with no work package, project, or time-entry operations, which are the core of OpenProject's domain. Even within its own scope there are gaps: get_cost_type has no list counterpart, list_roles has no get_role, and no create/update/delete exists anywhere, creating dead ends for real project workflows.