Problem
When any MCP repo releases a new version, several artifacts go stale:
- Git URL pins in plugin.json
args (e.g. @v0.3.5 stays while version bumps to v1.2.0)
- Skill copies in
.cursor-plugin/skills/ and .opencode/skills/ diverge from canonical skills/
.mcp.json, opencode.json, .openhands/mcp.json, AGENTS.md keep old version strings
This affects all 10+ MCP repos. The tooling exists (mcp-plugin-gen generate/check) but nothing triggers it at the right times.
Evidence: agent-memory v1.2.0 release
During the v1.2.0 release of agent-memory, all four failure modes occurred:
- All plugin.json files still pinned
@v0.3.5 after the version field was bumped to 1.2.0
- The updated SKILL.md (with new wiki/reflect commands) was not copied to
.cursor-plugin/skills/
- The workspace
mem binary stayed at v0.3.5, Docker container needed manual rebuild
- No CI check caught any of these issues
The same stale-pin problem exists in other repos:
- redfish-mcp: version
2.25.3, git pin @v2.11.1 (14 versions behind)
- gpu-diag-mcp: version
1.2.2, git pin @v1.1.1
- netbox-mcp: version
2.10.7, git pin @v2.10.3
Root cause
semantic-release version_variables only updates the "version" key in plugin.json, not the git URL in args
mcp-plugin-gen rewrites all pins correctly when invoked, but:
- Pre-commit hook only triggers on
mcp-plugin.toml changes (not pyproject.toml or skills/)
mcp-plugin-check hook exists but is adopted by zero repos and run in zero CI workflows
- Release workflows never run
mcp-plugin-gen generate
rebuild-marketplaces.yml REPOS list is missing agent-memory
Design
1. Broaden pre-commit hook triggers
In .pre-commit-hooks.yaml, expand file patterns so version bumps and skill edits trigger regeneration:
- id: mcp-plugin-gen
name: Regenerate plugin configs from mcp-plugin.toml
entry: mcp-plugin-gen generate .
language: python
files: (^mcp-plugin\.toml$|^pyproject\.toml$|^skills/)
pass_filenames: false
- id: mcp-plugin-check
name: Check plugin configs are in sync
entry: mcp-plugin-gen check .
language: python
files: (^mcp-plugin\.toml$|^pyproject\.toml$|^skills/|^\.cursor-plugin/|^\.claude-plugin/|^\.mcp\.json|^opencode\.json|^AGENTS\.md)
pass_filenames: false
2. Create a shared CI reusable workflow
New .github/workflows/plugin-sync-check.yml that any MCP repo can call:
name: Plugin Sync Check
on:
workflow_call:
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
- name: Install mcp-common
run: uv pip install "mcp-common[cli] @ git+https://github.com/vhspace/mcp-common"
- name: Check plugin configs in sync
run: mcp-plugin-gen check .
Each repo adds to ci.yml:
plugin-sync:
uses: vhspace/mcp-common/.github/workflows/plugin-sync-check.yml@main
3. Post-release regeneration pattern
After semantic-release tags, release workflows should run mcp-plugin-gen generate . and push regenerated files:
- name: Regenerate plugin configs with new version
run: |
uv pip install "mcp-common[cli] @ git+https://github.com/vhspace/mcp-common"
mcp-plugin-gen generate .
- name: Commit regenerated files
run: |
git add -A
git diff --staged --quiet || git commit -m "chore: regenerate plugin configs [skip ci]"
git push
4. Add agent-memory to marketplace rebuild
Add agent-memory to rebuild-marketplaces.yml REPOS list.
5. Update mcp-release-workflow skill
- Remove manual
git tag instructions (contradicts RELEASING.md)
- Add
mcp-plugin-gen generate . as mandatory post-version-bump step
- Add agent-memory with Docker-specific instructions
- Document CI enforcement
Acceptance Criteria
Problem
When any MCP repo releases a new version, several artifacts go stale:
args(e.g.@v0.3.5stays while version bumps tov1.2.0).cursor-plugin/skills/and.opencode/skills/diverge from canonicalskills/.mcp.json,opencode.json,.openhands/mcp.json,AGENTS.mdkeep old version stringsThis affects all 10+ MCP repos. The tooling exists (
mcp-plugin-gen generate/check) but nothing triggers it at the right times.Evidence: agent-memory v1.2.0 release
During the v1.2.0 release of agent-memory, all four failure modes occurred:
@v0.3.5after the version field was bumped to1.2.0.cursor-plugin/skills/membinary stayed at v0.3.5, Docker container needed manual rebuildThe same stale-pin problem exists in other repos:
2.25.3, git pin@v2.11.1(14 versions behind)1.2.2, git pin@v1.1.12.10.7, git pin@v2.10.3Root cause
semantic-releaseversion_variablesonly updates the"version"key in plugin.json, not the git URL inargsmcp-plugin-genrewrites all pins correctly when invoked, but:mcp-plugin.tomlchanges (notpyproject.tomlorskills/)mcp-plugin-checkhook exists but is adopted by zero repos and run in zero CI workflowsmcp-plugin-gen generaterebuild-marketplaces.ymlREPOS list is missingagent-memoryDesign
1. Broaden pre-commit hook triggers
In
.pre-commit-hooks.yaml, expand file patterns so version bumps and skill edits trigger regeneration:2. Create a shared CI reusable workflow
New
.github/workflows/plugin-sync-check.ymlthat any MCP repo can call:Each repo adds to
ci.yml:3. Post-release regeneration pattern
After semantic-release tags, release workflows should run
mcp-plugin-gen generate .and push regenerated files:4. Add agent-memory to marketplace rebuild
Add
agent-memorytorebuild-marketplaces.ymlREPOS list.5. Update mcp-release-workflow skill
git taginstructions (contradicts RELEASING.md)mcp-plugin-gen generate .as mandatory post-version-bump stepAcceptance Criteria
pyproject.tomlandskills/changesmcp-plugin-checkreusable workflow exists and is callable