MCP servers,
at pico scale.
Give any LLM real tools in one file. Typed with your schema library, served over stdio or HTTP, running on Node, Bun, Deno and the edge.
server.ts9 lines
import { pico } from "picomcp";
import { z } from "zod";
pico({ name: "weather" })
.tool("forecast", {
input: z.object({ city: z.string() }),
run: ({ city }) => getForecast(city),
})
.serve(); // stdio — or .serve({ http: 3000 })
- AOne factory
pico()returns a server. Chain tools, resources and prompts. No classes, no decorators, no config file. - BSchema in, types outZod, Valibot or ArkType through Standard Schema. Typed handlers, generated JSON Schema, readable errors.
- CAny transportstdio for desktop clients, Streamable HTTP for the web. A Web-standard
fetchhandler for everything else.
Spec sheet
FIG. 02 — what ships in the boxBundle3.9 kBminified and gzipped, types included
Dependencies0Standard Schema types are inlined
RuntimesNode ≥ 22 · Bun · Deno · Workersno Node built-ins in the core
Transportsstdio · Streamable HTTPplus
server.fetch and server.handleSchemasZod · Valibot · ArkTypeor any Standard Schema
ProtocolMCP 2025-11-25tested against the official SDK client
Docs for agents too
FIG. 03 — machine-readable by default
Plugs into any MCP client
- Claude
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Zed
- JetBrains
- Your agent