feat(mcp): add remote + stdio tool surfaces for loopover_get_repo_focus_manifest - #7909
feat(mcp): add remote + stdio tool surfaces for loopover_get_repo_focus_manifest#7909xfodev wants to merge 1 commit into
Conversation
…us_manifest Register loopover_get_repo_focus_manifest as a remote MCP tool (src/mcp/server.ts) and a local stdio MCP tool (packages/loopover-mcp/bin), mirroring the two-surface loopover_get_maintainer_noise shape but replicating the GET /v1/repos/:owner/:repo/focus-manifest route's own auth: requireRepoAccess (the read-level maintainer/owner/operator + session-repo-access mirror), not the stricter requireRepoApprovalQueueAccess. Read-only: no refresh/PUT tool, no new REST route, no new human CLI verb. Closes JSONbored#7808
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7909 +/- ##
===========================================
+ Coverage 58.78% 81.95% +23.16%
===========================================
Files 730 90 -640
Lines 74842 24387 -50455
Branches 22839 4691 -18148
===========================================
- Hits 43999 19987 -24012
+ Misses 27180 4162 -23018
+ Partials 3663 238 -3425
Flags with carried forward coverage won't be shown. Click here to find out more.
|
|
Caution 🛑 LoopOver review result - fixes requiredReview updated: 2026-07-21 17:19:21 UTC
Review summary Nits — 6 non-blocking
CI checks failing
Decision drivers
Context & advisory signals — never blocks the verdict
Linked issue satisfactionAddressed Review context
Contributor next steps
Signal definitions
🧪 Chat with LoopOverAsk LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.
Full command reference: https://loopover.ai/docs/loopover-commands 🧪 Experimental — new and may change. 🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.
|
|
LoopOver is closing this pull request on the maintainer's behalf (CI is failing (validate, validate-tests (1))). This is an automated maintenance action — to pursue this change, please open a new pull request with the issues resolved. Closed PRs may be analyzed later to improve review accuracy, but they are not automatically reopened or re-reviewed. |
Summary
Adds the two missing MCP surfaces for
loopover_get_repo_focus_manifest(a repo's own persisted focus manifest + compiled policy): a remote MCP tool insrc/mcp/server.tsand a local stdio MCP tool inpackages/loopover-mcp/bin. Mirrors the two-surfaceloopover_get_maintainer_noiseshape but replicates the underlyingGET /v1/repos/:owner/:repo/focus-manifestroute's own auth —requireRepoAccess(the read-level maintainer/owner/operator + session-repo-access mirror), not the stricterrequireRepoApprovalQueueAccess(which adds a live-write check the GET route does not perform).Read-only, per the issue's scope boundary: no tool for the
refresh(POST)/PUTwrite routes, no new REST route, no new human CLI verb.What changed
src/mcp/server.ts: registerloopover_get_repo_focus_manifest(inputownerRepoShape,focusManifestOutputSchemareturning{ repoFullName, manifest, policy }), add itsMCP_TOOL_CATEGORIESentry ("maintainer"), and agetRepoFocusManifesthandler callingloadRepoFocusManifest+compileFocusManifestPolicyexactly as the GET route does, behindrequireRepoAccess.packages/loopover-mcp/bin/loopover-mcp.ts: register the local stdio tool proxyingGET ${repoBase}/focus-manifestviaapiGet.Testing / coverage
test/unit/mcp-output-schemas.test.ts: authorized success (seeded manifest →{ repoFullName, manifest.present, policy }) and the forbidden branch (static mcp identity outside the read allowlist →cannot access this repository); added the tool toTOOLS_WITH_OUTPUT_SCHEMA. Both run in-process againstLoopoverMcp(env).createServer(), so every changed line/branch insrc/mcp/server.tsis Codecov-covered.test/unit/mcp-cli-repo-focus-manifest.test.ts: in-process stdio invocation (via loopover_plan_repo_issues has no REST route, CLI command, or local stdio MCP tool #7764'sisProcessEntrypointguard +InMemoryTransport) so the bin tool'sapiGet-proxy body gets real Codecov-measured coverage — a subprocess spawn can't be v8-instrumented.test/unit/mcp-tool-rename-aliases.test.ts: tool-count invariant → 83. This also reconciles a pin drift — feat(mcp): add remote + stdio tool surfaces for loopover_get_activation_preview #7887 registeredloopover_get_activation_preview's stdio tool without bumping this pin (live count had reached 82), documented inline in the same convention as the earlier#6942note.No REST/OpenAPI change (the focus-manifest route already exists), no migrations, no wrangler changes.
Closes #7808