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:
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.