Callspec
Write your API once. Get typed RPC, SDK, MCP, docs, and OpenAPI spec.
Define once
export const searchPosts = route({ input: query, output: results, handler: async (input, ctx) => { // your logic }, }) export const api = spec({ routes: {searchPosts}, })Serve it all
- HTTP RPC
/v1/* - Docs UI
/docs - OpenAPI
/openapi.json - MCP
/mcp
Auth, typed errors & logging
- HTTP RPC
TypeScript SDK
npx callspecOpenAPI anywhere


Multi-language SDKs & docs from your OpenAPI
Python
Go
Java
C#
Errors done right
Every error has a code, a type, and a shape. No more guessing.
No drift
Client and server stay in sync automatically.
End-to-end types
From server to SDK to docs to clients.
Works with the ecosystem
Plays well with your favorite tools.

Try it locally
Run the Chirp API explorer
Clone the repo and start the sample API — interactive docs UI, MCP connect flow, and the same Callspec explorer your APIs get.
npm run build && npm run serve:chirp-demoThen open http://127.0.0.1:3456/v1/docsBearer token demo