/harness-mcp-scan
Static security scan of a harness's declared MCP surface via `harness mcp-scan {path}`. Reads `.mcp/servers.json` + `.harness/claims.json`. Pure-read, no dispatch. Exits 1 on findings at or above `--fail-on` severity.
Claude Code
$ npx -y skills add ruvnet/ruflo --skill harness-mcp-scan --agent claude-code
Codex
$ npx skills add ruvnet/ruflo --skill harness-mcp-scan -a codex -y
Cursor
$ npx skills add ruvnet/ruflo --skill harness-mcp-scan -a cursor -y
Gemini CLI
$ npx skills add ruvnet/ruflo --skill harness-mcp-scan -a gemini-cli -y
GitHub Copilot
$ npx skills add ruvnet/ruflo --skill harness-mcp-scan -a github-copilot -y
OpenCode
$ npx skills add ruvnet/ruflo --skill harness-mcp-scan -a opencode -y
Windsurf
$ npx skills add ruvnet/ruflo --skill harness-mcp-scan -a windsurf -y
SKILL.md
harness-mcp-scan.SKILL.mdname: harness-mcp-scan
description: Static security scan of a harness's declared MCP surface via `harness mcp-scan {path}`. Reads `.mcp/servers.json` + `.harness/claims.json`. Pure-read, no dispatch. Exits 1 on findings at or above `--fail-on` severity.
argument-hint: "[--path .] [--fail-on low|medium|high] [--format table|json]"
allowed-tools: BashCalls `harness mcp-scan` to enumerate every declared MCP server + tool and flag policy / permission / dependency issues. Never executes any tool; pure static analysis.
Algorithm
Implementation: [`scripts/mcp-scan.mjs`](../../scripts/mcp-scan.mjs).
1. Invoke the pinned `harness` binary (`metaharness@~0.4.1`, resolved from a local install or the one-time `~/.ruflo/metaharness-cache-<pin>` cache — never `@latest`): `harness mcp-scan <path> --json`. 2. Parse `findings[]` with `{ severity, id, server, tool, message }`. 3. `--fail-on <severity>`: exit 1 when any finding is at or above that level. Default `high`. 4. Output JSON (default) or markdown table.
Severity rank
| Severity | Rank | |---|---:| | low | 1 | | medium | 2 | | high | 3 |
`--fail-on high` (default) only fails on HIGH; `--fail-on medium` also fails on MEDIUM; `--fail-on low` fails on any finding.
CI integration
- name: MCP static scan
run: node plugins/ruflo-metaharness/scripts/mcp-scan.mjs --fail-on high
The exit code is the only thing CI watches; the JSON output goes to artifacts for human review.
Graceful degradation
When `harness` binary is unavailable (no network, blocked registry), emits structured `{ degraded: true, reason: 'metaharness-not-available' }` and exits 0. Ruflo continues — ADR-150 architectural constraint.
Read more
name: harness-mcp-scan
description: Static security scan of a harness's declared MCP surface via `harness mcp-scan {path}`. Reads `.mcp/servers.json` + `.harness/claims.json`. Pure-read, no dispatch. Exits 1 on findings at or above `--fail-on` severity.
argument-hint: "[--path .] [--fail-on low|medium|high] [--format table|json]"
allowed-tools: BashCalls `harness mcp-scan` to enumerate every declared MCP server + tool and flag policy / permission / dependency issues. Never executes any tool; pure static analysis.
Algorithm
Implementation: [`scripts/mcp-scan.mjs`](../../scripts/mcp-scan.mjs).
1. Invoke the pinned `harness` binary (`metaharness@~0.4.1`, resolved from a local install or the one-time `~/.ruflo/metaharness-cache-<pin>` cache — never `@latest`): `harness mcp-scan <path> --json`. 2. Parse `findings[]` with `{ severity, id, server, tool, message }`. 3. `--fail-on <severity>`: exit 1 when any finding is at or above that level. Default `high`. 4. Output JSON (default) or markdown table.
Severity rank
| Severity | Rank | |---|---:| | low | 1 | | medium | 2 | | high | 3 |
`--fail-on high` (default) only fails on HIGH; `--fail-on medium` also fails on MEDIUM; `--fail-on low` fails on any finding.
CI integration
- name: MCP static scan run: node plugins/ruflo-metaharness/scripts/mcp-scan.mjs --fail-on high
The exit code is the only thing CI watches; the JSON output goes to artifacts for human review.
Graceful degradation
When `harness` binary is unavailable (no network, blocked registry), emits structured `{ degraded: true, reason: 'metaharness-not-available' }` and exits 0. Ruflo continues — ADR-150 architectural constraint.
📖 RuFlo Explained — Build an AI Team That Plans, Remembers, Tests, and Improves A 14-chapter guide: from the basic idea to a first useful task, then memory, agent teams, plugins, cost and verification. Agent = Model + Harness.
Other skills on ruflo.
More skills from other plugins.
agentmail
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
bmad
Answers BMad questions and recommends the next skill from what is installed. Use when the user asks bmad for help, what to do…
Questions about harness-mcp-scan.
- Which coding agents can use harness-mcp-scan?
- harness-mcp-scan installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

