fix: add .claude-plugin manifest for dotnet-msbuild binlog MCP server - #844
Conversation
Skill Coverage Report
Uncovered:
|
There was a problem hiding this comment.
Pull request overview
This PR fixes Claude Code discovery for the dotnet-msbuild plugin by adding a per-plugin .claude-plugin/plugin.json manifest (so Claude Code can load the binlog MCP server), and also adds an inline mcpServers declaration in the root Claude marketplace manifest entry for additional coverage.
Changes:
- Added
plugins/dotnet-msbuild/.claude-plugin/plugin.jsonwith inlinemcpServers.binlogconfiguration. - Updated
.claude-plugin/marketplace.jsonto includemcpServers.binlogfor thedotnet-msbuildplugin entry.
Show a summary per file
| File | Description |
|---|---|
| plugins/dotnet-msbuild/.claude-plugin/plugin.json | New Claude Code plugin manifest enabling binlog MCP server discovery. |
| .claude-plugin/marketplace.json | Adds inline mcpServers for dotnet-msbuild in the Claude marketplace manifest. |
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 2/2 changed files
- Comments generated: 0
|
✅ Evaluation passed for |
Claude Code discovers MCP servers via .claude-plugin/plugin.json inside each plugin directory. The existing .codex-plugin/ manifest only works for Codex CLI. Add the Claude Code-specific manifest with inline mcpServers config, and also declare mcpServers in the root marketplace manifest entry for belt-and-suspenders coverage. Fixes #840 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
79003b2 to
2213193
Compare
Evangelink
left a comment
There was a problem hiding this comment.
Approving. The fix is correct and spec-compliant:
- plugins/dotnet-msbuild/.claude-plugin/plugin.json — Claude Code reads a plugin's manifest from .claude-plugin/plugin.json, not a root-level plugin.json. Skills/agents were loading via auto-discovery of the skills/ and �gents/ directories, but with no MCP config in any location Claude reads (no .mcp.json, no .claude-plugin/plugin.json), the binlog server never loaded. The inline mcpServers form is valid per the spec, and the new file is byte-identical to the existing root manifest.
- .claude-plugin/marketplace.json — marketplace plugin entries accept any field from the plugin manifest schema, so the inline mcpServers here is valid as belt-and-suspenders coverage.
JSON is well-formed on both files, all CI checks pass, and dotnet-msbuild is the only plugin declaring an MCP server, so the targeted scope is appropriate. Fixes #840.
…rden /version-bump permission check Resolves the 3 findings from the Copilot re-review of ebfc958. Optional third manifest (.claude-plugin/plugin.json): - One plugin (dotnet-msbuild, via #844) also carries plugins/<name>/.claude-plugin/plugin.json — Claude Code needs an inline mcpServers block where the Codex manifest uses a reference. It has its own "version" field, but the script only stamped plugin.json and .codex-plugin/plugin.json, so it would drift. The top-level marketplace.json files carry no version fields, so they stay out of scope. - Sync-PluginVersions.ps1: add .claude-plugin/plugin.json to the universal $HeightExcludedFiles (so it's height-excluded and part of the canonical pathFilters set) and to Get-ChangedPlugins' output-manifest excludes. In the main loop, treat it as optional (stamp-if-present, keyed off Test-Path so a present-but-malformed manifest fails loudly instead of being skipped); codex stays required. Include it in the drift/$changed check and the write path. - All 16 plugins/*/version.json: add ":!.claude-plugin/plugin.json" so they still match the now-4-entry canonical set. Excluding a manifest a plugin doesn't have is a harmless no-op and future-proofs any plugin that later adds one. - CONTRIBUTING.md: document the optional third manifest. version-bump-command.yml: - The actor permission lookup returned a 404 for non-collaborators, which made `gh api` exit non-zero and (under the default `set -eo pipefail` shell) aborted the step before the friendly "requires write access" denial comment. Default to "none" on any API failure so the denial path always runs. This can only ever deny more, never grant. - Add a non-fatal `git add plugins/*/.claude-plugin/plugin.json` so the new manifest is committed, and an empty glob (if no plugin has one in future) can't fail the step. Validated: actionlint clean; script parses; harness scenarios prove all three manifests stamp equally, the Claude manifest is height-excluded (no self-bump), claude-only drift is detected, a plugin without one stamps only its two, a present-but-malformed Claude manifest fails loudly, and the canonical guard accepts the 4-exclusion set. Earlier codex/regression guard suites still pass. Cross-model (GPT-5.5) review drove the Test-Path presence fix. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Summary
Adds a .claude-plugin/plugin.json\ manifest to the \dotnet-msbuild\ plugin so that Claude Code can discover and load the binlog MCP server. Also declares \mcpServers\ inline in the root marketplace manifest entry for belt-and-suspenders coverage.
Problem
Claude Code discovers plugin capabilities (skills, agents, MCP servers) via .claude-plugin/plugin.json\ inside each plugin directory. The existing .codex-plugin/\ manifest only works for Codex CLI. Without the Claude Code-specific manifest, installing \dotnet-msbuild\ via /plugin install\ loads skills and agents but not the binlog MCP server.
Changes
Verification
After this change, running /plugin install dotnet-msbuild@dotnet-agent-skills\ in Claude Code should surface the \�inlog\ MCP server tools.
Fixes #840