Skip to content

ci: run the Roslyn MCP in the CI @claude agent #29

Description

@williamdewitt

Context

We wired dotnet-claude-kit into the repo at repo scope (.claude/settings.json, commit 7300034). Locally the kit's agents, commands, skills, and the 15 Roslyn MCP tools are all live. The CI agent-in-the-loop (.github/workflows/claude.yml) runs in the checked-out repo, so it should inherit the kit's skills/agents/commands for free — but the cwm-roslyn-navigator MCP server needs a .NET runtime to start, which claude.yml does not currently set up.

See docs/design/dotnet-claude-kit-adoption.mdOpen items.

Goal

Make the kit — especially the Roslyn MCP tools — available to the @claude agent when it runs in CI, so issue-driven work gets the same navigation/quality tooling we have locally.

Acceptance criteria

  • Verify inheritance first. Confirm whether claude-code-action actually picks up the repo's .claude/settings.json (extraKnownMarketplaces + enabledPlugins) in CI — i.e. does the in-CI agent get the kit's skills/agents/commands? Record the finding in the PR description. If it does not, wire the plugin explicitly via the action's inputs instead.
  • Add a .NET setup step (actions/setup-dotnet, pinned to global.json) to the claude job, before the Run Claude step, so the cwm-roslyn-navigator MCP server can start.
  • Ensure the Roslyn MCP server is available to the in-CI agent (install/restore the cwm-roslyn-navigator tool the way the plugin provides it). Confirm at least one Roslyn tool (e.g. get_project_graph) is callable in a CI run.
  • Keep the existing trusted-actor guard, risk:* → model routing, --max-turns cap, and the AGENT_PAT auto-PR step unchanged in behaviour.
  • Update docs/design/dotnet-claude-kit-adoption.md (Open items) and docs/design/development-loop.md (step 5) to record the outcome — in the same PR.
  • If full MCP-in-CI proves infeasible without disproportionate complexity (e.g. solution-index cold-start cost on every @claude run), document the finding and a recommended deferral in the adoption doc instead of forcing it — a clear "why not yet" is an acceptable outcome.

Definition of done

  • claude.yml change merged via the normal gate. This is a .github/workflows/** change → risk:core, CODEOWNERS-reviewed, never auto-merges.
  • The adoption + dev-loop docs reflect reality.
  • A note in the PR on cold-start cost (the Roslyn MCP indexes the solution) so we can decide whether to gate it behind a label.

Pointers

  • .github/workflows/claude.yml — the workflow to change.
  • docs/design/dotnet-claude-kit-adoption.md — Open items + the adopt/decline context.
  • The kit's MCP config: server id cwm-roslyn-navigator, launched as cwm-roslyn-navigator --solution ${workspaceFolder}.
  • global.json — pin setup-dotnet to this.

Metadata

Metadata

Assignees

No one assigned

    Labels

    agentEligible for autonomous agent pickuparea:ciCI/CD workflows + automationpriority:p2Normal priorityreadyHas acceptance criteria + DoD; pickable by the looprisk:coresrc/Caliber.Webhooks; code-owner review (Opus, high effort)type:ciCI configuration

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions