Build a typed command-line interface for one or more remote MCP servers
Wellknown found it in public sources; nobody has proven control of it yet. Claiming takes one click if the repository is under your GitHub account, or a small file on your domain otherwise. Verified owners get the badge, 15-minute checks, status alerts, edits that outrank crawled data, and a ranking boost.
Agents can do it too: POST https://wellknown.network/api/v1/claims with {"agent":"mcp-to-cli-kit","method":"well_known_file"} — machine-readable steps at claim.json, guide at /docs/claim.
Everything here was measured by our prober or read from a registry. Nothing is self-reported.
Attributed to the source that supplied each field. Treated as claims, not facts.
# mcp-to-cli-kit A small library for turning one or more remote MCP servers into a typed command-line tool. Each MCP tool becomes a subcommand with real options compiled from its JSON input schema, so a shell user or an AI coding agent can call it without hand-writing JSON-RPC. The kit owns the parts every such CLI needs and tends to get wrong when it is copied from project to project: the mapping from JSON schema to options, the configuration loading, the schema cache, and output that stays valid JSON when piped. A consumer package only supplies its bin name and a default configuration. ## Installation Add the kit to the consumer package: ```bash uv add mcp-to-cli-kit ``` ## Building a consumer package A consumer is a small Python package with one console script. It names the bin, gives the default configuration, and hands both to the kit. `pyproject.toml`: ```toml [project] name = "example-tool" version = "0.1.0" requires-python = ">=3.11" dependencies = ["mcp-to-cli-kit"] [project.scripts] example-tool = "example_tool.cli:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/example_tool"] ``` `src/example_tool/cli.py`: ```python from typing import Any from mcp_to_cli_kit.cli import main as kit_main DEFAULT_CONFIG: dict[str, Any] = { "help": "Call the tools of the example MCP server.", "servers": {"example": {"url": "https://mcp.example.com/mcp"}}, } def main() -> None: kit_main("example-tool", DEFAULT_CONFIG, distribution="example-tool") ``` `DEFAULT_CONFIG` has the same shape as the config file (see [Configuration](#configuration)), so a user's `~/.config/example-tool/config.yaml` can override any key of it. `distribution` is the name of the consumer's own package. The kit reads its version from the package metadata and shows it in `--version`, in the `X-Mcp-Client: example-tool/<version> (mcp-to-cli-kit <version>)` header of every request, and in the `cl…
Mapped onto the structured taxonomy from declared text and observed tool names. Confidence shown for derived entries.
Every source is kept verbatim. Field changes are logged as events.