Extension ID
openproject
Extension Name
OpenProject Integration
Version
0.1.0
Description
Sync fields, status, docs, versions and time between spec-kit and OpenProject via MCP
Author
Daniel Ring
Repository URL
https://github.com/Nachklang-io/speckit-openproject
Download URL
https://github.com/Nachklang-io/speckit-openproject/releases/download/extension-v0.1.0/openproject-extension-0.1.0.zip
License
MIT
Homepage (optional)
https://github.com/Nachklang-io/speckit-openproject
Documentation URL (optional)
https://github.com/Nachklang-io/speckit-openproject/blob/extension-v0.1.0/extension/README.md
Changelog URL (optional)
https://github.com/Nachklang-io/speckit-openproject/blob/main/CHANGELOG.md
Required Spec Kit Version
=1.1.0
Required Tools (optional)
- openproject-ce-mcp (>=0.4.1) - required; an MCP server configured in the AI agent's MCP client (https://github.com/jtauschl/openproject-ce-mcp), not a CLI
Number of Commands
5
Number of Hooks (optional)
1
Tags
openproject, project-management, mcp
Key Features
speckit.openproject.discover-fields: reads types, statuses and mandatory custom fields of an OpenProject project and writes .specify/openproject/config.yml after a diff
speckit.openproject.sync-status: syncs task checkboxes in tasks.md with work package statuses (OpenProject wins conflicts; never reopens)
speckit.openproject.sync-docs: attaches spec.md, plan.md and other design documents to the feature work package and keeps a summary block in its description
speckit.openproject.sync-version: creates or reuses the feature's OpenProject version and assigns the work packages
speckit.openproject.log-time: logs time entries against the feature's work packages, without duplicates on re-run
- Optional
after_implement hook that offers sync-status
- Every write command supports
--dry-run and is idempotent through a per-feature mapping file
- All OpenProject access goes through an MCP server; the extension never calls the REST API and never stores tokens
Testing Checklist
Submission Requirements
Testing Details
Tested on:
- macOS with spec-kit 1.1.1, Claude Code in skills mode
- Self-hosted OpenProject Community Edition, MCP server
openproject-ce-mcp 0.4.1
Test project: a scratch spec-kit project against a sandbox OpenProject project; the extension's own repository is developed with spec-kit as well.
Test scenarios (full list with dates and results: https://github.com/Nachklang-io/speckit-openproject/blob/main/docs/TESTING.md):
- Installed from the GitHub release URL and with
--dev; both installs behave the same (S26, S27, S33)
discover-fields: bootstrap, re-run after hand edits, dry run, stop conditions (S10–S13)
sync-status: baseline, both directions, restricted workflow, stop conditions (S14–S17)
sync-docs: first upload, changed document, interrupted run, stop conditions (S18–S21)
sync-version and log-time: dry run, real run, re-run, interruption, missing write flags (S22–S25)
Security: no secrets are stored by the extension (tokens live only in the MCP client config); writes are limited by the MCP server's project allowlist. No third-party security audit was done.
Known untested paths (command mode, other MCP servers, accepting the hook from inside /speckit-implement) are listed in the README.
Example Usage
# Install extension
specify extension add openproject --from https://github.com/Nachklang-io/speckit-openproject/releases/download/extension-v0.1.0/openproject-extension-0.1.0.zip
# Create the config from the OpenProject project
/speckit.openproject.discover-fields my-project --dry-run
# Sync task progress between tasks.md and OpenProject
/speckit.openproject.sync-status 001-my-feature
Proposed Catalog Entry
{
"openproject": {
"name": "OpenProject Integration",
"id": "openproject",
"description": "Sync fields, status, docs, versions and time between spec-kit and OpenProject via MCP",
"author": "Daniel Ring",
"version": "0.1.0",
"download_url": "https://github.com/Nachklang-io/speckit-openproject/releases/download/extension-v0.1.0/openproject-extension-0.1.0.zip",
"sha256": "68011188bd41cfd98f8ea1590a3a7a63862696eede938bb17c6652745ba2f2a4",
"repository": "https://github.com/Nachklang-io/speckit-openproject",
"homepage": "https://github.com/Nachklang-io/speckit-openproject",
"documentation": "https://github.com/Nachklang-io/speckit-openproject/blob/extension-v0.1.0/extension/README.md",
"changelog": "https://github.com/Nachklang-io/speckit-openproject/blob/main/CHANGELOG.md",
"license": "MIT",
"requires": {
"speckit_version": ">=1.1.0",
"tools": [
{"name": "openproject-ce-mcp", "version": ">=0.4.1", "required": true}
]
},
"provides": {
"commands": 5,
"hooks": 1
},
"tags": ["openproject", "project-management", "mcp"]
}
}
Additional Context
The extension lives in the extension/ directory of a monorepo that also holds the companion openproject preset (submitted separately; it overrides speckit.taskstoissues). The release asset is a self-contained archive with extension.yml at its root. Submission checklist: https://github.com/Nachklang-io/speckit-openproject/blob/main/docs/catalog/extension-checklist.md
Extension ID
openproject
Extension Name
OpenProject Integration
Version
0.1.0
Description
Sync fields, status, docs, versions and time between spec-kit and OpenProject via MCP
Author
Daniel Ring
Repository URL
https://github.com/Nachklang-io/speckit-openproject
Download URL
https://github.com/Nachklang-io/speckit-openproject/releases/download/extension-v0.1.0/openproject-extension-0.1.0.zip
License
MIT
Homepage (optional)
https://github.com/Nachklang-io/speckit-openproject
Documentation URL (optional)
https://github.com/Nachklang-io/speckit-openproject/blob/extension-v0.1.0/extension/README.md
Changelog URL (optional)
https://github.com/Nachklang-io/speckit-openproject/blob/main/CHANGELOG.md
Required Spec Kit Version
Required Tools (optional)
Number of Commands
5
Number of Hooks (optional)
1
Tags
openproject, project-management, mcp
Key Features
speckit.openproject.discover-fields: reads types, statuses and mandatory custom fields of an OpenProject project and writes.specify/openproject/config.ymlafter a diffspeckit.openproject.sync-status: syncs task checkboxes intasks.mdwith work package statuses (OpenProject wins conflicts; never reopens)speckit.openproject.sync-docs: attachesspec.md,plan.mdand other design documents to the feature work package and keeps a summary block in its descriptionspeckit.openproject.sync-version: creates or reuses the feature's OpenProject version and assigns the work packagesspeckit.openproject.log-time: logs time entries against the feature's work packages, without duplicates on re-runafter_implementhook that offerssync-status--dry-runand is idempotent through a per-feature mapping fileTesting Checklist
Submission Requirements
extension.ymlmanifest includedTesting Details
Tested on:
openproject-ce-mcp0.4.1Test project: a scratch spec-kit project against a sandbox OpenProject project; the extension's own repository is developed with spec-kit as well.
Test scenarios (full list with dates and results: https://github.com/Nachklang-io/speckit-openproject/blob/main/docs/TESTING.md):
--dev; both installs behave the same (S26, S27, S33)discover-fields: bootstrap, re-run after hand edits, dry run, stop conditions (S10–S13)sync-status: baseline, both directions, restricted workflow, stop conditions (S14–S17)sync-docs: first upload, changed document, interrupted run, stop conditions (S18–S21)sync-versionandlog-time: dry run, real run, re-run, interruption, missing write flags (S22–S25)Security: no secrets are stored by the extension (tokens live only in the MCP client config); writes are limited by the MCP server's project allowlist. No third-party security audit was done.
Known untested paths (command mode, other MCP servers, accepting the hook from inside
/speckit-implement) are listed in the README.Example Usage
Proposed Catalog Entry
{ "openproject": { "name": "OpenProject Integration", "id": "openproject", "description": "Sync fields, status, docs, versions and time between spec-kit and OpenProject via MCP", "author": "Daniel Ring", "version": "0.1.0", "download_url": "https://github.com/Nachklang-io/speckit-openproject/releases/download/extension-v0.1.0/openproject-extension-0.1.0.zip", "sha256": "68011188bd41cfd98f8ea1590a3a7a63862696eede938bb17c6652745ba2f2a4", "repository": "https://github.com/Nachklang-io/speckit-openproject", "homepage": "https://github.com/Nachklang-io/speckit-openproject", "documentation": "https://github.com/Nachklang-io/speckit-openproject/blob/extension-v0.1.0/extension/README.md", "changelog": "https://github.com/Nachklang-io/speckit-openproject/blob/main/CHANGELOG.md", "license": "MIT", "requires": { "speckit_version": ">=1.1.0", "tools": [ {"name": "openproject-ce-mcp", "version": ">=0.4.1", "required": true} ] }, "provides": { "commands": 5, "hooks": 1 }, "tags": ["openproject", "project-management", "mcp"] } }Additional Context
The extension lives in the
extension/directory of a monorepo that also holds the companionopenprojectpreset (submitted separately; it overridesspeckit.taskstoissues). The release asset is a self-contained archive withextension.ymlat its root. Submission checklist: https://github.com/Nachklang-io/speckit-openproject/blob/main/docs/catalog/extension-checklist.md