Google Integration¶
This module provides integration with Google tools, such as those used with Gemini, allowing for the use of MCP-defined tools within Google’s ecosystem.
Usage Example¶
1from dotenv import load_dotenv
2
3load_dotenv()
4
5import os
6
7from google.adk.agents import Agent
8from google.adk.models.lite_llm import LiteLlm
9from google.adk.runners import Runner
10from google.adk.sessions import InMemorySessionService
11from google.genai import types
12
13from agentstr import ChatInput, NostrAgentServer, NostrMCPClient
14from agentstr.mcp.google import to_google_tools
15
16# Create Nostr MCP client
17nostr_mcp_client = NostrMCPClient(relays=os.getenv("NOSTR_RELAYS").split(","),
18 private_key=os.getenv("EXAMPLE_GOOGLE_AGENT_NSEC"),
19 mcp_pubkey=os.getenv("EXAMPLE_MCP_SERVER_PUBKEY"),
20 nwc_str=os.getenv("MCP_CLIENT_NWC_CONN_STR"))
21
22async def agent_server():
23 # Define tools
24 google_tools = await to_google_tools(nostr_mcp_client)
25
26 for tool in google_tools:
27 print(f'Found {tool.name}: {tool.description}')
28
29 # Define Google agent
30 agent = Agent(
31 name="google_agent",
32 model=LiteLlm(
33 model=os.getenv("LLM_MODEL_NAME"),
34 api_base=os.getenv("LLM_BASE_URL").rstrip('/v1'),
35 api_key=os.getenv("LLM_API_KEY")
36 ),
37 instruction="You are a helpful assistant.",
38 tools=google_tools,
39 )
40
41 # Session and Runner
42 session_service = InMemorySessionService()
43 runner = Runner(agent=agent, app_name='nostr_example', session_service=session_service)
44
45 # Define agent callable
46 async def agent_callable(input: ChatInput) -> str:
47 content = types.Content(role='user', parts=[types.Part(text=input.messages[-1])])
48 await session_service.create_session(app_name='nostr_example', user_id=input.thread_id, session_id=input.thread_id)
49 events_async = runner.run_async(user_id=input.thread_id,
50 session_id=input.thread_id,
51 new_message=content)
52 async for event in events_async:
53 print(f'Received event: {event}')
54 if event.is_final_response():
55 final_response = event.content.parts[0].text
56 print("Agent Response: ", final_response)
57 return final_response
58 return None
59
60 # Create Nostr Agent Server
61 server = NostrAgentServer(nostr_mcp_client=nostr_mcp_client,
62 agent_callable=agent_callable)
63
64 # Start server
65 await server.start()
66
67
68if __name__ == "__main__":
69 import asyncio
70 asyncio.run(agent_server())