Install
Mulder is a package inside your application, not a hosted account or a replacement for your API.
Public preview: Mulder is not on the npm registry. These commands download the versioned archive, verify its SHA-256 digest, and install that local file.
Shell
curl -fsSLO https://mulder.coey.dev/downloads/acoyfellow-mulder-0.2.0.tgz
curl -fsSLO https://mulder.coey.dev/downloads/acoyfellow-mulder-0.2.0.tgz.sha256
shasum -a 256 -c acoyfellow-mulder-0.2.0.tgz.sha256
npm install ./acoyfellow-mulder-0.2.0.tgzAdd it to your Worker
TypeScript
import { createWebMcpCompanion } from "@acoyfellow/mulder";
import { existingApi } from "./api";
const companion = createWebMcpCompanion({
document: openApiDocument,
renderPage: () => new Response(pageHtml, {
headers: { "content-type": "text/html; charset=utf-8" }
}),
dispatch: (request) => existingApi(request)
});
export default {
async fetch(request: Request) {
return await companion.handle(request) ?? existingApi(request);
}
};Choose one operation
Code
get: {
operationId: "get_service_health",
description: "Get the health of one service in one region.",
"x-webmcp-enabled": true,
parameters: [
{ name: "service", in: "path", required: true, schema: { type: "string" } },
{ name: "region", in: "query", required: true, schema: { type: "string" } }
]
}That is the complete integration. Open /__mulder/manifest to inspect exactly what the browser can discover.
Shell
curl https://your-site.example/__mulder/manifestNot using a Worker?
Use the Hono, SvelteKit, or static-site instructions. Hono and SvelteKit reuse the same companion handler. Static sites can expose public GET APIs only.
Before production
Read the security guide. Mulder validates shape and fidelity; it does not authenticate users, authorize resources, approve writes, or filter API results.