38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
from services.sql_service import SqlService
|
||
from mcp.server.fastmcp import FastMCP
|
||
from create_logger import logger
|
||
|
||
# 创建天气MCP服务器
|
||
def create_weather_mcp_server():
|
||
# 创建FastMCP实例
|
||
weather_mcp = FastMCP(name="WeatherTools",
|
||
instructions="天气查询工具,基于 weather_data 表。",
|
||
log_level="ERROR",
|
||
host="127.0.0.1", port=8002)
|
||
|
||
# 实例化sql查询服务
|
||
service = SqlService("天气查询")
|
||
|
||
@weather_mcp.tool(
|
||
name="query_weather",
|
||
description="查询天气数据,输入 SQL,如 'SELECT * FROM weather_data WHERE city = \"北京\" AND fx_date = \"2025-07-30\"'"
|
||
)
|
||
def query_weather(sql: str) -> str:
|
||
logger.info(f"执行天气查询: {sql}")
|
||
return service.execute_query(sql)
|
||
|
||
# 打印服务器信息
|
||
logger.info("=== 天气MCP服务器信息 ===")
|
||
logger.info(f"名称: {weather_mcp.name}")
|
||
logger.info(f"描述: {weather_mcp.instructions}")
|
||
|
||
# 运行服务器
|
||
try:
|
||
print("服务器已启动,请访问 http://127.0.0.1:8002/mcp")
|
||
weather_mcp.run(transport="streamable-http") # 使用 streamable-http 传输方式
|
||
except Exception as e:
|
||
print(f"服务器启动失败: {e}")# 创建天气MCP服务器
|
||
|
||
|
||
if __name__ == "__main__":
|
||
create_weather_mcp_server() |