testmcpy 0.2.9__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.
- {testmcpy-0.2.9/testmcpy.egg-info → testmcpy-0.2.10}/PKG-INFO +1 -1
- {testmcpy-0.2.9 → testmcpy-0.2.10}/pyproject.toml +1 -1
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/mcp_profiles.py +5 -15
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/routers/mcp_profiles.py +3 -2
- {testmcpy-0.2.9 → testmcpy-0.2.10/testmcpy.egg-info}/PKG-INFO +1 -1
- {testmcpy-0.2.9 → testmcpy-0.2.10}/LICENSE +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/MANIFEST.in +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/NOTICE +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/README.md +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/setup.cfg +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/__init__.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/auth_debugger.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/auth_flow_recorder.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/cli/__init__.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/cli/app.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/cli/commands/__init__.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/cli/commands/mcp.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/cli/commands/run.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/cli/commands/server.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/cli/commands/tools.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/cli/commands/tui.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/config.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/core/__init__.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/core/chat_session.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/core/docs_optimizer.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/core/mcp_manager.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/core/tool_comparison.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/core/tool_discovery.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/error_handlers.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/evals/__init__.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/evals/auth_evaluators.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/evals/base_evaluators.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/formatters/__init__.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/formatters/base.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/formatters/curl.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/formatters/graphql.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/formatters/javascript_client.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/formatters/json_yaml.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/formatters/protobuf.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/formatters/python.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/formatters/python_client.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/formatters/thrift.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/formatters/typescript.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/formatters/typescript_client.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/llm_profiles.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/research/claude_sdk_detailed_exploration.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/research/claude_sdk_poc.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/research/claude_sdk_working_poc.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/research/test_ollama_tools.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/__init__.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/api.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/api.py.bak +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/helpers/__init__.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/helpers/mcp_config.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/models.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/routers/__init__.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/routers/auth.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/routers/generation_logs.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/routers/llm.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/routers/results.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/routers/smoke_reports.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/routers/test_profiles.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/routers/tests.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/routers/tools.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/state.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/tool_compare_endpoint.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/server/websocket.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/smoke_test.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/src/__init__.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/src/llm_integration.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/src/mcp_client.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/src/model_registry.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/src/models.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/src/runner_tools.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/src/test_runner.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/storage.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/test_profiles.py +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/README.md +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/dist/assets/index-CaEBvXci.css +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/dist/assets/index-DbhZ0GnU.js +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/dist/index.html +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/index.html +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/package-lock.json +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/package.json +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/postcss.config.js +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/App.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/CompareToolsTab.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/ErrorAlert.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/ErrorBoundary.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/LLMProfileSelector.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/LoadingSpinner.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/MCPProfileSelector.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/OptimizeDocsModal.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/ParameterCard.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/SchemaCodeViewer.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/SkeletonLoader.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/TestGenerationModal.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/TestProfileSelector.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/TestResultPanel.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/TestStatusIndicator.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/ToolComparison.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/ToolDebugModal.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/components/TypeBadge.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/contexts/TestRunContext.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/hooks/useKeyboardShortcuts.js +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/hooks/useSafeFetch.js +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/index.css +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/main.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/pages/AuthDebugger.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/pages/ChatInterface.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/pages/Configuration.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/pages/GenerationHistory.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/pages/LLMProfiles.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/pages/MCPExplorer.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/pages/MCPProfiles.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/pages/ProfilesManager.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/pages/Reports.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/pages/TestManager.jsx +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/utils/__tests__/formatConverters.test.js +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/src/utils/formatConverters.js +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/tailwind.config.js +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy/ui/vite.config.js +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy.egg-info/SOURCES.txt +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy.egg-info/dependency_links.txt +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy.egg-info/entry_points.txt +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/testmcpy.egg-info/requires.txt +0 -0
- {testmcpy-0.2.9 → testmcpy-0.2.10}/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.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
|
-
|
|
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
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
config_file
|
|
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
|
|
|
@@ -166,10 +166,11 @@ global:
|
|
|
166
166
|
@router.get("/profiles")
|
|
167
167
|
async def list_mcp_profiles():
|
|
168
168
|
"""List available MCP profiles from .mcp_services.yaml."""
|
|
169
|
-
from testmcpy.mcp_profiles import
|
|
169
|
+
from testmcpy.mcp_profiles import reload_profile_config
|
|
170
170
|
|
|
171
171
|
try:
|
|
172
|
-
|
|
172
|
+
# Always reload to pick up file changes
|
|
173
|
+
profile_config = reload_profile_config()
|
|
173
174
|
if not profile_config.has_profiles():
|
|
174
175
|
return {
|
|
175
176
|
"profiles": [],
|
|
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
|