CLI Factory for AI Agents
DuckTap prints agent-native CLIs, MCP servers, and skills from any OpenAPI spec, HAR file, or website — deterministically. Same spec in, same code out, every time. No model in the loop, no API key, runs in CI.
No model in the loop. The same spec produces byte-identical output every run, so generation is a build step you can diff, review, and pin in CI — with no API key and no token cost.
Point at a spec, recorded browser traffic, or a GraphQL endpoint. Every input normalizes into one APISpec that all generators consume.
One spec, a Python, Go, Rust, or TypeScript CLI. Each is compiled in CI — go build,
cargo build, tsc — so the templates can't silently drift.
Every printed CLI ships a matching MCP server plus Claude Code SKILL.md, Cursor .mdc rules, and a generic tools.json — so any harness, or none, can drive it.
A scorecard grades the surface; ducktap verify mechanically proves the generated CLI matches
the spec — no hallucinated paths, every operation reachable, auth headers correct.
Register discoverers and generators via Python entry points. Ship improvements as PyPI packages, not forks.
Parse an OpenAPI spec, a HAR file, or drive a headless browser through a website to capture its API.
All inputs collapse into one APISpec — DuckTap's intermediate model. Typed, validated, Pydantic.
Emit a Python CLI, an MCP server, and agent skill manifests — all from the same spec.
Run the scorecard and shipcheck. If it passes, pip install -e . and you're live.
pip install ducktap
git clone https://github.com/zanni098/DuckTap
cd DuckTap && pip install -e ".[dev]"
ducktap press https://petstore3.swagger.io/api/v3/openapi.yaml --out ./out
pip install "ducktap[sniff]" # browser + proxy sniffing
pip install "ducktap[llm]"
# optional LLM steps
pip install "ducktap[all]"
Same north star. Different priorities.
| Capability | Printing Press | DuckTap |
|---|---|---|
| How it generates | Prompt-driven, inside Claude Code | Deterministic — parses the spec, emits code |
| Same input → same output | Fresh model run each time | Byte-for-byte, diffable, CI-friendly |
| What it needs to run | Go + Node + Claude Code | A Python interpreter |
| Primary input | A prompt, app name, or website | OpenAPI / HAR / GraphQL (browser sniff for the rest) |
| Output languages | Go | Python, Go, Rust, TypeScript |
| Agent skills | Claude Code + OpenClaw | Claude + Cursor + generic tools.json |
| Community library | 250+ CLIs, 17 categories | 30-API catalog (nascent) |
| Maturity | Established, real traction | New, solo, unproven |
Both are MIT-licensed. Both print a CLI, an MCP server, and a skill. Printing Press is the better choice for prompt-driven, Claude-Code-native generation from a big curated library — and it has the head start. Reach for DuckTap when you already have a spec and want reproducible, language-flexible, harness-independent generation you can run in a pipeline. Read the honest comparison →
Join the community. Add your API to the catalog, write a plugin, or just print your first CLI.