Make your Next.js app agent-ready.
Universal procedures: one definition is an endpoint, a server call, an MCP tool and a typed client.
- Node.js24.15+
- Bun1.4+
- Deno2.9+
Each endpoint becomes an MCP tool for AI agents, and a typed, documented API for everyone else.
npx skills add finom/vovkDemo: the createTask procedure. Each field you add or rename, and the description, appears at once in the endpoint, the agent's MCP tool call, the TypeScript RPC library and server actions, the Python and Rust types, the OpenAPI request body and the README.
Try it: edit a field or the description.
- Endpointcurl -X POST /api/tasks -d '{"title":"Ship it","done":false}'
- MCP toolagent: "Create a task called Ship it"→ TaskRPC_createTask({ body: { title: "Ship it", done: false } })
- RPC librarynpmTaskRPC.createTask({ body: { title: string; done: boolean } })
- Server actionsTaskController.createTask.fn({ body: { title: string; done: boolean } })
- Python clientPyPIclass CreateTaskBody(TypedDict):title: str; done: bool
- Rust clientcrates.iostruct body { title: String, done: bool }
- OpenAPI 3.1description: Create a taskrequestBody: { title: string, done: boolean }
- README### TaskRPC.createTask> Create a taskPOST /api/tasks
One endpoint, every caller
Each procedure is an AI tool with execute() and a JSON Schema input, for MCP, AI SDKs or your own agent loop.
Typed clients
TypeScriptPythonRustGenerated from your procedures as TypeScript, Python and Rust packages, ready to publish.
The OpenAPI spec and a docs page come from the same code, so they match what runs.
Streaming
DocsAn async generator sends JSON Lines, and the client reads them with types.
Multitenancy
Docsmultitenant() in the Next.js proxy sends each subdomain to its own pages and API segment.
Plain Next.js
DocsIt runs in route handlers on Node.js, Bun or Deno, with no custom server, and deploys wherever Next.js does.
Build it with your agent
Add the Vovk.ts skills to Claude Code, Cursor, Windsurf, GitHub Copilot or Cline, then ask for the API you need.
npx skills add finom/vovknpx vovk-cli@latest init