testmcpy 0.2.8__tar.gz → 0.2.10__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 (127) hide show
  1. {testmcpy-0.2.8/testmcpy.egg-info → testmcpy-0.2.10}/PKG-INFO +1 -1
  2. {testmcpy-0.2.8 → testmcpy-0.2.10}/pyproject.toml +1 -1
  3. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/mcp_profiles.py +5 -15
  4. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/routers/mcp_profiles.py +27 -21
  5. {testmcpy-0.2.8 → testmcpy-0.2.10/testmcpy.egg-info}/PKG-INFO +1 -1
  6. {testmcpy-0.2.8 → testmcpy-0.2.10}/LICENSE +0 -0
  7. {testmcpy-0.2.8 → testmcpy-0.2.10}/MANIFEST.in +0 -0
  8. {testmcpy-0.2.8 → testmcpy-0.2.10}/NOTICE +0 -0
  9. {testmcpy-0.2.8 → testmcpy-0.2.10}/README.md +0 -0
  10. {testmcpy-0.2.8 → testmcpy-0.2.10}/setup.cfg +0 -0
  11. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/__init__.py +0 -0
  12. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/auth_debugger.py +0 -0
  13. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/auth_flow_recorder.py +0 -0
  14. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/cli/__init__.py +0 -0
  15. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/cli/app.py +0 -0
  16. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/cli/commands/__init__.py +0 -0
  17. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/cli/commands/mcp.py +0 -0
  18. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/cli/commands/run.py +0 -0
  19. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/cli/commands/server.py +0 -0
  20. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/cli/commands/tools.py +0 -0
  21. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/cli/commands/tui.py +0 -0
  22. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/config.py +0 -0
  23. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/core/__init__.py +0 -0
  24. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/core/chat_session.py +0 -0
  25. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/core/docs_optimizer.py +0 -0
  26. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/core/mcp_manager.py +0 -0
  27. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/core/tool_comparison.py +0 -0
  28. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/core/tool_discovery.py +0 -0
  29. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/error_handlers.py +0 -0
  30. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/evals/__init__.py +0 -0
  31. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/evals/auth_evaluators.py +0 -0
  32. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/evals/base_evaluators.py +0 -0
  33. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/formatters/__init__.py +0 -0
  34. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/formatters/base.py +0 -0
  35. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/formatters/curl.py +0 -0
  36. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/formatters/graphql.py +0 -0
  37. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/formatters/javascript_client.py +0 -0
  38. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/formatters/json_yaml.py +0 -0
  39. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/formatters/protobuf.py +0 -0
  40. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/formatters/python.py +0 -0
  41. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/formatters/python_client.py +0 -0
  42. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/formatters/thrift.py +0 -0
  43. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/formatters/typescript.py +0 -0
  44. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/formatters/typescript_client.py +0 -0
  45. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/llm_profiles.py +0 -0
  46. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/research/claude_sdk_detailed_exploration.py +0 -0
  47. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/research/claude_sdk_poc.py +0 -0
  48. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/research/claude_sdk_working_poc.py +0 -0
  49. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/research/test_ollama_tools.py +0 -0
  50. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/__init__.py +0 -0
  51. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/api.py +0 -0
  52. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/api.py.bak +0 -0
  53. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/helpers/__init__.py +0 -0
  54. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/helpers/mcp_config.py +0 -0
  55. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/models.py +0 -0
  56. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/routers/__init__.py +0 -0
  57. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/routers/auth.py +0 -0
  58. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/routers/generation_logs.py +0 -0
  59. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/routers/llm.py +0 -0
  60. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/routers/results.py +0 -0
  61. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/routers/smoke_reports.py +0 -0
  62. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/routers/test_profiles.py +0 -0
  63. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/routers/tests.py +0 -0
  64. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/routers/tools.py +0 -0
  65. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/state.py +0 -0
  66. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/tool_compare_endpoint.py +0 -0
  67. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/server/websocket.py +0 -0
  68. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/smoke_test.py +0 -0
  69. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/src/__init__.py +0 -0
  70. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/src/llm_integration.py +0 -0
  71. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/src/mcp_client.py +0 -0
  72. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/src/model_registry.py +0 -0
  73. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/src/models.py +0 -0
  74. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/src/runner_tools.py +0 -0
  75. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/src/test_runner.py +0 -0
  76. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/storage.py +0 -0
  77. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/test_profiles.py +0 -0
  78. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/README.md +0 -0
  79. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/dist/assets/index-CaEBvXci.css +0 -0
  80. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/dist/assets/index-DbhZ0GnU.js +0 -0
  81. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/dist/index.html +0 -0
  82. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/index.html +0 -0
  83. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/package-lock.json +0 -0
  84. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/package.json +0 -0
  85. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/postcss.config.js +0 -0
  86. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/App.jsx +0 -0
  87. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/CompareToolsTab.jsx +0 -0
  88. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/ErrorAlert.jsx +0 -0
  89. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/ErrorBoundary.jsx +0 -0
  90. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/LLMProfileSelector.jsx +0 -0
  91. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/LoadingSpinner.jsx +0 -0
  92. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/MCPProfileSelector.jsx +0 -0
  93. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/OptimizeDocsModal.jsx +0 -0
  94. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/ParameterCard.jsx +0 -0
  95. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/SchemaCodeViewer.jsx +0 -0
  96. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/SkeletonLoader.jsx +0 -0
  97. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/TestGenerationModal.jsx +0 -0
  98. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/TestProfileSelector.jsx +0 -0
  99. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/TestResultPanel.jsx +0 -0
  100. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/TestStatusIndicator.jsx +0 -0
  101. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/ToolComparison.jsx +0 -0
  102. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/ToolDebugModal.jsx +0 -0
  103. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/components/TypeBadge.jsx +0 -0
  104. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/contexts/TestRunContext.jsx +0 -0
  105. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/hooks/useKeyboardShortcuts.js +0 -0
  106. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/hooks/useSafeFetch.js +0 -0
  107. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/index.css +0 -0
  108. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/main.jsx +0 -0
  109. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/pages/AuthDebugger.jsx +0 -0
  110. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/pages/ChatInterface.jsx +0 -0
  111. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/pages/Configuration.jsx +0 -0
  112. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/pages/GenerationHistory.jsx +0 -0
  113. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/pages/LLMProfiles.jsx +0 -0
  114. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/pages/MCPExplorer.jsx +0 -0
  115. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/pages/MCPProfiles.jsx +0 -0
  116. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/pages/ProfilesManager.jsx +0 -0
  117. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/pages/Reports.jsx +0 -0
  118. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/pages/TestManager.jsx +0 -0
  119. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/utils/__tests__/formatConverters.test.js +0 -0
  120. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/src/utils/formatConverters.js +0 -0
  121. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/tailwind.config.js +0 -0
  122. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy/ui/vite.config.js +0 -0
  123. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy.egg-info/SOURCES.txt +0 -0
  124. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy.egg-info/dependency_links.txt +0 -0
  125. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy.egg-info/entry_points.txt +0 -0
  126. {testmcpy-0.2.8 → testmcpy-0.2.10}/testmcpy.egg-info/requires.txt +0 -0
  127. {testmcpy-0.2.8 → testmcpy-0.2.10}/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.8
3
+ Version: 0.2.10
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
@@ -88,7 +88,7 @@ testmcpy = [
88
88
 
89
89
  [project]
90
90
  name = "testmcpy"
91
- version = "0.2.8"
91
+ version = "0.2.10"
92
92
  description = "A comprehensive testing framework for validating LLM tool calling capabilities with MCP services"
93
93
  authors = [{name = "Amin Ghadersohi"}]
94
94
  license = "Apache-2.0"
@@ -120,12 +120,7 @@ class MCPProfileConfig:
120
120
  """
121
121
  Find MCP services configuration file.
122
122
 
123
- Searches in order:
124
- 1. Provided config_path
125
- 2. .mcp_services.yaml in current directory
126
- 3. .mcp_services.yaml in parent directories (up to 5 levels)
127
-
128
- Note: User home directory (~/.mcp_services.yaml) is NOT searched.
123
+ Looks for .mcp_services.yaml in the current working directory.
129
124
  """
130
125
  if config_path:
131
126
  path = Path(config_path)
@@ -133,15 +128,10 @@ class MCPProfileConfig:
133
128
  return path
134
129
  return None
135
130
 
136
- # Check current directory and parents
137
- current = Path.cwd()
138
- for _ in range(5):
139
- config_file = current / ".mcp_services.yaml"
140
- if config_file.exists():
141
- return config_file
142
- if current.parent == current:
143
- break
144
- current = current.parent
131
+ # Check current directory only (same as llm_profiles)
132
+ config_file = Path.cwd() / ".mcp_services.yaml"
133
+ if config_file.exists():
134
+ return config_file
145
135
 
146
136
  return None
147
137
 
@@ -119,35 +119,40 @@ profiles:
119
119
  my-profile:
120
120
  # Display name for the profile
121
121
  name: My MCP Server
122
+ description: My MCP server configuration
122
123
 
123
- # MCP servers in this profile
124
+ # MCP servers in this profile (list format with -)
124
125
  mcps:
125
- my-server:
126
- # Server name (displayed in UI)
127
- name: My Server
128
-
129
- # How to start the server
130
- # Option 1: Command to run
131
- command: npx
132
- args:
133
- - -y
134
- - "@my-org/my-mcp-server"
135
-
136
- # Option 2: URL for remote server
137
- # url: http://localhost:3000/mcp
138
-
139
- # Environment variables (optional)
140
- # env:
141
- # API_KEY: your-api-key
126
+ - name: My Server
127
+ # URL of the MCP server
128
+ mcp_url: http://localhost:3000/mcp
142
129
 
143
130
  # Authentication (optional)
144
131
  # auth:
145
132
  # type: bearer
146
- # token_env: MY_API_TOKEN
133
+ # token: your-bearer-token
134
+
135
+ # For JWT auth:
136
+ # auth:
137
+ # type: jwt
138
+ # api_url: https://api.example.com/auth/
139
+ # api_token: your-api-token
140
+ # api_secret: your-api-secret
141
+
142
+ # Global settings (optional)
143
+ global:
144
+ timeout: 30
145
+ rate_limit:
146
+ requests_per_minute: 60
147
147
  """
148
148
 
149
149
  config_file.write_text(default_template)
150
150
 
151
+ # Reload the profile config cache
152
+ from testmcpy.mcp_profiles import reload_profile_config
153
+
154
+ reload_profile_config()
155
+
151
156
  return {
152
157
  "success": True,
153
158
  "message": "Created .mcp_services.yaml with default template",
@@ -161,10 +166,11 @@ profiles:
161
166
  @router.get("/profiles")
162
167
  async def list_mcp_profiles():
163
168
  """List available MCP profiles from .mcp_services.yaml."""
164
- from testmcpy.mcp_profiles import get_profile_config
169
+ from testmcpy.mcp_profiles import reload_profile_config
165
170
 
166
171
  try:
167
- profile_config = get_profile_config()
172
+ # Always reload to pick up file changes
173
+ profile_config = reload_profile_config()
168
174
  if not profile_config.has_profiles():
169
175
  return {
170
176
  "profiles": [],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: testmcpy
3
- Version: 0.2.8
3
+ Version: 0.2.10
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
File without changes