testmcpy 0.2.7__tar.gz → 0.2.8__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.8}/PKG-INFO +1 -1
- {testmcpy-0.2.7 → testmcpy-0.2.8}/pyproject.toml +1 -1
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/routers/mcp_profiles.py +42 -7
- {testmcpy-0.2.7 → testmcpy-0.2.8/testmcpy.egg-info}/PKG-INFO +1 -1
- {testmcpy-0.2.7 → testmcpy-0.2.8}/LICENSE +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/MANIFEST.in +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/NOTICE +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/README.md +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/setup.cfg +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/auth_debugger.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/auth_flow_recorder.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/cli/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/cli/app.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/cli/commands/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/cli/commands/mcp.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/cli/commands/run.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/cli/commands/server.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/cli/commands/tools.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/cli/commands/tui.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/config.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/core/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/core/chat_session.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/core/docs_optimizer.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/core/mcp_manager.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/core/tool_comparison.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/core/tool_discovery.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/error_handlers.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/evals/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/evals/auth_evaluators.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/evals/base_evaluators.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/formatters/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/formatters/base.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/formatters/curl.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/formatters/graphql.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/formatters/javascript_client.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/formatters/json_yaml.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/formatters/protobuf.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/formatters/python.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/formatters/python_client.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/formatters/thrift.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/formatters/typescript.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/formatters/typescript_client.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/llm_profiles.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/mcp_profiles.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/research/claude_sdk_detailed_exploration.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/research/claude_sdk_poc.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/research/claude_sdk_working_poc.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/research/test_ollama_tools.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/api.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/api.py.bak +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/helpers/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/helpers/mcp_config.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/models.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/routers/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/routers/auth.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/routers/generation_logs.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/routers/llm.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/routers/results.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/routers/smoke_reports.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/routers/test_profiles.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/routers/tests.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/routers/tools.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/state.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/tool_compare_endpoint.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/server/websocket.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/smoke_test.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/src/__init__.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/src/llm_integration.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/src/mcp_client.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/src/model_registry.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/src/models.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/src/runner_tools.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/src/test_runner.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/storage.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/test_profiles.py +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/README.md +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/dist/assets/index-CaEBvXci.css +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/dist/assets/index-DbhZ0GnU.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/dist/index.html +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/index.html +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/package-lock.json +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/package.json +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/postcss.config.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/App.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/CompareToolsTab.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/ErrorAlert.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/ErrorBoundary.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/LLMProfileSelector.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/LoadingSpinner.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/MCPProfileSelector.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/OptimizeDocsModal.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/ParameterCard.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/SchemaCodeViewer.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/SkeletonLoader.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/TestGenerationModal.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/TestProfileSelector.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/TestResultPanel.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/TestStatusIndicator.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/ToolComparison.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/ToolDebugModal.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/components/TypeBadge.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/contexts/TestRunContext.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/hooks/useKeyboardShortcuts.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/hooks/useSafeFetch.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/index.css +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/main.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/pages/AuthDebugger.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/pages/ChatInterface.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/pages/Configuration.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/pages/GenerationHistory.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/pages/LLMProfiles.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/pages/MCPExplorer.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/pages/MCPProfiles.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/pages/ProfilesManager.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/pages/Reports.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/pages/TestManager.jsx +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/utils/__tests__/formatConverters.test.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/src/utils/formatConverters.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/tailwind.config.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy/ui/vite.config.js +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy.egg-info/SOURCES.txt +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy.egg-info/dependency_links.txt +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy.egg-info/entry_points.txt +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/testmcpy.egg-info/requires.txt +0 -0
- {testmcpy-0.2.7 → testmcpy-0.2.8}/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.8"
|
|
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,50 @@ 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
|
+
|
|
123
|
+
# MCP servers in this profile
|
|
124
|
+
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
|
|
142
|
+
|
|
143
|
+
# Authentication (optional)
|
|
144
|
+
# auth:
|
|
145
|
+
# type: bearer
|
|
146
|
+
# token_env: MY_API_TOKEN
|
|
147
|
+
"""
|
|
148
|
+
|
|
149
|
+
config_file.write_text(default_template)
|
|
115
150
|
|
|
116
151
|
return {
|
|
117
152
|
"success": True,
|
|
118
|
-
"message": "Created .mcp_services.yaml
|
|
153
|
+
"message": "Created .mcp_services.yaml with default template",
|
|
119
154
|
"path": str(config_file.absolute()),
|
|
120
155
|
}
|
|
121
156
|
|
|
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
|