Skip to main content

Overview

This template demonstrates how to take full control over endpoint registration by providing a custom app/server.ts. Instead of relying on the auto-generated server, you manually wire up A2A, MCP, and x402 — giving you complete control over pricing, middleware, and route configuration.

Project Structure

agent-with-custom-server/
  aixyz.config.ts           # Agent metadata
  app/
    server.ts               # Custom server setup
    agent.ts                # Agent definition
    tools/
      lookup.ts             # Example tool
    icon.png                # Agent icon
  package.json
  vercel.json

Custom Server

The app/server.ts file gives you full control:
import { AixyzMCP } from "aixyz/server/adapters/mcp";
import { AixyzServer } from "aixyz/server";
import { useA2A } from "aixyz/server/adapters/a2a";

import * as agent from "./agent";
import lookup from "./tools/lookup";

const server = new AixyzServer();
await server.initialize();
server.unstable_withIndexPage();

useA2A(server, agent);

const mcp = new AixyzMCP(server);
await mcp.register("latestData", {
  default: lookup,
  accepts: {
    scheme: "exact",
    price: "$0.001",
  },
});
await mcp.connect();

export default server;

Key Features

  • Manual A2A setupuseA2A(server, agent) registers agent card and JSON-RPC endpoint
  • Manual MCP setup — Register tools individually with custom names and pricing
  • Per-tool pricing — Set different x402 prices for each MCP tool
  • Index pageunstable_withIndexPage() adds a human-readable landing page

When to Use

Use a custom server when you need to:
  • Register MCP tools with custom names or specific pricing
  • Add custom Express middleware or routes
  • Control the order of endpoint registration
  • Integrate additional services (e.g., Stripe, webhooks)

Running

cd examples/agent-with-custom-server
bun install
bun run dev