Skip to content
Back to Templates

xmcp boilerplate

An MCP framework with file-based routing

xmcp homepage

xmcp Application

This project was created with create-xmcp-app.

Getting Started

First, run the development server:

This will start the MCP server with the selected transport method.

Project Structure

This project uses the structured approach where tools, prompts, and resources are automatically discovered from their respective directories:

  • src/tools - Tool definitions
  • src/prompts - Prompt templates
  • src/resources - Resource handlers

Tools

Each tool is defined in its own file with the following structure:

Prompts

Prompts are template definitions for AI interactions:

Resources

Resources provide data or content with URI-based access:

Adding New Components

Adding New Tools

To add a new tool:

  1. Create a new .ts file in the src/tools directory
  2. Export a schema object defining the tool parameters using Zod
  3. Export a metadata object with tool information
  4. Export a default function that implements the tool logic

Adding New Prompts

To add a new prompt:

  1. Create a new .ts file in the src/prompts directory
  2. Export a schema object defining the prompt parameters using Zod
  3. Export a metadata object with prompt information and role
  4. Export a default function that returns the prompt text

Adding New Resources

To add a new resource:

  1. Create a new .ts file in the src/resources directory
  2. Use folder structure to define the URI (e.g., (users)/[userId]/profile.tsusers://{userId}/profile)
  3. Export a schema object for dynamic parameters (optional for static resources)
  4. Export a metadata object with resource information
  5. Export a default function that returns the resource content

Building for Production

To build your project for production:

This will compile your TypeScript code and output it to the dist directory.

Running the Server

You can run the server for the transport built with:

  • HTTP: node dist/http.js
  • STDIO: node dist/stdio.js

Given the selected transport method, you will have a custom start script added to the package.json file.

For HTTP:

For STDIO:

Learn More

GitHub Repovercel/examples
Use Cases
Stack