GitHub - mcpdotdirect/template-mcp-server: Template to quickly set up your own MCP server (original) (raw)

@mcpdotdirect/template-mcp-server

License: MIT TypeScript

A CLI tool to quickly get started building your very own MCP (Model Context Protocol) server using FastMCP

📋 Usage

with npx

npx @mcpdotdirect/create-mcp-server

Or with npm

npm init @mcpdotdirect/mcp-server

🔭 What's Included

The template includes:

✨ Features

🚀 Getting Started

After creating your project:

  1. Install dependencies using your preferred package manager:

Using npm

npm install

Using yarn

yarn

Using pnpm

pnpm install

Using bun

bun install 2. Start the server:

Start the stdio server

npm start

Or start the HTTP server

npm run start:http 3. For development with auto-reload:

Development mode with stdio

npm run dev

Development mode with HTTP

npm run dev:http

Note: The default scripts in package.json use Bun as the runtime (e.g., bun run src/index.ts). If you prefer to use a different package manager or runtime, you can modify these scripts in your package.json file to use Node.js or another runtime of your choice.

📖 Detailed Usage

Transport Methods

The MCP server supports two transport methods:

  1. stdio Transport (Command Line Mode):
    • Runs on your local machine
    • Managed automatically by Cursor
    • Communicates directly via stdout
    • Only accessible by you locally
    • Ideal for personal development and tools
  2. SSE Transport (HTTP Web Mode):
    • Can run locally or remotely
    • Managed and run by you
    • Communicates over the network
    • Can be shared across machines
    • Ideal for team collaboration and shared tools

Running the Server Locally

stdio Transport (CLI Mode)

Start the server in stdio mode for CLI tools:

Start the stdio server

npm start

or with other package managers

yarn start pnpm start bun start

Start the server in development mode with auto-reload

npm run dev

or

yarn dev pnpm dev bun dev

HTTP Transport (Web Mode)

Start the server in HTTP mode for web applications:

Start the HTTP server

npm run start:http

or

yarn start:http pnpm start:http bun start:http

Start the HTTP server in development mode with auto-reload

npm run dev:http

or

yarn dev:http pnpm dev:http bun dev:http

By default, the HTTP server runs on port 3001. You can change this by setting the PORT environment variable:

Start the HTTP server on a custom port

PORT=8080 npm run start:http

Connecting to the Server

Connecting from Cursor

To connect to your MCP server from Cursor:

  1. Open Cursor and go to Settings (gear icon in the bottom left)
  2. Click on "Features" in the left sidebar
  3. Scroll down to "MCP Servers" section
  4. Click "Add new MCP server"
  5. Enter the following details:
    • Server name: my-mcp-server (or any name you prefer)
    • For stdio mode:
      * Type: command
      * Command: The path to your server executable, e.g., npm start
    • For SSE mode:
      * Type: url
      * URL: http://localhost:3001/sse
  6. Click "Save"

Using mcp.json with Cursor

For a more portable configuration, create an .cursor/mcp.json file in your project's root directory:

{ "mcpServers": { "my-mcp-stdio": { "command": "npm", "args": [ "start" ], "env": { "NODE_ENV": "development" } }, "my-mcp-sse": { "url": "http://localhost:3001/sse" } } }

You can also create a global configuration at ~/.cursor/mcp.json to make your MCP servers available in all your Cursor workspaces.

Note:

Testing Your Server with CLI Tools

FastMCP provides built-in tools for testing your server:

Test with mcp-cli

npx fastmcp dev server.js

Inspect with MCP Inspector

npx fastmcp inspect server.ts

Using Environment Variables

You can customize the server using environment variables:

Change the HTTP port (default is 3001)

PORT=8080 npm run start:http

Change the host binding (default is 0.0.0.0)

HOST=127.0.0.1 npm run start:http

🛠️ Adding Custom Tools and Resources

When adding custom tools, resources, or prompts to your FastMCP server:

Tools

server.addTool({ name: "hello_world", description: "A simple hello world tool", parameters: z.object({ name: z.string().describe("Name to greet") }), execute: async (params) => { return Hello, ${params.name}!; } });

Resources

server.addResourceTemplate({ uriTemplate: "example://{id}", name: "Example Resource", mimeType: "text/plain", arguments: [ { name: "id", description: "Resource ID", required: true, }, ], async load({ id }) { return { text: This is an example resource with ID: ${id} }; } });

Prompts

server.addPrompt({ name: "greeting", description: "A simple greeting prompt", arguments: [ { name: "name", description: "Name to greet", required: true, }, ], load: async ({ name }) => { return Hello, ${name}! How can I help you today?; } });

📚 Documentation

For more information about FastMCP, visit FastMCP GitHub Repository.

For more information about the Model Context Protocol, visit the MCP Documentation.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.