robot-md-mcp
OfficialAllows Google Gemini CLI to access robot manifest data and validate/render its contents.
Provides HTTP endpoints (via the included HTTP bridge) for n8n workflows to read robot manifest resources and invoke validation/render tools.
Integrates with OpenAI Codex CLI and ChatGPT Actions to read robot manifests and execute validation/rendering tools.
Provides HTTP endpoints for Zapier to access robot manifest resources and tools.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@robot-md-mcpshow my robot's capabilities"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
robot-md-mcp
The one-command bridge from a
ROBOT.mdfile to any MCP-aware agent. Claude Code, Claude Desktop, Cursor, Zed, Cline, Continue.dev, OpenAI Codex CLI, Google Gemini CLI — any MCP client speaking stdio transport reads your robot's manifest as structured resources. Zero config files.
Where this fits in the stack
This repo is the agent bridge — an MCP server that speaks the open Model Context Protocol and serves your ROBOT.md to any MCP-aware planner. Everything else is independent; adopt one, or all seven.
Layer | Piece | What it is |
Declaration | The file a robot ships at its root. YAML frontmatter + markdown prose. Declares identity, capabilities, safety gates. Spec + Python CLI ( | |
Agent bridge ← this | MCP server that exposes a | |
Gateway / Enforcement (Layer 3) | Mandatory exclusive path between agent intent and any actuator. Receives signed RCAN INVOKE envelopes, verifies manifest provenance, applies tier policy + tool allowlist, dispatches to drivers, signs an audit-bundle entry per action. (Renamed from | |
Wire protocol | How robots, gateways, and planners talk. Signed envelopes, LoA enforcement, PQC crypto. Think HTTP for robots. | |
Python SDK |
| |
TypeScript SDK |
| |
Registry | Permanent RRN identities. Public resolver at | |
Reference runtime | Open-source robot runtime — connects LLM brains to hardware bodies. One implementation of RCAN. |
Related MCP server: mcp-anything
What it does
Reads a local ROBOT.md and exposes it to an MCP client as:
Resources — the client can read at will:
robot-md://<robot_name>/frontmatter(application/json)robot-md://<robot_name>/capabilities(application/json)robot-md://<robot_name>/safety(application/json)robot-md://<robot_name>/body(text/markdown)
Tools — the client invokes on operator request:
validate→{ ok, summary, errors }render→ canonical YAML of the frontmatter
The server re-reads the file on every call. No cache, no watcher, no runtime config.
Who uses this — three examples
Real operator workflows the plugin was designed for. Each example is a single Claude Code session after /plugin install robot-md.
Example 1 — First-time hobbyist with an SO‑ARM101
A maker just assembled their first robot arm and wants Claude to drive it safely.
$ pip install robot-md && robot-md init my-arm --preset so-arm101 \
--manufacturer "Home Lab" --contact-email me@example.com
$ cd my-arm && claudeInside Claude Code:
Operator: what can this robot do?
Claude: (reads
robot-md://my-arm/capabilitiesvia MCP) my-arm is a 6‑DOF SO‑ARM101 with five capabilities:arm.pick,arm.place,arm.reach,vision.describe,status.report. Max payload 0.5 kg. Software E‑stop at 100 ms.Operator: pick up the red block and put it in the bowl
Claude: (reads
/safetyfirst) Thearm.pickcapability has an HITL gate requiring explicit authorization for destructive scopes. The bowl-placement isn't destructive — I can proceed without extra auth. Running now.
What the plugin does here: the using-robot-md skill blocks answering from general robotics priors (the operator's declared 0.5 kg payload overrides Claude's training-data assumptions), enforces a safety-read before any motion, and routes capability questions to MCP resources instead of guessing.
Example 2 — Safety review before a sensitive action
A clinical-lab operator is about to let Claude manipulate a glass vial. They want an explicit safety check, not a generic answer.
Operator: /check-safety action="pick up the glass vial near the centrifuge"
Claude: (invokes the
check-safetyMCP prompt, which cross-references declaredhitl_gates[]) ⚠ Authorization required. Your manifest declares a gate namedfragile-objectswithrequire_auth: truefor scopes matching "glass" and "vial". The gate requires your explicit "yes, authorize" before any motion. I won't proceed until you confirm.Operator: yes, authorize the pick — the vial is capped and empty
Claude: Acknowledged. Executing
arm.pickwith the authorized scope.
What the plugin does here: the /check-safety slash command (an MCP prompt, not a hallucinated protocol) gives operators a deterministic gate check. The skill's rules ban Claude from silently proceeding past an undeclared scope; it either finds a matching gate or surfaces the gap.
Example 3 — Team sharing a fleet-robot manifest
A research team has a shared repo for their TurtleBot-4 logistics robot. They want every engineer who clones the repo to get the same robot context in Claude Code without extra setup.
# From the team lead's laptop, inside the repo:
$ /plugin marketplace add RobotRegistryFoundation/claude-code-plugins --scope project
$ /plugin install robot-md --scope project
$ git add .claude/settings.json && git commit -m "chore: pin robot-md plugin to repo"Now anyone who clones the repo and runs claude inside it gets the plugin auto-loaded (/plugin's project scope reads from the committed .claude/settings.json). The ROBOT.md at the repo root is picked up by the MCP server's cwd-walk — no absolute paths, no environment variables, no onboarding doc.
New teammate, first session: what am I looking at?
Claude: (reads
robot-md://fleet-tb4/contextvia MCP, skill fires) This isfleet-tb4— a TurtleBot-4 warehouse logistics robot registered at RRN‑000000000412 (public record: robotregistryfoundation.org/r/RRN-000000000412). It has six capabilities, two active HITL gates (shelf-height > 2 m, and any motion near the charging dock), and a 4‑hour battery runtime. What do you want to work on?
What the plugin does here: project-scoped install means the robot context travels with the repo. New teammates get identical agent behavior on day one. The registered RRN gives every surface (Code, Desktop, Mobile) the same public identity to anchor against.
REST + OpenAPI bridge — robot-md-http (v0.1, scaffolding)
For agents that don't speak MCP (ChatGPT Custom GPT Actions, OpenAI Agents SDK, n8n, Zapier, plain curl) the same package now ships a Hono-based HTTP bridge that mirrors the MCP tool surface. Localhost-only, npx-launched per project, same posture as the MCP server.
npx -y robot-md-http /path/to/ROBOT.md
# robot-md-http: serving bob on http://localhost:8787
# OpenAPI 3.1: http://localhost:8787/openapi.json
# Health: http://localhost:8787/healthChatGPT Custom GPT Actions can import http://localhost:8787/openapi.json directly. Endpoints mirror the MCP resources (frontmatter, capabilities, safety, body, identity, context) plus POST /validate and POST /render tools.
v0.1 is a scaffold — see issue #3 in robot-md for the full v0.1 spec and the v0.2 hosted-multi-tenant roadmap (RCAN 3.0 envelopes, rate limiting, GPT Store entry).
Not in v0.1 — deferred to v0.2
No signature verification.
ROBOT.mdv0.2 will add signed manifests (.sig) and a key-binding-at-RRN-mint flow; seespec/v0.2-design.md.No robot dispatch.
invoke_skill/query_statusarrive after the v0.2 signing decisions in §13 are finalized.No multi-manifest / fleet mode.
Claude Code plugin — the easiest path
The plugin bundles the using-robot-md skill and auto-registers this MCP server. Two phases: install the plugin once, then set up each robot project.
Phase 1 — Install the plugin (one-time)
Inside Claude Code:
/plugin marketplace add RobotRegistryFoundation/claude-code-plugins
/plugin install robot-md
/reload-pluginsScope — /plugin install defaults to --scope user (the recommended choice for most people). Other scopes:
Scope | When to use | Command |
| Your own machine, every project you open. Install once and forget. |
|
| Your team's repo — pin the plugin in |
|
| Your personal override inside a project (writes to |
|
The same --scope flag works on /plugin marketplace add. Match the scopes: if the plugin is project-scoped, the marketplace should be too, otherwise teammates won't find it.
Phase 2 — Set up a robot project (per project)
# If you don't have one yet, create a ROBOT.md:
pip install robot-md
robot-md init my-robot --preset so-arm101 --manufacturer Acme --contact-email you@example.com
# Then launch Claude Code from the project root:
cd path/to/my-robot
claudeInside the session, run /mcp — you should see robot-md connected. Ask "what can this robot do?" and the using-robot-md skill fires, reading capabilities from the MCP server.
How the MCP server finds your ROBOT.md: it walks up from the directory you launched Claude Code in, picks the first ROBOT.md it finds, and serves that. Launch from the project root and it just works — no config, no env vars.
Registering a real robot (optional): once validated, robot-md register ROBOT.md --manufacturer <...> --contact-email <...> mints an RRN at Robot Registry Foundation and pins metadata.rrn in your file.
Prefer the plain claude mcp add flow below if you need to pin a specific absolute path, run against multiple ROBOT.md files from one session, or install without a marketplace.
Claude Code (CLI) — one command
The fastest way. One line, no config files:
claude mcp add robot-md -- npx -y robot-md-mcp /absolute/path/to/ROBOT.mdThat's it. Open Claude Code — it now reads your robot's frontmatter, capabilities, safety block, and prose body as MCP resources, and can invoke the validate and render tools on request. No harness config, no provider setup, no YAML wrangling.
To confirm it's wired up:
claude mcp list | grep robot-mdTo remove: claude mcp remove robot-md.
Install (standalone)
If you want to run the server yourself:
npx robot-md-mcp /path/to/ROBOT.mdNode 18.20+ required. The claude mcp add flow above uses npx under the hood, so no global install needed for the Claude Code path.
Claude Desktop config
Add this to your claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"robot-md": {
"command": "npx",
"args": ["-y", "robot-md-mcp", "/absolute/path/to/ROBOT.md"]
}
}
}Restart Claude Desktop. Open a new chat — Claude now has the robot's frontmatter, capabilities, safety block, and prose body on tap.
Any MCP-aware agent harness
ROBOT.md is a file. robot-md-mcp is an MCP server. MCP is an open standard. Any agent tool that speaks MCP can ingest ROBOT.md through this server — not just Claude.
The underlying command to register is always the same:
npx -y robot-md-mcp /absolute/path/to/ROBOT.mdStdio transport, no auth. How you wire it depends on the harness:
Harness | How to add |
Claude Code (CLI) |
|
Claude Desktop | JSON snippet in |
OpenAI (Codex CLI, ChatGPT Desktop) | Add to the tool's MCP-server config — command |
Google Gemini CLI | Add to |
Cursor / Zed / Cline / Continue.dev / VS Code MCP extensions | Add via the tool's MCP settings with the same command |
Anything else speaking MCP stdio | Register the |
Create and place one ROBOT.md. Any agent — any provider — reads the same file. That's the whole point.
Tier-0 adoption loop
# Generate a draft from visible hardware
pip install robot-md
robot-md autodetect --write ./ROBOT.md
# Edit the TODOs (robot name, physics type, DoF, capabilities)
# Then point Claude Desktop at it:
# -> add the JSON snippet above to claude_desktop_config.jsonAPI surface
import {
// Core
parseRobotMd,
ParseError,
validateParsed,
renderYaml,
createServer,
VERSION,
// Types
type ParsedRobotMd,
type ValidateResult,
type ServerHandle,
} from "robot-md-mcp";All are importable for programmatic use — e.g. building a custom MCP server on top, or running the parser/validator as part of a larger TypeScript tool.
Development
git clone https://github.com/RobotRegistryFoundation/robot-md-mcp
cd robot-md-mcp
npm install
npm test # vitest: parser, validator, render, server, bin
npm run build # tsup → dist/
npm run sync-schema # refresh bundled schema from ../robot-mdContributing
Schema lives at
RobotRegistryFoundation/robot-md— PR changes there, then re-runnpm run sync-schemahere.Small, focused PRs welcome.
License
Apache 2.0.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/RobotRegistryFoundation/robot-md-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server