Files
WulaFallenEmpireRW/MCP/rimworld_query.py
2025-08-24 21:15:38 +08:00

105 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
RimWorld知识库命令行工具
快速查询工具无需Qoder IDE
"""
import os
import sys
import argparse
import json
# 添加MCP路径
MCP_DIR = os.path.dirname(os.path.abspath(__file__))
SDK_PATH = os.path.join(MCP_DIR, 'python-sdk', 'src')
if SDK_PATH not in sys.path:
sys.path.insert(0, SDK_PATH)
def quick_query(question: str, format_output: bool = True) -> str:
"""快速查询函数"""
try:
# 动态导入避免启动时的依赖检查
from mcpserver_stdio import get_context
result = get_context(question)
if format_output:
# 格式化输出
lines = result.split('\n')
formatted_lines = []
current_section = ""
for line in lines:
if line.startswith('--- 结果'):
current_section = f"\n🔍 {line}"
formatted_lines.append(current_section)
elif line.startswith('文件路径:'):
formatted_lines.append(f"📄 {line}")
elif line.strip() and not line.startswith('---'):
formatted_lines.append(line)
return '\n'.join(formatted_lines)
else:
return result
except Exception as e:
return f"❌ 查询失败: {e}"
def main():
parser = argparse.ArgumentParser(
description='RimWorld知识库命令行查询工具',
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
使用示例:
%(prog)s "ThingDef是什么"
%(prog)s "如何创建新的Pawn" --raw
%(prog)s "建筑物定义" --output result.txt
%(prog)s --list-examples
"""
)
parser.add_argument('question', nargs='?', help='要查询的问题')
parser.add_argument('--raw', action='store_true', help='输出原始结果,不格式化')
parser.add_argument('--output', '-o', help='将结果保存到文件')
parser.add_argument('--list-examples', action='store_true', help='显示查询示例')
args = parser.parse_args()
if args.list_examples:
print("📚 RimWorld知识库查询示例:")
examples = [
"ThingDef的定义和用法",
"如何创建新的Building",
"Pawn类的主要方法",
"CompPower的使用方法",
"XML中的defName规则",
"GenConstruct.CanPlaceBlueprintAt",
"Building_Door的开关逻辑"
]
for i, example in enumerate(examples, 1):
print(f" {i}. {example}")
return
if not args.question:
parser.print_help()
return
print(f"🔍 正在查询: {args.question}")
result = quick_query(args.question, not args.raw)
if args.output:
try:
with open(args.output, 'w', encoding='utf-8') as f:
f.write(result)
print(f"✅ 结果已保存到: {args.output}")
except Exception as e:
print(f"❌ 保存文件失败: {e}")
else:
print("\n" + "="*60)
print("📖 查询结果:")
print("="*60)
print(result)
print("="*60)
if __name__ == "__main__":
main()