"""
自定义MCP服务器示例
这是一个简单的MCP服务器,提供基础的数学计算和文本处理工具。
用于演示如何创建自己的MCP服务器。
运行方式:
python my_mcp_server.py
或者作为MCP服务器被客户端调用:
MCPClient(["python", "my_mcp_server.py"])
"""
from fastmcp import FastMCP
import sys
import os
mcp = FastMCP("MyCustomServer")
@mcp.tool()
def add(a: float, b: float) -> float:
"""
加法计算器
Args:
a: 第一个数字
b: 第二个数字
Returns:
两数之和
"""
return a + b
@mcp.tool()
def subtract(a: float, b: float) -> float:
"""
减法计算器
Args:
a: 被减数
b: 减数
Returns:
两数之差
"""
return a - b
@mcp.tool()
def multiply(a: float, b: float) -> float:
"""
乘法计算器
Args:
a: 第一个数字
b: 第二个数字
Returns:
两数之积
"""
return a * b
@mcp.tool()
def divide(a: float, b: float) -> float:
"""
除法计算器
Args:
a: 被除数
b: 除数
Returns:
两数之商
Raises:
ValueError: 当除数为0时
"""
if b == 0:
raise ValueError("除数不能为零")
return a / b
@mcp.tool()
def reverse_text(text: str) -> str:
"""
反转文本
Args:
text: 要反转的文本
Returns:
反转后的文本
"""
return text[::-1]
@mcp.tool()
def count_words(text: str) -> int:
"""
统计文本中的单词数量
Args:
text: 要统计的文本
Returns:
单词数量
"""
return len(text.split())
@mcp.tool()
def to_uppercase(text: str) -> str:
"""
将文本转换为大写
Args:
text: 要转换的文本
Returns:
大写文本
"""
return text.upper()
@mcp.tool()
def to_lowercase(text: str) -> str:
"""
将文本转换为小写
Args:
text: 要转换的文本
Returns:
小写文本
"""
return text.lower()
@mcp.resource("config://server")
def get_server_config() -> str:
"""
获取服务器配置信息
Returns:
服务器配置的JSON字符串
"""
import json
config = {
"name": "MyCustomServer",
"version": "1.0.0",
"tools_count": 8,
"description": "自定义MCP服务器示例"
}
return json.dumps(config, ensure_ascii=False, indent=2)
@mcp.resource("info://capabilities")
def get_capabilities() -> str:
"""
获取服务器能力列表
Returns:
能力列表的文本描述
"""
capabilities = """
服务器能力列表:
数学计算:
- add: 加法计算
- subtract: 减法计算
- multiply: 乘法计算
- divide: 除法计算
文本处理:
- reverse_text: 反转文本
- count_words: 统计单词数
- to_uppercase: 转换为大写
- to_lowercase: 转换为小写
资源:
- config://server: 服务器配置
- info://capabilities: 能力列表(本资源)
"""
return capabilities.strip()
@mcp.prompt()
def math_helper() -> str:
"""
数学计算助手提示词
Returns:
提示词模板
"""
return """你是一个数学计算助手。你可以使用以下工具:
- add(a, b): 计算两数之和
- subtract(a, b): 计算两数之差
- multiply(a, b): 计算两数之积
- divide(a, b): 计算两数之商
请根据用户的问题选择合适的工具进行计算。"""
@mcp.prompt()
def text_processor() -> str:
"""
文本处理助手提示词
Returns:
提示词模板
"""
return """你是一个文本处理助手。你可以使用以下工具:
- reverse_text(text): 反转文本
- count_words(text): 统计单词数
- to_uppercase(text): 转换为大写
- to_lowercase(text): 转换为小写
请根据用户的需求选择合适的工具处理文本。"""
if __name__ == "__main__":
mcp.run()