MCP solved how AI agents integrate with other systems. MCPB solved how users install them. But if you're building MCP tools, you're still copying JSON configs, wrestling with dependencies, and manually testing against clients.
tool-cliis the missing piece. It handles the entire lifecycle from scaffolding to publishing, so you can focus on building your tool.
demo.mp4
Growing marketplace: discover and install MCPs from tool.store
Works with your stack: Claude Code, Cursor, OpenCode, VS Code, and more
Ship your own MCP: create your own MCP server interactively with
tool initUnified proxy: run all your MCPs through a single
tool runinterfaceMCPs as CLIs: invoke any tool directly from your terminal with
tool callConfigure once: set it up once, use it everywhere
Built for both humans and agents: clean output that works in terminals and AI workflows
Encrypted by default: API keys and secrets are encrypted at rest
OAuth just works: browser flow, token refresh, secure storage handled for you
Fully local: your API keys and tokens never leave your machine
Session support: keep stdio servers alive and target them with multiple calls (coming soon)
Sandboxed execution: run tools in isolated environments (coming soon)
macOS / Linux:
curl -fsSL https://cli.tool.store | shWindows:
irm https://cli.tool.store/windows | iexOr with Cargo (any platform):
cargo install --git https://github.com/zerocore-ai/tool-cli --locked
Get your first MCP tool published in three steps.
tool init my-toolThis gives you a working MCP server with a valid
manifest.json. Just follow the prompts to pick your language and transport.For bundled packages, you need to run build.
tool build my-toolAlready have an MCP server?
Run `tool detect` in your project to see what tool-cli finds. Then `tool init` will generate a manifest from your existing code.tool detect my-tool # shows detected type, transport, entry pointtool init my-tool # generates manifest.json
tool info my-toolShows you what your server exposes. Tools, prompts, resources. This is what clients will see when they connect.
tool call my-tool -m hello -p name="Steve"You can call any method directly. No client needed.
Method shorthand
MCP tools often use `toolname__method` naming. You can use `.` as shorthand.tool call bash -m .exec -p command="ls -la" # expands to bash__exectool call files -m .fs.read -p path="/tmp" # expands to files__fs__readtool run my-toolStarts the mcp server for connection.
tool logintool publish my-toolLog in once, then publish. Now anyone can install your tool.
Have native binaries or platform-specific deps?
Use multi-platform publishing to create separate bundles for each OS/architecture:
tool publish my-tool --multi-platformSee Multi-Platform Bundles for details.
tool-cli essentially turns your MCP servers into CLIs. You can inspect, call, and compose tools directly from the terminal. It is the foundation for building code-mode agents.
tool search filesystemSearch the registry for tools. You'll see names, descriptions, and download counts.
tool grep "file"Search across all installed tools - server names, tool names, descriptions, and schema fields.
tool preview library/open-dataInspect a tool from the registry without installing it. See its available methods before you commit.
tool preview library/bash -m execPreview a specific method to see its input and output schemas.
tool install library/bashInstalls a tool from the registry. You can also install from a local path.
tool listSee what you have installed.
tool run library/bashStarts the tool with its native transport. Connect your MCP client to it.
You can also use
--exposeto bridge between transports.tool run <namespace/remote-mcp> --expose stdio # HTTP backend to stdiotool run <namespace/local-mcp> --expose http --port 3000 # stdio backend to HTTP
tool config set library/terminalSome tools need configuration like API keys. This walks you through setting them up interactively. You can also pass values directly with
tool config set library/terminal KEY=VALUE.tool config get library/terminalCheck what config values are set.
tool config listSee all tools that have saved configuration.
tool config unset library/terminalRemove config and credentials for a tool, or use
--allfor all tools.
tool info library/bashSee what a tool exposes. Tools, prompts, resources.
tool call library/bash -m exec -p command="echo hello"Call a method directly. Great for testing things out.
Once you've installed some tools, you probably want to use them in your favorite AI app. Instead of manually editing JSON configs, just run:
tool host add claude-desktop library/open-dataThis registers the tool with the host. Works with Claude Desktop, Cursor, VS Code, Claude Code, Codex, Windsurf, Zed, Gemini CLI, Kiro, Roo Code, and OpenCode.
tool host list # see all supported hosts tool host add cursor library/open-data # add a tool to Cursor tool host add vscode # add all installed tools tool host remove claude-desktop # remove tools from a host tool host show cursor # preview the generated configYou can specify individual tools or omit them to register all installed tools. The command creates backups before modifying anything, so your original config is safe.
Most MCP tools are pure JavaScript or Python and work everywhere with a single bundle. But if your tool has platform-specific dependencies, you need multi-platform publishing:
- Native binaries (Rust, Go, C++)
- Node.js with native addons (better-sqlite3, sharp, etc.)
- Python with compiled extensions (numpy, pandas, etc.)
Multi-platform creates separate bundles for each OS/architecture. Users automatically get the right one. Learn more about multi-platform packaging.
Reference-mode
.mcpbxbundles that point to remote servers or external commands likenpxanduvxdon't need multi-platform publishing since they don't bundle any code.
tool publish --multi-platform \ --darwin-arm64 ./dist/my-tool-darwin-arm64.mcpb \ --darwin-x64 ./dist/my-tool-darwin-x64.mcpb \ --linux-arm64 ./dist/my-tool-linux-arm64.mcpb \ --linux-x64 ./dist/my-tool-linux-x64.mcpb \ --win32-arm64 ./dist/my-tool-win32-arm64.mcpb \ --win32-x64 ./dist/my-tool-win32-x64.mcpbSpecify the bundle for each platform. Typically done in CI after building on each runner.
Use zerocore-ai/tool-action to automate multi-platform builds:
- uses: zerocore-ai/tool-action/setup@v1 - uses: zerocore-ai/tool-action/pack@v1 with: target: ${{ matrix.target }}Auto-detect from manifest
If all platform binaries are available locally, this packs and uploads all variants defined in your manifest's
platform_overrides:tool publish --multi-platform
tool install library/bashAutomatically downloads the bundle matching your system (e.g.,
darwin-arm64on Apple Silicon).
| Command | What it does |
|---|---|
init |
Create a new tool or convert an existing MCP server to MCPB |
detect |
Scan a project and show what tool-cli finds |
validate |
Check your manifest for errors |
info |
Show what a tool exposes |
preview |
Preview a registry tool without installing |
call |
Call a tool method directly |
run |
Start a tool as a server |
pack |
Bundle into .mcpb/.mcpbx (supports multi-platform) |
publish |
Upload to the registry (supports multi-platform) |
install |
Install a tool (auto-detects platform) |
download |
Download a bundle without installing |
uninstall |
Remove an installed tool |
list |
Show installed tools |
search |
Find tools in the registry |
grep |
Search tool schemas by pattern |
config |
Manage tool configuration |
host |
Register tools with MCP hosts |
login |
Log in to the registry |
logout |
Log out from the registry |
whoami |
Show current authentication status |
self |
Manage tool-cli itself (update, uninstall) |
Check out the CLI docs for the full details.
MCPB is great for what it was designed for: bundled servers that run locally over stdio. But most MCP servers today run via npx or uvx (nothing to bundle), some are remote HTTP servers (no local code at all), and some need things like host-managed ports or OAuth flows that the spec doesn't cover.
We created MCPBX (.mcpbx) to fill those gaps. It's a superset of MCPB that adds HTTP transport, reference mode (so you can point to npx/uvx or a remote URL instead of bundling code), system config for host-managed resources, OAuth config, and template functions for constructing auth headers.
The separate file extension exists so hosts know upfront whether they can handle the manifest. tool-cli picks the right format automatically based on what your manifest uses.
MCP is becoming the standard for AI tool integration. But standards only matter if people can actually use them.
Anthropic's MCPB format solved the installation problem. Users can install MCP tools with one click now. But developers still need to create those packages. They need to validate manifests, bundle dependencies, test locally, and publish somewhere discoverable.
tool-cli is that toolchain. And tool.store is that registry.
The goal is simple. Make building and sharing MCP tools as easy as publishing an npm package.
tool-cli is licensed under the Apache 2.0 License.

