opp-repl-mcp-server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited opp-repl-mcp-server (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.
opp_repl ships an MCP server that lets an AI assistant execute Python in the live IPython session and browse auto-generated documentation resources. It speaks two transports:
--mcp-socket) — recommended for localuse. No token; access is controlled by 0600 file permissions. AI tools connect through the `opp_repl_mcp_bridge` stdio bridge, which most MCP clients launch for you.
--mcp-port) — for remote clients orones that only speak HTTP. Requires a bearer token (or an explicit bypass) outside opp_sandbox.
Upstream reference: https://github.com/omnetpp/opp_repl/blob/main/doc/mcp_server.md
pip install "opp_repl[mcp]"
--mcp-port defaults to 0 (disabled) and --mcp-socket is unset. You must explicitly enable one of them; they are mutually exclusive (passing both is an error).
Start the REPL with a socket:
opp_repl --mcp-socket --load "etc/*.opp" # default per-user path opp_repl --mcp-socket /tmp/opp_repl/mcp.sock ... # explicit path
$XDG_RUNTIME_DIR/opp_repl/mcp.sock, falling back to/tmp/opp_repl-<uid>/mcp.sock.
0600 permissions are the accesscontrol. --mcp-token-hash / --mcp-bypass-token-hash-check are rejected with --mcp-socket.
AI clients reach the socket through the stdio bridge:
opp_repl_mcp_bridge # default socket path opp_repl_mcp_bridge --mcp-socket <path> # explicit path
opp_repl_mcp_bridge --help prints the resolved default path and ready-to-paste client config snippets.
TOKEN=$(python3 -c 'import secrets; print(secrets.token_urlsafe(32))') HASH=$(printf '%s' "$TOKEN" | shasum -a 256 | cut -d' ' -f1)
opp_repl --mcp-port 9966 --mcp-token-hash "$HASH" --load "etc/*.opp"
http://127.0.0.1:9966/mcp (stateless streamable HTTP).Authorization: Bearer <TOKEN> (the raw token, notthe hash).
opp_sandbox, starting TCP mode without --mcp-token-hashAND without --mcp-bypass-token-hash-check raises an error.
--mcp-bypass-token-hash-check disables auth (trusted networksonly). Inside opp_sandbox the auth requirement is waived automatically — see opp-repl-sandbox.
execute_python(code: str) -> strThe only MCP tool. Runs code in the SAME IPython namespace the interactive user sees — all opp_repl functions, every loaded project's {name}_project variable, and any prior session state.
Returns the repr of the last expression (if any) followed by captured stdout/stderr/logging; output is also streamed to the client as log notifications and printed to the REPL console live. Per the tool's own guidance: read the documentation resources first, don't guess signatures, and don't `print()` just to view a value (the last expression's repr is returned automatically).
| URI | Description |
|---|---|
opp-repl://guides | List guide topics with 1-paragraph summaries |
opp-repl://guide/{topic} | One guide (e.g. fingerprint_tests) |
opp-repl://packages | List sub-packages with summaries |
opp-repl://package/{package_name} | Package docstring + per-class summaries |
opp-repl://class/{class_name} | Full class doc + method signatures |
opp-repl://method/{class_name}/{method_name} | One complete method docstring |
opp-repl://function/{function_name} | One complete function docstring |
Names can be fully qualified (opp_repl.simulation.workspace.SimulationWorkspace) or short (SimulationWorkspace).
claude mcp add --transport stdio opp_repl -- opp_repl_mcp_bridge
…or add to .mcp.json (project) / ~/.claude.json (user):
{
"mcpServers": {
"opp_repl": { "type": "stdio", "command": "opp_repl_mcp_bridge" }
}
}~/.codeium/windsurf/mcp_config.json){ "mcpServers": { "opp_repl": { "command": "opp_repl_mcp_bridge" } } }.vscode/mcp.json){ "servers": { "opp_repl": { "type": "stdio", "command": "opp_repl_mcp_bridge" } } }{
"mcpServers": {
"opp_repl": {
"url": "http://localhost:9966/mcp",
"headers": { "Authorization": "Bearer <your_token>" }
}
}
}Pass --mcp-socket <path> in the bridge's args (or opp_repl_mcp_bridge --mcp-socket <path>) when the REPL uses a non-default socket path.
opp-repl://guides → which task-level guides exist.opp-repl://guide/{topic} → concrete examples.opp-repl://packages → find the relevant sub-package.opp-repl://package/{name} → compact API overview.opp-repl://class/... / opp-repl://function/... → full signatures.execute_python(...) with the chosen approach.execute_python calls. Two agents on one server stomp on each other; run one REPL per agent, or share deliberately (see opp-repl-shared-terminal).
execute_python runs arbitrary code as you. Treat the endpointas privileged; never expose TCP mode on a public network unauthenticated. For isolation, run inside opp_sandbox.
— don't pass --mcp-port / --mcp-socket.
its state until the process exits.
opp-repl-shared-terminal — one live REPL driven by a human (tmux)AND an AI (MCP) at once.
opp-repl-sandbox — run the MCP server under bubblewrap isolation.opp-repl-repl-usage — driving the same kernel from a terminal.opp-repl-ai-workflows — end-to-end recipes for AI integration.opp-repl-overview — map of which skills to load when.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.