-
Notifications
You must be signed in to change notification settings - Fork 444
/
Copy pathmain.py
62 lines (48 loc) · 2.63 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import asyncio
from mcp_agent.app import MCPApp
from mcp_agent.mcp.gen_client import gen_client
from mcp_agent.mcp.mcp_agent_client_session import MCPAgentClientSession
from mcp_agent.mcp.mcp_connection_manager import MCPConnectionManager
app = MCPApp(name="mcp_hello_world")
async def example_usage():
async with app.run() as hello_world_app:
context = hello_world_app.context
logger = hello_world_app.logger
logger.info("Hello, world!")
logger.info("Current config:", data=context.config.model_dump())
# Use an async context manager to connect to the fetch server
# At the end of the block, the connection will be closed automatically
async with gen_client(
"fetch", server_registry=context.server_registry
) as fetch_client:
logger.info("fetch: Connected to server, calling list_tools...")
result = await fetch_client.list_tools()
logger.info("Tools available:", data=result.model_dump())
# Connect to the filesystem server using a persistent connection via connect/disconnect
# This is useful when you need to make multiple requests to the same server
connection_manager = MCPConnectionManager(context.server_registry)
await connection_manager.__aenter__()
try:
filesystem_client = await connection_manager.get_server(
server_name="filesystem",
client_session_factory=MCPAgentClientSession,
)
logger.info(
"filesystem: Connected to server with persistent connection."
)
fetch_client = await connection_manager.get_server(
server_name="fetch", client_session_factory=MCPAgentClientSession
)
logger.info("fetch: Connected to server with persistent connection.")
result = await filesystem_client.session.list_tools()
logger.info("filesystem: Tools available:", data=result.model_dump())
result = await fetch_client.session.list_tools()
logger.info("fetch: Tools available:", data=result.model_dump())
finally:
await connection_manager.disconnect_server(server_name="filesystem")
logger.info("filesystem: Disconnected from server.")
await connection_manager.disconnect_server(server_name="fetch")
logger.info("fetch: Disconnected from server.")
await connection_manager.__aexit__(None, None, None)
if __name__ == "__main__":
asyncio.run(example_usage())