fix: MarkdownSkill MCP 定义改为从元数据动态生成
- MarkdownSkill.get_tool_definition() 不再硬编码,从 SKILL.md 元数据生成 - 支持 frontmatter 中的 parameters 字段定义参数 - 无 parameters 时回退到通用 operation + args 定义 - Anthropic 定义同步更新 本次更新由 mimo 自动化执行,与开发者无关。
This commit is contained in:
1 parent
4c41cf4f99
commit
fea37955a7
1 file changed
+33
-33
+33
-33
@@ -161,9 +161,34 @@ class MarkdownSkill:
|
|||||||
instructions: str = ""
|
instructions: str = ""
|
||||||
file_path: str = ""
|
file_path: str = ""
|
||||||
scripts_dir: str = ""
|
scripts_dir: str = ""
|
||||||
|
parameters: Dict[str, Any] = field(default_factory=dict) # 从 frontmatter 解析
|
||||||
|
|
||||||
def get_tool_definition(self) -> Dict[str, Any]:
|
def get_tool_definition(self) -> Dict[str, Any]:
|
||||||
"""获取 OpenAI 格式的工具定义"""
|
"""获取 OpenAI 格式的工具定义 - 从元数据动态生成"""
|
||||||
|
properties = {}
|
||||||
|
required = []
|
||||||
|
|
||||||
|
if self.parameters:
|
||||||
|
# 从 frontmatter 中的 parameters 生成
|
||||||
|
for name, schema in self.parameters.items():
|
||||||
|
if isinstance(schema, dict):
|
||||||
|
properties[name] = schema
|
||||||
|
if schema.get("required", False):
|
||||||
|
required.append(name)
|
||||||
|
else:
|
||||||
|
# 通用定义:operation + args
|
||||||
|
properties = {
|
||||||
|
"operation": {
|
||||||
|
"type": "string",
|
||||||
|
"description": f"要执行的操作(可用工具: {', '.join(self.tools)})" if self.tools else "要执行的操作"
|
||||||
|
},
|
||||||
|
"args": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "操作参数"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
required = ["operation"]
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"type": "function",
|
"type": "function",
|
||||||
"function": {
|
"function": {
|
||||||
@@ -171,45 +196,20 @@ class MarkdownSkill:
|
|||||||
"description": self.description,
|
"description": self.description,
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": properties,
|
||||||
"operation": {
|
"required": required
|
||||||
"type": "string",
|
|
||||||
"enum": ["list", "read", "write", "delete", "copy", "move", "info", "search"],
|
|
||||||
"description": "要执行的文件操作类型"
|
|
||||||
},
|
|
||||||
"path": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "目标文件或目录路径"
|
|
||||||
},
|
|
||||||
"content": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "写入内容(write/append 操作时使用)"
|
|
||||||
},
|
|
||||||
"destination": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "目标路径(copy/move 操作时使用)"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["operation"]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_anthropic_tool_definition(self) -> Dict[str, Any]:
|
def get_anthropic_tool_definition(self) -> Dict[str, Any]:
|
||||||
"""获取 Anthropic 格式的工具定义"""
|
"""获取 Anthropic 格式的工具定义"""
|
||||||
|
tool_def = self.get_tool_definition()
|
||||||
|
func = tool_def.get("function", {})
|
||||||
return {
|
return {
|
||||||
"name": self.name,
|
"name": func.get("name", self.name),
|
||||||
"description": self.description,
|
"description": func.get("description", self.description),
|
||||||
"input_schema": {
|
"input_schema": func.get("parameters", {"type": "object", "properties": {}})
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"operation": {"type": "string"},
|
|
||||||
"path": {"type": "string"},
|
|
||||||
"content": {"type": "string"},
|
|
||||||
"destination": {"type": "string"}
|
|
||||||
},
|
|
||||||
"required": ["operation"]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user