Source code for axio_tools_mcp.plugin
"""MCPPlugin: ToolsPlugin implementation for the TUI plugin system."""
from __future__ import annotations
from collections.abc import Callable
from typing import Any
from axio.instructions import Instruction
from axio.tool import Tool
from .inspection import ServerInspection
from .registry import MCPRegistry
from .skills import SkillCatalog
[docs]
class MCPPlugin:
"""Dynamic tool provider that bridges MCP servers into Axio.
Discovered via the ``axio.tools.settings`` entry point group.
The TUI interacts with this class through the ToolsPlugin protocol.
"""
def __init__(self) -> None:
self._registry = MCPRegistry()
self._config: Any = None
self._global_config: Any = None
@property
def label(self) -> str:
return "MCP Servers"
async def init(self, config: Any = None, global_config: Any = None) -> None:
self._config = config
self._global_config = global_config
await self._registry.init(config=config, global_config=global_config)
def set_status_callback(self, callback: Callable[[str], None]) -> None:
self._registry.on_status = callback
async def reconnect(self) -> None:
await self._registry.reconnect()
@property
def all_tools(self) -> list[Tool[Any]]:
return self._registry.all_tools
def settings_screen(self) -> Any:
from .tui import MCPHubScreen
return MCPHubScreen(self._registry, config=self._config, global_config=self._global_config)
def inspect_servers(self) -> list[ServerInspection]:
return self._registry.inspect_servers()
def skill_catalogs(self) -> dict[str, SkillCatalog]:
return self._registry.skill_catalogs()
def get_instructions(self) -> tuple[Instruction, ...]:
return self._registry.get_instructions()
def describe_skills(self) -> str:
return self._registry.describe_skills()
def describe(self) -> str:
return self._registry.describe()
def instructions(self) -> str:
return self._registry.instructions()
async def close(self) -> None:
await self._registry.close()