awslabs.openapi-mcp-server 0.2.8__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.
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/PKG-INFO +2 -2
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/__init__.py +1 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/__init__.py +1 -1
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/prompts/generators/operation_prompts.py +7 -7
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/server.py +4 -9
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/pyproject.toml +2 -2
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/prompts/test_mcp_prompt_manager.py +3 -3
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/prompts/test_mcp_prompt_manager_integration.py +3 -3
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_server_route_logging.py +3 -3
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/uv.lock +289 -26
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/.coveragerc +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/.dockerignore +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/.gitignore +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/.python-version +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/AUTHENTICATION.md +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/AWS_BEST_PRACTICES.md +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/CHANGELOG.md +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/DEPLOYMENT.md +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/Dockerfile +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/LICENSE +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/NOTICE +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/OBSERVABILITY.md +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/README.md +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/api/__init__.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/api/config.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/auth/__init__.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/auth/api_key_auth.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/auth/auth_cache.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/auth/auth_errors.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/auth/auth_factory.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/auth/auth_protocol.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/auth/auth_provider.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/auth/base_auth.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/auth/basic_auth.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/auth/bearer_auth.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/auth/cognito_auth.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/auth/register.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/patch/__init__.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/prompts/__init__.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/prompts/generators/__init__.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/prompts/generators/workflow_prompts.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/prompts/models.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/prompts/prompt_manager.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/utils/__init__.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/utils/cache_provider.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/utils/config.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/utils/error_handler.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/utils/http_client.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/utils/metrics_provider.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/utils/openapi.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/awslabs/openapi_mcp_server/utils/openapi_validator.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/docker-healthcheck.sh +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/pyrightconfig.json +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/README.md +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/api/test_config.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_api_key_auth.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_auth_cache.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_auth_errors.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_auth_factory.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_auth_factory_caching.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_auth_factory_coverage.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_auth_protocol.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_auth_protocol_additional.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_auth_protocol_boost.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_auth_protocol_coverage.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_auth_protocol_extended.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_auth_protocol_improved.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_auth_provider_additional.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_base_auth.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_base_auth_coverage.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_basic_auth.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_bearer_auth.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_cognito_auth.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_cognito_auth_additional_coverage.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_cognito_auth_boost_coverage.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_cognito_auth_client_credentials.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_cognito_auth_coverage_boost.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_cognito_auth_exceptions.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_register.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/auth/test_register_coverage.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/prompts/standalone/test_operation_prompt.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/prompts/standalone/test_prompt_arguments.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/prompts/standalone/test_secure_operation_prompt.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/prompts/test_models_dict_method.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/prompts/test_operation_prompts_extended.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/prompts/test_prompt_manager_additional.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/prompts/test_prompt_manager_comprehensive.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/prompts/test_prompt_manager_coverage.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/prompts/test_prompt_registration.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_api_name.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_cache_coverage_89.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_client.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_coverage_boost.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_init.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_main.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_main_extended.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_openapi_coverage_89.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_server.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_server_auth_errors.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_server_coverage_boost.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_server_coverage_boost_2.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_server_exception_handling.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_server_extended.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_server_httpx_version.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_server_part1.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/test_server_signal_handlers.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_cache_provider.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_error_handler.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_error_handler_boost.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_error_handler_extended.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_error_handler_fix.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_http_client.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_http_client_comprehensive.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_http_client_extended.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_http_client_extended2.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_http_client_import_error.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_metrics_provider.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_metrics_provider_decorators.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_metrics_provider_extended2.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_metrics_provider_prometheus.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_openapi.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/tests/utils/test_openapi_validator.py +0 -0
- {awslabs_openapi_mcp_server-0.2.8 → awslabs_openapi_mcp_server-0.2.9}/uv-requirements.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: awslabs.openapi-mcp-server
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.9
|
|
4
4
|
Summary: An AWS Labs Model Context Protocol (MCP) server for OpenAPI
|
|
5
5
|
Project-URL: Homepage, https://awslabs.github.io/mcp/
|
|
6
6
|
Project-URL: Documentation, https://awslabs.github.io/mcp/servers/openapi-mcp-server/
|
|
@@ -24,7 +24,7 @@ Requires-Python: >=3.10
|
|
|
24
24
|
Requires-Dist: bcrypt>=4.3.0
|
|
25
25
|
Requires-Dist: boto3>=1.39.3
|
|
26
26
|
Requires-Dist: cachetools>=6.1.0
|
|
27
|
-
Requires-Dist: fastmcp>=2.
|
|
27
|
+
Requires-Dist: fastmcp>=2.14.0
|
|
28
28
|
Requires-Dist: httpx>=0.28.1
|
|
29
29
|
Requires-Dist: loguru>=0.7.3
|
|
30
30
|
Requires-Dist: openapi-spec-validator>=0.7.2
|
|
@@ -20,7 +20,7 @@ from awslabs.openapi_mcp_server.prompts.models import (
|
|
|
20
20
|
)
|
|
21
21
|
from fastmcp.prompts.prompt import Prompt
|
|
22
22
|
from fastmcp.prompts.prompt import PromptArgument as FastMCPPromptArgument
|
|
23
|
-
from fastmcp.server.openapi import
|
|
23
|
+
from fastmcp.server.openapi import MCPType
|
|
24
24
|
from typing import Any, Dict, List, Optional
|
|
25
25
|
|
|
26
26
|
|
|
@@ -178,16 +178,16 @@ def determine_operation_type(server: Any, path: str, method: str) -> str:
|
|
|
178
178
|
for route in routes:
|
|
179
179
|
route_path = getattr(route, 'path', '')
|
|
180
180
|
route_method = getattr(route, 'method', '')
|
|
181
|
-
|
|
181
|
+
mcp_type = getattr(route, 'mcp_type', None)
|
|
182
182
|
|
|
183
183
|
# Check if this route matches our operation
|
|
184
|
-
if route_path == path and route_method.upper() == method.upper() and
|
|
185
|
-
# Convert
|
|
186
|
-
if
|
|
184
|
+
if route_path == path and route_method.upper() == method.upper() and mcp_type:
|
|
185
|
+
# Convert MCPType enum to string
|
|
186
|
+
if mcp_type == MCPType.RESOURCE:
|
|
187
187
|
operation_type = 'resource'
|
|
188
|
-
elif
|
|
188
|
+
elif mcp_type == MCPType.RESOURCE_TEMPLATE:
|
|
189
189
|
operation_type = 'resource_template'
|
|
190
|
-
elif
|
|
190
|
+
elif mcp_type == MCPType.TOOL:
|
|
191
191
|
operation_type = 'tool'
|
|
192
192
|
break
|
|
193
193
|
|
|
@@ -29,7 +29,7 @@ from awslabs.openapi_mcp_server.utils.metrics_provider import metrics
|
|
|
29
29
|
from awslabs.openapi_mcp_server.utils.openapi import load_openapi_spec
|
|
30
30
|
from awslabs.openapi_mcp_server.utils.openapi_validator import validate_openapi_spec
|
|
31
31
|
from fastmcp import FastMCP
|
|
32
|
-
from fastmcp.server.openapi import FastMCPOpenAPI,
|
|
32
|
+
from fastmcp.server.openapi import FastMCPOpenAPI, MCPType, RouteMap
|
|
33
33
|
from typing import Any, Dict
|
|
34
34
|
|
|
35
35
|
|
|
@@ -57,11 +57,6 @@ def create_mcp_server(config: Config) -> FastMCP:
|
|
|
57
57
|
server = FastMCP(
|
|
58
58
|
'awslabs.openapi-mcp-server',
|
|
59
59
|
instructions='This server acts as a bridge between OpenAPI specifications and LLMs, allowing models to have a better understanding of available API capabilities without requiring manual tool definitions.',
|
|
60
|
-
dependencies=[
|
|
61
|
-
'pydantic',
|
|
62
|
-
'loguru',
|
|
63
|
-
'httpx',
|
|
64
|
-
],
|
|
65
60
|
)
|
|
66
61
|
|
|
67
62
|
try:
|
|
@@ -184,7 +179,7 @@ def create_mcp_server(config: Config) -> FastMCP:
|
|
|
184
179
|
RouteMap(
|
|
185
180
|
methods=['GET'],
|
|
186
181
|
pattern=f'^{re.escape(path)}$',
|
|
187
|
-
|
|
182
|
+
mcp_type=MCPType.TOOL,
|
|
188
183
|
)
|
|
189
184
|
)
|
|
190
185
|
|
|
@@ -214,8 +209,8 @@ def create_mcp_server(config: Config) -> FastMCP:
|
|
|
214
209
|
for i, route in enumerate(routes):
|
|
215
210
|
path = getattr(route, 'path', 'unknown')
|
|
216
211
|
method = getattr(route, 'method', 'unknown')
|
|
217
|
-
|
|
218
|
-
logger.debug(f'Route {i}: {method} {path} - Type: {
|
|
212
|
+
mcp_type = getattr(route, 'mcp_type', 'unknown')
|
|
213
|
+
logger.debug(f'Route {i}: {method} {path} - Type: {mcp_type}')
|
|
219
214
|
|
|
220
215
|
logger.info(f'Successfully configured API: {config.api_name}')
|
|
221
216
|
|
|
@@ -7,7 +7,7 @@ allow-direct-references = true
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "awslabs.openapi-mcp-server"
|
|
10
|
-
version = "0.2.
|
|
10
|
+
version = "0.2.9"
|
|
11
11
|
description = "An AWS Labs Model Context Protocol (MCP) server for OpenAPI"
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
requires-python = ">=3.10"
|
|
@@ -28,7 +28,7 @@ classifiers = [
|
|
|
28
28
|
"Programming Language :: Python :: 3.13",
|
|
29
29
|
]
|
|
30
30
|
dependencies = [
|
|
31
|
-
"fastmcp>=2.
|
|
31
|
+
"fastmcp>=2.14.0",
|
|
32
32
|
"httpx>=0.28.1",
|
|
33
33
|
"pydantic>=2.11.7",
|
|
34
34
|
"typing-extensions>=4.14.1",
|
|
@@ -18,7 +18,7 @@ from awslabs.openapi_mcp_server.prompts import MCPPromptManager
|
|
|
18
18
|
from awslabs.openapi_mcp_server.prompts.generators.workflow_prompts import (
|
|
19
19
|
identify_workflows,
|
|
20
20
|
)
|
|
21
|
-
from fastmcp.server.openapi import
|
|
21
|
+
from fastmcp.server.openapi import MCPType
|
|
22
22
|
from unittest.mock import AsyncMock, MagicMock, patch
|
|
23
23
|
|
|
24
24
|
|
|
@@ -33,12 +33,12 @@ def mock_server():
|
|
|
33
33
|
mock_route = MagicMock()
|
|
34
34
|
mock_route.path = '/pet/{petId}'
|
|
35
35
|
mock_route.method = 'GET'
|
|
36
|
-
mock_route.
|
|
36
|
+
mock_route.mcp_type = MCPType.RESOURCE
|
|
37
37
|
|
|
38
38
|
mock_route2 = MagicMock()
|
|
39
39
|
mock_route2.path = '/pet/findByStatus'
|
|
40
40
|
mock_route2.method = 'GET'
|
|
41
|
-
mock_route2.
|
|
41
|
+
mock_route2.v = MCPType.TOOL
|
|
42
42
|
|
|
43
43
|
server._openapi_router = MagicMock()
|
|
44
44
|
server._openapi_router._routes = [mock_route, mock_route2]
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
import pytest
|
|
17
17
|
from awslabs.openapi_mcp_server.prompts import MCPPromptManager
|
|
18
|
-
from fastmcp.server.openapi import
|
|
18
|
+
from fastmcp.server.openapi import MCPType
|
|
19
19
|
from unittest.mock import AsyncMock, MagicMock
|
|
20
20
|
|
|
21
21
|
|
|
@@ -35,12 +35,12 @@ def mock_server():
|
|
|
35
35
|
mock_route = MagicMock()
|
|
36
36
|
mock_route.path = '/pet/{petId}'
|
|
37
37
|
mock_route.method = 'GET'
|
|
38
|
-
mock_route.
|
|
38
|
+
mock_route.mcp_type = MCPType.RESOURCE
|
|
39
39
|
|
|
40
40
|
mock_route2 = MagicMock()
|
|
41
41
|
mock_route2.path = '/pet/findByStatus'
|
|
42
42
|
mock_route2.method = 'GET'
|
|
43
|
-
mock_route2.
|
|
43
|
+
mock_route2.mcp_type = MCPType.TOOL
|
|
44
44
|
|
|
45
45
|
server._openapi_router = MagicMock()
|
|
46
46
|
server._openapi_router._routes = [mock_route, mock_route2]
|
|
@@ -51,12 +51,12 @@ class TestServerRouteLogging:
|
|
|
51
51
|
mock_route1 = MagicMock()
|
|
52
52
|
mock_route1.path = '/api/v1/pets'
|
|
53
53
|
mock_route1.method = 'GET'
|
|
54
|
-
mock_route1.
|
|
54
|
+
mock_route1.mcp_type = 'resource'
|
|
55
55
|
|
|
56
56
|
mock_route2 = MagicMock()
|
|
57
57
|
mock_route2.path = '/api/v1/pets/{id}'
|
|
58
58
|
mock_route2.method = 'POST'
|
|
59
|
-
mock_route2.
|
|
59
|
+
mock_route2.mcp_type = 'tool'
|
|
60
60
|
|
|
61
61
|
# Set up the _openapi_router attribute with routes
|
|
62
62
|
mock_openapi_router = MagicMock()
|
|
@@ -126,7 +126,7 @@ class TestServerRouteLogging:
|
|
|
126
126
|
mock_route1 = MagicMock()
|
|
127
127
|
mock_route1.path = '/api/v1/pets'
|
|
128
128
|
mock_route1.method = 'GET'
|
|
129
|
-
mock_route1.
|
|
129
|
+
mock_route1.mcp_type = 'resource'
|
|
130
130
|
|
|
131
131
|
# Set up the _openapi_router attribute with routes
|
|
132
132
|
mock_openapi_router = MagicMock()
|