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.
Files changed (126) hide show
  1. {testmcpy-0.2.16/testmcpy.egg-info → testmcpy-0.2.17}/PKG-INFO +1 -1
  2. {testmcpy-0.2.16 → testmcpy-0.2.17}/pyproject.toml +1 -1
  3. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/commands/run.py +48 -2
  4. {testmcpy-0.2.16 → testmcpy-0.2.17/testmcpy.egg-info}/PKG-INFO +1 -1
  5. {testmcpy-0.2.16 → testmcpy-0.2.17}/LICENSE +0 -0
  6. {testmcpy-0.2.16 → testmcpy-0.2.17}/MANIFEST.in +0 -0
  7. {testmcpy-0.2.16 → testmcpy-0.2.17}/NOTICE +0 -0
  8. {testmcpy-0.2.16 → testmcpy-0.2.17}/README.md +0 -0
  9. {testmcpy-0.2.16 → testmcpy-0.2.17}/setup.cfg +0 -0
  10. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/__init__.py +0 -0
  11. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/auth_debugger.py +0 -0
  12. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/auth_flow_recorder.py +0 -0
  13. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/__init__.py +0 -0
  14. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/app.py +0 -0
  15. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/commands/__init__.py +0 -0
  16. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/commands/mcp.py +0 -0
  17. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/commands/server.py +0 -0
  18. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/commands/tools.py +0 -0
  19. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/cli/commands/tui.py +0 -0
  20. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/config.py +0 -0
  21. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/core/__init__.py +0 -0
  22. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/core/chat_session.py +0 -0
  23. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/core/docs_optimizer.py +0 -0
  24. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/core/mcp_manager.py +0 -0
  25. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/core/tool_comparison.py +0 -0
  26. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/core/tool_discovery.py +0 -0
  27. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/error_handlers.py +0 -0
  28. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/evals/__init__.py +0 -0
  29. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/evals/auth_evaluators.py +0 -0
  30. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/evals/base_evaluators.py +0 -0
  31. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/__init__.py +0 -0
  32. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/base.py +0 -0
  33. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/curl.py +0 -0
  34. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/graphql.py +0 -0
  35. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/javascript_client.py +0 -0
  36. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/json_yaml.py +0 -0
  37. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/protobuf.py +0 -0
  38. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/python.py +0 -0
  39. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/python_client.py +0 -0
  40. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/thrift.py +0 -0
  41. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/typescript.py +0 -0
  42. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/formatters/typescript_client.py +0 -0
  43. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/llm_profiles.py +0 -0
  44. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/mcp_profiles.py +0 -0
  45. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/research/claude_sdk_detailed_exploration.py +0 -0
  46. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/research/claude_sdk_poc.py +0 -0
  47. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/research/claude_sdk_working_poc.py +0 -0
  48. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/research/test_ollama_tools.py +0 -0
  49. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/__init__.py +0 -0
  50. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/api.py +0 -0
  51. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/api.py.bak +0 -0
  52. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/helpers/__init__.py +0 -0
  53. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/helpers/mcp_config.py +0 -0
  54. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/models.py +0 -0
  55. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/__init__.py +0 -0
  56. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/auth.py +0 -0
  57. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/generation_logs.py +0 -0
  58. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/llm.py +0 -0
  59. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/mcp_profiles.py +0 -0
  60. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/results.py +0 -0
  61. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/smoke_reports.py +0 -0
  62. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/test_profiles.py +0 -0
  63. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/tests.py +0 -0
  64. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/routers/tools.py +0 -0
  65. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/state.py +0 -0
  66. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/server/websocket.py +0 -0
  67. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/smoke_test.py +0 -0
  68. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/__init__.py +0 -0
  69. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/llm_integration.py +0 -0
  70. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/mcp_client.py +0 -0
  71. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/model_registry.py +0 -0
  72. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/models.py +0 -0
  73. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/runner_tools.py +0 -0
  74. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/src/test_runner.py +0 -0
  75. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/storage.py +0 -0
  76. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/test_profiles.py +0 -0
  77. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/README.md +0 -0
  78. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/dist/assets/index-CaEBvXci.css +0 -0
  79. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/dist/assets/index-mv4agCEg.js +0 -0
  80. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/dist/index.html +0 -0
  81. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/index.html +0 -0
  82. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/package-lock.json +0 -0
  83. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/package.json +0 -0
  84. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/postcss.config.js +0 -0
  85. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/App.jsx +0 -0
  86. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/CompareToolsTab.jsx +0 -0
  87. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/ErrorAlert.jsx +0 -0
  88. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/ErrorBoundary.jsx +0 -0
  89. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/LLMProfileSelector.jsx +0 -0
  90. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/LoadingSpinner.jsx +0 -0
  91. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/MCPProfileSelector.jsx +0 -0
  92. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/OptimizeDocsModal.jsx +0 -0
  93. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/ParameterCard.jsx +0 -0
  94. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/SchemaCodeViewer.jsx +0 -0
  95. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/SkeletonLoader.jsx +0 -0
  96. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/TestGenerationModal.jsx +0 -0
  97. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/TestProfileSelector.jsx +0 -0
  98. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/TestResultPanel.jsx +0 -0
  99. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/TestStatusIndicator.jsx +0 -0
  100. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/ToolComparison.jsx +0 -0
  101. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/ToolDebugModal.jsx +0 -0
  102. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/components/TypeBadge.jsx +0 -0
  103. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/contexts/TestRunContext.jsx +0 -0
  104. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/hooks/useKeyboardShortcuts.js +0 -0
  105. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/hooks/useSafeFetch.js +0 -0
  106. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/index.css +0 -0
  107. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/main.jsx +0 -0
  108. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/AuthDebugger.jsx +0 -0
  109. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/ChatInterface.jsx +0 -0
  110. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/Configuration.jsx +0 -0
  111. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/GenerationHistory.jsx +0 -0
  112. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/LLMProfiles.jsx +0 -0
  113. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/MCPExplorer.jsx +0 -0
  114. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/MCPProfiles.jsx +0 -0
  115. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/ProfilesManager.jsx +0 -0
  116. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/Reports.jsx +0 -0
  117. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/pages/TestManager.jsx +0 -0
  118. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/utils/__tests__/formatConverters.test.js +0 -0
  119. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/src/utils/formatConverters.js +0 -0
  120. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/tailwind.config.js +0 -0
  121. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy/ui/vite.config.js +0 -0
  122. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy.egg-info/SOURCES.txt +0 -0
  123. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy.egg-info/dependency_links.txt +0 -0
  124. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy.egg-info/entry_points.txt +0 -0
  125. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy.egg-info/requires.txt +0 -0
  126. {testmcpy-0.2.16 → testmcpy-0.2.17}/testmcpy.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: testmcpy
3
- Version: 0.2.16
3
+ Version: 0.2.17
4
4
  Summary: A comprehensive testing framework for validating LLM tool calling capabilities with MCP services
5
5
  Author: Amin Ghadersohi
6
6
  License-Expression: Apache-2.0
@@ -90,7 +90,7 @@ testmcpy = [
90
90
 
91
91
  [project]
92
92
  name = "testmcpy"
93
- version = "0.2.16"
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 = await runner.run_tests(test_cases)
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")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: testmcpy
3
- Version: 0.2.16
3
+ Version: 0.2.17
4
4
  Summary: A comprehensive testing framework for validating LLM tool calling capabilities with MCP services
5
5
  Author: Amin Ghadersohi
6
6
  License-Expression: Apache-2.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes