Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
91 tools for the OpenProject API v3, with read-only, admin-gate, profile and per-group switches.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
OPENPROJECT_URL, OPENPROJECT_API_KEY, OPENPROJECT_OAUTH_TOKEN, OPENPROJECT_MCP_READ_ONLY, OPENPROJECT_MCP_ADMIN_TOOLS, OPENPROJECT_MCP_DISABLE, OPENPROJECT_MCP_PROFILE「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、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"
}
}
}
}ターミナルでこれを実行します
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-server動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
OPENPROJECT_MCP_READ_ONLY envOPENPROJECT_MCP_ADMIN_TOOLS envOPENPROJECT_MCP_DISABLE envOPENPROJECT_MCP_PROFILE envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント kar-thik で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:OPENPROJECT_URL, OPENPROJECT_API_KEY, OPENPROJECT_OAUTH_TOKEN
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.5.0)がレジストリに届いたのは8 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, FlyDocs
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
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.
Spec-driven development workflow: your agent works issues, sessions and the status lifecycle.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
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
冒頭だけを表示しています。続きはリポジトリで読めます