Skip to content

Commit 9890356

Browse files
committed
updating tests
1 parent 3d5bf37 commit 9890356

File tree

5 files changed

+716
-357
lines changed

5 files changed

+716
-357
lines changed

examples/remote_sse_calling_example.py

Lines changed: 106 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ def get_remote_mcp_servers() -> List[dict[str, str]]:
8888
print(f"MCP_SERVER_NAME_MAP: {os.getenv('MCP_SERVER_NAME_MAP', 'NOT SET')}")
8989
print(f"MCP_BEARER_TOKEN: {'SET' if os.getenv('MCP_BEARER_TOKEN') else 'NOT SET'}")
9090

91+
# Get bearer token
92+
bearer_token = os.getenv('MCP_BEARER_TOKEN')
93+
9194
# Load environment variable overrides
9295
name_override = _load_override("MCP_SERVER_NAME_MAP")
9396
url_override = _load_override("MCP_SERVER_URL_MAP")
@@ -100,22 +103,37 @@ def get_remote_mcp_servers() -> List[dict[str, str]]:
100103

101104
if single_server_url:
102105
print(f"🌐 Using single remote SSE MCP server: {single_server_url[:50]}{'...' if len(single_server_url) > 50 else ''}")
103-
return [{
106+
server_config = {
104107
"name": "perplexity_server",
105108
"url": single_server_url,
106-
}]
109+
}
110+
# ADD THE API KEY!
111+
if bearer_token:
112+
server_config["api_key"] = bearer_token
113+
return [server_config]
107114

108115
# Check URL override map
109116
if url_override:
110117
servers = []
111118
for server_name, server_url in url_override.items():
112119
actual_name = name_override.get(server_name, server_name)
113-
servers.append({
120+
server_config = {
114121
"name": actual_name,
115122
"url": server_url,
116-
})
123+
}
124+
# ADD THE API KEY!
125+
if bearer_token:
126+
server_config["api_key"] = bearer_token
127+
servers.append(server_config)
117128
print(f"🌐 Using {len(servers)} remote SSE MCP server(s) from URL map")
118-
print(f"📋 Servers: {servers}")
129+
# Don't print the actual api_key in logs
130+
safe_servers = []
131+
for s in servers:
132+
safe_s = s.copy()
133+
if 'api_key' in safe_s:
134+
safe_s['api_key'] = 'SET'
135+
safe_servers.append(safe_s)
136+
print(f"📋 Servers: {safe_servers}")
119137
return servers
120138

121139
# No MCP configuration found
@@ -140,6 +158,8 @@ async def bootstrap_remote_mcp() -> None:
140158
print(f"🔄 Connecting to remote SSE MCP server(s)...")
141159
for server in servers:
142160
print(f" 📡 {server['name']}: {server['url']}")
161+
if 'api_key' in server:
162+
print(f" 🔑 Auth: SET")
143163

144164
server_names = {i: srv["name"] for i, srv in enumerate(servers)}
145165

@@ -289,9 +309,36 @@ async def run_remote_demo() -> None:
289309
# Create generic test calls for whatever tools are available
290310
generic_calls = []
291311
for ns, tool_name in tools[:3]: # Test first 3 tools
312+
# Get tool metadata to determine correct arguments
313+
tool_meta = await registry.get_metadata(tool_name, ns)
314+
args = {}
315+
316+
if tool_meta and hasattr(tool_meta, 'input_schema'):
317+
schema = tool_meta.input_schema
318+
required = schema.get('required', [])
319+
properties = schema.get('properties', {})
320+
321+
for field in required:
322+
if field in properties:
323+
prop = properties[field]
324+
if prop.get('type') == 'string':
325+
if 'query' in field.lower():
326+
args[field] = f"Test query for {tool_name}"
327+
elif 'message' in field.lower():
328+
args[field] = f"Test message for {tool_name}"
329+
else:
330+
args[field] = "test_string"
331+
elif prop.get('type') == 'integer':
332+
args[field] = 1
333+
elif prop.get('type') == 'boolean':
334+
args[field] = True
335+
336+
if not args:
337+
args = {"query": f"Test query for {tool_name}"}
338+
292339
generic_calls.append(ToolCall(
293340
tool=f"{ns}.{tool_name}",
294-
arguments={"query": f"Test query for {tool_name}"}
341+
arguments=args
295342
))
296343

297344
if generic_calls:
@@ -321,9 +368,61 @@ async def run_remote_demo() -> None:
321368

322369
parallel_calls = []
323370
for i, (ns, tool_name) in enumerate(tools[:3]): # Max 3 parallel
371+
# Get tool metadata to build correct arguments
372+
tool_meta = await registry.get_metadata(tool_name, ns)
373+
374+
# Build arguments based on tool requirements
375+
if tool_name == "echo":
376+
args = {"message": f"Parallel test {i+1}: Hello from SSE!"}
377+
elif tool_name == "get_current_time":
378+
args = {"timezone": "UTC"}
379+
elif tool_name == "convert_time":
380+
args = {
381+
"source_timezone": "UTC",
382+
"time": "12:00",
383+
"target_timezone": "America/New_York"
384+
}
385+
elif tool_name == "ping":
386+
args = {"host": "google.com"}
387+
elif tool_name == "tcp_ping":
388+
args = {"host": "google.com", "port": 80}
389+
elif tool_name == "perplexity_search":
390+
args = {"query": f"Parallel test query {i+1}"}
391+
elif tool_name == "perplexity_quick_fact":
392+
args = {"query": f"What is test fact {i+1}?"}
393+
elif tool_name == "google_search":
394+
args = {"query": f"Test search {i+1}"}
395+
elif tool_name == "wikipedia_search":
396+
args = {"query": "Python programming"}
397+
else:
398+
# For unknown tools, try to build minimal valid args from schema
399+
args = {}
400+
if tool_meta and hasattr(tool_meta, 'input_schema'):
401+
schema = tool_meta.input_schema
402+
required = schema.get('required', [])
403+
properties = schema.get('properties', {})
404+
405+
for field in required[:1]: # Just fill first required field
406+
if field in properties:
407+
prop = properties[field]
408+
if prop.get('type') == 'string':
409+
# Check if it's likely a query field
410+
if 'query' in field.lower() or 'message' in field.lower() or 'text' in field.lower():
411+
args[field] = f"Parallel test {i+1}"
412+
elif 'timezone' in field.lower():
413+
args[field] = "UTC"
414+
elif 'host' in field.lower():
415+
args[field] = "example.com"
416+
else:
417+
args[field] = "test_value"
418+
elif prop.get('type') == 'integer':
419+
args[field] = 1
420+
elif prop.get('type') == 'boolean':
421+
args[field] = True
422+
324423
parallel_calls.append(ToolCall(
325424
tool=f"{ns}.{tool_name}",
326-
arguments={"query": f"Parallel test query {i+1} for {tool_name}"}
425+
arguments=args
327426
))
328427

329428
try:

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "chuk-tool-processor"
7-
version = "0.6.3"
7+
version = "0.6.4"
88
description = "Async-native framework for registering, discovering, and executing tools referenced in LLM responses"
99
readme = "README.md"
1010
requires-python = ">=3.11"
@@ -41,7 +41,7 @@ classifiers = [
4141
"Typing :: Typed",
4242
]
4343
dependencies = [
44-
"chuk-mcp>=0.5",
44+
"chuk-mcp>=0.5.1",
4545
"dotenv>=0.9.9",
4646
"pydantic>=2.11.3",
4747
"uuid>=1.30",

0 commit comments

Comments
 (0)