{"_id":"@crunchymonkies/mcp-openproject","_rev":"3-e7775a91149b2d5456183032ee94d8ea","name":"@crunchymonkies/mcp-openproject","dist-tags":{"latest":"1.0.4"},"versions":{"1.0.0":{"name":"@crunchymonkies/mcp-openproject","version":"1.0.0","license":"MIT","_id":"@crunchymonkies/mcp-openproject@1.0.0","maintainers":[{"name":"matthew.m.mckenzie","email":"matthew.m.mckenzie@gmail.com"}],"bin":{"mcp-openproject":"dist/index.js"},"dist":{"shasum":"1db6292ce041408268c3887e493f0af957282963","tarball":"https://registry.npmjs.org/@crunchymonkies/mcp-openproject/-/mcp-openproject-1.0.0.tgz","fileCount":299,"integrity":"sha512-qw1wuaxi8rMavRFjJAnhy/ls37ke9g8cjyk+Wgr7O28x7RKHvdnXCwE+fW86GhjoweWAYLtQUMHkSJZ+LWA7nA==","signatures":[{"sig":"MEUCIQDk2GKhV/jKXmjptazztutFxdqMd2hGO/7ghZ1XIgUoPAIgYQV9HcQPLtQ9oMP7kKW3Qa1Y6Fovyiv2CMjNEzidsYI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":642667},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ce1614f32e05028b103fa7bbcd83e9c4c54175d9","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","start":"node dist/index.js","test:e2e":"vitest run"},"_npmUser":{"name":"matthew.m.mckenzie","email":"matthew.m.mckenzie@gmail.com"},"_npmVersion":"11.6.2","description":"MCP server for OpenProject project management via API v3","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","dotenv":"^17.4.2","vitest":"^4.1.4","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-openproject_1.0.0_1776120440098_0.1475336688111859","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@crunchymonkies/mcp-openproject","version":"1.0.1","license":"MIT","_id":"@crunchymonkies/mcp-openproject@1.0.1","maintainers":[{"name":"matthew.m.mckenzie","email":"matthew.m.mckenzie@gmail.com"}],"bin":{"mcp-openproject":"dist/index.js"},"dist":{"shasum":"741e4870fe13da8fd661a05ef13398d8772067c0","tarball":"https://registry.npmjs.org/@crunchymonkies/mcp-openproject/-/mcp-openproject-1.0.1.tgz","fileCount":299,"integrity":"sha512-pEcYz8vqJXIGHWLBcELzN/9TypmOYSt+lJ2HEgkh/Y6EA+NuYzPF7IkaSnW5AzCfp/KRjZI+4HV9pfJHRsyDGA==","signatures":[{"sig":"MEQCIF1LVBE0VboxCCZv32bA7yhpvGpmNcesEXCwL/18ou79AiARE9uRUpvpxhmQ1QZadhv+6iY/DBMNXfVDOV8boUSeig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":650581},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ce38d974013f11a72662fa3d42ae79dcad25bd93","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","start":"node dist/index.js","test:e2e":"vitest run"},"_npmUser":{"name":"matthew.m.mckenzie","email":"matthew.m.mckenzie@gmail.com"},"_npmVersion":"11.6.2","description":"MCP server for OpenProject project management via API v3","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","dotenv":"^17.4.2","vitest":"^4.1.4","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-openproject_1.0.1_1776121951202_0.5147482792528235","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@crunchymonkies/mcp-openproject","version":"1.0.4","description":"MCP server for OpenProject project management via API v3","type":"module","main":"dist/index.js","bin":{"mcp-openproject":"dist/index.js"},"scripts":{"build":"tsc","start":"node dist/index.js","dev":"tsx src/index.ts","test":"vitest run","test:e2e":"vitest run"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.0","zod":"^4.3.6"},"devDependencies":{"@types/node":"^22.0.0","dotenv":"^17.4.2","tsx":"^4.19.0","typescript":"^5.6.0","vitest":"^4.1.4"},"engines":{"node":">=18.0.0"},"license":"MIT","gitHead":"683e555c3045f9a082929b3c3f5c944133165ad3","types":"./dist/index.d.ts","_id":"@crunchymonkies/mcp-openproject@1.0.4","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-DmPZy2BIqzsAmyQAeaL+15udCjuBF58MWexcj58aTUi/0YDev4S8FjQhuf36+RffZFn3vl1DURBmP+2j3Pslmg==","shasum":"d7ebc5da6a6143c096fbaf6be9da7972b3220dd1","tarball":"https://registry.npmjs.org/@crunchymonkies/mcp-openproject/-/mcp-openproject-1.0.4.tgz","fileCount":303,"unpackedSize":672194,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIH8MKv2vPwyg/Vam9gILDuUy+yg7cseVnksqnqXZR8AEAiEAwr2BE/gIT4IVs/Hh9gO3oJFffjCtHHkyav/urU+kuDE="}]},"_npmUser":{"name":"matthew.m.mckenzie","email":"matthew.m.mckenzie@gmail.com"},"directories":{},"maintainers":[{"name":"matthew.m.mckenzie","email":"matthew.m.mckenzie@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-openproject_1.0.4_1776207432875_0.37766956631040527"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-13T22:47:20.016Z","modified":"2026-04-14T22:57:13.180Z","1.0.0":"2026-04-13T22:47:20.255Z","1.0.1":"2026-04-13T23:12:31.386Z","1.0.4":"2026-04-14T22:57:13.038Z"},"license":"MIT","description":"MCP server for OpenProject project management via API v3","maintainers":[{"name":"matthew.m.mckenzie","email":"matthew.m.mckenzie@gmail.com"}],"readme":"# @crunchymonkies/mcp-openproject\n\nA Model Context Protocol (MCP) server for [OpenProject](https://www.openproject.org/) project management. Provides 84 tools covering the full OpenProject API v3 surface — projects, work packages, time tracking, memberships, notifications, scheduling, and more.\n\n## Features\n\n- **Full API v3 coverage**: 84 tools across 26 resource domains\n- **CRUD operations**: Create, read, update, and delete for projects, work packages, users, groups, memberships, versions, news, queries, views, and more\n- **Transition-aware status changes**: Status updates respect allowed transitions\n- **Time tracking**: Log, update, and query time entries\n- **Scheduling support**: Working days, week days, and non-working day queries\n- **Knowledge artifacts**: Generate weekly status summaries and decision log entries in markdown\n- **Zod v4 schemas**: Fully typed API responses with runtime validation\n- **Native TypeScript**: No Python dependency, uses Node.js built-in fetch\n\n## Requirements\n\n- Node.js 18+\n- OpenProject instance with API v3 access\n- API token with appropriate permissions\n\n## Installation\n\n### Using npx (no install needed)\n\n```bash\nOPENPROJECT_BASE_URL=https://openproject.example.org \\\nOPENPROJECT_API_TOKEN=your-api-token \\\nnpx @crunchymonkies/mcp-openproject\n```\n\n### Global install\n\n```bash\nnpm install -g @crunchymonkies/mcp-openproject\n```\n\n### From source\n\n```bash\ngit clone https://github.com/CrunchyMonkies/mcp-openproject.git\ncd mcp-openproject\nnpm install\nnpm run build\n```\n\n## Configuration\n\nSet these environment variables:\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `OPENPROJECT_BASE_URL` | Yes | OpenProject base URL (e.g., `https://openproject.example.org`) |\n| `OPENPROJECT_API_TOKEN` | Yes | API token for authentication |\n| `OPENPROJECT_DEFAULT_PROJECT` | No | Default project ID/identifier when `project` param is omitted |\n| `OPENPROJECT_READ_ONLY` | No | Set to `true` to disable all write tools (create, update, delete) |\n\n### Startup Behavior\n\nOn startup, the server automatically detects which OpenProject modules are enabled by querying the API root. Tools for disabled modules (time tracking, news, documents, budgets, versions, memberships, revisions, activities) are not registered. If detection fails, all tools are registered as a fallback.\n\nWhen `OPENPROJECT_READ_ONLY=true`, all write tools (`create_*`, `update_*`, `delete_*`, `add_comment`, `execute_custom_action`, `mark_notification_read`) are excluded.\n\nThe server also performs per-project module checks at runtime — if a tool requires a module that is disabled for a specific project, a clear error is returned.\n\n## MCP Integration\n\n### Claude Code\n\nAdd to your Claude Code MCP settings (`~/.claude/settings.json` or project `.claude/settings.json`):\n\nUsing npx (recommended):\n\n```json\n{\n  \"mcpServers\": {\n    \"openproject\": {\n      \"command\": \"npx\",\n      \"args\": [\"@crunchymonkies/mcp-openproject\"],\n      \"env\": {\n        \"OPENPROJECT_BASE_URL\": \"https://openproject.example.org\",\n        \"OPENPROJECT_API_TOKEN\": \"your-api-token\"\n      }\n    }\n  }\n}\n```\n\nUsing a local clone:\n\n```json\n{\n  \"mcpServers\": {\n    \"openproject\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/mcp-openproject/dist/index.js\"],\n      \"env\": {\n        \"OPENPROJECT_BASE_URL\": \"https://openproject.example.org\",\n        \"OPENPROJECT_API_TOKEN\": \"your-api-token\"\n      }\n    }\n  }\n}\n```\n\n### Claude Desktop\n\nAdd to your Claude Desktop config (`claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"openproject\": {\n      \"command\": \"npx\",\n      \"args\": [\"@crunchymonkies/mcp-openproject\"],\n      \"env\": {\n        \"OPENPROJECT_BASE_URL\": \"https://openproject.example.org\",\n        \"OPENPROJECT_API_TOKEN\": \"your-api-token\"\n      }\n    }\n  }\n}\n```\n\n### Other MCP Clients\n\nAny MCP-compatible client can run the server via npx:\n\n```bash\nnpx @crunchymonkies/mcp-openproject\n```\n\nOr point to the built entry point directly:\n\n```bash\nnode /path/to/mcp-openproject/dist/index.js\n```\n\n## Tools (84)\n\n### Projects (5)\n| Tool | Description |\n|------|-------------|\n| `list_projects` | List all visible projects |\n| `get_project` | Get details for a single project by ID |\n| `create_project` | Create a new project |\n| `update_project` | Update fields on an existing project |\n| `delete_project` | Delete a project by ID |\n\n### Work Packages (6)\n| Tool | Description |\n|------|-------------|\n| `list_work_packages` | List work packages with optional filters |\n| `get_work_package` | Get full details for a single work package |\n| `create_work_package` | Create a new work package in a project |\n| `update_work_package` | Update multiple fields on a work package |\n| `update_work_package_status` | Update only the status (transition-aware) |\n| `delete_work_package` | Delete a work package by ID |\n\n### Comments (1)\n| Tool | Description |\n|------|-------------|\n| `add_comment` | Add a comment/note to a work package |\n\n### Users (5)\n| Tool | Description |\n|------|-------------|\n| `list_users` | List visible users with optional name/login filter |\n| `get_user` | Get details for a single user by ID |\n| `create_user` | Create a new user account |\n| `update_user` | Update fields on an existing user |\n| `delete_user` | Delete a user by ID |\n\n### Metadata (7)\n| Tool | Description |\n|------|-------------|\n| `list_statuses` | List available work package statuses |\n| `list_types` | List work package types (optionally project-scoped) |\n| `list_priorities` | List available priorities |\n| `list_roles` | List available roles |\n| `get_role` | Get details for a single role by ID |\n| `list_categories` | List categories for a project |\n| `get_category` | Get details for a single category by ID |\n\n### Relations (4)\n| Tool | Description |\n|------|-------------|\n| `list_relations` | List relations for a work package |\n| `create_relation` | Create a relation between two work packages |\n| `get_relation` | Get details for a single relation by ID |\n| `delete_relation` | Delete a relation by ID |\n\n### Time Entries (5)\n| Tool | Description |\n|------|-------------|\n| `list_time_entries` | List time entries with optional project/work package filters |\n| `get_time_entry` | Get details for a single time entry by ID |\n| `create_time_entry` | Log a time entry against a work package |\n| `update_time_entry` | Update an existing time entry |\n| `delete_time_entry` | Delete a time entry by ID |\n\n### Versions (5)\n| Tool | Description |\n|------|-------------|\n| `list_versions` | List versions for a project |\n| `get_version` | Get details for a single version by ID |\n| `create_version` | Create a new version in a project |\n| `update_version` | Update an existing version |\n| `delete_version` | Delete a version by ID |\n\n### Activities (2)\n| Tool | Description |\n|------|-------------|\n| `list_activities` | List activity journal entries for a work package |\n| `get_activity` | Get details for a single activity by ID |\n\n### Notifications (3)\n| Tool | Description |\n|------|-------------|\n| `list_notifications` | List in-app notifications for the current user |\n| `get_notification` | Get details for a single notification by ID |\n| `mark_notification_read` | Mark a notification as read |\n\n### Attachments (2)\n| Tool | Description |\n|------|-------------|\n| `get_attachment` | Get details for a single attachment by ID |\n| `delete_attachment` | Delete an attachment by ID |\n\n### Memberships (5)\n| Tool | Description |\n|------|-------------|\n| `list_memberships` | List memberships, optionally filtered by project |\n| `get_membership` | Get details for a single membership by ID |\n| `create_membership` | Create a new membership for a principal in a project |\n| `update_membership` | Update roles for an existing membership |\n| `delete_membership` | Delete a membership by ID |\n\n### Groups (5)\n| Tool | Description |\n|------|-------------|\n| `list_groups` | List all groups |\n| `get_group` | Get details for a single group by ID |\n| `create_group` | Create a new group |\n| `update_group` | Update an existing group |\n| `delete_group` | Delete a group by ID |\n\n### News (5)\n| Tool | Description |\n|------|-------------|\n| `list_news` | List news items, optionally filtered by project |\n| `get_news` | Get details for a single news item by ID |\n| `create_news` | Create a news item in a project |\n| `update_news` | Update an existing news item |\n| `delete_news` | Delete a news item by ID |\n\n### Queries (5)\n| Tool | Description |\n|------|-------------|\n| `list_queries` | List all saved queries |\n| `get_query` | Get details for a single query by ID |\n| `create_query` | Create a new saved query |\n| `update_query` | Update an existing saved query |\n| `delete_query` | Delete a saved query by ID |\n\n### Documents (3)\n| Tool | Description |\n|------|-------------|\n| `list_documents` | List documents, optionally filtered by project |\n| `get_document` | Get details for a single document by ID |\n| `update_document` | Update an existing document |\n\n### Custom Actions (2)\n| Tool | Description |\n|------|-------------|\n| `get_custom_action` | Get details for a single custom action by ID |\n| `execute_custom_action` | Execute a custom action on a work package |\n\n### Days (3)\n| Tool | Description |\n|------|-------------|\n| `list_days` | List working days within a date range |\n| `list_week_days` | List the configured week days |\n| `list_non_working_days` | List all configured non-working days |\n\n### File Links (3)\n| Tool | Description |\n|------|-------------|\n| `list_file_links` | List file links for a work package |\n| `get_file_link` | Get details for a single file link by ID |\n| `delete_file_link` | Delete a file link by ID |\n\n### Views (5)\n| Tool | Description |\n|------|-------------|\n| `list_views` | List all views |\n| `get_view` | Get details for a single view by ID |\n| `create_view` | Create a new view from a saved query |\n| `update_view` | Update an existing view |\n| `delete_view` | Delete a view by ID |\n\n### Schemas (2)\n| Tool | Description |\n|------|-------------|\n| `get_work_package_schema` | Get the work package schema, optionally scoped to a project |\n| `get_project_schema` | Get the project schema describing all project fields |\n\n### Budgets (1)\n| Tool | Description |\n|------|-------------|\n| `get_budget` | Get details for a single budget by ID |\n\n### Revisions (2)\n| Tool | Description |\n|------|-------------|\n| `list_revisions` | List revisions for a project |\n| `get_revision` | Get details for a single revision by ID |\n\n### Principals (1)\n| Tool | Description |\n|------|-------------|\n| `list_principals` | List principals (users, groups, placeholder users) |\n\n### Configuration (2)\n| Tool | Description |\n|------|-------------|\n| `get_configuration` | Get the OpenProject instance configuration |\n| `get_server_info` | Get OpenProject server information and API root |\n\n### Knowledge Artifacts (2)\n| Tool | Description |\n|------|-------------|\n| `weekly_summary` | Generate weekly status markdown |\n| `log_decision` | Generate decision log entry markdown |\n\n## Agent Skills\n\nThis package includes agent skills — reusable instruction sets that teach coding agents how to use the OpenProject MCP tools effectively. Skills are installed via [npx skills](https://github.com/vercel-labs/skills) and work across 45+ coding agents.\n\n### Install skills\n\n**List available skills:**\n\n```bash\nnpx skills add CrunchyMonkies/mcp-openproject --list\n```\n\n**Install all skills (project-scoped):**\n\n```bash\nnpx skills add CrunchyMonkies/mcp-openproject --all\n```\n\n**Install for a specific agent:**\n\n```bash\nnpx skills add CrunchyMonkies/mcp-openproject --all -a claude-code\nnpx skills add CrunchyMonkies/mcp-openproject --all -a cursor\nnpx skills add CrunchyMonkies/mcp-openproject --all -a opencode\n```\n\n**Install globally (available across all projects):**\n\n```bash\nnpx skills add CrunchyMonkies/mcp-openproject --all -g\n```\n\n**Install a specific skill only:**\n\n```bash\nnpx skills add CrunchyMonkies/mcp-openproject --skill openproject-mcp\n```\n\n### What's included\n\nThe `skills/` directory contains detailed documentation organized by domain and workflow:\n\n- `skills/openproject-mcp/SKILL.md` — Full tool index, installation reference, and navigation hub\n- `skills/openproject-mcp/modules/` — 22 per-domain deep-dives: parameters, response shapes, and usage patterns for projects, work packages, time entries, users, memberships, queries, views, and more\n- `skills/openproject-mcp/workflows/` — 16 step-by-step guides for common multi-tool scenarios: sprint planning, agile workflows, release management, stakeholder reporting, time and cost reporting, and more\n\nThese files are also plain markdown and can be read directly without installing.\n\n## Development\n\n```bash\n# Run in development mode\nnpm run dev\n\n# Build\nnpm run build\n\n# Run tests\nnpm test\n\n# Test tool listing\necho '{\"jsonrpc\":\"2.0\",\"method\":\"tools/list\",\"id\":1}' | node dist/index.js\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}