JIMDRURY.
Jim Drury
An xmcp src/ folder where each tool filename is an intent (greet.ts, quote-broadband.ts, get-bill-balance.ts) is built with xmcp build into its own /mcp deployable cube, which fans out into one MCP per domain: Virgin Media Sales, O2 eCare Billing and the rest of the catalogue
ai

xmcp: is this the framework for building MCPs?

5 MIN READ

What xmcp actually is

File routing, but for agent verbs

src/
src/
├── tools/
│   └── greet.ts
├── prompts/
├── resources/
├── middleware.ts   # optional
└── xmcp.config.ts  # optional
src/tools/greet.ts
import { z } from "zod";
import { type InferSchema } from "xmcp";

export const schema = {
  name: z.string().describe("The name of the user to greet"),
};

export const metadata = {
  name: "greet",
  description: "Greet the user",
  annotations: {
    title: "Greet the user",
    readOnlyHint: true,
    destructiveHint: false,
    idempotentHint: true,
  },
};

export default async function greet({ name }: InferSchema<typeof schema>) {
  return `Hello, ${name}!`;
}

Why not just mcp-handler?

Downloads are a terrible DX compass

And then there's Python FastMCP

The agents reading the docs (without the paste buffer)

Back to VMO2


Thoughts

Similar Articles