analyze_xiaoliuren
Analyzes XiaoLiuRen divination guidance for specific dates and times using traditional Chinese six-spirit fortune telling methods with solar or lunar calendar support.
Instructions
分析指定日期时辰的小六壬指导意见
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | 日期,格式:YYYY-MM-DD | |
| time | Yes | 时辰,格式:HH:MM 或者传统时辰名称(如:子时、丑时等) | |
| calendar_type | Yes | 日历类型:solar=阳历,lunar=农历 | solar |
Implementation Reference
- index.js:91-179 (handler)Core handler function for the 'analyze_xiaoliuren' tool. Parses date and time inputs, converts to lunar calendar using js-calendar-converter, computes the Xiao Liu Ren divination based on lunar month, day, and hour, generates detailed output with process, result, and advice.async analyzeXiaoLiuRen(date, time, calendar_type) { try { // 解析日期 const dateMatch = date.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/); if (!dateMatch) { throw new Error('日期格式错误,请使用 YYYY-MM-DD 格式'); } const year = parseInt(dateMatch[1]); const month = parseInt(dateMatch[2]); const day = parseInt(dateMatch[3]); let lunarDate; if (calendar_type === 'solar') { // 阳历转农历 - 使用专业库 const result = calendar.solar2lunar(year, month, day); lunarDate = { year: result.lYear, month: result.lMonth, day: result.lDay, isLeap: result.isLeap, yearGanZhi: result.gzYear, monthGanZhi: result.gzMonth, dayGanZhi: result.gzDay, lunarMonthName: result.IMonthCn, lunarDayName: result.IDayCn, term: result.Term || '' }; } else { // 如果是农历,先转为阳历再转回农历获得完整信息 const solarResult = calendar.lunar2solar(year, month, day); const lunarResult = calendar.solar2lunar(solarResult.cYear, solarResult.cMonth, solarResult.cDay); lunarDate = { year: year, month: month, day: day, isLeap: false, yearGanZhi: lunarResult.gzYear, monthGanZhi: lunarResult.gzMonth, dayGanZhi: lunarResult.gzDay, lunarMonthName: lunarResult.IMonthCn, lunarDayName: lunarResult.IDayCn, term: lunarResult.Term || '' }; } // 解析时辰 - 简化版本 const timeHour = parseInt(time.split(':')[0]); const shichen = this.getShichen(timeHour); // 执行小六壬推算 const xiaoLiuRenResult = this.calculateXiaoLiuRen(lunarDate.month, lunarDate.day, timeHour); // 构建分析结果 const calendarTypeText = calendar_type === "lunar" ? "农历" : "阳历"; return `小六壬占卜结果: 🗓️ 输入信息: - 原始日期:${date}(${calendarTypeText}) - 时辰:${time} (${shichen}) 📅 农历信息: - 农历日期:${lunarDate.year}年${lunarDate.lunarMonthName}${lunarDate.lunarDayName}${lunarDate.isLeap ? '(闰月)' : ''} - 年干支:${lunarDate.yearGanZhi} - 月干支:${lunarDate.monthGanZhi} - 日干支:${lunarDate.dayGanZhi} - 时辰:${shichen} ${lunarDate.term ? `- 节气:${lunarDate.term}` : ''} 🧮 小六壬推算过程: - ${xiaoLiuRenResult.calculation.月将} - ${xiaoLiuRenResult.calculation.日期} - ${xiaoLiuRenResult.calculation.时辰} 🔮 占卜结果:【${xiaoLiuRenResult.finalResult.name}】 - 五行属性:${xiaoLiuRenResult.finalResult.element} - 吉凶性质:${xiaoLiuRenResult.finalResult.nature} - 基本含义:${xiaoLiuRenResult.finalResult.meaning} - 详细解释:${xiaoLiuRenResult.finalResult.details} 💡 建议指导: ${this.getAdvice(xiaoLiuRenResult.finalResult.name)}`; } catch (error) { throw new Error(`日期时间处理错误:${error.message}`); } }
- index.js:35-54 (schema)Input schema for the analyze_xiaoliuren tool, defining parameters for date, time, and calendar_type with validation.inputSchema: { type: "object", properties: { date: { type: "string", description: "日期,格式:YYYY-MM-DD", }, time: { type: "string", description: "时辰,格式:HH:MM 或者传统时辰名称(如:子时、丑时等)", }, calendar_type: { type: "string", enum: ["solar", "lunar"], description: "日历类型:solar=阳历,lunar=农历", default: "solar" } }, required: ["date", "time", "calendar_type"], },
- index.js:32-55 (registration)Tool registration in the ListTools response, including name, description, and input schema.{ name: "analyze_xiaoliuren", description: "分析指定日期时辰的小六壬指导意见", inputSchema: { type: "object", properties: { date: { type: "string", description: "日期,格式:YYYY-MM-DD", }, time: { type: "string", description: "时辰,格式:HH:MM 或者传统时辰名称(如:子时、丑时等)", }, calendar_type: { type: "string", enum: ["solar", "lunar"], description: "日历类型:solar=阳历,lunar=农历", default: "solar" } }, required: ["date", "time", "calendar_type"], }, },
- index.js:60-88 (handler)MCP CallTool request handler that dispatches to analyzeXiaoLiuRen when the tool name matches 'analyze_xiaoliuren', handles errors, and formats the response.this.server.setRequestHandler(CallToolRequestSchema, async (request) => { if (request.params.name === "analyze_xiaoliuren") { const { date, time, calendar_type } = request.params.arguments; try { const result = await this.analyzeXiaoLiuRen(date, time, calendar_type); return { content: [ { type: "text", text: result, }, ], }; } catch (error) { return { content: [ { type: "text", text: `错误:${error.message}`, }, ], isError: true, }; } } throw new Error(`未知工具: ${request.params.name}`); });
- index.js:252-322 (helper)Core computation helper for Xiao Liu Ren algorithm: defines the six gods with detailed meanings, computes positions based on lunar month, day, and shichen index using modular arithmetic.calculateXiaoLiuRen(lunarMonth, lunarDay, hour) { // 六神定义 - 更详细的传统解释 const sixGods = [ { name: '大安', element: '木', nature: '吉', meaning: '安稳安逸美事,但也有静止之意。事情平稳发展,宜守不宜动。', details: '大安为吉宫,主平稳、安定。感情方面发展平稳但可能过于平淡,财运稳定有进有出。适合问"能否成功"类问题,不适合问"能否行动"类问题。' }, { name: '留连', element: '土', nature: '凶', meaning: '反复、犹豫、拖延、漫长、纠缠、暧昧。纯阴卦,主不光明、秘密、隐私。', details: '留连纯阴卦,代表事情未定,仍有变化。夜晚测得尤为不稳定。与小吉同处吉凶交界,但凶性稍多。事情发展缓慢,多有阻碍。' }, { name: '速喜', element: '火', nature: '吉', meaning: '火热、快速、好事。有好事但不长久,应快速行动把握时机。', details: '速喜为吉宫,如大火燎原,一烧既尽。短期事情大吉(考试、消息、决策),长期事情后劲不足。为朱雀,有口舌争辩之象。' }, { name: '赤口', element: '金', nature: '凶', meaning: '口舌官非、吵闹打斗、意外凶险。为白虎,代表挫败和突发意外。', details: '赤口为凶宫,主口舌官非。落此宫事情已非常凶,必定失败且为挫败。也主精神紧张,对所问之事不抱希望。但也有交谈、合作等正面象意。' }, { name: '小吉', element: '水', nature: '平', meaning: '驿马宫,为动,向好发展但力量微弱需自身努力。为桃花,主美事。', details: '小吉为纯阳卦,变化可能性最大。成功与否更多取决于个人努力和行动。消极对待则吉性减退,积极行动则成功率增加。' }, { name: '空亡', element: '土', nature: '凶', meaning: '空、亡,事情落空不成,但也有无事之意。性质特殊,倾向虚无。', details: '空亡有两种可能:一是大凶结果很差,二是什么都不会发生。问失物为未丢,问寻找为找不到。常代表弃考、放弃等情况。' } ]; // 第一步:月将推算(从大安开始,按农历月份数) let monthPosition = (lunarMonth - 1) % 6; // 第二步:日期推算(从月将位置开始,按农历日期数) let dayPosition = (monthPosition + lunarDay - 1) % 6; // 第三步:时辰推算(从日期位置开始,按时辰序号数) let shichenIndex = this.getShichenIndex(hour); let finalPosition = (dayPosition + shichenIndex - 1) % 6; // 获取最终结果 const result = sixGods[finalPosition]; return { monthPosition: sixGods[monthPosition].name, dayPosition: sixGods[dayPosition].name, finalResult: result, calculation: { 月将: `农历${lunarMonth}月 → ${sixGods[monthPosition].name}`, 日期: `从${sixGods[monthPosition].name}数${lunarDay}日 → ${sixGods[dayPosition].name}`, 时辰: `从${sixGods[dayPosition].name}数${shichenIndex}(时辰序号) → ${result.name}` } }; }