feat(extension): package as Claude Desktop Extension (.mcpb) #118
No reviewers
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/OpenSpec
Kind/Security
Kind/Testing
Priority/Critical
Priority/High
Priority/Low
Priority/Medium
RFC - Request For Comments
Reviewed/Confirmed
Reviewed/Duplicate
Reviewed/Invalid
Reviewed/Won't Fix
Status/Abandoned
Status/Blocked
Status/Need More Info
hermes-attempted
hermes-needs-clarification
hermes-ready
hermes-review
hermes-wip
human-required
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
agentic-forges/forgejo-mcp!118
Loading…
Reference in a new issue
No description provided.
Delete branch "refs/pull/118/head"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What this is
Adds an
extension/directory packagingforgejo-mcpas a Claude Desktop Extension (.mcpbformat). Users of the Claude Desktop app can drag-and-drop install this rather than hand-editingclaude_desktop_config.json.Strictly additive — the Go binary and its CLI surface are untouched. Existing usage paths (CLI invocation,
mcpServersconfig blocks,claude mcp add) continue working identically. Risk of breaking existing forgejo-mcp users is essentially zero.What's in the PR
extension/manifest.json— manifest schema 0.3. Includes the full 94-tool inventory (sourced from the binary's actualtools/listresponse),user_configfor URL + access token (withsensitive: trueon the token), and reasonable metadata.extension/test_smoke.py— verifies the bundled binary boots and that the manifest'stoolsarray agrees with the binary'stools/list. Catches the most likely drift bug (manifest goes stale relative to evolving binary). Skips cleanly whenFORGEJO_ACCESS_TOKENis unset, so unattended CI without secrets passes.extension/README.md— build flow (go build→npx @anthropic-ai/mcpb pack), test usage, future-work suggestions.extension/.gitignore— ignores build artifacts.A note on testing
The smoke test caught real manifest-vs-binary drift while developing this — the README's tool table was missing 14 tools the binary already exposes (orgs, teams, PR reviews, attachments). The manifest now reflects what the binary actually does, so the Extensions UI displays accurate tool discoverability.
We noted that prior PRs to this repo got LLM-generated review comments about lack of testing. The smoke test here is what we could meaningfully automate without overstepping into testing things that aren't testable from outside (sideload UX, configuration form rendering, end-to-end behavior).
Possible follow-ups, left for your call
Documented in
extension/README.mdrather than pre-implemented:.mcpbbuild into.goreleaser.ymlso a pre-built archive is produced on each release.server.mcp_config.platform_overrides, populated from goreleaser's per-platform builds..mcpb(npx @anthropic-ai/mcpb sign).If you'd like any of these now rather than as follow-ups, happy to extend the PR.
Try it
Tested
get_issue_by_indexcall againstwhetstone/whetstone#77— round-trip works.extension/test_smoke.pyreportsPASS: manifest and binary agree on 94 tools.