Agent Construct
by batteryshark
- agent_construct
- tests
"""
Test client for the Web Search MCP server.
"""
import asyncio
import json
import os
import traceback
from mcp import ClientSession, types
from mcp.client.sse import sse_client
from urllib.parse import urljoin
def tool_to_dict(tool):
"""Convert MCP tool object to a dictionary."""
return {
"name": tool.name,
"description": tool.description,
"inputSchema": tool.inputSchema
}
async def test_web_search():
"""
Test web search tools by connecting to an existing MCP server using SSE transport.
"""
# Get connection details from environment or use defaults
base_url = os.getenv("MCP_SERVER_URL", "http://localhost:32823")
sse_url = urljoin(base_url, "/sse") # Connect to the SSE endpoint
print(f"\nConnecting to MCP server at {sse_url}...")
try:
async with sse_client(sse_url) as (read, write):
async with ClientSession(read, write) as session:
# Initialize the connection
await session.initialize()
# List available tools
tools = await session.list_tools()
print("\nAvailable tools:")
# Convert tools to dictionary for JSON serialization
tools_dict = [tool_to_dict(tool) for tool in tools.tools]
print(json.dumps(tools_dict, indent=2))
# Test queries
test_queries = [
"What is the latest version of Python?",
"Who won the most recent Super Bowl?",
"What are the key features of the Rust programming language?"
]
for query in test_queries:
print(f"\nTesting query: {query}")
print("-" * 50)
# Test web search
print("\nWeb Search Results:")
print("-" * 25)
try:
result = await session.call_tool(
"gemini_web_search", # Use the actual tool name from the loaded tools
arguments={"query": query}
)
print("Result:")
# Extract text content from the first result
if result.content and len(result.content) > 0:
text_content = result.content[0].text
result_json = json.loads(text_content)
print(json.dumps(result_json, indent=2))
else:
print("No content returned")
except Exception as e:
print(f"Error during tool call: {e}")
traceback.print_exc()
except ConnectionRefusedError:
print(f"Error: Could not connect to MCP server at {sse_url}")
print("Make sure the server is running and the connection details are correct.")
except Exception as e:
print(f"Error during connection: {str(e)}")
print("\nFull traceback:")
traceback.print_exc()
async def main():
try:
await test_web_search()
except Exception as e:
print(f"Fatal error: {str(e)}")
print("\nFull traceback:")
traceback.print_exc()
if __name__ == "__main__":
asyncio.run(main())