ziwei-mcp
Version:
紫微斗数 MCP (Ziwei Doushu Model Context Protocol) - 基于 MCP 协议的紫微斗数命理分析工具
611 lines (599 loc) • 17.4 kB
JavaScript
#!/usr/bin/env node
const { Server } = require("@modelcontextprotocol/sdk/server/index.js");
const {
StdioServerTransport,
} = require("@modelcontextprotocol/sdk/server/stdio.js");
const {
CallToolRequestSchema,
ListToolsRequestSchema,
} = require("@modelcontextprotocol/sdk/types.js");
const { MCPHandler } = require("./tools/mcp-handler.js");
// 创建MCP处理器实例
const mcpHandler = new MCPHandler();
// 创建MCP服务器
const server = new Server({
name: "ziwei-doushu",
version: "1.0.0",
});
// 注册工具列表处理器
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "generate_chart",
description: "生成紫微斗数命盘,根据出生信息排盘",
inputSchema: {
type: "object",
properties: {
name: {
type: "string",
description: "姓名(可选)",
},
gender: {
type: "string",
enum: ["male", "female"],
description: "性别",
},
birthDate: {
type: "string",
description: "出生日期,格式:YYYY-MM-DD",
},
birthTime: {
type: "string",
description: "出生时间,格式:HH:mm",
},
birthLocation: {
type: "string",
description: "出生地点(可选)",
},
},
required: ["gender", "birthDate", "birthTime"],
},
},
{
name: "interpret_chart",
description: "解读紫微斗数命盘,提供详细的性格、事业、财运等分析",
inputSchema: {
type: "object",
properties: {
chartId: {
type: "string",
description: "命盘ID(由generate_chart返回)",
},
focusAreas: {
type: "array",
items: {
type: "string",
enum: [
"personality",
"career",
"wealth",
"relationship",
"health",
],
},
description: "重点分析的领域",
},
},
required: ["chartId"],
},
},
{
name: "analyze_fortune",
description: "分析运势,包括大运、流年、流月等时间维度的运势预测",
inputSchema: {
type: "object",
properties: {
chartId: {
type: "string",
description: "命盘ID(由generate_chart返回)",
},
year: {
type: "number",
description: "要分析的年份",
},
aspects: {
type: "array",
items: {
type: "string",
enum: ["career", "wealth", "relationship", "health", "study"],
},
description: "要分析的运势方面",
},
includeMonthly: {
type: "boolean",
description: "是否包含月运分析",
default: false,
},
},
required: ["chartId", "year"],
},
},
{
name: "analyze_compatibility",
description: "合婚分析,分析两人的紫微斗数命盘匹配度",
inputSchema: {
type: "object",
properties: {
chart1: {
type: "object",
description: "第一人的命盘数据",
},
chart2: {
type: "object",
description: "第二人的命盘数据",
},
analysisDepth: {
type: "string",
enum: ["basic", "comprehensive"],
default: "basic",
description: "分析深度",
},
},
required: ["chart1", "chart2"],
},
},
{
name: "select_auspicious_date",
description: "择日功能,根据个人命盘选择适合的吉日良辰",
inputSchema: {
type: "object",
properties: {
chart: {
type: "object",
description: "个人命盘数据",
},
eventType: {
type: "string",
enum: [
"wedding",
"business_opening",
"moving",
"travel",
"investment",
],
description: "事件类型",
},
dateRange: {
type: "object",
properties: {
startDate: {
type: "string",
description: "开始日期 YYYY-MM-DD",
},
endDate: {
type: "string",
description: "结束日期 YYYY-MM-DD",
},
},
required: ["startDate", "endDate"],
},
timePreference: {
type: "string",
enum: ["morning", "afternoon", "evening", "any"],
default: "any",
description: "时间偏好",
},
},
required: ["chart", "eventType", "dateRange"],
},
},
{
name: "intelligent_interpretation",
description: "AI智能解盘,提供个性化深度命盘解析",
inputSchema: {
type: "object",
properties: {
chart: {
type: "object",
description: "命盘数据",
},
focusAreas: {
type: "array",
items: {
type: "string",
enum: [
"personality",
"career",
"wealth",
"relationship",
"health",
"family",
],
},
description: "重点分析领域",
},
lifeStage: {
type: "string",
enum: ["youth", "adult", "middle-age", "elderly"],
description: "人生阶段",
},
currentConcerns: {
type: "array",
items: {
type: "string",
},
description: "当前关注的问题",
},
},
required: ["chart"],
},
},
{
name: "generate_visualization",
description: "生成命盘可视化图表,支持多种样式和格式",
inputSchema: {
type: "object",
properties: {
chartId: {
type: "string",
description: "命盘ID(由generate_chart返回)",
},
visualizationType: {
type: "string",
enum: [
"traditional_chart",
"modern_wheel",
"palace_grid",
"star_map",
],
default: "traditional_chart",
description: "可视化类型",
},
includeElements: {
type: "array",
items: {
type: "string",
enum: [
"main_stars",
"auxiliary_stars",
"palace_names",
"elements",
],
},
description: "包含的元素",
},
colorScheme: {
type: "string",
enum: ["traditional", "modern", "colorful", "monochrome"],
default: "traditional",
description: "配色方案",
},
outputFormat: {
type: "string",
enum: ["svg", "png", "html"],
default: "svg",
description: "输出格式",
},
},
required: ["chartId"],
},
},
{
name: "analyze_life_timeline",
description: "分析人生时间轴,包括大运流年详细分析",
inputSchema: {
type: "object",
properties: {
chartId: {
type: "string",
description: "命盘ID",
},
startAge: {
type: "number",
minimum: 0,
maximum: 120,
description: "起始年龄",
},
endAge: {
type: "number",
minimum: 0,
maximum: 120,
description: "结束年龄",
},
analysisGranularity: {
type: "string",
enum: ["decade", "year", "month"],
default: "year",
description: "分析粒度",
},
},
required: ["chartId", "startAge", "endAge"],
},
},
{
name: "analyze_relationships",
description: "分析人际关系,包括家庭、朋友、同事等",
inputSchema: {
type: "object",
properties: {
chartId: {
type: "string",
description: "命盘ID",
},
relationshipType: {
type: "string",
enum: ["family", "romantic", "friendship", "business", "mentor"],
description: "关系类型",
},
targetPersonChart: {
type: "string",
description: "对方命盘ID(可选)",
},
analysisAspects: {
type: "array",
items: {
type: "string",
enum: [
"communication",
"trust",
"conflict_resolution",
"mutual_support",
"growth_potential",
],
},
description: "分析维度",
},
},
required: ["chartId", "relationshipType"],
},
},
{
name: "career_guidance",
description: "职业发展指导和决策支持",
inputSchema: {
type: "object",
properties: {
chartId: {
type: "string",
description: "命盘ID",
},
currentAge: {
type: "number",
minimum: 16,
maximum: 70,
description: "当前年龄",
},
careerStage: {
type: "string",
enum: [
"student",
"entry-level",
"mid-career",
"senior",
"executive",
"entrepreneur",
],
description: "职业阶段",
},
industries: {
type: "array",
items: {
type: "string",
},
description: "感兴趣的行业",
},
decisionType: {
type: "string",
enum: [
"career_change",
"job_selection",
"promotion",
"entrepreneurship",
"retirement",
],
description: "决策类型",
},
},
required: ["chartId", "currentAge", "careerStage"],
},
},
{
name: "health_analysis",
description: "健康分析和养生建议",
inputSchema: {
type: "object",
properties: {
chartId: {
type: "string",
description: "命盘ID",
},
currentAge: {
type: "number",
minimum: 0,
maximum: 120,
description: "当前年龄",
},
healthConcerns: {
type: "array",
items: {
type: "string",
enum: [
"cardiovascular",
"digestive",
"respiratory",
"nervous",
"musculoskeletal",
"mental_health",
],
},
description: "健康关注点",
},
analysisType: {
type: "string",
enum: ["prevention", "current_issues", "long_term_trends"],
default: "prevention",
description: "分析类型",
},
},
required: ["chartId", "currentAge"],
},
},
{
name: "educational_guidance",
description: "教育和学习指导",
inputSchema: {
type: "object",
properties: {
chartId: {
type: "string",
description: "命盘ID",
},
studentAge: {
type: "number",
minimum: 3,
maximum: 30,
description: "学生年龄",
},
educationLevel: {
type: "string",
enum: [
"preschool",
"elementary",
"middle_school",
"high_school",
"university",
"graduate",
],
description: "教育阶段",
},
subjectAreas: {
type: "array",
items: {
type: "string",
enum: [
"mathematics",
"sciences",
"languages",
"arts",
"social_studies",
"technology",
"sports",
],
},
description: "学科领域",
},
guidanceType: {
type: "string",
enum: [
"aptitude_assessment",
"study_methods",
"career_planning",
"exam_preparation",
],
description: "指导类型",
},
},
required: ["chartId", "studentAge", "educationLevel"],
},
},
],
};
});
// 注册工具调用处理器
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
try {
let result;
switch (name) {
case "generate_chart":
result = await mcpHandler.handleGenerateChart(args);
break;
case "interpret_chart":
result = await mcpHandler.handleInterpretChart(args);
break;
case "analyze_fortune":
result = await mcpHandler.handleAnalyzeFortune(args);
break;
case "analyze_compatibility":
result = await mcpHandler.handleAnalyzeCompatibility(args);
break;
case "select_auspicious_date":
result = await mcpHandler.handleSelectAuspiciousDate(args);
break;
case "intelligent_interpretation":
result = await mcpHandler.handleIntelligentInterpretation(args);
break;
case "generate_visualization":
result = await mcpHandler.handleGenerateVisualization(args);
break;
case "analyze_life_timeline":
result = await mcpHandler.handleAnalyzeLifeTimeline(args);
break;
case "analyze_relationships":
result = await mcpHandler.handleAnalyzeRelationships(args);
break;
case "career_guidance":
result = await mcpHandler.handleCareerGuidance(args);
break;
case "health_analysis":
result = await mcpHandler.handleHealthAnalysis(args);
break;
case "educational_guidance":
result = await mcpHandler.handleEducationalGuidance(args);
break;
default:
result = {
success: false,
error: `未知的工具: ${name}`,
};
}
// 确保返回MCP标准格式
if (result && result.content) {
return result;
} else if (result && result.success) {
return {
content: [
{
type: "text",
text:
typeof result.data === "string"
? result.data
: JSON.stringify(result.data, null, 2),
},
],
};
} else {
const errorMessage = result?.error || "未知错误";
return {
content: [
{
type: "text",
text: `错误: ${errorMessage}`,
},
],
isError: true,
};
}
} catch (error) {
console.error(`工具调用失败 [${name}]:`, error);
return {
content: [
{
type: "text",
text: `工具调用失败: ${error.message}`,
},
],
isError: true,
};
}
});
// 启动服务器
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("紫微斗数MCP服务器已启动");
}
// 导出模块供测试使用
module.exports = {
server,
mcpHandler,
main,
};
// 如果直接运行此文件,启动服务器
if (require.main === module) {
main().catch((error) => {
console.error("服务器启动失败:", error);
process.exit(1);
});
}