declick
A CLI compiler that turns APIs, MCP servers, databases, and web pages into named shell verbs with a consistent output envelope for AI agents.
At a Glance
About declick
declick is a command-line compiler built by Practical Systems that converts APIs, MCP servers, SQLite databases, and other sources into named shell verbs an AI agent can call directly. It runs on Node 24 with zero runtime dependencies and ships ten built-in engines covering OpenAPI, GraphQL, MCP, SQLite, Postman, HAR, CLI, web, desktop, and compose chains.
What It Is
declick addresses a specific problem with MCP-based agent tooling: every tool's schema rides in the context window on every turn. declick compiles a source once into a set of named verbs the model loads one at a time, and every verb returns the same structured envelope — {ok, data, meta} on success, {ok, error, exit} on failure — with five consistent exit codes across all ten engines. The project's own benchmark, run against nine real stdio MCP servers with 258 tools, measured the raw tool listing at 236,818 bytes versus a compiled declick describe output of 58,309 bytes, a 4.1x reduction.
How the Output Contract Works
Every adapter and every declick management command honors the same output shape regardless of which engine produced it:
- Success:
{ok: true, data, meta: {count, truncated}} - Failure:
{ok: false, error, exit}plusdatawhen the engine has a payload - Five exit codes: 0 ok, 1 error, 2 not found, 3 blocked, 4 auth needed
--fields: projects named fields with dotted paths; a miss names available keys--where k=v: filters lists on the local machine before--fieldsand--limitrun, with eight operators including regex and numeric comparisons--dry-run: every mutating verb previews the exact request without sending it; secrets appear as env key names only--each file: runs a verb once per item in an NDJSON file and returns one envelope withmeta.failed--cache <s>: answers a read-only verb from a stored response younger than the given seconds
The declick lint command enforces a 2,000-character ceiling on declick describe output at build time, which the project describes as roughly 500 tokens. A build that exceeds the ceiling fails and prints the verbs available for narrowing.
Ten Engines, All Compiled In
declick ships ten engines with no plugins to install:
- openapi: OpenAPI 3 and Swagger 2, JSON or YAML, from a file or URL fetched once at compile time
- mcp: stdio servers (spawned per call or kept warm by
declick daemon) and streamable HTTP servers - sqlite: tables and views become list, get, insert, update, delete, and a parameterized query verb
- compose: chains verbs from existing adapters into one verb with one envelope and one audit line
- graphql: introspects an endpoint or schema file; bearer from
<NAME>_TOKENon 401 - postman: Postman v2.1 collections and Insomnia v4 exports
- har: browser network captures;
--hostpicks the API host when the capture has several - cli: compiled from another binary's own
--helpoutput; the binary must be on PATH - web: needs Chrome or Edge; returns page elements instead of screenshots; a miss returns candidates
- desktop: Windows only via deskclaw UI Automation; replays element paths against a fresh window tree, never screen coordinates
Governance and Security Model
declick has two tiers of write control. Tier one requires no configuration: API keys are scoped to the origin the adapter was built against, and a request to a different host is exit 4 naming the scoped origin. Launcher names that already resolve on PATH are refused at compile time.
Tier two is opt-in via DashClaw, described by the project as "the approval and policy layer for unattended agents from the same author." Setting DASHCLAW_API_KEY and DASHCLAW_URL causes every real mutating call to post a structured action record to the guard endpoint with a 3-second timeout. Once the key is set, strict mode is the default: an unreachable or timing-out guard is exit 3. A local ~/.declick/policy.json file provides a floor with no network dependency — allow, warn, or block by adapter and verb glob, first match wins.
Every invocation appends one line to ~/.declick/audit.jsonl. declick audit --sum totals calls, bytes, and failures per adapter.
Setup and Team Sharing
declick setup wires declick into agents found on the machine: it puts ~/.declick/bin on PATH, adopts existing MCP servers as adapters, adds a rules block to CLAUDE.md or AGENTS.md, and installs a Claude Code PreToolUse hook. declick setup --revert restores every touched file byte-for-byte from a snapshot taken before setup ran; a standalone revert.mjs in the snapshot directory works even after the package is removed.
Team sharing uses a store — a shared directory, git checkout, or read-only HTTPS base. declick store push writes a bundle and index entry; declick store pull installs what changed on other machines. Bundles carry auth key names, never values. A git-backed store commits and pushes automatically.
Update: Version 0.7.2
The homepage and all code examples on the declick site reflect version 0.7.2 running on Node 24.15.0. The GitHub repository shows a latest release of v0.6.0 published on 2026-09-04, with the last push on 2026-09-08. The homepage explicitly states that every block on the page is output from declick 0.7.2, indicating active development beyond the tagged GitHub release. Notable in recent versions: the declick daemon command for keeping stdio MCP servers warm (reducing a measured 4.8-second spawn to a 59ms reuse), declick audit --sum for aggregate cost reporting, --each file for batch verb execution, and --cache for read-only response caching. The desktop engine requires deskclaw 0.3.0 or newer for attributed snapshot lines. A macOS and Linux desktop backend is listed as not yet shipped.
Community Discussions
Be the first to start a conversation about declick
Share your experience with declick, ask questions, or help others learn from your insights.
Pricing
Free
For individuals and companies with fewer than ten people. Everything included, no key, no sign-up.
- All ten engines included
- Zero runtime dependencies
- Full output contract
- Team store support
- Governance and audit log
Team
Commercial use at a company of ten people or more. Self-serve, no call required.
- All Free features
- Commercial use license for teams of 10+
- License delivered by email within a minute of payment
- Per developer seat pricing
Production Support
A named contact, two business day response, and a private issue tracker. For platform teams with declick in a pipeline.
- Named support contact
- Two business day response SLA
- Private issue tracker
- Per company pricing
Capabilities
Key Features
- Compiles OpenAPI, Swagger, GraphQL, MCP, SQLite, Postman, HAR, CLI, web, and desktop sources into named shell verbs
- Consistent output envelope across all ten engines: {ok, data, meta} on success, {ok, false, error, exit} on failure
- Five standardized exit codes: 0 ok, 1 error, 2 not found, 3 blocked, 4 auth needed
- declick lint enforces a 2,000-character (≈500 token) ceiling on describe output at build time
- -dry-run on every mutating verb previews the exact request without sending it; secrets shown as env key names only
- -fields projects named fields with dotted paths; a miss names available keys
- -where k=v filters lists locally before --fields and --limit run, with eight operators
- -each file runs a verb once per NDJSON item and returns one envelope with meta.failed
- -cache <s> answers read-only verbs from stored responses
- declick daemon keeps stdio MCP servers warm between calls
- declick setup wires declick into Claude Code, Codex, Hermes, and OpenClaw agents
- declick setup --revert restores every touched file byte-for-byte from a pre-setup snapshot
- Team store: push/pull adapter bundles via shared directory, git checkout, or HTTPS base
- API key scoping: keys are bound to the origin the adapter was built against
- Local policy.json for allow/warn/block rules with no network dependency
- Optional DashClaw governance guard for mutating verbs with approval workflows
- Audit log at ~/.declick/audit.jsonl; declick audit --sum totals by adapter
- Desktop engine replays element paths against fresh window tree snapshots, never screen coordinates
- declick web tree returns page elements instead of screenshots; a miss returns candidates
- compose engine chains verbs from existing adapters into one verb with one envelope
- Zero runtime dependencies, Node 24 required
- declick ui serves a local management page on 127.0.0.1 only
