testmcpy 0.2.7__tar.gz → 0.2.9__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.7/testmcpy.egg-info → testmcpy-0.2.9}/PKG-INFO +1 -1
  2. {testmcpy-0.2.7 → testmcpy-0.2.9}/pyproject.toml +1 -1
  3. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/mcp_profiles.py +47 -7
  4. {testmcpy-0.2.7 → testmcpy-0.2.9/testmcpy.egg-info}/PKG-INFO +1 -1
  5. {testmcpy-0.2.7 → testmcpy-0.2.9}/LICENSE +0 -0
  6. {testmcpy-0.2.7 → testmcpy-0.2.9}/MANIFEST.in +0 -0
  7. {testmcpy-0.2.7 → testmcpy-0.2.9}/NOTICE +0 -0
  8. {testmcpy-0.2.7 → testmcpy-0.2.9}/README.md +0 -0
  9. {testmcpy-0.2.7 → testmcpy-0.2.9}/setup.cfg +0 -0
  10. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/__init__.py +0 -0
  11. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/auth_debugger.py +0 -0
  12. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/auth_flow_recorder.py +0 -0
  13. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/__init__.py +0 -0
  14. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/app.py +0 -0
  15. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/commands/__init__.py +0 -0
  16. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/commands/mcp.py +0 -0
  17. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/commands/run.py +0 -0
  18. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/commands/server.py +0 -0
  19. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/commands/tools.py +0 -0
  20. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/commands/tui.py +0 -0
  21. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/config.py +0 -0
  22. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/core/__init__.py +0 -0
  23. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/core/chat_session.py +0 -0
  24. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/core/docs_optimizer.py +0 -0
  25. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/core/mcp_manager.py +0 -0
  26. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/core/tool_comparison.py +0 -0
  27. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/core/tool_discovery.py +0 -0
  28. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/error_handlers.py +0 -0
  29. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/evals/__init__.py +0 -0
  30. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/evals/auth_evaluators.py +0 -0
  31. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/evals/base_evaluators.py +0 -0
  32. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/__init__.py +0 -0
  33. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/base.py +0 -0
  34. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/curl.py +0 -0
  35. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/graphql.py +0 -0
  36. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/javascript_client.py +0 -0
  37. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/json_yaml.py +0 -0
  38. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/protobuf.py +0 -0
  39. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/python.py +0 -0
  40. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/python_client.py +0 -0
  41. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/thrift.py +0 -0
  42. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/typescript.py +0 -0
  43. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/typescript_client.py +0 -0
  44. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/llm_profiles.py +0 -0
  45. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/mcp_profiles.py +0 -0
  46. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/research/claude_sdk_detailed_exploration.py +0 -0
  47. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/research/claude_sdk_poc.py +0 -0
  48. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/research/claude_sdk_working_poc.py +0 -0
  49. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/research/test_ollama_tools.py +0 -0
  50. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/__init__.py +0 -0
  51. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/api.py +0 -0
  52. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/api.py.bak +0 -0
  53. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/helpers/__init__.py +0 -0
  54. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/helpers/mcp_config.py +0 -0
  55. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/models.py +0 -0
  56. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/__init__.py +0 -0
  57. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/auth.py +0 -0
  58. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/generation_logs.py +0 -0
  59. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/llm.py +0 -0
  60. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/results.py +0 -0
  61. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/smoke_reports.py +0 -0
  62. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/test_profiles.py +0 -0
  63. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/tests.py +0 -0
  64. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/tools.py +0 -0
  65. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/state.py +0 -0
  66. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/tool_compare_endpoint.py +0 -0
  67. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/websocket.py +0 -0
  68. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/smoke_test.py +0 -0
  69. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/__init__.py +0 -0
  70. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/llm_integration.py +0 -0
  71. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/mcp_client.py +0 -0
  72. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/model_registry.py +0 -0
  73. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/models.py +0 -0
  74. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/runner_tools.py +0 -0
  75. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/test_runner.py +0 -0
  76. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/storage.py +0 -0
  77. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/test_profiles.py +0 -0
  78. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/README.md +0 -0
  79. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/dist/assets/index-CaEBvXci.css +0 -0
  80. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/dist/assets/index-DbhZ0GnU.js +0 -0
  81. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/dist/index.html +0 -0
  82. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/index.html +0 -0
  83. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/package-lock.json +0 -0
  84. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/package.json +0 -0
  85. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/postcss.config.js +0 -0
  86. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/App.jsx +0 -0
  87. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/CompareToolsTab.jsx +0 -0
  88. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/ErrorAlert.jsx +0 -0
  89. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/ErrorBoundary.jsx +0 -0
  90. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/LLMProfileSelector.jsx +0 -0
  91. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/LoadingSpinner.jsx +0 -0
  92. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/MCPProfileSelector.jsx +0 -0
  93. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/OptimizeDocsModal.jsx +0 -0
  94. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/ParameterCard.jsx +0 -0
  95. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/SchemaCodeViewer.jsx +0 -0
  96. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/SkeletonLoader.jsx +0 -0
  97. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/TestGenerationModal.jsx +0 -0
  98. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/TestProfileSelector.jsx +0 -0
  99. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/TestResultPanel.jsx +0 -0
  100. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/TestStatusIndicator.jsx +0 -0
  101. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/ToolComparison.jsx +0 -0
  102. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/ToolDebugModal.jsx +0 -0
  103. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/TypeBadge.jsx +0 -0
  104. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/contexts/TestRunContext.jsx +0 -0
  105. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/hooks/useKeyboardShortcuts.js +0 -0
  106. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/hooks/useSafeFetch.js +0 -0
  107. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/index.css +0 -0
  108. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/main.jsx +0 -0
  109. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/AuthDebugger.jsx +0 -0
  110. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/ChatInterface.jsx +0 -0
  111. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/Configuration.jsx +0 -0
  112. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/GenerationHistory.jsx +0 -0
  113. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/LLMProfiles.jsx +0 -0
  114. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/MCPExplorer.jsx +0 -0
  115. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/MCPProfiles.jsx +0 -0
  116. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/ProfilesManager.jsx +0 -0
  117. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/Reports.jsx +0 -0
  118. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/TestManager.jsx +0 -0
  119. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/utils/__tests__/formatConverters.test.js +0 -0
  120. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/utils/formatConverters.js +0 -0
  121. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/tailwind.config.js +0 -0
  122. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/vite.config.js +0 -0
  123. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy.egg-info/SOURCES.txt +0 -0
  124. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy.egg-info/dependency_links.txt +0 -0
  125. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy.egg-info/entry_points.txt +0 -0
  126. {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy.egg-info/requires.txt +0 -0
  127. {testmcpy-0.2.7 → testmcpy-0.2.9}/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.7
3
+ Version: 0.2.9
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.7"
91
+ version = "0.2.9"
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"
@@ -97,10 +97,9 @@ def get_mcp_clients() -> dict[str, MCPClient]:
97
97
 
98
98
  @router.post("/profiles/create-config")
99
99
  async def create_mcp_config():
100
- """Create .mcp_services.yaml from the example file."""
100
+ """Create .mcp_services.yaml with a default template."""
101
101
  try:
102
- example_file = Path(".mcp_services.yaml.example")
103
- config_file = Path(".mcp_services.yaml")
102
+ config_file = Path.cwd() / ".mcp_services.yaml"
104
103
 
105
104
  if config_file.exists():
106
105
  return {
@@ -108,14 +107,55 @@ async def create_mcp_config():
108
107
  "error": "Configuration file already exists at .mcp_services.yaml",
109
108
  }
110
109
 
111
- if not example_file.exists():
112
- return {"success": False, "error": "Example file .mcp_services.yaml.example not found"}
110
+ # Default template
111
+ default_template = """# MCP Services Configuration
112
+ # Documentation: https://github.com/preset-io/testmcpy
113
113
 
114
- shutil.copy(example_file, config_file)
114
+ # Default profile to use when none specified
115
+ default: my-profile
116
+
117
+ # Profile definitions
118
+ profiles:
119
+ my-profile:
120
+ # Display name for the profile
121
+ name: My MCP Server
122
+ description: My MCP server configuration
123
+
124
+ # MCP servers in this profile (list format with -)
125
+ mcps:
126
+ - name: My Server
127
+ # URL of the MCP server
128
+ mcp_url: http://localhost:3000/mcp
129
+
130
+ # Authentication (optional)
131
+ # auth:
132
+ # type: bearer
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
+ """
148
+
149
+ config_file.write_text(default_template)
150
+
151
+ # Reload the profile config cache
152
+ from testmcpy.mcp_profiles import reload_profile_config
153
+
154
+ reload_profile_config()
115
155
 
116
156
  return {
117
157
  "success": True,
118
- "message": "Created .mcp_services.yaml from example template",
158
+ "message": "Created .mcp_services.yaml with default template",
119
159
  "path": str(config_file.absolute()),
120
160
  }
121
161
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: testmcpy
3
- Version: 0.2.7
3
+ Version: 0.2.9
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
File without changes