yszl-mcp
Version:
Scenic Area Tourist Flow Query Server with official MCP SDK
101 lines (87 loc) • 3.01 kB
JavaScript
/**
* 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);
});