diff --git a/fastapi_startkit/src/fastapi_startkit/mcp/__init__.py b/fastapi_startkit/src/fastapi_startkit/mcp/__init__.py index d3e44bd1..dc4071d5 100644 --- a/fastapi_startkit/src/fastapi_startkit/mcp/__init__.py +++ b/fastapi_startkit/src/fastapi_startkit/mcp/__init__.py @@ -11,10 +11,12 @@ from .response import Response from .server import Server from .tool import Tool +from .providers.mcp_provider import McpProvider __all__ = [ "Argument", "JsonRpcRequest", + "McpProvider", "Prompt", "Resource", "Response", diff --git a/fastapi_startkit/src/fastapi_startkit/mcp/providers/__init__.py b/fastapi_startkit/src/fastapi_startkit/mcp/providers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/fastapi_startkit/src/fastapi_startkit/mcp/providers/mcp_provider.py b/fastapi_startkit/src/fastapi_startkit/mcp/providers/mcp_provider.py new file mode 100644 index 00000000..4ac8fbe4 --- /dev/null +++ b/fastapi_startkit/src/fastapi_startkit/mcp/providers/mcp_provider.py @@ -0,0 +1,19 @@ +from fastapi_startkit.providers import Provider + + +class McpProvider(Provider): + """Provider that bootstraps the MCP component for fastapi-startkit. + + Register it alongside ``FastAPIProvider`` to make MCP available in + your application:: + + app = Application(providers=[FastAPIProvider, McpProvider]) + """ + + provider_key = "mcp" + + def register(self) -> None: + """Register MCP bindings into the container.""" + + def boot(self) -> None: + """Boot the MCP component.""" diff --git a/fastapi_startkit/tests/mcp/test_mcp_provider.py b/fastapi_startkit/tests/mcp/test_mcp_provider.py new file mode 100644 index 00000000..af870b3f --- /dev/null +++ b/fastapi_startkit/tests/mcp/test_mcp_provider.py @@ -0,0 +1,29 @@ +"""Tests for McpProvider.""" + +from fastapi_startkit.mcp import McpProvider +from fastapi_startkit.providers import Provider + + +def test_mcp_provider_is_a_provider(): + assert issubclass(McpProvider, Provider) + + +def test_mcp_provider_key(): + assert McpProvider.provider_key == "mcp" + + +def test_register_is_callable(): + # Should not raise + class FakeApp: + pass + + provider = McpProvider(FakeApp()) + provider.register() + + +def test_boot_is_callable(): + class FakeApp: + pass + + provider = McpProvider(FakeApp()) + provider.boot()