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

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

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

Tools

Functions exposed to the LLM to take actions

NameDescription
list_projectsA

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 is only the count of allowed projects returned on 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_projectA

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_contextB

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

get_project_configurationC

Return project-scoped configuration such as internal comment support.

list_sprintsA

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. total is only the count of allowed sprints returned on 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.

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. total is only the count of allowed sprints returned on 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_sprintB

Get a Backlogs sprint by id.

list_documentsA

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. total is only the count of allowed documents returned on 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_documentA

Get a single document by id.

list_newsA

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. total is only the count of allowed news entries returned on 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_newsA

Get a single news entry by id.

get_wiki_pageA

Get a single wiki page by id.

list_viewsA

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. total is only the count of allowed views returned on 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_viewA

Get a single OpenProject view by id.

list_gridsA

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

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 only the count of allowed grids returned on 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_gridA

Get a single dashboard grid by id.

list_categoriesC

List work-package categories configured for a project.

get_categoryB

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

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_project_phaseA

Get a single project lifecycle phase by id.

get_my_project_accessA

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

get_project_work_package_contextC

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

get_instance_configurationA

Return instance-level OpenProject configuration and active feature flags.

get_job_statusA

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

list_work_packagesA

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

project accepts a numeric ID, exact identifier/slug, or project name; the parameter is named project, not project_id. There is no generic filters=[...] parameter — each filter is its own named argument (version, status, assignee, the date filters, etc.), listed below.

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. Because of this, total can read 0 while next_offset is still non-null (a restrictive scope filtered out every match on this page, but the raw server page was full) — that is not an inconsistency, keep paging via next_offset rather than stopping on a low/zero total. Page until next_offset is null either way.

search_work_packagesA

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

query matches only the work package subject and numeric ID (OpenProject's native subject_or_id full-text filter) — it does NOT match version, category, description, or other linked-resource fields. To filter by version, use list_work_packages(version=..., project=...) instead.

In parallel with that text/id search, query is always also resolved directly (numeric id or display id like "PROJ-42") the same way get_work_package does. When that resolves to a work package that also satisfies every other filter given here (project/status/assignee/dates/ etc.), it's returned separately as exact_match — never folded into results, and never counted toward total/count/pagination, since a single extra item can't be paginated consistently. Absent (not present in the response at all) when nothing resolves, when the resolved item fails a filter, or when it's already present in results via the text match. select applies to exact_match the same way it applies to each results row.

Without project, the search runs globally across every project readable under OPENPROJECT_READ_PROJECTS, not just one project — pass project explicitly to scope results to it.

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. Because of this, total can read 0 while next_offset is still non-null (a restrictive scope filtered out every match on this page, but the raw server page was full) — that is not an inconsistency, keep paging via next_offset rather than stopping on a low/zero total. Page until next_offset is null either way.

get_work_packageA

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 same value list_work_packages/ search_work_packages return as each row's id field.

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_packagesA

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_activitiesA

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_reactionsA

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_remindersA

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

get_work_package_relationsA

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. 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_work_package_attachmentsA

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_attachmentA

Get a single attachment by id.

list_work_package_file_linksA

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_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.

list_time_entry_activitiesA

List available time entry activities.

list_time_entriesA

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. total is only the count of allowed time entries returned on 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_time_entryA

Get a single time entry by id.

list_relationsA

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. 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_membershipsC

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

get_membershipA

Get a compact membership summary by id.

list_rolesA

List OpenProject roles visible to the current user.

get_current_userA

Return the currently authenticated user's profile.

list_actionsA

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_capabilitiesA

List API capabilities exposed by OpenProject.

At least one of project or capability_id is required — there is no unfiltered global listing, since one would bypass the project read allowlist.

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_versionsA

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. Without project, total is only the count of allowed versions returned on 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_versionB

Get a compact version summary by id.

list_boardsA

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_boardB

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