For humans: callspec.logfox.ai · Try the demo
Most teams duct-tape the same API across REST routes, OpenAPI specs, DIY clients, docs, types, validators and MCP. That's a ton of repetitive work and brittle code that drifts.
Instead, define each route once in TypeScript — inputs, outputs, and errors — and Callspec ships the server, SDK, docs, OpenAPI, and MCP from that contract. One source of truth, unit-testable, no drift.
On the frontend you call api.searchPosts({…}) and get a Result back — success value or a typed error code you can switch on. Same methods, same types, same errors as the server and as agents on MCP. Unit-test the real handler with .handler(input, ctx) — no HTTP, no req/res.
npm i callspec runtyp expressGetting started walks through a route, spec(), mountSpec(), and the generated client. For a minimal one-file spike, see Single-file server example.
Optional — for Cursor, Claude Code, and similar tools: skills/callspec/SKILL.md (rules) and copy-paste prompts. The guides below are the source of truth for the API.
Same guides as callspec.logfox.ai. Links are repo-relative — they work in a checkout and on GitHub’s file browser.