You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

76 lines
2.0 KiB

import {
McpServer,
ResourceTemplate,
} from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
makeNWSRequest,
formatAlert,
NWS_API_BASE,
USER_AGENT,
} from "./util.js";
import { z } from "zod";
const server = new McpServer({
name: "天气工具包",
version: "0.0.1",
});
server.tool("获取天气", { state: z.string() }, async ({ state }) => {
const url = `https://cn.apihz.cn/api/tianqi/tqyb.php?id=88888888&key=88888888&sheng=四川&place=绵阳`;
const data = await fetch(url).then(res => res.json());
if (!data) {
return "无法获取天气";
}
return data;
});
// server.tool({
// name: "get-forecast",
// description: "获取位置的天气预报",
// parameters: {
// latitude: {
// type: "number",
// description: "位置的纬度",
// },
// longitude: {
// type: "number",
// description: "位置的经度",
// },
// },
// async execute({ latitude, longitude }) {
// // 首先获取预报网格端点
// const pointsUrl = `${NWS_API_BASE}/points/${latitude},${longitude}`;
// const pointsData = await makeNWSRequest(pointsUrl);
// if (!pointsData) {
// return "无法为此位置获取预报数据。";
// }
// // 从点响应中获取预报URL
// const forecastUrl = pointsData.properties.forecast;
// const forecastData = await makeNWSRequest(forecastUrl);
// if (!forecastData) {
// return "无法获取详细预报。";
// }
// // 将时段格式化为可读预报
// const periods = forecastData.properties.periods;
// const forecasts = periods.slice(0, 5).map(
// (period) => `
// ${period.name}:
// Temperature: ${period.temperature}°${period.temperatureUnit}
// Wind: ${period.windSpeed} ${period.windDirection}
// Forecast: ${period.detailedForecast}
// `
// );
// return forecasts.join("\n---\n");
// },
// });
const transport = new StdioServerTransport();
await server.connect(transport);