MCP服务器模板

一个基于Python和FastMCP v2的生产级MCP服务器模板,提供模块化架构、丰富工具集和AI提示模板。

  • by boffti
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 boffti/mcp_boilerplate

使用说明

MCP沸腾板

使用Python和FastMCP v2构建的模型上下文协议(MCP)服务器的一个健壮的、可用于生产的样板模板。

🎯 关于此模板

此样板提供了构建专业MCP服务器所需的一切:

  • 🏗️ 稳健的体系结构:模块化设计,明确分离关注点
  • 🔧 综合工具:现成的数学、文本处理和实用函数
  • 📊 丰富的资源:系统指标、数据存储和示例数据
  • 🤖 AI提示:适用于各种场景的现成提示模板
  • 🛡️ 生产就绪:错误处理、日志记录、验证和测试
  • 📋 开发者体验:生成命令、代码质量工具和综合文档
  • ⚡ FastMCP v2:最新的FastMCP版本,具有改进的API和多种传输支持

特性

🔧 示例工具包括

  • 数学运算(加、减、乘、除、幂、阶乘)
  • 文本处理(长度、大小写转换、单词提取、替换)
  • 实用函数(UUID生成、哈希、JSON验证、base64编码)

📊 示例资源

  • 系统信息和性能指标
  • 带有统计信息的内存数据存储
  • 多种格式的示例数据(JSON、CSV、XML)

🤖 示例提示

  • 代码审查和解释提示
  • 数据分析和问题解决模板
  • 比较分析框架

🛡️ 生产特点

  • 全面的错误处理和记录
  • 输入验证和安全措施
  • 健康检查和监测
  • 广泛的测试覆盖范围
  • MyPy的类型安全

快速开始

先决条件

1.使用此模板

# Clone the template
git clone <your-repo-url> your-mcp-server
cd your-mcp-server

# Remove existing git history (optional)
rm -rf .git
git init

重命名包

选项A:手动重命名

  1. 重命名 src/mcp_boilerplate/ 向 src/your_server_name/
  2. 更新所有Python文件中的导入
  3. 更新 pyproject.toml 包装参考

选项B:自动重命名(推荐)

# Test what changes would be made (dry run)
python scripts/rename_project.py --dry-run your_server_name

# Rename everything at once
python scripts/rename_project.py your_server_name

2.安装依赖项

# Install development dependencies
uv sync --all-extras

# Copy environment configuration
cp .env.example .env

3.自定义您的服务器

  1. 更新项目信息 在……里面 pyproject.toml:

    [project]
    name = "your-mcp-server"
    description = "Your custom MCP server description"
    authors = [
        {name = "Your Name", email = "your.email@example.com"}
    ]
    keywords = ["mcp", "your", "keywords"]
    
    [project.urls]
    Homepage = "https://github.com/yourusername/your-mcp-server"
    Repository = "https://github.com/yourusername/your-mcp-server"
    Issues = "https://github.com/yourusername/your-mcp-server/issues"
    
    [project.scripts]
    your-mcp-server = "your_server_name.main:main"
    
    [tool.hatch.build.targets.wheel]
    packages = ["src/your_server_name"]
    
  2. 修改服务器名称 在……里面 src/your_server_name/config/settings.py:

    server_name: str = Field(default="your-server-name", description="Name of the MCP server")
    
  3. 更新环境变量 在……里面 .env:

    SERVER_NAME=your-server-name
    # Add your custom variables
    YOUR_API_KEY=your-api-key
    YOUR_DATABASE_URL=postgresql://...
    
  4. 添加您的工具 在……里面 src/your_server_name/tools/:

    • 创建新的工具文件
    • 将它们注册到 tools/__init__.py
  5. 添加您的资源 在……里面 src/your_server_name/resources/:

    • 创建新的资源文件
    • 将它们注册到 resources/__init__.py

4.运行服务器

# Run with STDIO transport (default)
make run

# Or run directly
uv run python -m mcp_boilerplate.main

# Debug mode
make run-debug

# Run with SSE transport for web integration
make run-sse

# Or run SSE directly
uv run --extra sse python -m mcp_boilerplate.main --transport sse --port 8000

5.测试您的服务器

# Run tests
make test

# Run with coverage
make test-cov

# Code quality checks
make lint
make type-check

与Claude Desktop一起使用

添加到您的Claude Desktop MCP配置中:

{
  "mcpServers": {
    "your-server-name": {
      "command": "uv",
      "args": ["run", "python", "-m", "mcp_boilerplate.main"],
      "cwd": "/path/to/your-mcp-server"
    }
  }
}

项目结构

src/mcp_boilerplate/
├── __init__.py
├── main.py              # CLI entry point
├── server.py            # Core server implementation
├── config/
│   ├── __init__.py
│   └── settings.py      # Configuration management
├── tools/               # MCP tools
│   ├── __init__.py
│   ├── math_tools.py
│   ├── text_tools.py
│   └── utility_tools.py
├── resources/           # MCP resources
│   ├── __init__.py
│   ├── system_resources.py
│   └── data_resources.py
├── prompts/             # MCP prompts
│   ├── __init__.py
│   ├── assistant_prompts.py
│   └── analysis_prompts.py
├── handlers/            # Error handling
│   ├── __init__.py
│   └── error_handler.py
└── utils/               # Utilities
    ├── __init__.py
    ├── logger.py
    └── validation.py

定制指南

删除示例组件

样板包括示例工具、资源和提示。删除不需要的内容:

# Remove example tools (keep only what you want)
rm src/your_server_name/tools/math_tools.py
rm src/your_server_name/tools/text_tools.py
# Keep utility_tools.py or customize it

# Remove example resources
rm src/your_server_name/resources/data_resources.py
# Keep system_resources.py for monitoring

# Remove example prompts (if you don't need them)
rm -rf src/your_server_name/prompts/

重要:更新 __init__.py 用于删除对已删除模块的引用的文件。

添加新工具

  1. 在中创建新文件 src/your_server_name/tools/:

    # src/your_server_name/tools/your_tools.py
    from ..server import mcp
    
    @mcp.tool
    def your_tool(param: str) -> str:
        """Your tool description."""
        return f"Result: {param}"
    
  2. 注册 src/your_server_name/tools/__init__.py:

    # Import to register the tools
    from . import your_tools
    

添加新资源

  1. 在中创建新文件 src/your_server_name/resources/:

    # src/your_server_name/resources/your_resources.py
    from ..server import mcp
    import json
    
    @mcp.resource("your-domain://data/{id}")
    def get_your_data(id: str) -> str:
        """Get your domain-specific data."""
        return json.dumps({"id": id, "data": "your_data"})
    
  2. 注册 src/your_server_name/resources/__init__.py:

    # Import to register the resources
    from . import your_resources
    

添加新提示

  1. 在中创建新文件 src/your_server_name/prompts/:

    # src/your_server_name/prompts/your_prompts.py
    from ..server import mcp
    
    @mcp.prompt
    def your_prompt(task: str, style: str = "professional") -> str:
        """Generate a custom prompt."""
        return f"Task: {task}\nStyle: {style}"
    
  2. 注册 src/your_server_name/prompts/__init__.py:

    # Import to register the prompts
    from . import your_prompts
    

常见集成模式

数据库集成

# Add to pyproject.toml dependencies
dependencies = [
    # ... existing dependencies
    "sqlalchemy>=2.0.0",
    "asyncpg>=0.28.0",  # for PostgreSQL
]

# Create database tools
@mcp.tool
def query_database(sql: str) -> str:
    """Execute a database query."""
    # Your database implementation with proper validation
    pass

API集成

# Add HTTP client dependency
dependencies = [
    # ... existing dependencies
    "httpx>=0.24.0",
]

# Create API tools
@mcp.tool
async def call_external_api(endpoint: str) -> str:
    """Call an external API."""
    # Your API implementation with error handling
    pass

文件系统操作

@mcp.tool
def read_file(file_path: str) -> str:
    """Read a file from the filesystem."""
    # Implement with proper security checks and path validation
    pass

@mcp.resource("file://{path}")
def get_file_content(path: str) -> str:
    """Get file content as a resource."""
    # Your implementation with security validation
    pass

开发命令

# Setup development environment
make install-dev

# Run server
make run              # Production mode
make run-debug        # Debug mode

# Testing
make test             # Run tests
make test-cov         # Run with coverage

# Code quality
make lint             # Linting
make format           # Code formatting
make type-check       # Type checking

# All quality checks
make ci

# Build package
make build

配置

环境变量

复制 .env.example 向 .env 并自定义:

# Server Configuration
SERVER_NAME=your-server-name
LOG_LEVEL=INFO
ENABLE_DEBUG=false
ENABLE_METRICS=true
MAX_REQUEST_SIZE=1048576
REQUEST_TIMEOUT=30

# Your Custom Variables
YOUR_API_KEY=your-api-key
YOUR_DATABASE_URL=postgresql://user:pass@localhost/db
YOUR_CUSTOM_SETTING=value

依赖项

更新 pyproject.toml 根据您的特定依赖关系:

dependencies = [
    "fastmcp>=2.0.0",
    "pydantic>=2.0.0",
    "pydantic-settings>=2.0.0",
    # Add your dependencies here
    "your-required-library>=1.0.0",
]

# SSE transport support (optional)
[project.optional-dependencies]
sse = [
    "uvicorn>=0.24.0",
    "starlette>=0.32.0",
]

示例工具包括

数学工具

  • add(a, b) -加两个数字
  • subtract(a, b) -减去两个数字
  • multiply(a, b) -将两个数字相乘
  • divide(a, b) -除以两个数字
  • power(base, exponent) -提升到权力
  • factorial(n) -计算阶乘

文本工具

  • text_length(text) -获取文本长度
  • text_uppercase(text) -转换为大写
  • text_lowercase(text) -转换为小写
  • text_reverse(text) -反转文本
  • word_count(text) -数单词
  • extract_words(text, min_length) -提取单词
  • text_replace(text, old, new) -替换文本

实用工具

  • generate_uuid() -生成UUID 4
  • current_timestamp() -获取当前时间戳
  • hash_text(text, algorithm) -哈希文本
  • validate_json(text) -验证JSON
  • format_json(text) -格式化JSON
  • encode_base64(text) -Base64编码
  • decode_base64(text) -Base64解码

示例资源包括

系统资源

  • system://info -系统信息
  • system://performance -性能指标
  • system://config -服务器配置

数据资源

  • data://store/{key} -按键获取存储的数据
  • data://store -列出所有存储的数据
  • data://statistics -数据存储统计
  • data://sample/{format} -示例数据(json/csv/xml)

示例提示包括

助理提示

  • helpful_assistant(task, style) -一般协助
  • code_reviewer(code, language, focus) -代码审查
  • explain_concept(concept, audience, depth) -概念说明

分析提示

  • data_analyst(data_description, analysis_type) -数据分析
  • problem_solver(problem, approach) -解决问题
  • comparative_analysis(item_a, item_b, criteria) -比较

测试您的更改

# Test with MCP Inspector
npx @modelcontextprotocol/inspector uv run python -m mcp_boilerplate.main

# Or if installed globally
mcp-inspector uv run python -m mcp_boilerplate.main

安全与最佳实践

安全考虑

  • 输入验证:审查和更新验证 utils/validation.py
  • 敏感数据:确保错误消息中没有记录或暴露任何秘密
  • 速率限制:为生产部署添加速率限制
  • 路径验证:验证文件路径以防止目录遍历
  • 环境变量:切勿将机密提交到存储库

开发最佳实践

  1. 遵循既定的模式 用于工具、资源和提示
  2. 添加全面的错误处理 对于所有新组件
  3. 包括输入验证 出于安全考虑
  4. 编写测试 对于新功能
  5. 更新文档 添加功能时
  6. 使用类型提示 为了获得更好的代码质量
  7. 使用MCP检查员进行测试 部署前

测试您的更改

# Update tests to match your changes
make test

# Test with MCP Inspector
npx @modelcontextprotocol/inspector uv run python -m your_server_name.main

# Or if installed globally
mcp-inspector uv run python -m your_server_name.main

贡献

  1. 分叉此存储库
  2. 创建功能分支
  3. 添加您的工具、资源或提示
  4. 为新功能编写测试
  5. 运行质量检查: make ci
  6. 提交拉取请求

许可证

MIT许可证-有关详细信息,请参阅许可证文件。

自动化脚本

创建 scripts/rename_project.sh 对于自动设置:

#!/bin/bash
# Usage: ./scripts/rename_project.sh new_name "New Description"

OLD_NAME="mcp_boilerplate"
NEW_NAME="$1"
NEW_DESC="$2"

if [ -z "$NEW_NAME" ]; then
    echo "Usage: $0 new_name \"New Description\""
    exit 1
fi

# Rename source directory
mv "src/${OLD_NAME}" "src/${NEW_NAME}"

# Update all Python files
find . -name "*.py" -exec sed -i "s/${OLD_NAME}/${NEW_NAME}/g" {} +

# Update pyproject.toml
sed -i "s/mcp-boilerplate/${NEW_NAME//_/-}/g" pyproject.toml
sed -i "s/mcp_boilerplate/${NEW_NAME}/g" pyproject.toml

if [ -n "$NEW_DESC" ]; then
    sed -i "s/A robust boilerplate template.*/${NEW_DESC}/g" pyproject.toml
fi

echo "Project renamed to ${NEW_NAME}"
echo "Don't forget to update README.md and other documentation!"

额外资源


🚀 立即开始构建您的MCP服务器! 此样板为您提供了快速高效地创建生产就绪MCP服务器所需的一切。