testmcpy 0.2.16__tar.gz → 0.2.17__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {testmcpy-0.2.16/testmcpy.egg-info → testmcpy-0.2.17}/PKG-INFO +1 -1
- {testmcpy-0.2.16 → testmcpy-0.2.17}/pyproject.toml +1 -1
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/commands/run.py +48 -2
- {testmcpy-0.2.16 → testmcpy-0.2.17/testmcpy.egg-info}/PKG-INFO +1 -1
- {testmcpy-0.2.16 → testmcpy-0.2.17}/LICENSE +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/MANIFEST.in +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/NOTICE +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/README.md +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/setup.cfg +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/__init__.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/auth_debugger.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/auth_flow_recorder.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/__init__.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/app.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/commands/__init__.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/commands/mcp.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/commands/server.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/commands/tools.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/commands/tui.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/config.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/core/__init__.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/core/chat_session.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/core/docs_optimizer.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/core/mcp_manager.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/core/tool_comparison.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/core/tool_discovery.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/error_handlers.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/evals/__init__.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/evals/auth_evaluators.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/evals/base_evaluators.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/__init__.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/base.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/curl.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/graphql.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/javascript_client.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/json_yaml.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/protobuf.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/python.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/python_client.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/thrift.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/typescript.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/typescript_client.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/llm_profiles.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/mcp_profiles.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/research/claude_sdk_detailed_exploration.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/research/claude_sdk_poc.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/research/claude_sdk_working_poc.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/research/test_ollama_tools.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/__init__.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/api.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/api.py.bak +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/helpers/__init__.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/helpers/mcp_config.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/models.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/__init__.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/auth.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/generation_logs.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/llm.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/mcp_profiles.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/results.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/smoke_reports.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/test_profiles.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/tests.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/tools.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/state.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/websocket.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/smoke_test.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/__init__.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/llm_integration.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/mcp_client.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/model_registry.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/models.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/runner_tools.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/test_runner.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/storage.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/test_profiles.py +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/README.md +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/dist/assets/index-CaEBvXci.css +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/dist/assets/index-mv4agCEg.js +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/dist/index.html +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/index.html +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/package-lock.json +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/package.json +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/postcss.config.js +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/App.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/CompareToolsTab.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/ErrorAlert.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/ErrorBoundary.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/LLMProfileSelector.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/LoadingSpinner.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/MCPProfileSelector.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/OptimizeDocsModal.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/ParameterCard.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/SchemaCodeViewer.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/SkeletonLoader.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/TestGenerationModal.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/TestProfileSelector.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/TestResultPanel.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/TestStatusIndicator.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/ToolComparison.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/ToolDebugModal.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/TypeBadge.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/contexts/TestRunContext.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/hooks/useKeyboardShortcuts.js +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/hooks/useSafeFetch.js +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/index.css +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/main.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/AuthDebugger.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/ChatInterface.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/Configuration.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/GenerationHistory.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/LLMProfiles.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/MCPExplorer.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/MCPProfiles.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/ProfilesManager.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/Reports.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/TestManager.jsx +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/utils/__tests__/formatConverters.test.js +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/utils/formatConverters.js +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/tailwind.config.js +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/vite.config.js +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy.egg-info/SOURCES.txt +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy.egg-info/dependency_links.txt +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy.egg-info/entry_points.txt +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy.egg-info/requires.txt +0 -0
- {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy.egg-info/top_level.txt +0 -0
|
@@ -90,7 +90,7 @@ testmcpy = [
|
|
|
90
90
|
|
|
91
91
|
[project]
|
|
92
92
|
name = "testmcpy"
|
|
93
|
-
version = "0.2.
|
|
93
|
+
version = "0.2.17"
|
|
94
94
|
description = "A comprehensive testing framework for validating LLM tool calling capabilities with MCP services"
|
|
95
95
|
authors = [{name = "Amin Ghadersohi"}]
|
|
96
96
|
license = "Apache-2.0"
|
|
@@ -302,8 +302,54 @@ def run(
|
|
|
302
302
|
console.print(f"{i}. {test.name}: {test.prompt[:50]}...")
|
|
303
303
|
return
|
|
304
304
|
|
|
305
|
-
# Run tests
|
|
306
|
-
results =
|
|
305
|
+
# Run tests with progress output
|
|
306
|
+
results = []
|
|
307
|
+
await runner.initialize()
|
|
308
|
+
|
|
309
|
+
for i, test_case in enumerate(test_cases, 1):
|
|
310
|
+
# Show which test is running
|
|
311
|
+
console.print(
|
|
312
|
+
f"\n[cyan]Running test {i}/{len(test_cases)}:[/cyan] [bold]{test_case.name}[/bold]"
|
|
313
|
+
)
|
|
314
|
+
console.print(
|
|
315
|
+
f" [dim]Prompt: {test_case.prompt[:80]}{'...' if len(test_case.prompt) > 80 else ''}[/dim]"
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
# Run the test
|
|
319
|
+
from rich.status import Status
|
|
320
|
+
|
|
321
|
+
with Status(f"[yellow]Executing test...[/yellow]", console=console):
|
|
322
|
+
result = await runner._run_test_with_retry(test_case)
|
|
323
|
+
|
|
324
|
+
results.append(result)
|
|
325
|
+
|
|
326
|
+
# Show immediate result
|
|
327
|
+
if result.passed:
|
|
328
|
+
console.print(
|
|
329
|
+
f" [green]PASSED[/green] (score: {result.score:.2f}, time: {result.duration:.2f}s)"
|
|
330
|
+
)
|
|
331
|
+
else:
|
|
332
|
+
console.print(
|
|
333
|
+
f" [red]FAILED[/red] (score: {result.score:.2f}, time: {result.duration:.2f}s)"
|
|
334
|
+
)
|
|
335
|
+
if result.reason:
|
|
336
|
+
console.print(f" [dim]Reason: {result.reason}[/dim]")
|
|
337
|
+
|
|
338
|
+
# Show tool calls if verbose
|
|
339
|
+
if verbose and result.tool_calls:
|
|
340
|
+
for tc in result.tool_calls:
|
|
341
|
+
tool_name = tc.get("name", "unknown")
|
|
342
|
+
console.print(f" [dim]Tool called: {tool_name}[/dim]")
|
|
343
|
+
|
|
344
|
+
# Rate limit delay between tests
|
|
345
|
+
if i < len(test_cases):
|
|
346
|
+
if provider.value in ("claude-cli", "claude-code", "codex-cli", "codex"):
|
|
347
|
+
delay = 1
|
|
348
|
+
else:
|
|
349
|
+
delay = 15
|
|
350
|
+
if delay > 1:
|
|
351
|
+
console.print(f" [dim]Waiting {delay}s before next test...[/dim]")
|
|
352
|
+
await asyncio.sleep(delay)
|
|
307
353
|
|
|
308
354
|
# Display results
|
|
309
355
|
table = Table(show_header=True, header_style="bold cyan")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/utils/__tests__/formatConverters.test.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|