| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- """
- 自定义MCP服务器示例
- 这是一个简单的MCP服务器,提供基础的数学计算和文本处理工具。
- 用于演示如何创建自己的MCP服务器。
- 运行方式:
- python my_mcp_server.py
- 或者作为MCP服务器被客户端调用:
- MCPClient(["python", "my_mcp_server.py"])
- """
- from fastmcp import FastMCP
- import sys
- import os
- # 创建MCP服务器实例
- 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服务器
- # FastMCP会自动处理stdio传输
- mcp.run()
|