search_genes
Search the Rotifer Gene ecosystem. Returns a list of Genes matching the query, filterable by domain and fidelity.
pagesortquerydomainfidelityper_page
io.github.rotifer-protocol由 GitHub 账号 rotifer-protocol 发布v0.19.7更新于 Nov 3, 2026
Search, compare, and install self-evolving AI Agent Genes ranked by Arena fitness
Rotifer Protocol MCP 服务器:在 IDE 中搜索、比较、安装、构建并运行 AI Agent「Gene」与组合智能体,并按 Arena 适应度排名。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
参照 仓库 中的启动说明。
[npm] [License: Apache-2.0] [Node.js] [MCP]
Build, compose, and run AI agents — directly from your IDE.
Search genes, create agents with composable genomes, run pipelines in a WASM sandbox, and compete in the Arena. Zero config. Works with Cursor, Claude Desktop, Windsurf, and any MCP-compatible client.
Add to .cursor/mcp.json:
Add to claude_desktop_config.json:
Use the same npx command — any client that supports MCP stdio transport will work.
MCP Resources let AI clients reference Rotifer data as context:
Each resource returns what the tool of the same job returns, so a declared tool
set covers both: with --tools=evolve, rotifer://genes/{gene_id}/stats,
rotifer://developers/{username} and rotifer://leaderboard disappear from the
listing and are refused if read directly, because get_gene_stats,
get_developer_profile and get_leaderboard were not asked for.
rotifer://version always answers — it is the server describing itself, not a
capability. Before 0.16.0 these were reachable whatever the tool set said.
MCP Prompts give AI clients guided workflows for common tasks:
Try asking your AI: "Use the rotifer-hello prompt to build me an agent" or "Use rotifer-architect to design an agent for document Q&A".
Zero-config by default — connects to the public Rotifer Cloud API.
To use a custom endpoint, create ~/.rotifer/cloud.json:
Or set environment variables:
All thirty-one tools are available by default. ROTIFER_MCP_TOOLS narrows that
to what a given integration actually needs — useful when the server is attached
to an assistant that should not be able to publish or log in on your behalf:
A name that is neither a preset nor a tool here is ignored, with a note on stderr. If none of the names are, the server does not start: it lists the presets and exits with code 2, rather than running with no tools at all.
The flag and the variable do the same thing, and the flag wins if both are set. Both exist because callers differ in what they can reach: a shell user sets the variable, while something launching this server from a manifest controls only the command line.
A declared set covers the whole surface, not just tools/list. Tools outside it
are refused when called by name; resources that duplicate an
excluded tool are dropped from the listing and refused when read; and the
sandbox escape hatches below stay off unless separately declared. A restriction
with an unlisted way around it is not a restriction.
Tools outside the set disappear from listTools and are refused if called
anyway. The refusal says how to add the tool back and, where one exists, the
rotifer CLI command that does the same job — so a narrowed set is a boundary
you can see and cross deliberately, not a dead end.
Leave it unset and nothing changes.
agent_run and run_gene take no_sandbox, and run_gene also takes
trust_unsigned — options that run Gene code as plain Node.js instead of inside
the WASM sandbox. Narrowing the tool set would mean little if a tool inside the
narrowed set could still do that, so these are refused unless declared at
launch:
Nothing is removed. The option moves from "any caller can set it" to "someone declared it at launch", and you can always do it yourself:
What changes is that an assistant can no longer decide to unsandbox on its own.
Passing no_sandbox: false is asking for the safe behaviour and is never
refused.
install_gene with force used to overwrite a Gene with no way back. It now
moves the old copy into <genes>/.snapshots/ first, and rollback_gene puts it
back:
One snapshot per Gene: the next overwrite of that Gene supersedes it, and a
rollback consumes it. This undoes the last upgrade rather than keeping a
history — list_gene_versions already answers what versions exist upstream.
The server has always told you when it was behind — a line on stderr at startup,
once a day. self-update is the other half:
It refuses any version npm has no provenance
attestation for — this
package publishes from CI with --provenance, so an unattested build is not one
this project released.
Two things worth knowing:
npx, there is nothing to update. An unpinned npx @rotifer/mcp-server re-resolves the latest published version on every run, so
self-update says so and stops rather than installing a global copy that
would shadow it.This is a command you run, not a tool the model can call. Updating means a global install, and a tool could not even report the result honestly — the model would say "updated" while still being served by the old process.
The server normally talks over stdio to the MCP host that launched it. To expose it over Streamable HTTP instead:
127.0.0.1 unless you pass --host. The HTTP endpoint has no
authentication, and its tools act with your signed-in Rotifer account, so it is
not reachable from other machines by default. If you pass a non-loopback
--host, the server says so on stderr when it starts. Earlier versions
listened on every interface.413
with a JSON-RPC error before it is parsed. MCP messages are far smaller than
this; the cap exists because the SDK's default (4 MiB) is the bound
GHSA-46jr-4wx8-v453
describes, where a single request can exhaust the server's memory.GET /health answers {"status":"ok","transport":"streamable-http"} for liveness checks.When you are signed in, each tool call reports a usage record to Rotifer
Cloud: the tool's name, the Gene id it acted on, whether it succeeded, how long
it took, and your user id. That is what get_mcp_stats reads back. Running a
Gene also records the invocation, which the protocol's anti-manipulation
metrics depend on.
It does not send the arguments you pass, the contents of any file, your environment variables, or your local configuration.
Signed out, no usage record is sent. One request does go out either way: installing a Gene bumps that Gene's public install counter. It carries the Gene id and nothing else — no user id, no session, no arguments — and it is how the Arena counts installs. Until 0.15.1 nothing stopped it, and this section said "signed out, nothing is reported", which was not true of an install.
ROTIFER_TELEMETRY=0 now stops all three:
The three are logMcpCall, logGeneInvocation and the track_download call
inside installGene, all in src/cloud.ts — short enough to
read in full. Nothing else here reports anything on its own: every other
outbound call in this server is a tool you invoked doing its job — a query, a
publish, a sign-in — plus the WASM artifact download and one npm version check
per day.
This MCP server works best alongside the Rotifer CLI. The CLI provides the local runtime (WASM sandbox, Arena engine, IR compiler) while the MCP server exposes it all to your AI assistant:
Apache-2.0
来源:README.md,提交 b2c7064
Search the Rotifer Gene ecosystem. Returns a list of Genes matching the query, filterable by domain and fidelity.
pagesortquerydomainfidelityper_pageGet detailed information about a specific Gene by its ID or content_hash, including phenotype, fitness, and metadata. At least one of gene_id or content_hash must be provided.
gene_idcontent_hashGet Arena rankings for a domain. Each row carries a tier — `verified` (measured in a sandbox, with enough independent callers to stand), `under_evaluation` (measured, not yet corroborated), `not_evaluated` (disqualified, or a number that was estimated rather than measured) — and `rank` is null wherever the tier grants no rank. Prefer `verified` when picking a Gene for a capability; an estimated or disqualified number is not a measurement of anything. Also returns F(g) before and after the fidelity discount, safety, success_rate, latency, resource_efficiency, sample size and unique callers.
pagedomainper_pageCompare two or more Genes by their F(g) fitness metrics. Returns side-by-side fitness breakdown.
gene_ids必填Get download statistics for a Gene, broken down by time period (total, last 7 days, 30 days, 90 days).
gene_id必填Get the creator reputation leaderboard. Shows top creators ranked by reputation score, including their published gene count, total downloads, and arena wins.
limitGet a creator's public profile and reputation data by username.
username必填List Genes installed in the local project workspace. Scans the genes/ directory for phenotype.json files and returns metadata, compile status, and cloud origin for each Gene.
domainfidelityproject_rootList Agents registered in the local project workspace. Returns each Agent's name, state, genome composition, strategy, and reputation. Agents are local constructs that compose multiple Genes into pipelines.
stateproject_rootInstall a Gene from the Rotifer Cloud Registry into the local project. Downloads phenotype, metadata, and the compiled WASM artifact (verified against declared size and sha256) when the gene has one. Requires a valid gene_id from search_genes or get_gene_detail.
forcegene_id必填project_rootUndo the last overwrite of a locally installed Gene, restoring the copy that install_gene replaced. Call without gene_name to list what can currently be rolled back. A rollback consumes its snapshot: it undoes one step, not a history.
gene_nameproject_rootMeasure a local Gene in the sandbox and submit the measured result to the Arena. Requires authentication (rotifer login) and a Gene that exists locally — use list_local_genes to see them, install_gene to fetch one. The fitness scores are produced by running the Gene, not supplied by the caller: passing fitness_value, safety_score, success_rate, latency_score or resource_efficiency is refused. Runs `rotifer arena submit <gene> --cloud`.
gene_name必填project_rootCreate a new Agent by composing one or more local Genes. The Agent is saved to .rotifer/agents/ in the project. Genes must exist locally (wrap them first with wrap_gene).
domaingene_ids必填strategypar_mergeagent_name必填compositionproject_rootRun a local Agent by name. Executes via the Rotifer CLI (rotifer agent run <agent-name>). The Agent must exist in .rotifer/agents/. Returns stdout/stderr from the execution.
inputverboseagent_name必填no_sandboxproject_rootCompile a local Gene to WASM via the Rotifer CLI (rotifer compile). The Gene must exist in the local genes/ directory. Returns compilation output.
langcheckgene_name必填wasm_pathproject_rootCheck the local TypeScript→WASM toolchain (esbuild / javy) and report what is missing or misconfigured. Read-only: inspects the environment and changes nothing. Use this when compile_gene fails — a missing or broken toolchain is the most common cause.
project_rootExecute a local Gene via the Rotifer CLI (rotifer run). The Gene must exist in the local genes/ directory. Returns execution output.
inputverbosegene_name必填no_sandboxproject_roottrust_unsignedInitialize a new Rotifer Gene project. Creates a directory with phenotype.json template and starter files. Supports Wrapped, Hybrid, and Native fidelity types.
domainfidelitygene_name必填no_genesisproject_rootScan source files for candidate gene functions or local SKILL.md files that can be wrapped as Genes. Returns discovered candidates with metadata.
pathskillsskills_pathproject_rootWrap a function or SKILL.md as a Rotifer Gene. Generates phenotype.json from the source. The target must exist in the project.
domainfidelitygene_name必填from_skillfrom_clawhubproject_rootTest a Gene in the sandbox. Validates phenotype schema, runs input/output tests, and checks compilation.
verbosegene_name必填complianceproject_rootPublish a Gene to Rotifer Cloud Registry (default destination since v0.8.8). Calling this tool = explicit publish consent. Requires authentication (use login tool first). Validates with V(g) security scan (Grade >= B required), uploads, and optionally submits to Arena. Either gene_name or all=true must be provided.
allchangeloggene_nameskip_arenadescriptionproject_rootskip_securityList the version history chain of a Gene by creator and name. Returns all published versions in chronological order with changelog entries and previous_version_id links.
owner必填gene_name必填Get MCP Server call analytics for a given time period. Returns total calls, success rate, average latency, top tools, and top genes. Requires authentication.
daysCheck current authentication status. Returns whether the user is logged in, their username, provider, and how many minutes until the token expires.
无需输入参数。
Log in to Rotifer Cloud. Opens the browser for OAuth authorization (GitHub or GitLab). After the user authorizes in the browser, credentials are saved locally. This must be done before using arena_submit or publish_gene.
endpointproviderLog out from Rotifer Cloud. Clears locally saved credentials.
无需输入参数。
Get detailed reputation breakdown for a Gene (Arena, Usage, Stability scores).
gene_id必填Get the current logged-in creator's reputation and stats. Requires authentication.
无需输入参数。
Suggest top matching domains from the domain registry based on a description.
description必填V(g) security scan — static analysis for Gene/Skill code safety. Returns a grade (A/B/C/D/?) and per-finding details with severity, file, line, and snippet.
allpathgene_idproject_root已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
{ "mcpServers": { "rotifer": { "command": "npx", "args": ["@rotifer/mcp-server"] } }}{ "mcpServers": { "rotifer": { "command": "npx", "args": ["@rotifer/mcp-server"] } }}You: "Build me an agent for code security scanning"AI: → create_agent({ agent_name: "sec-bot", gene_ids: ["security-scanner", "genesis-code-format"], composition: "Seq" }) Agent 'sec-bot' created with 2-gene Seq genome.
You: "Run it on my project"AI: → agent_run({ agent_name: "sec-bot", input: "{\"path\":\"./src\"}" }) Pipeline complete — 3 findings, 0 critical.You: "Find the best gene for web search"AI: → search_genes({ query: "web search" }) Found 8 genes. Top match: genesis-web-search (F(g) = 0.87, Native)
You: "Compare it against the lite version"AI: → compare_genes({ gene_ids: ["...", "..."] }) Side-by-side: success rate, latency, fitness breakdownYou: "Wrap my function as a gene"AI: → wrap_gene({ gene_name: "my-search", domain: "search.web", fidelity: "Wrapped" }) → compile_gene({ gene_name: "my-search" }) → test_gene({ gene_name: "my-search", compliance: true }) → publish_gene({ gene_name: "my-search", changelog: "Initial release" })┌─────────────────────────────────────────────────┐│ AI IDE (Cursor / Claude / Windsurf) ││ ││ "Find genes for code formatting" ││ │ ││ ▼ ││ ┌─────────────────────┐ ││ │ MCP Client │ ││ │ (stdio transport) │ ││ └────────┬────────────┘ │└───────────┼─────────────────────────────────────┘ │ MCP Protocol ▼┌─────────────────────────────────────────────────┐│ @rotifer/mcp-server ││ ││ 31 Tools 7 Resources 4 Prompts Local Scanner││ ┌──────────┐ ┌───────────┐ ┌────────────┐ ││ │ discover │ │rotifer:// │ │ ./genes/ │ ││ │ lifecycle│ │genes/stats│ │ phenotype │ ││ │ agents │ │developers │ │ agents │ ││ │ auth │ │leaderboard│ └────────────┘ ││ └────┬─────┘ └─────┬─────┘ │ │└───────┼──────────────┼────────────────┼─────────┘ │ │ │ ▼ ▼ ▼┌─────────────────────────────────────────────────┐│ Rotifer Cloud API Local File System ││ (Supabase) (genes/, .rotifer/) │└─────────────────────────────────────────────────┘{ "endpoint": "https://your-supabase-instance.supabase.co", "anonKey": "your-anon-key"}ROTIFER_CLOUD_ENDPOINT=https://your-instance.supabase.coROTIFER_CLOUD_ANON_KEY=your-anon-keynpx @rotifer/mcp-server --tools=evolve # the rank-and-swap preset (10 tools)npx @rotifer/mcp-server --tools=readonly # nothing that writes (14 tools)ROTIFER_MCP_TOOLS=search_genes,get_gene_detail # an exact listROTIFER_MCP_TOOLS=evolve,vg_scan # a preset plus onenpx @rotifer/mcp-server --allow=no-sandboxnpx @rotifer/mcp-server --allow=no-sandbox,trust-unsignedROTIFER_MCP_ALLOW=no-sandbox # same thingrotifer agent run <name> --no-sandboxrotifer run <gene> --trust-unsignedrollback_gene {} → what can be rolled backrollback_gene { gene_name: "formatter" } → restore the copy that was replacedrotifer-mcp-server self-update # check, verify, installrotifer-mcp-server self-update --rollback # back to the version it replacedrotifer-mcp-server serve # http://127.0.0.1:3000/mcprotifer-mcp-server serve --port 8080rotifer-mcp-server serve --host 0.0.0.0 # reachable from other machinesROTIFER_TELEMETRY=0 # also accepts false / offnpm install -g @rotifer/playgroundrotifer init my-agent && cd my-agentrotifer hello --template quality-advisor # your first Agent workspace in seconds