CLI Factory for AI Agents

Tape any API
to your agent.
One command.

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.

v0.8.3 on PyPI MIT Licensed
ducktap
$ pip install ducktap
$ ducktap press https://petstore3.swagger.io/api/v3/openapi.yaml
Pressed petstore (19 operations) -> out
python-cli: 11 files
mcp-server: 5 files
skill: 3 files
Scorecard: 91/100 (A)
- coverage: 95 -- 19 operations exposed
- documentation: 100 -- 19/19 operations have docs
- auth: 100 -- 2 auth scheme(s)
- artifacts: 100 -- 3/3 expected artifact dirs present
- domain_correctness: 88 -- restful=66, responses=100, base_url=100
$ |

Everything an agent needs,
generated in seconds.

01

Deterministic

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.

02

OpenAPI, HAR & GraphQL

Point at a spec, recorded browser traffic, or a GraphQL endpoint. Every input normalizes into one APISpec that all generators consume.

03

Four Languages

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.

04

MCP Server & Skills

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.

05

Proof of Behavior

A scorecard grades the surface; ducktap verify mechanically proves the generated CLI matches the spec — no hallucinated paths, every operation reachable, auth headers correct.

06

Plugin System

Register discoverers and generators via Python entry points. Ship improvements as PyPI packages, not forks.

One lean loop.

1

Discover

Parse an OpenAPI spec, a HAR file, or drive a headless browser through a website to capture its API.

2

Normalize

All inputs collapse into one APISpec — DuckTap's intermediate model. Typed, validated, Pydantic.

3

Generate

Emit a Python CLI, an MCP server, and agent skill manifests — all from the same spec.

4

Ship

Run the scorecard and shipcheck. If it passes, pip install -e . and you're live.

Get DuckTap in seconds.

PyPI
pip install ducktap
Source
git clone https://github.com/zanni098/DuckTap
cd DuckTap && pip install -e ".[dev]"
Print your first CLI
ducktap press https://petstore3.swagger.io/api/v3/openapi.yaml --out ./out
Optional extras
pip install "ducktap[sniff]"  # browser + proxy sniffing
pip install "ducktap[llm]"    # optional LLM steps
pip install "ducktap[all]"

DuckTap vs Printing Press.

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 →

Ready to tape your API?

Join the community. Add your API to the catalog, write a plugin, or just print your first CLI.