Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
91 tools for the OpenProject API v3, with read-only, admin-gate, profile and per-group switches.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
OPENPROJECT_URL, OPENPROJECT_API_KEY, OPENPROJECT_OAUTH_TOKEN, OPENPROJECT_MCP_READ_ONLY, OPENPROJECT_MCP_ADMIN_TOOLS, OPENPROJECT_MCP_DISABLE, OPENPROJECT_MCP_PROFILELos valores marcados como secretos son llaves de tu cuenta. Nunca los compartas ni los pegues en un chat.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"openproject": {
"command": "uvx",
"args": [
"openproject-mcp-server"
],
"env": {
"OPENPROJECT_URL": "your-value",
"OPENPROJECT_API_KEY": "your-value",
"OPENPROJECT_OAUTH_TOKEN": "your-value",
"OPENPROJECT_MCP_READ_ONLY": "your-value",
"OPENPROJECT_MCP_ADMIN_TOOLS": "your-value",
"OPENPROJECT_MCP_DISABLE": "your-value",
"OPENPROJECT_MCP_PROFILE": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add openproject --env OPENPROJECT_URL=your-value --env OPENPROJECT_API_KEY=your-value --env OPENPROJECT_OAUTH_TOKEN=your-value --env OPENPROJECT_MCP_READ_ONLY=your-value --env OPENPROJECT_MCP_ADMIN_TOOLS=your-value --env OPENPROJECT_MCP_DISABLE=your-value --env OPENPROJECT_MCP_PROFILE=your-value -- uvx openproject-mcp-serverCompleta los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"openproject": {
"command": "uvx",
"args": [
"openproject-mcp-server"
],
"env": {
"OPENPROJECT_URL": "your-value",
"OPENPROJECT_API_KEY": "your-value",
"OPENPROJECT_OAUTH_TOKEN": "your-value",
"OPENPROJECT_MCP_READ_ONLY": "your-value",
"OPENPROJECT_MCP_ADMIN_TOOLS": "your-value",
"OPENPROJECT_MCP_DISABLE": "your-value",
"OPENPROJECT_MCP_PROFILE": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"openproject": {
"type": "stdio",
"command": "uvx",
"args": [
"openproject-mcp-server"
],
"env": {
"OPENPROJECT_URL": "your-value",
"OPENPROJECT_API_KEY": "your-value",
"OPENPROJECT_OAUTH_TOKEN": "your-value",
"OPENPROJECT_MCP_READ_ONLY": "your-value",
"OPENPROJECT_MCP_ADMIN_TOOLS": "your-value",
"OPENPROJECT_MCP_DISABLE": "your-value",
"OPENPROJECT_MCP_PROFILE": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
OPENPROJECT_MCP_READ_ONLY envOPENPROJECT_MCP_ADMIN_TOOLS envOPENPROJECT_MCP_DISABLE envOPENPROJECT_MCP_PROFILE envEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub kar-thik, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
Debes completar: OPENPROJECT_URL, OPENPROJECT_API_KEY, OPENPROJECT_OAUTH_TOKEN
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (0.5.0) llegó al registro hace 8 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Python (uv) en tu computadora.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, Rystic
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Start, seed, clock, inspect and diff Rystic API simulators from your agent.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
An MCP (Model Context Protocol) server for the OpenProject API v3. It gives Claude and any other MCP client 91 tools covering work packages, comments and relations, attachments, git/PR activity, projects, saved queries, notifications, time tracking, versions, people and memberships, meetings, news, documents, budgets and reporting — plus 4 report/workflow prompts and 3 resource templates. Built on FastMCP 4.x and httpx (HTTP/2); speaks MCP 2026-07-28 and the earlier handshake versions.
This project is aimed at the OpenProject Community edition. OpenProject's Enterprise edition now ships with its own built-in MCP integration; this server brings the same capability to self-hosted Community instances. It runs fine against any edition — it only needs the public API v3.
Design principles, all enforced in code:
outputSchema and machine-readable structuredContent, not prose. Errors come back as a JSON envelope with a stable type, the upstream http_status, a message and a hint describing how to correct the call.confirm=true guard on every destructive tool, TLS always verified, and credentials that never appear in logs.Two exchanges against a fictional "Website Relaunch" project — every id, name and date below is invented. You describe the outcome; the model picks the tools, and what comes back to it is a typed object rather than prose to re-parse.
You What is still open in Website Relaunch and due by Friday? The checkout
bug is urgent — raise it and leave a note for whoever owns it.
→ list_work_packages(project="website-relaunch", status_scope="open", due_before="2026-03-13", sort_by=[["due_date", "asc"]])
{ "items": [ { "id": 4821, "subject": "Checkout fails on expired coupon codes", "type": {"id": 7, "name": "Bug"}, "status": {"id": 7, "name": "In progress"}, "assignee": {"id": 118, "name": "Dana Okafor"}, "due_date": "2026-03-11" }, { "id": 4830, "subject": "Move press-kit assets to the new CDN", "type": {"id": 1, "name": "Task"}, "status": {"id": 1, "name": "New"}, "assignee": null, "due_date": "2026-03-13" }], "pagination": {"total": 2, "page": 1, "page_size": 20, "has_more": false} }
→ update_work_package(id=4821, priority="High") → add_work_package_comment(id=4821, comment="Raised to High — it blocks the launch checklist. Dana, can you take a look today?")
Assistant Two open items are due by Friday. #4821 is High now and the note is on its thread; #4830 is due Friday and still has nobody on it.
The rows above are abridged: each one also carries priority, project, start_date, percentage_done and updated_at, and the envelope keeps groups, sums and notes slots for the calls that fill them.
The prompt templates cut out the tool round trips: the server reads OpenProject itself and hands back a finished document rather than instructions to go and fetch one. It arrives prefaced with a note that the numbers are already computed and must not be recomputed or embellished.
You /weekly_report project=website-relaunch
_Generated from live OpenProject data_ ...
Progress against the sprint goal: Not assessed — sprint goal and completion dates are not available
Currently closed work updated in the window:
That last block is the house style: a report says which of its numbers are partial, and a tool that could not read something returns the gap as a note instead of guessing. The whole surface is in Tools and Prompts and resources.
The distribution name is openproject-mcp-server. It installs two identical console scripts, openproject-mcp-server and openproject-mcp; the long form is canonical (an unrelated PyPI package also installs a bin named openproject-mcp).
Run one-shot with uv, no install step:
uvx openproject-mcp-server
Or install persistently:
uv tool install openproject-mcp-server
pip install openproject-mcp-server
The minimal configuration is two environment variables:
export OPENPROJECT_URL=https://openproject.example.com
export OPENPROJECT_API_KEY=your-api-key
Validate the configuration without starting the server:
openproject-mcp-server --check
--check verifies the configuration and exits; it does not contact your instance. Once connected through a client, call the get_instance_info tool for a live end-to-end check. When configuration is missing or invalid, the server prints the specific problems to stderr and exits with code 2 — never a traceback.
claude mcp add openproject \
--env OPENPROJECT_URL=https://openproject.example.com \ --env OPENPROJECT_API_KEY=your-api-key \ -- uvx openproject-mcp-server
Add to claude_desktop_config.json (or your client's equivalent mcpServers config):
{
"mcpServers": { "openproject": { "command": "uvx", "args": ["openproject-mcp-server"], "env": { "OPENPROJECT_URL": "https://openproject.example.com", "OPENPROJECT_API_KEY": "your-api-key" } } } }
git clone https://github.com/kar-thik/openproject-mcp
cd openproject-mcp uv sync uv run openproject-mcp-server
When a token is regenerated, revoked or invalidated (OpenProject major upgrades can do this — the symptom is every tool suddenly failing with authentication_failed / HTTP 401), generate a fresh one in OpenProject under My account → Access tokens and update it wherever your key lives:
OPENPROJECT_API_KEY straight from the OS environment, so you can export it globally — e.g. in ~/.zshenv — and register the server with no --env flags at all: claude mcp add openproject -- uvx openproject-mcp-server
Rotation is then: edit the export, open a fresh terminal, reconnect. The client config never contains a secret. (This does not work for GUI apps like Claude Desktop, which don't read your shell profile.)
claude mcp remove openproject
claude mcp add openproject \ --env OPENPROJECT_URL=https://openproject.example.com \ --env OPENPROJECT_API_KEY=new-key \ -- uvx openproject-mcp-server
Then reconnect via /mcp (a running session keeps the old environment until it does).
OPENPROJECT_API_KEY value in the client config and restart the client.Recent OpenProject versions allow several API tokens in parallel, so you can rotate with zero downtime: create the new token, switch your clients over, then revoke the old one.
Configuration is entirely environment-driven. The table below is the authoritative reference: the server binds exactly these 26 names and no others. Bare, unprefixed names such as READ_TIMEOUT or API_KEY are deliberately ignored (a stray variable in your shell cannot change or break the server), as is any other unknown variable. A .env file in the server's working directory is read with the same names; real environment variables take precedence. From-source users can start from .env.example.
| Variable | Default | Purpose |
|---|---|---|
OPENPROJECT_URL | — (required) | Instance root URL, e.g. https://openproject.example.com. A trailing /api/v3 is tolerated and stripped. |
OPENPROJECT_API_KEY | — (required*) | API key from My account → Access tokens. Sent as HTTP Basic apikey: . |
OPENPROJECT_OAUTH_TOKEN | unset | OAuth bearer token, as an alternative to the API key. *One of the two credentials is required. |
OPENPROJECT_MCP_ACCEPT_LANGUAGE | unset | Sent as the Accept-Language header; OpenProject localizes validation messages accordingly. |
OPENPROJECT_MCP_CA_BUNDLE | system trust store | Path to a CA bundle (PEM) for instances behind a private CA. TLS is always verified; there is deliberately no off switch. |
OPENPROJECT_MCP_READ_ONLY | false | Serve read tools only: every write, destructive and admin tool is removed at startup. |
OPENPROJECT_MCP_ADMIN_TOOLS | false | Expose the three admin-gated membership write tools (hidden by default). |
OPENPROJECT_MCP_DISABLE | empty | Comma-separated group tags to remove whole tool groups at startup (see below). |
OPENPROJECT_MCP_PROFILE | core | core hides the module-backed groups at startup; a client can bring one back with enable_tool_group (see below). full lists every group. |
OPENPROJECT_MCP_INSECURE | false | Allow --transport http to start without auth tokens. Local development only. |
OPENPROJECT_MCP_DOWNLOAD_DIR | ./openproject-downloads | Directory where download_attachment writes files (created if missing; default is relative to the server's working directory). |
OPENPROJECT_MCP_UPLOAD_ROOT | unset | When set, upload_attachment and create_work_package(attachment_paths) read only files beneath this existing directory; paths and symlinks resolving outside it are refused. Recommended for --transport http. |
OPENPROJECT_MCP_DOWNLOAD_ROOT | unset | When set, download_attachment writes only beneath this existing directory and saves there by default; a save_dir outside it is refused. Recommended for --transport http. |
OPENPROJECT_MCP_MAX_DOWNLOAD_MB | 100 | Size cap for attachment downloads, in MiB. |
| OPENPROJECT_MCP_MAX_INLINE_MB | 10 | Size cap for attachment bytes returned inl
Solo se muestra el principio; lee el resto en el repo