Skip to main content

OpenProject CE MCP

PyPI Python 3.10+ License: MIT MCP

Hero image showing a Python terminal and an OpenProject board connected by a structured data stream.

An MCP server for OpenProject that lets local AI agents read and manage project data through structured, guarded tools.

The server runs as a local subprocess of your MCP client over stdio. It wraps OpenProject API v3 and exposes typed tools for projects, work packages, memberships, versions, boards, time entries, and more.

Reading this on PyPI? All links below point to the GitHub repository — the docs/ pages and images ship in the git repo and source distribution, not in the installed package itself.

Why use this MCP

  • Context-frugal by design — compact, agent-shaped responses instead of raw HAL payloads (~21 fields + ~46 links per item in the raw API). Measured up to −98% tokens per response with select; see Context efficiency for the full numbers.
  • Guarded writes — every write follows a preview-then-confirm pattern; there is no way to bypass it.
  • Defense-in-depth project scope — MCP read/write allowlists restrict the token's effective scope in addition to OpenProject's own server-side permissions.
  • Typed tools, not a raw REST client — one call per intent (list, search, create, update) instead of hand-built HAL requests and link-following.

What you can do

Projects

  • List, create, copy, update, and delete projects
  • Read project configurations, lifecycle phases, and admin context
  • Create, update, and delete memberships and versions; list roles

Work packages

  • List and search work packages with structured filters
  • Create, update, and delete work packages; create subtasks; create, update, and delete relations; add comments (no edit or delete)
  • Upload and delete attachments; add and remove watchers; read activity logs
  • Log, update, and delete time entries

Boards and views

  • Create, read, update, and delete saved boards (queries); read views

Users and groups

  • Read user accounts and group memberships
  • Create, update, lock, unlock, and delete users; add and remove group members

Supporting data

  • Fetch individual wiki pages by id; create, update, and delete news; read and update documents
  • Read and mark notifications; read help texts, working days, and instance configuration
  • Create and inspect grids; inspect custom options

All write operations follow a preview-then-confirm pattern: call a tool once to get a validated preview, then again with confirm=true to execute. There is no way to bypass this.


Scope: Community Edition

This MCP server targets OpenProject Community Edition only. It does not support Enterprise Edition features such as:

  • Placeholder Users
  • Budgets
  • Portfolios
  • Programs
  • Custom Actions
  • Baseline Comparisons

Note: OpenProject Enterprise Edition includes its own MCP server. If you have an Enterprise license, use the official Enterprise MCP instead of this one.


How it works

  • Communicates with the MCP client over stdio — no remote server, no persistent storage
  • Read tools are registered by default, but no project data is accessible until OPENPROJECT_READ_PROJECTS is configured
  • The 5 core write categories are enabled by default, but stay inert until a project is listed in OPENPROJECT_WRITE_PROJECTS — that allowlist, not the category flags, is the real gate; personal-data and admin writes stay opt-in separately
  • Create and update operations validate the payload against OpenProject form endpoints before writing; delete and other simple operations execute directly once confirmed
  • Project scope is enforced server-side: the MCP only exposes what the configured allowlists permit
  • Responses are bounded and paginated — compact summaries, not raw HAL payloads

A core reason to use this MCP instead of calling the OpenProject REST API directly: it returns context-frugal responses instead of raw HAL payloads — and not just for listing. The numbers below are measured against the same three representative work packages; read/search/write/batch calls all land in the same −82% to −98% range. For the full per-call-type breakdown, the tool-catalog size numbers, and how to reproduce them, see Context efficiency.

Response Tokens vs. raw API
Raw OpenProject REST API v3 (HAL) ~7,950 baseline
list_work_packages (MCP) ~1,080 −86%
list_work_packages with select (5 fields) ~120 −98%

Install

This quickstart requires pipx; see Installation if it isn't installed yet.

pipx install openproject-ce-mcp
openproject-ce-mcp configure
openproject-ce-mcp --version

configure collects your OpenProject URL, API token, and project scope, then writes the config for the MCP client(s) you choose. Project-scoped is recommended: the server is then available only in the current project. Global makes it available everywhere. Restart your MCP client afterward, then ask it to call get_current_user or list_projects to verify.

See Installation for requirements, updating, source installs, and uninstalling, and Clients for per-client setup guides.


Documentation

Full documentation lives in docs/, starting at the documentation hub:


Configuration essentials

Your client config (.mcp.json, .codex/config.toml, or .vscode/mcp.json) contains your API token — treat it like a password and keep it out of version control; choose your client-specific guide from Clients for the exact .gitignore step. configure writes a minimal config: only the values that differ from a safe default. Read tools are registered by default, and so are the 5 core write categories — but project access stays denied either way until you list projects in OPENPROJECT_READ_PROJECTS (and, for writes, in OPENPROJECT_WRITE_PROJECTS too); that allowlist pair, not the category flags, is the real gate.

See Configuration for the full environment variable reference and what configure --quick vs. --advanced ask.


Security

Prompt Injection

User-provided text (work-package descriptions, comments, news, wiki content) is marked with <user-content> tags and flagged in server instructions as untrusted. Agents should treat this content as data, not as instructions.

See SECURITY.md for the full security model, including prompt injection mitigations, reporting procedures, and supported versions.


Development

git clone https://github.com/jtauschl/openproject-ce-mcp.git
cd openproject-ce-mcp
uv sync --dev
uv run pytest

See Development for the full test suite (unit, integration, and Docker test instances).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openproject_ce_mcp-0.3.5.tar.gz (4.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openproject_ce_mcp-0.3.5-py3-none-any.whl (164.5 kB view details)

Uploaded Python 3

File details

Details for the file openproject_ce_mcp-0.3.5.tar.gz.

File metadata

  • Download URL: openproject_ce_mcp-0.3.5.tar.gz
  • Upload date:
  • Size: 4.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for openproject_ce_mcp-0.3.5.tar.gz
Algorithm Hash digest
SHA256 f8bee044e911f6d199b1d847f28f1d7ae3d3e4bab8819185ca3fa585391e5828
MD5 fbd3c67af8b28b496b0a5aca13cf365f
BLAKE2b-256 d69e30821cde5d0399095c6524e26082cdfb64e63d49a1b83b927b33745a5733

See more details on using hashes here.

File details

Details for the file openproject_ce_mcp-0.3.5-py3-none-any.whl.

File metadata

  • Download URL: openproject_ce_mcp-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 164.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for openproject_ce_mcp-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 0cd0ee4eafa5ef5df2913d47dba288b6aa806177a2759e517768abc026d66415
MD5 5806c96254079af4480d78c00413b380
BLAKE2b-256 7d5eaeb410c6f40713f6776c56bffe6547f352d9e7a54e744242b6bd75600fa1

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.7

2 files

0.3.6

2 files

This release

0.3.5 This release

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page