Madari is a CLI to deploy MCP servers into your AI client setup with reliable install, registration, and sync.
Homebrew (recommended):
brew tap ankitvg/tap
brew install madariGo:
go install github.com/ankitvg/madari/cmd/madari@latestmadari install <package> [options]madari add <name> --command <cmd> --client <client>madari listmadari remove <name>madari enable <name>madari disable <name>madari sync <client> [--dry-run] [--config-path <path>]madari clientsmadari doctor [--client-config target=path ...]madari status [--client-config target=path ...]madari export [--file <path>]madari import --file <path> [--apply]madari help [command]madari version
Notes:
installruns package-manager install (uvby default, ornpmvia--manager npm), auto-registers the server, and syncs to configured clients in one command.installrequires the selected package manager in PATH unless you use--skip-installand pass--command.install --manager npmrequires--commandbecause npm package names can differ from executable names.addresolves--commandto an absolute executable path and stores that path in the manifest.syncskips servers with missing/non-executable command paths and continues syncing others.- Supported sync clients:
claude-desktopandclaude-code. - Default sync config paths:
claude-desktop: platform-specific Claude Desktop config path.claude-code:<current working directory>/.mcp.json.
install --config-pathcan only be used when exactly one sync target is selected.exportwrites a versioned JSON snapshot for backup/sharing (stdout by default).importis dry-run by default and only adds/updates listed servers (--applypersists).
Claude Code project config shape (.mcp.json):
{
"mcpServers": {
"stewreads": {
"command": "/Users/me/.local/bin/stewreads-mcp",
"args": ["--stdio"],
"env": {
"STEWREADS_CONFIG_PATH": "~/.config/stewreads/config.toml"
}
}
}
}Example:
madari install stewreads-mcp
madari install @modelcontextprotocol/server-sequential-thinking --manager npm --command mcp-server-sequential-thinking
madari add stewreads --command /Users/me/.local/bin/stewreads-mcp --client claude-desktop
madari add stewreads --command /Users/me/.local/bin/stewreads-mcp --client claude-code
madari list
madari status
madari sync claude-desktop --dry-run
madari sync claude-code --dry-run
madari export --file madari-snapshot.json
madari import --file madari-snapshot.json
madari import --file madari-snapshot.json --apply
madari doctor
madari help install
madari versionBuild:
make buildTest:
go test ./...- Reads registry state, writes client configs; no daemon or proxy
- Only touches entries Madari registered; leaves everything else alone
- Backup + atomic write on every sync; skips invalid entries rather than aborting
doctorandstatusfor diagnostics- Supports
uvandnpmpackage manager installs, plus manualaddfor any runtime/framework - macOS, Linux, and Windows; supports Claude Desktop and Claude Code sync targets
- Local-first and transparent
- Human-readable config
- Safe writes (backup + atomic replacement)
- Explicit ownership of managed entries
docs/architecture.mddocs/manifest-spec.mddocs/cli-reference.mddocs/troubleshooting.md
Apache License 2.0. See LICENSE and NOTICE.