MCPcopy Index your code
hub / github.com/1Panel-dev/MaxKB / _generate_mcp_server_code

Method _generate_mcp_server_code

apps/common/utils/tool_code.py:157–301  ·  view source on GitHub ↗
(self, _code, params, name=None, description=None, tool_id=None)

Source from the content-addressed store, hash-verified

155 raise Exception(result.get("msg") + (f"\n{subprocess_result.stderr}" if subprocess_result.stderr else ""))
156
157 def _generate_mcp_server_code(self, _code, params, name=None, description=None, tool_id=None):
158 # 解析代码,提取导入语句和函数定义
159 try:
160 tree = ast.parse(_code)
161 except SyntaxError:
162 return _code
163 imports = []
164 functions = []
165 other_code = []
166 for node in tree.body:
167 if isinstance(node, ast.Import) or isinstance(node, ast.ImportFrom):
168 imports.append(ast.unparse(node))
169 elif isinstance(node, ast.FunctionDef):
170 if node.name.startswith("_"):
171 other_code.append(ast.unparse(node))
172 continue
173 # 修改函数参数以包含 params 中的默认值
174 arg_names = [arg.arg for arg in node.args.args]
175 # 为参数添加默认值,确保参数顺序正确
176 defaults = []
177 num_defaults = 0
178 # 从后往前检查哪些参数有默认值
179 for i, arg_name in enumerate(arg_names):
180 if arg_name in params:
181 num_defaults = len(arg_names) - i
182 break
183 # 为有默认值的参数创建默认值列表
184 if num_defaults > 0:
185 for i in range(len(arg_names) - num_defaults, len(arg_names)):
186 arg_name = arg_names[i]
187 if arg_name in params:
188 default_value = params[arg_name]
189 if isinstance(default_value, str):
190 defaults.append(ast.Constant(value=default_value))
191 elif isinstance(default_value, (int, float, bool)):
192 defaults.append(ast.Constant(value=default_value))
193 elif default_value is None:
194 defaults.append(ast.Constant(value=None))
195 else:
196 defaults.append(ast.Constant(value=str(default_value)))
197 else:
198 # 如果某个参数没有默认值,需要添加 None 占位
199 defaults.append(ast.Constant(value=None))
200 node.args.defaults = defaults
201 # 将不支持 JSON Schema 的参数类型注解替换为 Any,
202 # 避免 FastMCP/Pydantic 生成 schema 时崩溃(如 requests.Response)
203 _safe_annotation_names = {
204 "str",
205 "int",
206 "float",
207 "bool",
208 "dict",
209 "list",
210 "tuple",
211 "set",
212 "bytes",
213 "Any",
214 "Optional",

Callers 1

Calls 4

ReturnTransformerClass · 0.85
replaceMethod · 0.80
parseMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected