native-mcp register
Manage native-mcp entries inside Claude Code, Claude Desktop, and Cursor configs from the command line. Same binary, no extra tool required (no jq, no claude CLI for the JSON-based clients).
What it does
- Detects which of the three supported clients are installed locally.
- Reads/writes their config files (or invokes
claude mcp addfor Claude Code). - Names each entry
native-<server>by default. - Preserves any other keys in the JSON configs (theme, other servers, etc.).
For other clients (Continue, Cline, Zed, Sourcegraph Cody, …), see Use with any MCP client.
Interactive mode
native-mcp register- Lists detected clients.
- Asks once whether to register every zero-config server in every detected client.
- Done.
The zero-config servers are: time, calculator, json, crypto, encode, text, system, dns, scheduler.
Servers that take required runtime args (filesystem, fetch, sqlite, shell, git, archive, clipboard) are not offered in interactive mode — use the scripted form so you can pass their args.
Scripted mode
# One client, specific servers
native-mcp register claude-code time calculator json
# All detected clients
native-mcp register --all time
# A server with runtime args (everything after `--` is forwarded to the server)
native-mcp register claude-code filesystem -- /tmp /home/you/projects
native-mcp register claude-code shell -- --allow ls,grep,find,cat
native-mcp register claude-code sqlite -- /var/data/app.db
native-mcp register claude-code git -- /home/you/projects/myrepo
# Custom entry name (useful when you want two configurations of the same server)
native-mcp register --name native-shell-build claude-code shell -- --allow make,cargo,go
native-mcp register --name native-time-paris claude-code time -- --default-tz Europe/ParisPositional argument layout
native-mcp register [flags] [client] [server...] [-- server-args...]- The first positional is interpreted as a client name (
claude-code,claude-desktop,cursor) if it matches; otherwise everything is treated as server names. - Anything after
--is forwarded verbatim as runtime args to the server.
Inspect what's registered
native-mcp register --list
native-mcp register --list --jsonOnly entries that start with native- are shown — your other MCP servers are not touched or reported.
Remove
# Remove every native-* entry from every detected client
native-mcp register --remove
# Just one client
native-mcp register --remove claude-code
# Specific servers from a client
native-mcp register --remove claude-code time calculatorTargeting a specific binary
By default the entries are written with the path of the currently-running native-mcp binary (via os.Executable()). Override with --binary:
native-mcp register --binary /usr/local/bin/native-mcp claude-code timePermissions / security
- The command never reads or sends any secrets.
- For Claude Desktop and Cursor, the JSON config is rewritten in place (4-space indent, trailing newline). Existing keys are preserved.
- For Claude Code, the underlying
claude mcp addcommand is invoked — it returns an error if the entry already exists, in which case you can--removeit first.
Why a dedicated subcommand
Earlier versions of the installer would register entries automatically. We pulled that out: an installer should install, registration is a separate concern, and this approach gives you precise control without needing jq or hand-editing JSON.