diff --git a/ai-hub/app/api/routes/mcp.py b/ai-hub/app/api/routes/mcp.py index 363d786..55128f9 100644 --- a/ai-hub/app/api/routes/mcp.py +++ b/ai-hub/app/api/routes/mcp.py @@ -325,7 +325,15 @@ "active_tts_provider": {"type": "string"}, "stt_providers": {"type": "object"}, "active_stt_provider": {"type": "string"} - }) + }), + _tool_def("verify_provider", "Test connection for an AI provider.", { + "section": {"type": "string", "enum": ["llm", "tts", "stt"]}, + "provider_name": {"type": "string"}, + "provider_type": {"type": "string"}, + "api_key": {"type": "string"}, + "model": {"type": "string"}, + "voice": {"type": "string"} + }, required=["section", "provider_name"]) ] } @@ -385,7 +393,8 @@ "cancel_session_task": self._cancel_session_task, "get_system_status": self._get_system_status, "get_global_config": self._get_global_config, - "update_global_config": self._update_global_config + "update_global_config": self._update_global_config, + "verify_provider": self._verify_provider } async def dispatch(self, name: str, args: dict, token: Optional[str]) -> Any: @@ -931,6 +940,26 @@ return {"message": "Global providers updated successfully via system_config"} return await self.loop.run_in_executor(None, _execute) + async def _verify_provider(self, args: dict, token: Optional[str]): + if not token: raise ValueError("Authentication required.") + from app.api import schemas + from app.db.session import get_db_session + from app.db.models import User + with get_db_session() as db: + u = db.query(User).filter(User.id == token).first() + if not u: raise ValueError("User not found.") + + section = args.get("section") + req = schemas.VerifyProviderRequest( + provider_name=args.get("provider_name"), + provider_type=args.get("provider_type"), + api_key=args.get("api_key"), + model=args.get("model"), + voice=args.get("voice") + ) + res = await self.services.preference_service.verify_provider(db, u, req, section) + return res.model_dump() + async def _get_system_status(self, args: dict, token: Optional[str]): def _query(): return {"status": "running", "oidc_enabled": settings.OIDC_ENABLED, "version": "1.0.0"}