swarm-rd-orchestrator-cli
An MCP server that exposes an append-only, SQLite-backed event log for parallel research agents, providing append_delta, pull_deltas, and list_tasks tools over stdio.
README
<div align="center">
swarm-rd-orchestrator-cli
Ray-native context and memory sharing for parallel research agents, with an agent-native CLI and MCP server.
</div>
An append-only, SQLite-WAL-backed event log wrapped as a Ray actor, so parallel agents can write findings and pull each other's without a shared mutable store, plus a CLI and MCP server so both humans and other agents can drive it directly.
This is a Milestone 1 prototype (2026-08-03): validate the approach on a real task before building further. See Locked decisions below and spike.py for the actual validation harness.

Table of Contents
- Install
- Features
- Quickstart
- Command reference
- Comparison
- What is swarm-rd-orchestrator-cli, and why does it exist
- Build from source
- Run the tests
- Run the actual validation spike
- Locked decisions (2026-08-03)
- FAQ
- Contributing
- License
Install
pip install swarm-rd-orchestrator-cli
# or
npm install -g swarm-rd-orchestrator-cli
Either gives you a swarm-rd-cli command on your PATH. The npm package is a thin wrapper around the Python CLI: it execs the real binary, it does not reimplement it. Install the Python package too if you use the npm one.
Status: live on both registries as of 2026-08-04. PyPI is at 0.0.2 (published via GitHub Actions OIDC, no stored token); npm is at 0.0.1. Both were verified with a real install and a real command run in a clean environment, not just a successful upload.
Features
- Atomic append, proven, not just claimed. A dedicated test simulates a crash mid-write and confirms the SQLite WAL layer leaves zero partial rows, not just a description of the guarantee.
- Structured output on every data command.
--jsononappend,pull, andlist-tasksmeans an agent shelling out to this CLI never has to screen-scrape human-formatted text. - An MCP server, not just a CLI.
swarm-rd-cli mcpexposes the same three operations as typed tools over stdio, so an agent can call this programmatically instead of spawning a subprocess. - Concurrency tested with real Ray actors, not mocked. The load-bearing test runs 3 actual Ray actors appending concurrently and reconciles the result, the same mechanism the real workload uses.
- Malformed input fails loudly. A delta missing
task_id,agent_id, orcontentraisesInvalidDeltaErrorbefore touching storage. No silent drops.
Quickstart
swarm-rd-cli append task-1 agent-a "found a race condition in the retry loop" --kind result
swarm-rd-cli append task-1 agent-b "confirmed: retry loop isn't holding the lock" --kind result
swarm-rd-cli pull task-1
# [1] (agent-a/result) found a race condition in the retry loop
# [2] (agent-b/result) confirmed: retry loop isn't holding the lock
swarm-rd-cli --json pull task-1 # structured output for scripts/agents
swarm-rd-cli list-tasks # every task_id with a delta count
swarm-rd-cli mcp # run as an MCP server over stdio
Every data-returning command supports --json for agent and script consumption, no screen-scraping required. The mcp subcommand exposes append_delta, pull_deltas, and list_tasks as typed MCP tools over stdio, so an agent can call this programmatically instead of shelling out.
Command reference
Generated from the CLI's own --help output:
usage: swarm-rd-cli [-h] [--db DB] [--json] {append,pull,list-tasks,mcp} ...
positional arguments:
{append,pull,list-tasks,mcp}
append append a delta to the event log
pull pull deltas for a task
list-tasks list every task_id with a delta count
mcp run as an MCP server over stdio
options:
-h, --help show this help message and exit
--db DB path to the event log (default: swarm-events.db)
--json structured JSON output (for agent/script use)
usage: swarm-rd-cli append [-h] [--kind {note,result,tool_output}]
task_id agent_id content
positional arguments:
task_id
agent_id
content
options:
-h, --help show this help message and exit
--kind {note,result,tool_output}
usage: swarm-rd-cli pull [-h] [--since SINCE] task_id
positional arguments:
task_id
options:
-h, --help show this help message and exit
--since SINCE cursor to pull after
Comparison
swarmmesh is a sibling project in this author's portfolio, also published as swarmmesh-cli on PyPI and npm. It's the more complete option today on almost every dimension below. This project exists as a deliberately Ray-native alternative, not because swarmmesh falls short.
| swarm-rd-orchestrator-cli | swarmmesh-cli | |
|---|---|---|
| Transport | Ray actor (in-process / distributed) | HTTP server |
| Storage | SQLite, WAL mode | In-memory by default, or SQLite via --persist |
| Cross-language | Python only | Python and Node |
| Memory search/ranking | None (pull by task_id only) |
BM25 keyword ranking on memory queries |
| MCP server | Yes | Yes |
| Published on PyPI/npm | Yes, live | Yes, live |
| CI | Yes | Yes |
If the Ray-native distributed-compute angle doesn't end up mattering for your use case, use swarmmesh instead. It's live, tested against real usage, and does more.
What is swarm-rd-orchestrator-cli, and why does it exist
swarm-rd-orchestrator-cli is a shared, durable event log for parallel AI research agents built on Ray's actor model. Each agent writes findings as structured deltas; any other agent can pull the full history for a task without a shared mutable store or a coordinating server process.
It exists to test a specific, narrow hypothesis: that Ray's actor and object-store model is a better fit for coordinating genuinely large numbers of parallel research agents than an HTTP-based coordination layer. That hypothesis is unproven. The project ships as a Milestone 1 spike specifically to test it against a real workload before any further investment, see Run the actual validation spike.
Build from source
git clone https://github.com/RudrenduPaul/swarm-rd-orchestrator.git
cd swarm-rd-orchestrator
python3 -m venv .venv
.venv/bin/pip install -e ".[dev,mcp]"
Requires Python 3.10 or newer (needed for the mcp SDK dependency).
Run the tests
.venv/bin/pytest test_event_log.py -v
9/9 passing, including the load-bearing test: 3 concurrent Ray actors appending to one shared event log, reconciled with zero lost or duplicated deltas.
Run the actual validation spike
Edit REAL_TASK_ID, REAL_TASK_DESCRIPTION, and the sample agent findings in spike.py to reflect a real research task, then:
.venv/bin/python3 spike.py
Read the printed rubric at the end. The decision rule: fewer than 3 qualifying architectural failure cases against raw Ray or LangGraph means falling back to a thin CLI wrapper instead of building this out further.
Locked decisions (2026-08-03)
- Primitive: Ray (actor model and object store), LangGraph as fallback
- Storage: SQLite, WAL mode
- Delta shape:
{task_id, agent_id, timestamp, content, kind} - Malformed delta raises
InvalidDeltaError, never silent - License: Apache 2.0
- Python: 3.10 or newer, required for the
mcpSDK - Publishing: live on PyPI (
0.0.2, via GitHub Actions OIDC Trusted Publishing, no stored token) and npm (0.0.1), both verified with a real clean-environment install
FAQ
What does this actually do? It gives parallel AI agents, running as Ray actors, a shared and durable place to write findings and pull each other's, without stepping on each other's state. It's a transport and persistence layer, not an orchestration framework: it doesn't schedule agents or decide what they do.
How is this different from swarmmesh?
See Comparison above. Same core idea, different transport (Ray actors instead of HTTP), and swarmmesh is currently the more complete, already-published option.
Does this work on Windows, macOS, and Linux? Tested on macOS. Ray itself supports Linux and macOS natively; Windows support for Ray is more limited upstream, so treat Windows as unverified for this project specifically until someone confirms it.
Does this need my own API keys? No. This project makes no LLM calls of its own. It's a coordination layer that your own agents, whatever model or framework they use, write to and read from.
Is this safe to depend on?
No, not yet. This is a pre-validation Milestone 1 spike (versions 0.0.x), not a stable release. The event log's core guarantees (atomic append, no partial writes) are tested in test_event_log.py, but the project hasn't been validated against a real multi-agent workload beyond the spike script yet.
How do I use this from an agent, not just a human?
Either shell out to the CLI with --json on every command, or run swarm-rd-cli mcp and connect to it as an MCP server. Both give structured, parseable output.
Is this a library or just a CLI?
Both. event_log.py's EventLog and EventLogActor classes are directly importable if you're already in Python and don't need the CLI or MCP layer.
What license is this under, and can I use it commercially? Apache 2.0. Commercial use, modification, and redistribution are all permitted under its terms; see LICENSE for the full text.
Contributing
There's no CONTRIBUTING.md yet since this is a pre-validation spike, not an accepted-contributions project. Open an issue if you want to discuss a change before this exists formally.
License
Apache 2.0. See LICENSE for the full text.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。