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.
- {testmcpy-0.2.7/testmcpy.egg-info → testmcpy-0.2.9}/PKG-INFO +1 -1
- {testmcpy-0.2.7 → testmcpy-0.2.9}/pyproject.toml +1 -1
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/mcp_profiles.py +47 -7
- {testmcpy-0.2.7 → testmcpy-0.2.9/testmcpy.egg-info}/PKG-INFO +1 -1
- {testmcpy-0.2.7 → testmcpy-0.2.9}/LICENSE +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/MANIFEST.in +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/NOTICE +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/README.md +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/setup.cfg +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/auth_debugger.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/auth_flow_recorder.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/app.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/commands/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/commands/mcp.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/commands/run.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/commands/server.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/commands/tools.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/cli/commands/tui.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/config.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/core/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/core/chat_session.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/core/docs_optimizer.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/core/mcp_manager.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/core/tool_comparison.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/core/tool_discovery.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/error_handlers.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/evals/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/evals/auth_evaluators.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/evals/base_evaluators.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/base.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/curl.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/graphql.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/javascript_client.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/json_yaml.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/protobuf.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/python.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/python_client.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/thrift.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/typescript.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/formatters/typescript_client.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/llm_profiles.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/mcp_profiles.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/research/claude_sdk_detailed_exploration.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/research/claude_sdk_poc.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/research/claude_sdk_working_poc.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/research/test_ollama_tools.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/api.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/api.py.bak +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/helpers/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/helpers/mcp_config.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/models.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/auth.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/generation_logs.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/llm.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/results.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/smoke_reports.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/test_profiles.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/tests.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/routers/tools.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/state.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/tool_compare_endpoint.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/server/websocket.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/smoke_test.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/llm_integration.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/mcp_client.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/model_registry.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/models.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/runner_tools.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/src/test_runner.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/storage.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/test_profiles.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/README.md +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/dist/assets/index-CaEBvXci.css +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/dist/assets/index-DbhZ0GnU.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/dist/index.html +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/index.html +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/package-lock.json +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/package.json +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/postcss.config.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/App.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/CompareToolsTab.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/ErrorAlert.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/ErrorBoundary.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/LLMProfileSelector.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/LoadingSpinner.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/MCPProfileSelector.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/OptimizeDocsModal.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/ParameterCard.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/SchemaCodeViewer.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/SkeletonLoader.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/TestGenerationModal.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/TestProfileSelector.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/TestResultPanel.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/TestStatusIndicator.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/ToolComparison.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/ToolDebugModal.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/components/TypeBadge.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/contexts/TestRunContext.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/hooks/useKeyboardShortcuts.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/hooks/useSafeFetch.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/index.css +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/main.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/AuthDebugger.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/ChatInterface.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/Configuration.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/GenerationHistory.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/LLMProfiles.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/MCPExplorer.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/MCPProfiles.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/ProfilesManager.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/Reports.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/pages/TestManager.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/utils/__tests__/formatConverters.test.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/src/utils/formatConverters.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/tailwind.config.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy/ui/vite.config.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy.egg-info/SOURCES.txt +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy.egg-info/dependency_links.txt +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy.egg-info/entry_points.txt +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy.egg-info/requires.txt +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.9}/testmcpy.egg-info/top_level.txt +0 -0
|
@@ -88,7 +88,7 @@ testmcpy = [
|
|
|
88
88
|
|
|
89
89
|
[project]
|
|
90
90
|
name = "testmcpy"
|
|
91
|
-
version = "0.2.
|
|
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
|
|
100
|
+
"""Create .mcp_services.yaml with a default template."""
|
|
101
101
|
try:
|
|
102
|
-
|
|
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
|
-
|
|
112
|
-
|
|
110
|
+
# Default template
|
|
111
|
+
default_template = """# MCP Services Configuration
|
|
112
|
+
# Documentation: https://github.com/preset-io/testmcpy
|
|
113
113
|
|
|
114
|
-
|
|
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
|
|
158
|
+
"message": "Created .mcp_services.yaml with default template",
|
|
119
159
|
"path": str(config_file.absolute()),
|
|
120
160
|
}
|
|
121
161
|
|
|
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
|
|
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
|