Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
OPENPROJECT_TIMEOUTNoRequest timeout in seconds12
OPENPROJECT_BASE_URLYesBase URL of your OpenProject instance, e.g. https://op.example.com
OPENPROJECT_API_TOKENYesPersonal API token
OPENPROJECT_LOG_LEVELNoCRITICAL, ERROR, WARNING, or INFOWARNING
OPENPROJECT_VERIFY_SSLNoVerify TLS certificatestrue
OPENPROJECT_MAX_RESULTSNoHard cap on total results returned by a tool100
OPENPROJECT_MAX_PAGE_SIZENoHard cap on results per request50
OPENPROJECT_ALLOWED_PROJECTSNoBackward-compatible alias for OPENPROJECT_ALLOWED_PROJECTS_READ
OPENPROJECT_DEFAULT_PAGE_SIZENoDefault results per page20
OPENPROJECT_ENABLE_BOARD_READNoBoards and viewstrue
OPENPROJECT_AUTO_CONFIRM_WRITENoSkip the preview step for all writesfalse
OPENPROJECT_ENABLE_ADMIN_WRITENoUser and group management (create/update/delete/lock users, create/update/delete groups)false
OPENPROJECT_ENABLE_BOARD_WRITENoBoard create/update/deletefalse
OPENPROJECT_HIDE_CUSTOM_FIELDSNoCustom field names or keys to omit; * wildcards supported
OPENPROJECT_AUTO_CONFIRM_DELETENoSkip the preview step for deletes; inherits OPENPROJECT_AUTO_CONFIRM_WRITE if not set
OPENPROJECT_ENABLE_PROJECT_READNoProjects, documents, news, wiki, lifecycletrue
OPENPROJECT_ENABLE_VERSION_READNoVersionstrue
OPENPROJECT_ENABLE_PROJECT_WRITENoProject create/update/delete, news, documents, gridsfalse
OPENPROJECT_ENABLE_VERSION_WRITENoVersion create/update/deletefalse
OPENPROJECT_HIDE_<ENTITY>_FIELDSNoComma-separated fields to omit from reads and reject on writes; * wildcards supported
OPENPROJECT_ALLOWED_PROJECTS_READNoReadable projects; comma-separated identifiers, names, or glob patterns; * allows all visible projects*
OPENPROJECT_ALLOWED_PROJECTS_WRITENoWritable projects; empty disables all project-scoped writes; always intersected with read scope
OPENPROJECT_ENABLE_MEMBERSHIP_READNoMemberships, roles, principalstrue
OPENPROJECT_ENABLE_MEMBERSHIP_WRITENoProject membership create/update/deletefalse
OPENPROJECT_ENABLE_WORK_PACKAGE_READNoWork packages, relations, attachments, time entriestrue
OPENPROJECT_ENABLE_WORK_PACKAGE_WRITENoWork-package create/update/delete, comments, relations, attachments, time entriesfalse

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_projects

List visible projects with optional name or identifier search.

select restricts each result row to the given fields (e.g. ["id", "name", "identifier"]); an invalid name returns the allowed set. Common fields: id, name, identifier, active, public, status, parent_name, created_at, updated_at.

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. Under a restrictive OPENPROJECT_READ_PROJECTS, total reflects only the allowed projects already scanned to fill this page, not a full count of all matches — the search stops as soon as it has enough, so an exact total would need an extra full walk. Page until next_offset is null.

get_project

Get a compact project summary by id or identifier.

project: numeric id (e.g., 7) or identifier (e.g., "my-project"), not display name.

get_project_admin_context

Return project admin metadata such as lifecycle statuses, parent options, and writable fields.

get_project_configuration

Return project-scoped configuration such as internal comment support.

list_sprints

List Backlogs sprints visible to the current token.

Requires the OpenProject Backlogs module; unavailable instances return a clear not-found message.

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.

list_project_sprintsA

List Backlogs sprints for a project by id or identifier.

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_sprint

Get a Backlogs sprint by id.

list_documents

List documents, optionally filtered to a single project.

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_document

Get a single document by id.

list_news

List news entries, optionally filtered by project or title/summary search.

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_newsC

Get a single news entry by id.

get_wiki_page

Get a single wiki page by id.

list_views

List saved OpenProject views, optionally filtered by project or view subtype.

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_view

Get a single OpenProject view by id.

list_grids

List dashboard grids, optionally filtered by scope (page path).

get_grid

Get a single dashboard grid by id.

list_categories

List work-package categories configured for a project.

get_category

Get a single category from a project's category list.

list_project_phase_definitions

List available project lifecycle phase definitions exposed by OpenProject.

get_project_phase_definition

Get a single project lifecycle phase definition by id.

get_project_phaseB

Get a single project lifecycle phase by id.

get_my_project_access

Return the current user's membership and inferred access hints for a project.

get_project_work_package_context

Return project metadata and, optionally, the writable work-package schema for a given type.

get_instance_configuration

Return instance-level OpenProject configuration and active feature flags.

get_job_status

Get the current status of a background job such as project copy.

list_work_packages

List work packages with structured filters and no free-text query requirement.

version_status filters by the status of a work package's assigned version: one of 'open', 'closed', or 'locked'.

assignee filters by any user (username, id, or "me"). assignee_me takes precedence.

status/priority filter by exact OpenProject status/priority name or numeric ID (case-insensitive) — not meta-values like 'open'/'closed'; set open_only=true to restrict results to not-closed work packages instead.

Date filters accept YYYY-MM-DD format:

  • created_on/updated_on/due_on: exact date match

  • created_between/updated_between/due_between: inclusive date range [start, end] Cannot specify both _on and _between for the same field.

sort_by accepts a list of sort criteria in format "field:direction" (e.g., ["status:desc", "priority:asc"]). Direction defaults to "asc" if omitted. Common sortable fields: id, subject, status, priority, type, assignee, author, created_at, updated_at, start_date, due_date.

group_by accepts a field name to group results by (e.g., "status", "assignee"). Common groupable fields: status, priority, type, assignee, author, version, category.

select restricts each result row to the given fields (e.g. ["id", "subject", "status"]); an invalid name returns the allowed set. Common fields: id, display_id, subject, type, status, priority, assignee, project, version, parent_id, parent_display_id, start_date, due_date, estimated_time, spent_time, created_at, updated_at, author, category, description, schedule_manually, derived_start_date, derived_due_date, percentage_done, derived_percentage_done, readonly, ignore_non_working_days. parent_display_id is only populated on OpenProject 17.5+ (semantic mode); it stays null on older/classic instances even when parent_id is set.

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. total is the real matching count only when the query is provably restricted to OPENPROJECT_READ_PROJECTS server-side — scope is unrestricted, an explicit project was given, or (no project, restricted scope) a server-side filter for the resolved allowed project IDs was sent. Otherwise total falls back to this page's item count, and next_offset/truncated are based on whether this page came back full rather than the server's own total, so nothing here ever reveals how many matches exist in projects you can't see. Page until next_offset is null either way.

search_work_packages

Search work packages by free text, optionally scoped to a project.

Set status to restrict results to an exact OpenProject status name or numeric ID — not a meta-value like 'open'/'closed'. Set open_only=true to return only open (not-closed) work packages. Set assignee_me=true to return only work packages assigned to the current user.

assignee filters by any user (username, id, or "me"). assignee_me takes precedence.

priority filters by priority name or numeric ID (case-insensitive).

Date filters accept YYYY-MM-DD format:

  • created_on/updated_on/due_on: exact date match

  • created_between/updated_between/due_between: inclusive date range [start, end] Cannot specify both _on and _between for the same field.

sort_by accepts a list of sort criteria in format "field:direction" (e.g., ["status:desc", "priority:asc"]). Direction defaults to "asc" if omitted. Common sortable fields: id, subject, status, priority, type, assignee, author, created_at, updated_at, start_date, due_date.

group_by accepts a field name to group results by (e.g., "status", "assignee"). Common groupable fields: status, priority, type, assignee, author, version, category.

select restricts each result row to the given fields (e.g. ["id", "subject", "status"]); an invalid name returns the allowed set. Common fields: id, display_id, subject, type, status, priority, assignee, project, version, parent_id, parent_display_id, start_date, due_date, estimated_time, spent_time, created_at, updated_at, author, category, description, schedule_manually, derived_start_date, derived_due_date, percentage_done, derived_percentage_done, readonly, ignore_non_working_days. parent_display_id is only populated on OpenProject 17.5+ (semantic mode); it stays null on older/classic instances even when parent_id is set.

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. total is the real matching count only when the query is provably restricted to OPENPROJECT_READ_PROJECTS server-side — scope is unrestricted, or an explicit project was given. Otherwise (no project, restricted scope) total falls back to this page's item count, and next_offset/truncated are based on whether this page came back full rather than the server's own total, so nothing here ever reveals how many matches exist in projects you can't see. Page until next_offset is null either way.

get_work_package

Get a work package by id, including its full description.

work_package_id: internal id (e.g., 952) or display_id (e.g., "PROJ-51"), not UI display number (e.g., 51).

The description is returned in full by default (single work packages are not truncated). Pass text_limit to cap it at that many characters; when the text is cut, description_truncated is true and description_length reports the real length.

get_work_packages

Get multiple work packages by ID in a single batch call.

Fetches work packages in parallel and returns per-item results. Failed fetches are reported individually without stopping the batch. Maximum 100 IDs per batch.

ids: internal ids (e.g., 952) or display_ids (e.g., "PROJ-51"), not UI display numbers. Duplicate IDs are automatically deduplicated.

select restricts each result's work_package to the given fields (e.g. ["id", "subject", "status"]); an invalid name returns the allowed set. The id/success/error fields on each result are always included regardless of select, so you can still tell which items succeeded.

For batches with many full-detail items, set text_limit and/or select proactively — an unbounded batch of large work packages can exceed the tool-result size limit and get redirected to a file.

list_my_open_work_packagesA

List the current user's open assigned work packages.

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. This query has no project scope of its own, so total is the real matching count only when OPENPROJECT_READ_PROJECTS is unrestricted ("*"); under a restricted scope, total always falls back to this page's item count, and next_offset/truncated are based on whether this page came back full rather than the server's own total, so nothing here ever reveals how many matches exist in projects you can't see. Page until next_offset is null either way.

get_work_package_activities

Get the activity log for a work package, most recent first.

work_package_id: internal id (e.g., 952) or display_id (e.g., "PROJ-51"), not UI display number.

Comments are capped by default to keep the log compact; pass text_limit to widen (or 0-based semantics via a larger value) the per-comment cap. When a comment is cut, comment_truncated is true and comment_length reports its real length.

list_work_package_reactions

List emoji reactions across a work package's comment activities.

work_package_id: internal id (e.g., 952) or display_id (e.g., "PROJ-51"), not UI display number.

list_reminders

List the current user's active reminders across all work packages.

get_work_package_relations

Get all relations for a work package (blocks, relates to, duplicates, etc.).

work_package_id: internal id (e.g., 952) or display_id (e.g., "PROJ-51"), not UI display number. type/from_id/to_id reflect how OpenProject actually stored the relation, which does not depend on which work package's relations you query — but can differ from how it was originally requested, since OpenProject canonicalizes some relation types at creation time (e.g. a relation requested as 'precedes' is stored as 'follows' with from_id/to_id swapped; see create_work_package_relation). Use from_id/to_id together with type, not the request you expect to have made, to determine the actual direction.

list_work_package_attachments

List attachments on a work package.

work_package_id: internal id (e.g., 952) or display_id (e.g., "PROJ-51"), not UI display number.

get_attachment

Get a single attachment by id.

list_work_package_file_links

List Nextcloud file links attached to a work package (Community Edition).

work_package_id: internal id (e.g., 952) or display_id (e.g., "PROJ-51"), not UI display number.

list_work_package_watchersA

List watchers of a work package.

work_package_id: internal id (e.g., 952) or display_id (e.g., "PROJ-51"), not UI display number.

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_priorities

List all available work package priorities.

get_priority

Get a single work package priority by id.

list_types

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_type

Get a single work package type by id.

list_time_entry_activities

List available time entry activities.

list_time_entries

List time entries with optional project, work package, user, and date filters.

work_package_id: internal id (e.g., 952) or display_id (e.g., "PROJ-51"), not UI display number.

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_time_entry

Get a single time entry by id.

list_relations

List all relations across the instance, optionally filtered by type (e.g. 'blocks', 'follows').

type/from_id/to_id reflect how OpenProject actually stored the relation (it does not change depending on which work package's relations you're viewing), which can differ from how it was originally requested — OpenProject canonicalizes some relation types at creation time (e.g. a relation requested as 'precedes' is stored as 'follows' with from_id/to_id swapped; see create_work_package_relation). Filtering by relation_type matches the stored (canonical) type, not necessarily the type a caller originally requested when creating it.

list_project_memberships

List memberships for a project, including principal and role names.

get_membership

Get a compact membership summary by id.

list_roles

List OpenProject roles visible to the current user.

get_current_user

Return the currently authenticated user's profile.

list_actions

List API actions exposed by OpenProject.

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.

list_capabilities

List API capabilities exposed by OpenProject.

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.

list_versions

List versions globally or for a specific project, optionally filtered by a case-insensitive name substring.

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_version

Get a compact version summary by id.

list_boards

List saved OpenProject boards/queries, optionally scoped to a project.

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_board

Get a saved OpenProject board/query by id.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

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/jtauschl/openproject-ce-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server