message / app /mcp /docs_generator.py
hunian
feat(mcp): add plugin_registry, docs_generator, and installer modules
6f89625
Raw
History Blame Contribute Delete
1.7 kB
"""
MCP工具文档生成器 - 从Pydantic模型自动生成工具文档
"""
from pydantic import BaseModel
from typing import Dict, Any, Type, Optional
def generate_tool_docs(
input_model: Optional[Type[BaseModel]],
output_model: Optional[Type[BaseModel]]
) -> Dict[str, Any]:
"""从Pydantic模型生成工具文档。
Args:
input_model: 输入参数模型
output_model: 输出结果模型
Returns:
包含input和output schema的文档字典
"""
def model_to_schema(model: Optional[Type[BaseModel]]) -> Dict:
if model is None:
return {}
schema = model.model_json_schema()
return {
"type": schema.get("type", "object"),
"properties": schema.get("properties", {}),
"required": schema.get("required", []),
}
return {
"input": model_to_schema(input_model),
"output": model_to_schema(output_model),
}
def generate_full_tool_doc(tool_info: Dict[str, Any]) -> Dict[str, Any]:
"""生成完整的工具文档。
Args:
tool_info: 工具信息字典(来自 registered_tools)
Returns:
完整的工具文档,包含名称、描述、输入输出schema
"""
docs = generate_tool_docs(
tool_info.get('input_model'),
tool_info.get('output_model')
)
return {
"name": tool_info.get('tool'),
"full_name": f"{tool_info['plugin']}_{tool_info['tool']}",
"title": tool_info.get('title'),
"description": tool_info.get('description'),
"input": docs['input'],
"output": docs['output'],
"annotations": tool_info.get('annotations', {}),
}