@waniwani/kit builds an MCP app as a folder. You write tools, widgets and flows into a directory, and one CLI turns that directory into a deployable MCP server. Your repo holds none of the plumbing. The server bootstrap, the transport wiring and the build configuration live in the package.
Your side is the distribution MCP itself, meaning the tools, the widgets, the funnel and the content. The kit owns everything technical underneath it: the server, the transport, bundling, the deploy files, and keeping up with framework upgrades.
Quickstart
Scaffold an app with
init and have the dev server running in one command.Folder convention
Which folder becomes which MCP surface, and how names are derived.
Widgets
Two files per widget, one schema for input, output and props.
Deploy
Vercel, Docker or Alpic. The build writes the config, so deploying is a push.
The three packages
Three packages ship under the@waniwani scope. The pair people mix up is the kit and the SDK, so start there.
The SDK is documented under the SDK tab and the platform CLI on its own page.
Kit against SDK, in code
With the SDK, the server is a file you write and keep:src/server.ts
tsconfig.json, a bundler config for any widget UI, a Dockerfile and the deploy config each host wants.
With the kit, you write the part that answers the question and nothing around it:
tools/check-eligibility.ts
createFlow(...) comes from the SDK, while defineApp, defineTool, defineWidget and the server that registers them come from the kit.
What the kit gives you
- Names from the filesystem.
tools/check-eligibility.tsregisters ascheck-eligibility. Nothing is listed in a registry, so no widget can sit defined and unwired. - Failures surface at build time. Structure is validated from the filesystem, then every server-safe module is imported for real. A flow that names a widget which does not exist fails the build instead of a request.
- One runtime for every app. Error envelopes, annotation defaults, the CSP block and tracking through
withWaniwanisit in one place. - Leaving is one command.
waniwani ejectwrites the plumbing into your repo and steps out. See Eject.