relayorb
Flight recorder for AI agents: record, replay & regression-test MCP server tool calls from Claude Code, Cursor, Codex & Claude Desktop.
Install / Use
claude mcp add khalidsaidi -- npx -y github:khalidsaidi/relayorbIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
AI & Machine LearningSupported Platforms
Our assessment of relayorb
relayorb scores 81/100 on our quality scale, 736th of 960 AI & Machine Learning skills we index.
Its MCP Server is 9.2 KB long, well organised into 12 sections with 11 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 10 days ago, so relayorb is actively maintained.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 92/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands (1 minor note below).
- noteInstalls by piping a downloaded script into a shellline 36
curl -fsSL https://relayorb.com/install.sh | sh
Automated pattern scan on 2026-10-18. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
relayorb compared with similar skills
All 4 of these similar skills score higher than relayorb; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| relayorb (this skill)by khalidsaidi | 81 | 3 | 10d ago | MCP Server |
| claude-memby thedotmack | 100 | 101.5k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 98.9k | 3d ago | CLAUDE.md |
| Understand-Anythingby Egonex-AI | 100 | 86.9k | 6d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 75.7k | today | CLAUDE.md |
Frequently asked questions
- How do I install relayorb?
- Run
claude mcp add khalidsaidi -- npx -y github:khalidsaidi/relayorb. The install tabs above show the steps for each supported agent. - Which AI agents does relayorb work with?
- It is written for Claude Code, Claude Desktop, Cursor and OpenAI Codex, as a MCP Server file. Other agents that read the same format can often use it too.
- Is relayorb safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands (1 minor note below). It is Apache-2.0-licensed and scores 92/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is relayorb still maintained?
- The repository was last updated 10 days ago, so relayorb is actively maintained.
Skill content
View source on GitHubRelayOrb
Turn real AI agent sessions into tests for MCP servers.
RelayOrb records the messages between an AI agent (Claude Code, Cursor, Codex, Claude Desktop) and an MCP server. Save a recording, and RelayOrb can:
- Check every new build of your MCP server against it in CI, and fail if any answer changed (
relayorb check). - Replay it in place of the real server, so agent tests run offline with the same answers every time (
relayorb replay). - Show the raw JSON-RPC traffic when a tool call goes wrong: every request, response, error, and latency (
relayorb show).
Who it's for: people who build MCP servers (the main use), people who build agents or apps on top of MCP tools, and anyone who needs the exact protocol messages to debug a tool call.
When you don't need it: if you only want to see what your agent did once, Claude Code, Cursor, and other agent apps already show tool calls. RelayOrb also only works with local (stdio) MCP servers, not remote HTTP ones.
It's a single local binary. No account, no cloud, no telemetry, and free (Apache-2.0).
Website: https://relayorb.com
<!-- tested:start -->Tested
RelayOrb 0.3.3 is tested against 7 real MCP servers (filesystem, everything, memory, time, git, fetch, and GitHub's official server) and 10 stress tests: 5 MB payloads, 2,000-call sessions, parallel recordings, crashes and kills, batches, unicode, and notification floods. They run on Linux x64, Linux arm64, macOS arm64, macOS x64 (Rosetta), Windows x64:
| | Linux x64 | Linux arm64 | macOS arm64 | macOS x64 (Rosetta) | Windows x64 | |---|---|---|---|---|---| | Real MCP servers (binary) | 7/7 | 6/6 | 6/6 | 6/6 | 6/6 | | Stress tests | 10/10 | 10/10 | 10/10 | 10/10 | 9/9 (1 skipped) | | npm package (npx, 0.3.2) | 2/2 | 2/2 | 2/2 | - | 2/2 |
Tested as the MCP layer of real agents: Claude Code, Claude Desktop, Codex CLI, Cursor Agent CLI. A one-hour soak test (167,111 calls) recorded every call with flat memory (9.9 MB). Full results, including the bugs the tests found and what isn't tested yet: TESTING.md · relayorb.com/testing
<!-- tested:end -->Install
curl -fsSL https://relayorb.com/install.sh | sh
Or with npm (bundles the prebuilt binary for macOS, Linux, and Windows):
npm install -g @khalidsaidi/relayorb # or run it without installing: npx @khalidsaidi/relayorb --help
Prebuilt binaries are also attached to each GitHub release, or build from source with cargo install --git https://github.com/khalidsaidi/relayorb relayorb.
Record
Put relayorb record -- in front of any stdio MCP server command. For example, in Claude Desktop's claude_desktop_config.json (Cursor and other MCP clients use the same shape):
{
"mcpServers": {
"filesystem": {
"command": "relayorb",
"args": ["record", "--name", "fs", "--", "npx", "-y", "@modelcontextprotocol/server-filesystem", "/Users/me/notes"]
}
}
}
Without installing anything, use npx as the command:
"command": "npx",
"args": ["-y", "@khalidsaidi/relayorb", "record", "--name", "fs", "--", "npx", "-y", "@modelcontextprotocol/server-filesystem", "/Users/me/notes"]
With Claude Code:
claude mcp add fs -- relayorb record --name fs -- npx -y @modelcontextprotocol/server-filesystem ~/notes
The agent works exactly as before, because bytes are forwarded unchanged in both directions. Each time the agent starts the server, a new session is recorded.
Inspect
$ relayorb list
ID NAME STARTED (UTC) MESSAGES DURATION COMMAND
a25198e1 fs 2026-10-05 08:07:09 9 6.0s npx -y @modelcontextprotocol/server-filesystem /Users/me/notes
$ relayorb show a25198e1
session a25198e1 (fs) started 2026-10-05 08:07:09 UTC (6.0s, exit 0)
command: npx -y @modelcontextprotocol/server-filesystem /Users/me/notes
0.035s -> initialize 49ms ok
0.035s -> notifications/initialized
0.102s -> tools/list 4ms ok
1.310s -> tools/call list_directory 6ms ok
2.004s -> tools/call read_text_file 3ms tool error: Access denied - path outside allowed directories
relayorb show <id> --json prints every call with its full params and response, ready for jq.
Anywhere a session is expected, you can use its --name (the newest session with that name), its id, or any unique id prefix.
Replay
relayorb replay pretends to be the MCP server and answers from a recording:
relayorb replay a25198e1
Use it anywhere a server command goes, for example in an agent test harness, so the agent runs against recorded tool answers instead of live tools.
Matching rules for each incoming request:
- Same method and same params (key order and
_metaare ignored): the recorded answers come back in order. - Otherwise, same method and the same tool, prompt, or resource name: the recorded answers come back in order.
- Once those run out, the last answer is repeated. Anything never recorded gets a JSON-RPC error, so the agent never hangs.
Check (regression tests for MCP servers)
Save a session as a fixture and commit it:
relayorb export a25198e1 -o tests/fixtures/fs-session.json
Then, in CI, re-send the recorded calls to the current build of the server:
$ relayorb check tests/fixtures/fs-session.json -- node dist/server.js
relayorb check: 3 recorded calls against `node dist/server.js`
PASS tools/list 11ms
FAIL tools/call list_directory 4ms
~ result.content[0].text: "[FILE] a.md\n[FILE] b.md" -> "[FILE] a.md"
PASS tools/call read_text_file 0ms
2 passed, 1 failed
The exit code is 0 when everything matches, 1 when an answer changed, and 2 when the server couldn't be started or initialized. Use --ignore-key <name> (repeatable) to skip fields that change on every run, such as timestamps or request ids.
Diff (why did this run behave differently?)
Agents don't do the same thing twice. When one run fails and another passes, relayorb diff finds the first tool call where they went different ways: a different tool, different arguments, or the same call getting a different answer.
$ relayorb diff notes~1 notes
relayorb diff: A = 1e9ae080 (notes) B = e41ecc9a (notes)
client A: claude-code 2.1.292 B: claude-code 2.1.292
server A: secure-filesystem-server 0.2.0 B: secure-filesystem-server 0.2.0
protocol A: 2025-11-25 B: 2025-11-25
calls A: 4 B: 4
First divergence at call #3 (2 matching calls before it): same call, different answer
A: tools/call list_directory {"name":"list_directory",...} [ok]
B: tools/call list_directory {"name":"list_directory",...} [ok]
~ result.content[0].text: "[FILE] cal.txt\n[FILE] todo.txt" -> "[FILE] cal.txt\n[FILE] health.txt\n[FILE] todo.txt"
name~1is the run before the newest one with that name, sorelayorb diff fs~1 fscompares your last two runs. Exported JSON files work too.- The header shows each run's agent build, server version, and protocol, which come from the recorded
initialize. A host update is often the answer to "what changed?". --alllists every difference,--ignore-keyskips noisy fields, and--jsongives machine-readable output. That makes it easy to group many failed runs by their first divergence.- Exit code:
0when the runs match,1when they diverge.
Reference
| Command | What it does |
|---|---|
| relayorb record [--name N] -- <server...> | Run a stdio MCP server and record all traffic |
| relayorb list | List sessions, newest first |
| relayorb show <session> [--json] | Timeline of calls, latencies, and outcomes |
| relayorb export <session> [-o file] | Save a session as a portable JSON file |
| relayorb replay <session-or-file> | Serve recorded answers as a fake MCP server |
| relayorb check <session-or-file> -- <server...> | Diff a live server against a recording |
| relayorb diff <run-a> <run-b> | Find the first tool call where two runs diverged |
| relayorb delete <session> | Delete a session |
Recordings are stored in ~/.relayorb/recordings.db. Override this with --db <path> or RELAYORB_DB.
Good to know
- Recordings contain everything the tools saw and returned, including file contents, API responses, and any secrets passed as arguments. Treat exported session files accordingly before committing them.
- RelayOrb supports the stdio transport, which is what local MCP servers use. Streamable HTTP servers aren't supported yet.
checkanswers server-initiated requests (sampling, roots) with a "not supported" error, so servers that depend on them won't check cleanly.
Development
cargo fmt --all
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace # integration tests need python3 for the mock MCP server
The website lives in site/ (Next.js, statically exported and deployed to Firebase Hosting on pushes to main).
License
Apache-2.0
Related Skills
claude-mem
101.5kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
98.9kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
Understand-Anything
86.9kGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
headroom
75.7kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
