"""MCP Server plugin — exposes LeoCRM data to external MCP clients (Claude Desktop, etc.).""" from __future__ import annotations from app.plugins.base import BasePlugin from app.plugins.manifest import PluginManifest, PluginRouteDef class McpServerPlugin(BasePlugin): """MCP Server plugin: exposes LeoCRM tools to external AI clients via MCP protocol.""" manifest = PluginManifest( name="mcp_server", version="1.0.0", display_name="MCP Server", description="Exposes LeoCRM data (contacts, calendar, mail, DMS) to external MCP clients via API-token auth.", dependencies=["permissions", "unified_search"], routes=[ PluginRouteDef( path="/api/v1/mcp", module="app.plugins.builtins.mcp_server.routes", router_attr="router", ), ], events=[], migrations=["0001_initial.sql"], permissions=[ "mcp:read", "mcp:write", ], author="LeoCRM Team", min_app_version="1.0.0", contract_version="1.0.0") async def on_deactivate( self, db, service_container, event_bus ) -> None: """Deactivate plugin: unregister contract and event listeners.""" # Contract abmelden from app.plugins.builtins.contracts import get_contract_registry get_contract_registry().unregister(self.manifest.name) await super().on_deactivate(db, service_container, event_bus)