@mymcp-fun/bazi
Version:
专业的八字计算MCP服务器
86 lines (85 loc) • 3.23 kB
JavaScript
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
import { MCPBaziService } from './bazi-service.js';
const createBaziServer = () => {
const server = new McpServer({
name: '@mymcp-fun/bazi',
version: '2.0.2',
description: '专业的八字计算MCP服务器'
});
const baziService = new MCPBaziService();
server.registerTool('get_bazi_details', {
title: '八字计算器',
description: '计算生辰八字和五行信息。输入出生年月日时,返回四柱、五行、生肖等完整的八字分析。',
inputSchema: {
year: z.number()
.min(1900, '年份不能早于1900年')
.max(2100, '年份不能晚于2100年')
.describe('出生年份 (1900-2100)'),
month: z.number()
.min(1, '月份必须在1-12之间')
.max(12, '月份必须在1-12之间')
.describe('出生月份 (1-12)'),
day: z.number()
.min(1, '日期必须在1-31之间')
.max(31, '日期必须在1-31之间')
.describe('出生日期 (1-31)'),
hour: z.number()
.min(0, '小时必须在0-23之间')
.max(23, '小时必须在0-23之间')
.describe('出生时间 (0-23时)'),
gender: z.enum(['male', 'female'])
.optional()
.default('male')
.describe('性别,默认为male'),
timezone: z.string()
.optional()
.default('Asia/Shanghai')
.describe('时区,默认为Asia/Shanghai')
}
}, async (args) => {
try {
const result = await baziService.calculateBazi(args);
return {
content: [{
type: 'text',
text: JSON.stringify(result, null, 2)
}]
};
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : '未知错误';
return {
content: [{
type: 'text',
text: JSON.stringify({
error: {
code: 'CALCULATION_FAILED',
message: errorMessage,
details: error
}
}, null, 2)
}],
isError: true
};
}
});
return server;
};
async function main() {
try {
const server = createBaziServer();
const transport = new StdioServerTransport();
await server.connect(transport);
console.error('🔮 MCP八字服务器已启动');
console.error('📊 版本: 2.0.1 (新版API重构)');
console.error('⚡ 准备接收八字计算请求...');
}
catch (error) {
console.error('服务器启动失败:', error);
process.exit(1);
}
}
main();