Harness To Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Harness To Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
harness_to_mcp: Expose harness internal tools as a standard MCP serverTurn any agent harness (Claude Code, Codex, OpenClaw, OpenCode, ...) into an MCP server.
How: harness_to_mcp sits between the harness and its LLM API, grabs the tool list from the hijacked request, and routes MCP tools/call back into the harness tool loop.
claude / codex / openclaw / opencode as an MCP serverinitialize.result.instructionstools/call into the harness tool loop and maps the tool result backopenclaw, opencode)codex)claude)pip install harness_to_mcpThe target harness CLI (claude, codex, openclaw, ...) needs to be installed separately and available on PATH.
#### 1. One-liner to expose a harness as MCP
harness_to_mcp claude
# or: harness_to_mcp codex / openclaw / opencodeEach command starts a server and launches one corresponding harness instance. The harness is started with an isolated config, so it will not touch the user's own config or logs.
The MCP endpoint is then ready at:
http://127.0.0.1:<port>/mcpPoint any MCP client (Claude Desktop, Cursor, your own script, ...) at it and the harness's internal tools show up as standard MCP tools.
You can inspect the exposed tools with python examples/list_tools.py.
#### 2. Only run the server (plug in any harness)
harness_to_mcpThis mode starts only the server. It listens on MCP plus all hijack LLM API routes, but does not launch any harness by itself. Configure your harness's LLM API as the hijack API, send one request, and its internal tools are exposed on MCP. This is also how you plug in claude / codex / openclaw / opencode with your own custom config.
Exposed endpoints:
| Purpose | Path |
|---|---|
| MCP | POST /mcp (alias: `POST /harness_to_mcp/mcp`) |
| OpenAI Chat Completions | POST /harness_to_mcp/v1/chat/completions |
| OpenAI Responses | POST / WebSocket /harness_to_mcp/v1/responses |
| Anthropic Messages | POST /harness_to_mcp/v1/messages |
#### 3. Python API
We also provide a Python interface:
from harness_to_mcp import HarnessToMcp
with HarnessToMcp(port=9330) as server:
print(server.mcp_url) # e.g. http://127.0.0.1:9330/mcp
print(server.hijack_base_url) # e.g. http://127.0.0.1:9330/harness_to_mcpsequenceDiagram
participant C as MCP Client
participant M as harness_to_mcp<br/>MCP Server
participant H as harness_to_mcp<br/>Hijack API Server
participant R as Harness
C->>M: initialize
M->>R: launch harness session
R->>H: send hijacked LLM API request
H-->>M: extract tool list from request
M-->>C: tools/list
C->>M: tools/call
M-->>H: resolve waiting request as tool call
H-->>R: return tool call payload
R->>R: execute internal tool
R->>H: send next request with tool result
H-->>M: match tool_call_id and deliver tool result
M-->>C: MCP tool responseIn short:
initialize → we spawn a harness.tools/list.tools/call → we complete the pending LLM response as a tool call, the harness executes its internal tool, and sends the result back in the next LLM request.tool_call_id, extract the tool result, and return it as the MCP tool response.chat completions, responses, messages.opencode, openclaw, codex, claude.harness_to_mcp with no subcommand) never auto-launches a harness.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.