Open
Description
Question
Hello,
I'm evaluating how to integrate Pydantic MCP Run Python into my project. I tried to run the official example code mentioned in https://ai.pydantic.dev/mcp/run-python/. It always has exceptional text when it exits. I don't know if it can be solved or disabled.
Since the original example code refused to execute due to the system's requirement for permission, I added a few lines to make it runnable.
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
code = """
import numpy
a = numpy.array([1, 2, 3])
print(a)
a
"""
server_params = StdioServerParameters(
command='deno',
args=[
'run',
'-N',
'--allow-read=.',
'-R=node_modules',
'-W=node_modules',
'--node-modules-dir=auto',
'jsr:@pydantic/mcp-run-python',
'stdio',
],
)
async def main():
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
print(len(tools.tools))
#> 1
print(repr(tools.tools[0].name))
#> 'run_python_code'
print(repr(tools.tools[0].inputSchema))
"""
{'type': 'object', 'properties': {'python_code': {'type': 'string', 'description': 'Python code to run'}}, 'required': ['python_code'], 'additionalProperties': False, '$schema': 'http://json-schema.org/draft-07/schema#'}
"""
result = await session.call_tool('run_python_code', {'python_code': code})
print(result.content[0].text)
"""
<status>success</status>
<dependencies>["numpy"]</dependencies>
<output>
[1 2 3]
</output>
<return_value>
[
1,
2,
3
]
</return_value>
"""
if __name__ == "__main__":
import asyncio
asyncio.run(main())
The output is:
1
'run_python_code'
{'type': 'object', 'properties': {'python_code': {'type': 'string', 'description': 'Python code to run'}}, 'required': ['python_code'], 'additionalProperties': False, '$schema': 'http://json-schema.org/draft-07/schema#'}
<status>success</status>
<dependencies>["numpy"]</dependencies>
<output>
[1 2 3]
</output>
<return_value>
[
1,
2,
3
]
</return_value>
Exception ignored in: <function BaseSubprocessTransport.__del__ at 0x7f316985a4d0>
Traceback (most recent call last):
File "/usr/lib/python3.10/asyncio/base_subprocess.py", line 126, in __del__
self.close()
File "/usr/lib/python3.10/asyncio/base_subprocess.py", line 104, in close
proto.pipe.close()
File "/usr/lib/python3.10/asyncio/unix_events.py", line 547, in close
self._close(None)
File "/usr/lib/python3.10/asyncio/unix_events.py", line 571, in _close
self._loop.call_soon(self._call_connection_lost, exc)
File "/usr/lib/python3.10/asyncio/base_events.py", line 753, in call_soon
self._check_closed()
File "/usr/lib/python3.10/asyncio/base_events.py", line 515, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Any idea? Thanks.
Additional Context
No response