Skip to content

MCP servers

The steer plugin ships an .mcp.json (source: plugins/steer/.mcp.json) that wires local Claude Code sessions to a small set of Model Context Protocol servers. Because they ship with the plugin rather than the scaffold, every repo that enables steer picks them up centrally and they refresh on /plugin update — there is no per-repo .mcp.json to scaffold, drift, or reconcile. Each server still goes through Claude Code's per-server approval the first time it connects, and a repo may add its own project .mcp.json for product-specific servers (it merges additively with the plugin's). This page is kept in sync with the plugin's .mcp.json and the scaffold README.md by /plugin-docs; the nav/orphan check in scripts/validate_docs.py guards that it stays linked, but its server-by-server content is reconciled by hand against the source of truth.

Local sessions only — not CI

The plugin's .mcp.json configures the Claude Code you run on your machine. GitHub Actions does not read it — the in-CI agent loads steer and its tools through the action's inputs instead (see GitHub Actions integration). Interactively authenticated MCP servers may also be absent in headless/cron runs (see Known limitations).

Claude Cowork doesn't use this file — MCP config isn't shared across surfaces

This .mcp.json is read by the Claude Code CLI / Code tab, not by the Cowork or Chat tabs, which wire MCP through their own Connectors. On Cowork the ${GITHUB_PAT} github server can't authenticate (no shell to export the PAT into) — so for GitHub work in Cowork, enable the built-in GitHub connector instead. See Known limitations → Claude Cowork's sandbox.

Servers

Server Transport Auth Purpose
github HTTP (api.githubcopilot.com/mcp/) ${GITHUB_PAT} (your shell) Read issues, comment on PRs, inspect workflow runs.
context7 HTTP (mcp.context7.com/mcp) none (optional CONTEXT7_API_KEY) Pull up-to-date, version-accurate library/API documentation on demand.

github

Wires the session to GitHub's hosted MCP server so tracker reads/writes can go through MCP rather than shelling out. It is the preferred path for /steer:tracker-sync, which falls back to the gh CLI and then a manual floor when no MCP tracker tool is present.

The config references ${GITHUB_PAT}; the token never lives in the repo — you export a fine-grained PAT from your shell. Full setup (required scopes, shell export, secret-manager option) is in the scaffold README.md → "GitHub MCP server", reachable from any bootstrapped repo.

Never commit the token

Don't put the PAT in a repo file (even a gitignored one) or paste it into a Claude message.

Office-document conversion is not a server

Earlier versions wired Microsoft's markitdown as a third MCP server. It was removed: a plugin MCP server starts automatically whenever the plugin is enabled, so every session paid a uvx markitdown-mcp subprocess to serve the one skill that needs it (/steer:intake).

The same tool now runs on demand as the scaffold's mise task, which /steer:intake already used as its deterministic committable path:

mise run convert:doc path/to/document.docx     # Markdown on stdout

It runs uvx --from 'markitdown[all]' markitdown — the [all] extras are load-bearing, since the bare package ships no format handlers — so it needs uv (and a Python for uv to manage) on PATH — no token. The scaffold mise.toml pins node, python, and uv as an always-installed agent-runtime baseline, so mise install makes this work out of the box regardless of product stack. First use auto-fetches the package from PyPI.

PDFs and images don't need it

Claude's native Read tool already handles PDFs (it renders pages visually) and images. Use convert:doc for the Office binaries specifically.

Stale entries are harmless

A repo bootstrapped before the removal may still list a markitdown server in .mcp.json or .vscode/mcp.json. Nothing breaks — it just starts a server nothing calls. /steer:sync clears it.

context7

Wires the session to Context7's hosted MCP server, which returns up-to-date, version-accurate documentation for thousands of libraries and frameworks on demand. It pulls the docs for the exact version in play instead of guessing.

This is not discretionary: rule 10-stack names this server as how to satisfy its own instruction — "when you pick or change a piece, verify the current stable version in-session via the bundled context7 MCP server — never from training-data memory." Reach for it whenever a version, API surface, or configuration question would otherwise be answered from training data. (For release-support windows and EOL dates, CONVENTIONS.md (via /steer:reference conventions) points at the registry, endoflife.date, or the vendor's own site — those are not library docs and context7 does not carry them.)

Like github, it's an HTTP server (https://mcp.context7.com/mcp), so there is no local process, package fetch, or runtime dependency — nothing to install and nothing on PATH to break. It connects with no token: the anonymous free tier works out of the box.

Optional API key for higher rate limits

A CONTEXT7_API_KEY is optional — it only raises rate limits. If you hit them, get a key from context7.com, export it from your shell, and add it via your own project .mcp.json (which merges additively with the plugin's) as an Authorization header — don't edit the plugin-managed .mcp.json, which refreshes on /plugin update.

Hosted service — queries leave your machine

Like the github server, context7 is a third-party hosted service: the library names and queries you send go to context7's API. Don't send anything sensitive through it.

Verifying

Restart Claude Code in the repo and run /mcp. Each configured server should report connected. A server that shows disconnected means its prerequisite is missing — typically a GITHUB_PAT not exported (for github). Nothing breaks when a server is disconnected; only that server's tools are unavailable.