Skip to main content
Glama

Mingli MCP Server

by spyfree
PALACE_NAME_FIX.md5.64 kB
# 宫位名称验证问题修复总结 ## 问题描述 用户在 Smithery playground 上运行 MCP 时遇到两个问题: ### 问题 1:单独查询宫位时报错 当用户尝试使用 `analyze_ziwei_palace` 工具查询父母宫时,遇到以下错误: ``` MCP error -32602: 无效的宫位名称: 父母(父母). 有效宫位: 命宫, 兄弟, 夫妻, 子女, 财帛, 疾厄, 迁移, 仆役, 官禄, 田宅, 福德, 父母 ``` 或 ``` MCP error -32603: 未找到宫位: 父母 ``` ### 问题 2:排盘中父母宫显示有天府星 用户反馈 1989-10-17 午时的排盘中,父母宫显示有天府星,但理论上应该无主星。 ## 问题分析 ### 问题 1:根本原因 这是一个**宫位名称不一致**的 bug: 1. **PALACES 常量定义**(ziwei_system.py:32-45): ```python PALACES = ["命宫", "兄弟", "夫妻", "子女", ...] ``` 除了"命宫",其他宫位名称都不带"宫"字。 2. **iztro-py 库返回的名称**: ```python ['命宫', '父母宫', '福德宫', '田宅宫', ...] ``` 除了"命宫",其他宫位名称都带"宫"字。 3. **analyze_palace 方法的逻辑**: - 首先验证输入的 `palace_name` 必须在 `PALACES` 列表中 - 然后获取完整星盘,在 `chart["palaces"]` 中查找 `palace["name"]` 匹配 - 由于名称不一致(一个不带"宫",一个带"宫"),导致永远找不到匹配 ### 问题 2:iztro-py 库的计算结果 测试验证了 iztro-py 库对于 1989-10-17 午时的排盘结果: ``` 父母宫 (parentsPalace) - 天干丁 地支丑 主星: 天府 ``` 这是 iztro-py 库(版本 0.3.0)的计算结果。 ## 修复方案 ### 问题 1:修复宫位名称不一致 **方案**:修改 `PALACES` 常量,使其与 iztro-py 返回的名称保持一致。 **修改的文件**: 1. **systems/ziwei/ziwei_system.py:32-45** ```python # 修改前 PALACES = [ "命宫", "兄弟", "夫妻", "子女", "财帛", "疾厄", "迁移", "仆役", "官禄", "田宅", "福德", "父母", ] # 修改后 PALACES = [ "命宫", "兄弟宫", "夫妻宫", "子女宫", "财帛宫", "疾厄宫", "迁移宫", "交友宫", "官禄宫", "田宅宫", "福德宫", "父母宫", ] ``` 注:同时将"仆役"改为"交友宫",以匹配 iztro-py 的 `friendsPalace`。 2. **mingli_mcp.py:299-316** 更新 MCP 工具定义中的 `palace_name` 枚举: ```python "enum": [ "命宫", "兄弟宫", "夫妻宫", "子女宫", "财帛宫", "疾厄宫", "迁移宫", "交友宫", "官禄宫", "田宅宫", "福德宫", "父母宫", ] ``` **测试验证**: ```bash python test_formatter_output.py ``` 结果: - ✓ "命宫" 查询成功 - ✓ "父母宫" 查询成功 - ✓ "财帛宫" 查询成功 - ✗ "父母" 查询失败(符合预期,因为名称已改为"父母宫") 单元测试全部通过: ```bash pytest tests/test_ziwei.py -v # 4 passed, 4 warnings in 2.87s ``` ### 问题 2:排盘准确性 这是 iztro-py 库的计算结果。建议: 1. 使用其他紫微斗数软件(如元亨利贞网、灵机妙算等)进行交叉验证 2. 如果确认是 iztro-py 的计算错误,向上游项目提交 issue: - https://github.com/SylarLong/iztro-py mingli-mcp 作为一个 MCP 服务器,我们依赖 iztro-py 库进行紫微斗数计算。如果上游库有问题,我们需要等待上游修复或寻找替代库。 ## 影响评估 ### 破坏性变更 这是一个**破坏性变更**,会影响现有用户: **之前**: - 用户需要使用 `"父母"` 查询父母宫 - 用户需要使用 `"财帛"` 查询财帛宫 **现在**: - 用户需要使用 `"父母宫"` 查询父母宫 - 用户需要使用 `"财帛宫"` 查询财帛宫 **例外**: - `"命宫"` 保持不变 ### 优点 1. 与 iztro-py 库的输出保持一致 2. 更符合中文习惯(通常说"父母宫"而不是"父母") 3. 解决了 Smithery playground 上的报错问题 4. 避免用户困惑(输出是"父母宫",但输入要用"父母") ## 版本更新 建议发布 **v1.0.13**,changelog: ```markdown ## v1.0.13 - 2025-01-XX ### Breaking Changes - **宫位名称更新**:为了与 iztro-py 库保持一致,所有宫位名称(除"命宫"外)现在都带"宫"字 - `analyze_ziwei_palace` 工具的 `palace_name` 参数枚举值已更新 - 旧值:`["命宫", "兄弟", "夫妻", "子女", "财帛", "疾厄", "迁移", "仆役", "官禄", "田宅", "福德", "父母"]` - 新值:`["命宫", "兄弟宫", "夫妻宫", "子女宫", "财帛宫", "疾厄宫", "迁移宫", "交友宫", "官禄宫", "田宅宫", "福德宫", "父母宫"]` ### Bug Fixes - 修复 `analyze_ziwei_palace` 工具无法查询非命宫的宫位的问题 - 将"仆役宫"统一为"交友宫",与 iztro-py 保持一致 ### Migration Guide 如果您使用 `analyze_ziwei_palace` 工具: **之前**: ```python # 查询父母宫 result = ziwei.analyze_palace(birth_info, "父母") ``` **现在**: ```python # 查询父母宫 result = ziwei.analyze_palace(birth_info, "父母宫") ``` "命宫"保持不变,无需修改。 ``` ## 测试清单 - [x] 运行单元测试 `pytest tests/test_ziwei.py -v` - [x] 测试 "命宫" 查询 - [x] 测试 "父母宫" 查询 - [x] 测试 "财帛宫" 查询 - [x] 验证 "父母" 查询失败(符合预期) - [x] 验证所有宫位名称与 iztro-py 输出一致 ## 后续工作 1. 发布 v1.0.13 2. 更新文档(README.md, API_REFERENCE.md) 3. 通知用户破坏性变更 4. 调查 iztro-py 的排盘准确性问题(可选)

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/spyfree/mingli-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server