[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[project]
name = "awslabs.openapi-mcp-server"
version = "0.2.5"
description = "An AWS Labs Model Context Protocol (MCP) server for OpenAPI"
readme = "README.md"
requires-python = ">=3.12"
license = {text = "Apache-2.0"}
license-files = ["../../LICENSE", "../../NOTICE"]
authors = [
{name = "Amazon Web Services"},
{name = "AWSLabs Model Context Protocol (MCP)", email="203918161+awslabs-mcp@users.noreply.github.com"},
]
classifiers = [
"License :: OSI Approved :: Apache Software License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
]
dependencies = [
"fastapi>=0.115.0",
"fastmcp>=2.10.2",
"httpx>=0.28.1",
"pydantic>=2.11.7",
"typing-extensions>=4.14.1",
"boto3>=1.39.3",
"cachetools>=6.1.0",
"loguru>=0.7.3",
"uvicorn>=0.35.0",
"tenacity>=9.1.2",
"prance>=25.4.8.0",
"pyyaml>=6.0.2",
"openapi-spec-validator>=0.7.2",
"bcrypt>=4.3.0",
]
[project.optional-dependencies]
yaml = ["pyyaml>=6.0.2"]
prometheus = ["prometheus-client>=0.22.1"]
test = [
"pytest>=8.4.1",
"pytest-asyncio>=1.0.0",
"pytest-cov>=6.2.1",
"pytest-mock>=3.14.1",
]
all = ["pyyaml>=6.0.0", "prometheus-client>=0.17.0"]
[project.urls]
Homepage = "https://awslabs.github.io/mcp/"
Documentation = "https://awslabs.github.io/mcp/servers/openapi-mcp-server/"
Source = "https://github.com/awslabs/mcp.git"
"Bug Tracker" = "https://github.com/awslabs/mcp/issues"
Changelog = "https://github.com/awslabs/mcp/blob/main/src/openapi-mcp-server/CHANGELOG.md"
[project.scripts]
"awslabs.openapi-mcp-server" = "awslabs.openapi_mcp_server.server:main"
[tool.hatch.build.targets.wheel]
packages = ["awslabs"]
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = "test_*.py"
python_classes = "Test*"
python_functions = "test_*"
asyncio_mode = "auto"
[tool.coverage.run]
source = ["awslabs"]
omit = ["tests/*", "**/__init__.py"]
skip_covered = false
skip_empty = true
[tool.coverage.report]
exclude_lines = [
"pragma: no cover",
"def __repr__",
"raise NotImplementedError",
"if __name__ == .__main__.:",
"pass",
"raise ImportError",
"^\\s*#\\s*Copyright",
"^\\s*#\\s*Licensed under",
"^\\s*#\\s*limitations under the License",
"^\\s*#\\s*Copyright Amazon\\.com",
"^\\s*#\\s*Licensed under the Apache License",
"^\\s*#\\s*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND",
"^\\s*#\\s*See the License for the specific language governing permissions",
"^\\s*#\\s*and limitations under the License",
"^\\s*#\\s*$",
"^\\s*#\\s*http://www\\.apache\\.org/licenses/LICENSE-2\\.0",
"^\\s*#\\s*Unless required by applicable law",
"^\\s*#\\s*distributed under the License is distributed",
"^\\s*#\\s*either express or implied",
"\"\"\".*\"\"\"",
]
skip_covered = false
skip_empty = true
[tool.coverage.html]
skip_empty = true
[tool.coverage.xml]
skip_empty = true