A CLI tool to quickly get started building your very own MCP (Model Context Protocol) server using FastMCP
# with npx npx @mcpdotdirect/create-mcp-server # Or with npm npm init @mcpdotdirect/mcp-server
The template includes:
- Basic server setup with both stdio and HTTP transport options using FastMCP
- Structure for defining MCP tools, resources, and prompts
- TypeScript configuration
- Development scripts and configuration
- FastMCP: Built using the FastMCP framework for simpler implementation
- Dual Transport Support: Run your MCP server over stdio or HTTP
- TypeScript: Full TypeScript support for type safety
- Extensible: Easy to add custom tools, resources, and prompts
After creating your project:
-
Install dependencies using your preferred package manager:
# Using npm npm install # Using yarn yarn # Using pnpm pnpm install # Using bun bun install
-
Start the server:
# Start the stdio server npm start # Or start the HTTP server npm run start:http
-
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.
The MCP server supports two transport methods:
-
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
-
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
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
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
To connect to your MCP server from Cursor:
- Open Cursor and go to Settings (gear icon in the bottom left)
- Click on "Features" in the left sidebar
- Scroll down to "MCP Servers" section
- Click "Add new MCP server"
- 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
- Type:
- For SSE mode:
- Type:
url
- URL:
http://localhost:3001/sse
- Type:
- Server name:
- Click "Save"
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:
- The
command
type entries run the server in stdio mode - The
url
type entry connects to the HTTP server using SSE transport - You can provide environment variables using the
env
field - When connecting via SSE with FastMCP, use the full URL including the
/sse
path:http://localhost:3001/sse
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
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
When adding custom tools, resources, or prompts to your FastMCP server:
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}!`; } });
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}` }; } });
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?`; } });
For more information about FastMCP, visit FastMCP GitHub Repository.
For more information about the Model Context Protocol, visit the MCP Documentation.
This project is licensed under the MIT License - see the LICENSE file for details.