我遇到的问题是,这些mcp.tool函数和main函数必须写在同一个文件里面,导致这个文件太长了。如果分开写两个文件,就无法注册另外一个文件里的mcp.tool函数,智能体不能调用这些工具。感谢Sam老师解答。
老师写的代码是可以调通的,但我希望把mcp.tool的函数全部移到test_func.py文件里,我写的代码是这样的,是不是mcp.tool函数和main函数必须写在一起
import sys
from mcp.server.fastmcp import FastMCP
mcp = FastMCP()
dir = "D:\\GOPATH\\src\\cc\\testpy\\account\\mymcp"
sys.path.append(dir)
from test_func import register
if __name__ == '__main__':
mcp.run(transport="stdio")
但是提示报错信息
{'account_tools': {'transport': 'stdio', 'command': 'python', 'args': ['D:\\GOPATH\\src\\cc\\testpy\\account\\mymcp\\account.py']}}
?[31mERROR?[0m: + Exception Group Traceback (most recent call last):
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\starlette\routing.py", line 694, in lifespan
| async with self.lifespan_context(app) as maybe_state:
| ~~~~~~~~~~~~~~~~~~~~~^^^^^
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\starlette\routing.py", line 571, in __aenter__
| await self._router.startup()
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\starlette\routing.py", line 671, in startup
| await handler()
| File "D:\GOPATH\src\cc\testpy\account\web.py", line 82, in startup_event
| await initialize_agent()
| File "D:\GOPATH\src\cc\testpy\account\web.py", line 63, in initialize_agent
| account_tools = await get_stdio_account_tools()
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File "D:\GOPATH\src\cc\testpy\account\tools\account_tools.py", line 26, in get_stdio_account_tools
| client, tools = await create_mcp_stdio_client("account_tools", params)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File "D:\GOPATH\src\cc\testpy\account\tools\account_tools.py", line 14, in create_mcp_stdio_client
| tools = await client.get_tools()
| ^^^^^^^^^^^^^^^^^^^^^^^^
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\langchain_mcp_adapters\client.py", line 142, in get_tools
| tools_list = await asyncio.gather(*load_mcp_tool_tasks)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\langchain_mcp_adapters\tools.py", line 168, in load_mcp_tools
| async with create_session(connection) as tool_session:
| ~~~~~~~~~~~~~~^^^^^^^^^^^^
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\contextlib.py", line 235, in __aexit__
| await self.gen.athrow(value)
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\langchain_mcp_adapters\sessions.py", line 394, in create_session
| async with _create_stdio_session(**params) as session:
| ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\contextlib.py", line 235, in __aexit__
| await self.gen.athrow(value)
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\langchain_mcp_adapters\sessions.py", line 221, in _create_stdio_sess
ion
| stdio_client(server_params) as (read, write),
| ~~~~~~~~~~~~^^^^^^^^^^^^^^^
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\contextlib.py", line 235, in __aexit__
| await self.gen.athrow(value)
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\mcp\client\stdio\__init__.py", line 181, in stdio_client
| anyio.create_task_group() as tg,
| ~~~~~~~~~~~~~~~~~~~~~~~^^
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\anyio\_backends\_asyncio.py", line 772, in __aexit__
| raise BaseExceptionGroup(
| "unhandled errors in a TaskGroup", self._exceptions
| ) from None
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\mcp\client\stdio\__init__.py", line 187, in stdio_client
| yield read_stream, write_stream
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\langchain_mcp_adapters\sessions.py", line 222, in _create_stdio_se
ssion
| ClientSession(read, write, **(session_kwargs or {})) as session,
| ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\mcp\shared\session.py", line 218, in __aexit__
| return await self._task_group.__aexit__(exc_type, exc_val, exc_tb)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\anyio\_backends\_asyncio.py", line 772, in __aexit__
| raise BaseExceptionGroup(
| "unhandled errors in a TaskGroup", self._exceptions
| ) from None
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Traceback (most recent call last):
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\langchain_mcp_adapters\sessions.py", line 224, in _create_stdio_
session
| yield session
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\langchain_mcp_adapters\sessions.py", line 395, in create_session
| yield session
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\langchain_mcp_adapters\tools.py", line 169, in load_mcp_tools
| await tool_session.initialize()
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\mcp\client\session.py", line 151, in initialize
| result = await self.send_request(
| ^^^^^^^^^^^^^^^^^^^^^^^^
| ...<16 lines>...
| )
| ^
| File "C:\Users\gaojun\AppData\Local\Programs\Python\Python313\Lib\site-packages\mcp\shared\session.py", line 286, in send_request
| raise McpError(response_or_error.error)
| mcp.shared.exceptions.McpError: Connection closed
+------------------------------------
?[31mERROR?[0m: Application startup failed. Exiting.