AgentSkillsCN

mcp-init

搭建全新的 MCP 服务器项目。当您从零开始构建新 MCP 服务器时,这一技能将助您事半功倍。

SKILL.md
--- frontmatter
name: mcp-init
description: Scaffold a new MCP server project. Use when starting a new MCP server from scratch.

Initialize MCP Server

When invoked, create a new MCP server project with proper structure.

Process

  1. Ask: Python (FastMCP) or TypeScript (@modelcontextprotocol/sdk)?
  2. Create project structure
  3. Set up dependencies
  4. Create basic server file
  5. Add configuration files

Python (FastMCP) Setup

Option 1: Using uv (Recommended)

uv is the fastest Python package manager and the recommended way to create new MCP servers.

Quick Start

bash
# 1. Initialize project (creates pyproject.toml, .gitignore)
uv init my-mcp-server
cd my-mcp-server

# 2. Add FastMCP and dev tools
uv add fastmcp>=2.0
uv add --dev pytest>=8.0 ruff>=0.4

# 3. Create server file
mkdir -p src/my_server

Project Structure

code
my-mcp-server/
├── pyproject.toml          # Project config (auto-generated by uv init)
├── uv.lock                 # Reproducible dependency lock file
├── .gitignore              # Python + uv ignores
├── README.md
├── src/
│   └── my_server/
│       ├── __init__.py
│       └── server.py
└── tests/
    └── test_server.py

pyproject.toml (auto-generated by uv)

toml
[project]
name = "my-mcp-server"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
    "fastmcp>=2.0",
]

[project.optional-dependencies]
dev = [
    "pytest>=8.0",
    "ruff>=0.4",
]

[project.scripts]
my-mcp-server = "my_server.server:main"

src/my_server/server.py

python
from fastmcp import FastMCP

mcp = FastMCP(
    name="my-mcp-server",
    instructions="Describe what this server does and how to use it."
)

@mcp.tool
def hello(name: str) -> str:
    """Say hello to someone."""
    return f"Hello, {name}!"

def main():
    mcp.run()

if __name__ == "__main__":
    main()

Option 2: Traditional pip (Still Supported)

Use the same pyproject.toml structure, but install with:

bash
python -m venv .venv
source .venv/bin/activate  # or .venv\Scripts\activate on Windows
pip install -e ".[dev]"

TypeScript Setup

Project Structure

code
my-mcp-server/
├── package.json
├── tsconfig.json
├── README.md
├── src/
│   └── index.ts
└── tests/
    └── server.test.ts

package.json

json
{
  "name": "my-mcp-server",
  "version": "0.1.0",
  "type": "module",
  "main": "dist/index.js",
  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js",
    "dev": "tsx src/index.ts"
  },
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.0.0",
    "zod": "^3.25.0"
  },
  "devDependencies": {
    "@types/node": "^20.0.0",
    "typescript": "^5.0.0",
    "tsx": "^4.0.0"
  }
}

tsconfig.json

json
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "strict": true,
    "outDir": "dist",
    "declaration": true
  },
  "include": ["src"]
}

index.ts

typescript
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import * as z from 'zod';

const server = new McpServer({
  name: 'my-mcp-server',
  version: '0.1.0'
});

server.registerTool(
  'hello',
  {
    title: 'Hello',
    description: 'Say hello to someone',
    inputSchema: {
      name: z.string().describe('Name to greet')
    }
  },
  async ({ name }) => ({
    content: [{ type: 'text', text: `Hello, ${name}!` }]
  })
);

const transport = new StdioServerTransport();
await server.connect(transport);

After Scaffolding

Using uv (Recommended for Python)

  1. Install dependencies:

    bash
    uv sync --dev
    
  2. Test the server:

    bash
    uv run python -m my_server.server
    
  3. Generate lock file for reproducible deployments:

    bash
    uv lock
    
  4. Add to Claude Desktop config to test

Using pip (Traditional Python)

  1. Install dependencies:

    bash
    pip install -e ".[dev]"
    
  2. Test the server:

    bash
    python -m my_server.server
    
  3. Add to Claude Desktop config to test

Using npm (TypeScript)

  1. Install dependencies:

    bash
    npm install
    
  2. Test the server:

    bash
    npm run dev
    
  3. Add to Claude Desktop config to test