UNPKG

yszl-mcp

Version:

Scenic Area Tourist Flow Query Server with official MCP SDK

101 lines (87 loc) 3.01 kB
/** * Startup file for stdio communication protocol mode */ import dotenv from 'dotenv'; import { MCPServer, StdioServerTransport } from '@modelcontextprotocol/sdk'; import { z } from 'zod'; dotenv.config(); // Import tools import { TouristFlowTool } from '../tools/touristFlowTool.js'; import { CumulativeTouristFlowTool } from '../tools/cumulativeTouristFlowTool.js'; import { DailyTouristFlowTool } from '../tools/dailyTouristFlowTool.js'; import { ProvinceOriginTool } from '../tools/provinceOriginTool.js'; import { GenderPortraitTool } from '../tools/genderPortraitTool.js'; import { AgePortraitTool } from '../tools/agePortraitTool.js'; // 加载环境变量 console.log(JSON.stringify({ type: 'log', message: 'Loading environment variables...' })); // 创建工具实例 const touristFlowTool = new TouristFlowTool(); const cumulativeTouristFlowTool = new CumulativeTouristFlowTool(); const dailyTouristFlowTool = new DailyTouristFlowTool(); const provinceOriginTool = new ProvinceOriginTool(); const genderPortraitTool = new GenderPortraitTool(); const agePortraitTool = new AgePortraitTool(); console.log(JSON.stringify({ type: 'log', message: 'Environment variables loaded successfully' })); // 创建MCP服务器 const server = new MCPServer({ name: "Tourist Flow Query Service", version: "1.2.53" }); // 注册工具 server.tool("TouristFlow", { scenicId: z.string().describe("Scenic Area ID") }, async ({ scenicId }) => touristFlowTool.execute({ scenicId }) ); server.tool("CumulativeTouristFlow", { scenicId: z.string().describe("Scenic Area ID") }, async ({ scenicId }) => cumulativeTouristFlowTool.execute({ scenicId }) ); server.tool("DailyTouristFlow", { scenicId: z.string().describe("Scenic Area ID"), date: z.string().describe("Date in YYYYMMDD format") }, async ({ scenicId, date }) => dailyTouristFlowTool.execute({ scenicId, date }) ); server.tool("ProvinceOrigin", { scenicId: z.string().describe("Scenic Area ID"), scenicId: z.string().describe("Date in YYYYMMDD format") }, async ({ scenicId, date }) => provinceOriginTool.execute({ scenicId, date }) ); server.tool("GenderPortrait", { scenicId: z.string().describe("Scenic Area ID"), date: z.string().describe("Date in YYYYMMDD format") }, async ({ scenicId, date }) => genderPortraitTool.execute({ scenicId, date }) ); server.tool("AgePortrait", { scenicId: z.string().describe("Scenic Area ID"), date: z.string().describe("Date in YYYYMMDD format") }, async ({ scenicId, date }) => agePortraitTool.execute({ scenicId, date }) ); // 创建传输层并连接 const transport = new StdioServerTransport(); // 启动服务器 await server.connect(transport).then(() => { console.log(JSON.stringify({ type: 'log', message: 'MCP server started successfully' })); }).catch(error => { console.log(JSON.stringify({ type: 'error', message: `Failed to start MCP server: ${error.message}` })); process.exit(1); });