Skip to content

feat(mcp): add VS Code host to init-client config - #1770

Merged
JSONbored merged 1 commit into
JSONbored:mainfrom
glorydavid03023:feat/mcp-init-client-vscode
Jun 29, 2026
Merged

feat(mcp): add VS Code host to init-client config#1770
JSONbored merged 1 commit into
JSONbored:mainfrom
glorydavid03023:feat/mcp-init-client-vscode

Conversation

@glorydavid03023

Copy link
Copy Markdown
Contributor

Summary

Adds vscode to gittensory-mcp init-client --print. VS Code has native MCP support, but its config uses a servers map with an explicit "type": "stdio" transport (for .vscode/mcp.json) — which is different from the shared mcpServers JSON shape that claude/cursor/mcp emit. So it gets its own snippet rather than reusing the generic one:

{
  "servers": {
    "gittensory": {
      "type": "stdio",
      "command": "gittensory-mcp",
      "args": ["--stdio"]
    }
  }
}

This fills a real gap — VS Code is a primary MCP host and was previously rejected as an unsupported client.

Scope

  • packages/gittensory-mcp/bin/gittensory-mcp.jsvscode branch in clientSnippet() (the VS Code servers/type shape), plus the init-client "missing arg" error, the clientSnippet "unsupported" error, and the --help usage line.
  • test/unit/mcp-cli-basics.test.ts — assert the VS Code snippet uses the servers/type shape and not mcpServers.
  • packages/gittensory-mcp/README.md — list vscode and add a short "Client config" note on the per-host shapes.

Packages-only; no src/**, no UI, no schema/migration/OpenAPI changes. The agent-profile option composes with vscode automatically (no extra wiring).

Validation

Run locally on Node v24.18.0 (engine floor is 22):

  • npm run build:mcp → pass
  • npm run typecheckpass, 0 errors (full project, deps installed)
  • npx vitest run test/unit/mcp-cli-basics.test.ts19/19 pass, including the updated prints MCP client snippets case
  • npm pack --workspace @jsonbored/gittensory-mcp --dry-run → package file list unchanged (only the already-allowed files; no new files, no secrets)
  • Smoke: init-client --print vscode emits the shape above; --print other still errors as unsupported

Note: npm run test:mcp-pack couldn't run on my Windows box (its harness calls spawnSync("npm", …), which can't resolve npm.cmd without a shell) — verified the package contents directly with npm pack --dry-run instead. It passes on CI (Linux).

Safety

No auth, cookie, CORS, GitHub App output, identity, contributor-evidence, or scoring changes. No secrets/wallets/hotkeys/trust/reward terms anywhere. The generated snippet contains only the static command/args already documented for the other hosts.

Add `vscode` to `gittensory-mcp init-client --print`. VS Code's native MCP
support uses a `servers` map with an explicit `"type": "stdio"` transport
(for `.vscode/mcp.json`), which differs from the shared `mcpServers` JSON
shape used by claude/cursor/mcp — so it needs its own snippet rather than
reusing the generic one.

Tests assert the VS Code snippet uses the `servers`/`type` shape and not
`mcpServers`.
@dosubot dosubot Bot added the size:XS label Jun 29, 2026
@loopover-orb

loopover-orb Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Tip

🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩

✅ Gittensory review result - approve/merge recommended

Review updated: 2026-06-29 22:16:08 UTC

3 files · 1 AI reviewer · no blockers · readiness 66/100 · CI green · unknown

✅ Suggested Action - Approve/Merge

  • safe to merge

Review summary
The change correctly adds a dedicated VS Code `init-client --print` snippet using the `servers` map and explicit `type: "stdio"`, while leaving the existing shared `mcpServers` hosts unchanged. The CLI help, missing-client error, unsupported-client error, README, and unit coverage are all updated in the visible diff, so the new host is wired through the relevant user-facing surfaces. The notable maintainability risk is that supported-client text remains duplicated in several places, but that does not break this change as written.

Nits — 5 non-blocking
  • nit: test/unit/mcp-cli-basics.test.ts:30 should parse `vscode.snippet` and assert the exact object shape, including `command` and `args`, instead of relying on substring checks.
  • nit: packages/gittensory-mcp/bin/gittensory-mcp.js:1779,2319,2745 now duplicate the supported-client list in three separate strings, which makes future client additions easy to partially update.
  • In test/unit/mcp-cli-basics.test.ts:30, change the VS Code assertion to `expect(JSON.parse(vscode.snippet)).toEqual({ servers: { gittensory: { type: "stdio", command: "gittensory-mcp", args: ["--stdio"] } } })` and keep the `not.toContain('"mcpServers"')` check if you want the explicit regression guard.
  • In packages/gittensory-mcp/bin/gittensory-mcp.js:1779,2319,2745, consider deriving help/error client lists from one local constant so the next host does not require three manually synchronized edits.
  • Readiness score is below the configured threshold — Use the readiness panel as advisory maintainer context; the score does not block this PR.
Signal Result Evidence
Code review ✅ No blockers 1 reviewer
Linked issue ⚠️ Missing No linked issue or no-issue rationale found.
Related work ✅ No active overlap found No same-issue or scoped active PR overlap found.
Change scope ✅ 20/20 Low review scope from cached public metadata (size label size:XS; no linked issue context).
Validation posture ❌ 5/25 Preflight is holding this PR; address the blocker before review.
Contributor workload ✅ 10/10 Author activity: 190 registered-repo PR(s), 126 merged, 4 issue(s).
Contributor context ✅ Confirmed Gittensor contributor glorydavid03023; Gittensor profile; 190 PR(s), 4 issue(s).
Gate result ✅ Passing No configured blocker found.
Review context
  • Author: glorydavid03023
  • Role context: outside_contributor
  • Public audience mode: oss maintainer
  • Lane context: Repository registration is not available in the local Gittensory cache.
  • Public profile languages: not available
  • Official Gittensor activity: 190 PR(s), 4 issue(s).
  • PR-specific overlap: none found.
Contributor next steps
  • Explain no-issue PR.
  • Fix the blocker.
  • Triage stale or unlinked PRs.
  • Refresh registry data or choose a registered active repo.
  • Link the issue being solved, or explicitly explain why this is a no-issue PR.
Signal definitions
  • Related work = same linked issue, overlapping active PRs, or title/path similarity.
  • Change scope = cached public metadata such as size labels, draft state, and review-burden hints.
  • Validation posture = whether the PR provides enough public validation/test evidence for maintainer review.
  • Contributor workload = public contributor activity and cleanup pressure, not a repo-wide quality failure.
  • Contributor context = public GitHub/Gittensor identity context; non-Gittensor status is not a blocker.

🟩 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 Gittensory, a quiet PR intelligence layer for OSS maintainers.

  • Re-run Gittensory review

@dosubot dosubot Bot added the lgtm label Jun 29, 2026
@JSONbored
JSONbored merged commit 2da7c92 into JSONbored:main Jun 29, 2026
16 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in gittensory - v1 roadmap Jun 29, 2026
@github-actions github-actions Bot mentioned this pull request Jun 30, 2026
12 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gittensor:feature Gittensor-scored feature linked to a feature issue — scores a 0.25x multiplier.

Projects

No open projects
Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants