mindroot 9.11.0__py3-none-any.whl → 9.13.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mindroot might be problematic. Click here for more details.
- mindroot/coreplugins/admin/static/js/model-preferences-v2.js +1 -1
- mindroot/coreplugins/home/templates/home.jinja2 +1 -0
- mindroot/docs/Makefile +20 -0
- mindroot/docs/_build/doctrees/chat_with_assistant.doctree +0 -0
- mindroot/docs/_build/doctrees/developer_documentation.doctree +0 -0
- mindroot/docs/_build/doctrees/environment.pickle +0 -0
- mindroot/docs/_build/doctrees/getting_started.doctree +0 -0
- mindroot/docs/_build/doctrees/index.doctree +0 -0
- mindroot/docs/_build/doctrees/install_plugins_with_tools.doctree +0 -0
- mindroot/docs/_build/doctrees/installation.doctree +0 -0
- mindroot/docs/_build/doctrees/llm_api_key.doctree +0 -0
- mindroot/docs/_build/doctrees/llm_plugin_installation.doctree +0 -0
- mindroot/docs/_build/doctrees/programming_task.doctree +0 -0
- mindroot/docs/_build/doctrees/source/ahp.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.admin.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.api_keys.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat_avatar.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.check_list.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.credits.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.email.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.env_manager.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.events.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.handlers.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.jwt_auth.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.l8n.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.mcp_.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.persona.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.startup.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.subscriptions.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.usage.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.user_service.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.auth.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.json_str_block.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.plugins.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.providers.backup.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.providers.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.registry.doctree +0 -0
- mindroot/docs/_build/doctrees/source/modules.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mr_agent_expert_instr.doctree +0 -0
- mindroot/docs/_build/doctrees/starting_mindroot.doctree +0 -0
- mindroot/docs/_build/doctrees/user_documentation.doctree +0 -0
- mindroot/docs/_build/html/.buildinfo +4 -0
- mindroot/docs/_build/html/.buildinfo.bak +4 -0
- mindroot/docs/_build/html/_images/envvar.png +0 -0
- mindroot/docs/_build/html/_images/files.png +0 -0
- mindroot/docs/_build/html/_images/installopenrouter.png +0 -0
- mindroot/docs/_build/html/_images/mood.png +0 -0
- mindroot/docs/_build/html/_images/moon.png +0 -0
- mindroot/docs/_build/html/_images/openrouter.png +0 -0
- mindroot/docs/_build/html/_images/restart.png +0 -0
- mindroot/docs/_build/html/_modules/index.html +425 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_importer.html +292 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_router.html +620 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/asset_manager.html +289 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/command_router.html +518 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_catalog_routes.html +275 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_publish_routes.html +581 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_registry_routes.html +623 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_routes.html +347 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mod.html +163 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/oauth_callback_router.html +188 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_handler.html +195 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_router.html +428 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_manager.html +610 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_router.html +146 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_routes.html +230 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/registry_settings_routes.html +253 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/router.html +267 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/server_router.html +271 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/service_models.html +195 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/settings_router.html +403 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/api_key_manager.html +215 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/mod.html +127 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/router.html +170 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/commands.html +565 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/mod.html +118 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/models.html +130 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/router.html +571 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/services.html +645 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_manager.html +258 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_routes.html +409 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/check_list/mod.html +460 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/conversion.html +232 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/ledger.html +283 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/mod.html +355 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/models.html +269 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/router.html +306 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/storage.html +257 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/email_provider.html +159 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/imap_handler.html +343 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/mod.html +210 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/services.html +172 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/smtp_handler.html +188 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/test_email_service.html +179 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/mod.html +409 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/router.html +147 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/events/router.html +201 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/agent_ops.html +195 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/index_ops.html +214 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/plugin_ops.html +263 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/publish.html +225 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/mod.html +120 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/models.html +148 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/router.html +184 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/utils.html +166 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/middleware.html +400 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/mod.html +153 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/router.html +134 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/language_detection.html +296 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/middleware.html +258 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/mod.html +393 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_enhanced.html +408 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html +379 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_middleware.html +394 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/utils.html +348 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_commands.html +456 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_manager.html +409 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/dynamic_commands.html +267 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mcp_manager.html +1186 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mod.html +510 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/oauth_storage.html +260 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/server_installer.html +195 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/testmcpclient.html +217 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/init_persona.html +117 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/mod.html +276 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/startup/mod.html +122 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/credit_integration.html +163 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/mod.html +1089 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/models.html +261 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/router.html +502 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/storage.html +413 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/stripe_integration.html +178 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/subscription_manager.html +289 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/webhook_handler.html +327 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/handlers.html +157 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/mod.html +253 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/models.html +141 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/reporting.html +226 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/router.html +228 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/storage.html +264 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/admin_init.html +234 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/email_service.html +204 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/mod.html +260 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/models.html +148 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/password_reset_service.html +336 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/role_service.html +183 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/router.html +202 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/auth/api_key.html +129 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/auth/auth.html +203 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog.html +259 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog2.html +500 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/butemplates.html +415 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/chatcontext.html +401 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/chatlog.html +619 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/chatlog_optimized.html +655 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/json_escape.html +138 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/json_str_block/json_str_block.html +213 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/parent_templates.html +181 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/installation.html +481 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/l8n_static_handler.html +347 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader.html +403 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader_with_l8n.html +391 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/manifest.html +450 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/mapping.html +127 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/paths.html +215 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins_install.html +171 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/commands.html +125 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/hooks.html +117 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/missing.html +169 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/model_preferences_v2.html +291 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/services.html +122 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers.html +465 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/route_decorators.html +175 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/session_files.html +142 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/streamcmd.html +246 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/templates.html +677 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/token_counter.html +326 -0
- mindroot/docs/_build/html/_modules/mindroot/migrate.html +153 -0
- mindroot/docs/_build/html/_modules/mindroot/registry/component_manager.html +140 -0
- mindroot/docs/_build/html/_modules/mindroot/registry/data_access.html +302 -0
- mindroot/docs/_build/html/_modules/mindroot/server.html +317 -0
- mindroot/docs/_build/html/_modules/mindroot/server_missing_normal_args.html +322 -0
- mindroot/docs/_build/html/_modules/mindroot/server_prev.html +298 -0
- mindroot/docs/_build/html/_sources/chat_with_assistant.rst.txt +14 -0
- mindroot/docs/_build/html/_sources/developer_documentation.rst.txt +26 -0
- mindroot/docs/_build/html/_sources/getting_started.rst.txt +139 -0
- mindroot/docs/_build/html/_sources/index.rst.txt +38 -0
- mindroot/docs/_build/html/_sources/install_plugins_with_tools.rst.txt +25 -0
- mindroot/docs/_build/html/_sources/installation.rst.txt +21 -0
- mindroot/docs/_build/html/_sources/llm_api_key.rst.txt +22 -0
- mindroot/docs/_build/html/_sources/llm_plugin_installation.rst.txt +27 -0
- mindroot/docs/_build/html/_sources/programming_task.rst.txt +10 -0
- mindroot/docs/_build/html/_sources/source/ahp.rst.txt +7 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.admin.rst.txt +189 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.api_keys.rst.txt +45 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.chat.rst.txt +93 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.chat_avatar.rst.txt +10 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.check_list.rst.txt +21 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.credits.rst.txt +61 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.email.rst.txt +77 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.env_manager.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.events.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.index.handlers.rst.txt +45 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.index.rst.txt +53 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.jwt_auth.rst.txt +45 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.l8n.rst.txt +109 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.mcp_.rst.txt +93 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.persona.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.rst.txt +35 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.startup.rst.txt +21 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.subscriptions.rst.txt +85 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.usage.rst.txt +61 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.user_service.rst.txt +69 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.auth.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.json_str_block.rst.txt +21 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.plugins.rst.txt +69 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.providers.backup.rst.txt +10 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.providers.rst.txt +61 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.rst.txt +152 -0
- mindroot/docs/_build/html/_sources/source/mindroot.registry.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.rst.txt +54 -0
- mindroot/docs/_build/html/_sources/source/modules.rst.txt +7 -0
- mindroot/docs/_build/html/_sources/source/mr_agent_expert_instr.rst.txt +7 -0
- mindroot/docs/_build/html/_sources/starting_mindroot.rst.txt +12 -0
- mindroot/docs/_build/html/_sources/user_documentation.rst.txt +16 -0
- mindroot/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js +123 -0
- mindroot/docs/_build/html/_static/basic.css +906 -0
- mindroot/docs/_build/html/_static/css/badge_only.css +1 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +2671 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/theme.css +4 -0
- mindroot/docs/_build/html/_static/custom.css +19 -0
- mindroot/docs/_build/html/_static/debug.css +69 -0
- mindroot/docs/_build/html/_static/doctools.js +149 -0
- mindroot/docs/_build/html/_static/documentation_options.js +13 -0
- mindroot/docs/_build/html/_static/file.png +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
- mindroot/docs/_build/html/_static/jquery.js +2 -0
- mindroot/docs/_build/html/_static/js/badge_only.js +1 -0
- mindroot/docs/_build/html/_static/js/theme.js +1 -0
- mindroot/docs/_build/html/_static/js/versions.js +228 -0
- mindroot/docs/_build/html/_static/language_data.js +192 -0
- mindroot/docs/_build/html/_static/minus.png +0 -0
- mindroot/docs/_build/html/_static/plus.png +0 -0
- mindroot/docs/_build/html/_static/pygments.css +232 -0
- mindroot/docs/_build/html/_static/scripts/furo-extensions.js +0 -0
- mindroot/docs/_build/html/_static/scripts/furo.js +3 -0
- mindroot/docs/_build/html/_static/scripts/furo.js.LICENSE.txt +7 -0
- mindroot/docs/_build/html/_static/scripts/furo.js.map +1 -0
- mindroot/docs/_build/html/_static/searchtools.js +635 -0
- mindroot/docs/_build/html/_static/skeleton.css +296 -0
- mindroot/docs/_build/html/_static/sphinx_highlight.js +154 -0
- mindroot/docs/_build/html/_static/styles/furo-extensions.css +2 -0
- mindroot/docs/_build/html/_static/styles/furo-extensions.css.map +1 -0
- mindroot/docs/_build/html/_static/styles/furo.css +2 -0
- mindroot/docs/_build/html/_static/styles/furo.css.map +1 -0
- mindroot/docs/_build/html/chat_with_assistant.html +329 -0
- mindroot/docs/_build/html/developer_documentation.html +338 -0
- mindroot/docs/_build/html/genindex.html +4690 -0
- mindroot/docs/_build/html/getting_started.html +423 -0
- mindroot/docs/_build/html/index.html +357 -0
- mindroot/docs/_build/html/install_plugins_with_tools.html +336 -0
- mindroot/docs/_build/html/installation.html +330 -0
- mindroot/docs/_build/html/llm_api_key.html +337 -0
- mindroot/docs/_build/html/llm_plugin_installation.html +338 -0
- mindroot/docs/_build/html/objects.inv +0 -0
- mindroot/docs/_build/html/programming_task.html +326 -0
- mindroot/docs/_build/html/py-modindex.html +1307 -0
- mindroot/docs/_build/html/search.html +307 -0
- mindroot/docs/_build/html/searchindex.js +1 -0
- mindroot/docs/_build/html/source/ahp.html +302 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.admin.html +2212 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.api_keys.html +532 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.chat.html +1185 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.chat_avatar.html +311 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.check_list.html +441 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.credits.html +879 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.email.html +554 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.env_manager.html +447 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.events.html +338 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.html +1785 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.index.handlers.html +481 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.index.html +696 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.jwt_auth.html +432 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.l8n.html +933 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.mcp_.html +1271 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.persona.html +386 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.startup.html +327 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.subscriptions.html +1631 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.usage.html +677 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.user_service.html +681 -0
- mindroot/docs/_build/html/source/mindroot.html +811 -0
- mindroot/docs/_build/html/source/mindroot.lib.auth.html +407 -0
- mindroot/docs/_build/html/source/mindroot.lib.html +2027 -0
- mindroot/docs/_build/html/source/mindroot.lib.json_str_block.html +344 -0
- mindroot/docs/_build/html/source/mindroot.lib.plugins.html +1050 -0
- mindroot/docs/_build/html/source/mindroot.lib.providers.backup.html +324 -0
- mindroot/docs/_build/html/source/mindroot.lib.providers.html +572 -0
- mindroot/docs/_build/html/source/mindroot.registry.html +501 -0
- mindroot/docs/_build/html/source/modules.html +377 -0
- mindroot/docs/_build/html/source/mr_agent_expert_instr.html +302 -0
- mindroot/docs/_build/html/starting_mindroot.html +325 -0
- mindroot/docs/_build/html/user_documentation.html +333 -0
- mindroot/docs/_static/custom.css +19 -0
- mindroot/docs/chat_with_assistant.rst +14 -0
- mindroot/docs/conf.py +54 -0
- mindroot/docs/data/agents/local/Assistant/agent.json +27 -0
- mindroot/docs/data/agents/local/SysAdmin/agent.json +33 -0
- mindroot/docs/data/equivalent_flags.json +1 -0
- mindroot/docs/data/mcp/servers.json +9 -0
- mindroot/docs/data/models.json +57 -0
- mindroot/docs/data/plugin_manifest.json +95 -0
- mindroot/docs/data/preferred_models.json +12 -0
- mindroot/docs/data/providers.json +62 -0
- mindroot/docs/developer_documentation.rst +26 -0
- mindroot/docs/envvar.png +0 -0
- mindroot/docs/files.png +0 -0
- mindroot/docs/getting_started.rst +139 -0
- mindroot/docs/index.rst +38 -0
- mindroot/docs/install_plugins_with_tools.rst +25 -0
- mindroot/docs/installation.rst +21 -0
- mindroot/docs/installopenrouter.png +0 -0
- mindroot/docs/llm_api_key.rst +22 -0
- mindroot/docs/llm_plugin_installation.rst +27 -0
- mindroot/docs/make.bat +35 -0
- mindroot/docs/mood.png +0 -0
- mindroot/docs/moon.png +0 -0
- mindroot/docs/openrouter.png +0 -0
- mindroot/docs/personas/local/Assistant/avatar.png +0 -0
- mindroot/docs/personas/local/Assistant/faceref.png +0 -0
- mindroot/docs/personas/local/Assistant/persona.json +7 -0
- mindroot/docs/programming_task.rst +10 -0
- mindroot/docs/restart.png +0 -0
- mindroot/docs/source/ahp.rst +7 -0
- mindroot/docs/source/mindroot.coreplugins.admin.rst +189 -0
- mindroot/docs/source/mindroot.coreplugins.api_keys.rst +45 -0
- mindroot/docs/source/mindroot.coreplugins.chat.rst +93 -0
- mindroot/docs/source/mindroot.coreplugins.chat_avatar.rst +10 -0
- mindroot/docs/source/mindroot.coreplugins.check_list.rst +21 -0
- mindroot/docs/source/mindroot.coreplugins.credits.rst +61 -0
- mindroot/docs/source/mindroot.coreplugins.email.rst +77 -0
- mindroot/docs/source/mindroot.coreplugins.env_manager.rst +29 -0
- mindroot/docs/source/mindroot.coreplugins.events.rst +29 -0
- mindroot/docs/source/mindroot.coreplugins.index.handlers.rst +45 -0
- mindroot/docs/source/mindroot.coreplugins.index.rst +53 -0
- mindroot/docs/source/mindroot.coreplugins.jwt_auth.rst +45 -0
- mindroot/docs/source/mindroot.coreplugins.l8n.rst +109 -0
- mindroot/docs/source/mindroot.coreplugins.mcp_.rst +93 -0
- mindroot/docs/source/mindroot.coreplugins.persona.rst +29 -0
- mindroot/docs/source/mindroot.coreplugins.rst +35 -0
- mindroot/docs/source/mindroot.coreplugins.startup.rst +21 -0
- mindroot/docs/source/mindroot.coreplugins.subscriptions.rst +85 -0
- mindroot/docs/source/mindroot.coreplugins.usage.rst +61 -0
- mindroot/docs/source/mindroot.coreplugins.user_service.rst +69 -0
- mindroot/docs/source/mindroot.lib.auth.rst +29 -0
- mindroot/docs/source/mindroot.lib.json_str_block.rst +21 -0
- mindroot/docs/source/mindroot.lib.plugins.rst +69 -0
- mindroot/docs/source/mindroot.lib.providers.backup.rst +10 -0
- mindroot/docs/source/mindroot.lib.providers.rst +61 -0
- mindroot/docs/source/mindroot.lib.rst +152 -0
- mindroot/docs/source/mindroot.registry.rst +29 -0
- mindroot/docs/source/mindroot.rst +54 -0
- mindroot/docs/source/modules.rst +7 -0
- mindroot/docs/source/mr_agent_expert_instr.rst +7 -0
- mindroot/docs/starting_mindroot.rst +12 -0
- mindroot/docs/user_documentation.rst +16 -0
- mindroot/lib/providers/model_preferences_v2.py +5 -3
- mindroot/server.py +10 -1
- {mindroot-9.11.0.dist-info → mindroot-9.13.0.dist-info}/METADATA +1 -1
- {mindroot-9.11.0.dist-info → mindroot-9.13.0.dist-info}/RECORD +417 -10
- {mindroot-9.11.0.dist-info → mindroot-9.13.0.dist-info}/WHEEL +0 -0
- {mindroot-9.11.0.dist-info → mindroot-9.13.0.dist-info}/entry_points.txt +0 -0
- {mindroot-9.11.0.dist-info → mindroot-9.13.0.dist-info}/licenses/LICENSE +0 -0
- {mindroot-9.11.0.dist-info → mindroot-9.13.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
<!DOCTYPE html>
|
|
4
|
+
<html class="writer-html5" lang="en" data-content_root="../../../../">
|
|
5
|
+
<head>
|
|
6
|
+
<meta charset="utf-8" />
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
8
|
+
<title>mindroot.coreplugins.admin.mcp_publish_routes — MindRoot 9.10.0 documentation</title>
|
|
9
|
+
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
|
|
10
|
+
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
|
|
14
|
+
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
|
15
|
+
<script src="../../../../_static/documentation_options.js?v=3c16008f"></script>
|
|
16
|
+
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
|
|
17
|
+
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
|
18
|
+
<script src="../../../../_static/js/theme.js"></script>
|
|
19
|
+
<link rel="index" title="Index" href="../../../../genindex.html" />
|
|
20
|
+
<link rel="search" title="Search" href="../../../../search.html" />
|
|
21
|
+
</head>
|
|
22
|
+
|
|
23
|
+
<body class="wy-body-for-nav">
|
|
24
|
+
<div class="wy-grid-for-nav">
|
|
25
|
+
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
26
|
+
<div class="wy-side-scroll">
|
|
27
|
+
<div class="wy-side-nav-search" style="background: #343131" >
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
<a href="../../../../index.html" class="icon icon-home">
|
|
32
|
+
MindRoot
|
|
33
|
+
</a>
|
|
34
|
+
<div role="search">
|
|
35
|
+
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
|
|
36
|
+
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
|
37
|
+
<input type="hidden" name="check_keywords" value="yes" />
|
|
38
|
+
<input type="hidden" name="area" value="default" />
|
|
39
|
+
</form>
|
|
40
|
+
</div>
|
|
41
|
+
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
42
|
+
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
|
43
|
+
<ul>
|
|
44
|
+
<li class="toctree-l1"><a class="reference internal" href="../../../../getting_started.html">Getting Started</a></li>
|
|
45
|
+
</ul>
|
|
46
|
+
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</nav>
|
|
50
|
+
|
|
51
|
+
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #343131" >
|
|
52
|
+
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
53
|
+
<a href="../../../../index.html">MindRoot</a>
|
|
54
|
+
</nav>
|
|
55
|
+
|
|
56
|
+
<div class="wy-nav-content">
|
|
57
|
+
<div class="rst-content">
|
|
58
|
+
<div role="navigation" aria-label="Page navigation">
|
|
59
|
+
<ul class="wy-breadcrumbs">
|
|
60
|
+
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
|
61
|
+
<li class="breadcrumb-item"><a href="../../../index.html">Module code</a></li>
|
|
62
|
+
<li class="breadcrumb-item active">mindroot.coreplugins.admin.mcp_publish_routes</li>
|
|
63
|
+
<li class="wy-breadcrumbs-aside">
|
|
64
|
+
</li>
|
|
65
|
+
</ul>
|
|
66
|
+
<hr/>
|
|
67
|
+
</div>
|
|
68
|
+
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|
69
|
+
<div itemprop="articleBody">
|
|
70
|
+
|
|
71
|
+
<h1>Source code for mindroot.coreplugins.admin.mcp_publish_routes</h1><div class="highlight"><pre>
|
|
72
|
+
<span></span><span class="kn">from</span><span class="w"> </span><span class="nn">fastapi</span><span class="w"> </span><span class="kn">import</span> <span class="n">APIRouter</span><span class="p">,</span> <span class="n">HTTPException</span>
|
|
73
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">pydantic</span><span class="w"> </span><span class="kn">import</span> <span class="n">BaseModel</span>
|
|
74
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Any</span>
|
|
75
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">lib.route_decorators</span><span class="w"> </span><span class="kn">import</span> <span class="n">requires_role</span>
|
|
76
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">lib.providers.services</span><span class="w"> </span><span class="kn">import</span> <span class="n">service_manager</span>
|
|
77
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
|
|
78
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">json</span>
|
|
79
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">uuid</span>
|
|
80
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">asyncio</span>
|
|
81
|
+
|
|
82
|
+
<span class="c1"># Create router with admin role requirement</span>
|
|
83
|
+
<span class="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">(</span>
|
|
84
|
+
<span class="n">dependencies</span><span class="o">=</span><span class="p">[</span><span class="n">requires_role</span><span class="p">(</span><span class="s1">'admin'</span><span class="p">)]</span>
|
|
85
|
+
<span class="p">)</span>
|
|
86
|
+
|
|
87
|
+
<div class="viewcode-block" id="McpServerPublishRequest">
|
|
88
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.mcp_publish_routes.McpServerPublishRequest">[docs]</a>
|
|
89
|
+
<span class="k">class</span><span class="w"> </span><span class="nc">McpServerPublishRequest</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
|
|
90
|
+
<span class="n">name</span><span class="p">:</span> <span class="nb">str</span>
|
|
91
|
+
<span class="n">description</span><span class="p">:</span> <span class="nb">str</span>
|
|
92
|
+
<span class="n">server_type</span><span class="p">:</span> <span class="nb">str</span> <span class="c1"># 'local' or 'remote'</span>
|
|
93
|
+
<span class="n">tools</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span>
|
|
94
|
+
<span class="c1"># Local server fields</span>
|
|
95
|
+
<span class="n">command</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
|
96
|
+
<span class="n">args</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
|
|
97
|
+
<span class="n">env</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
|
|
98
|
+
<span class="c1"># Remote server fields</span>
|
|
99
|
+
<span class="n">url</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></div>
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
<div class="viewcode-block" id="McpTestRemoteRequest">
|
|
103
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.mcp_publish_routes.McpTestRemoteRequest">[docs]</a>
|
|
104
|
+
<span class="k">class</span><span class="w"> </span><span class="nc">McpTestRemoteRequest</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
|
|
105
|
+
<span class="n">url</span><span class="p">:</span> <span class="nb">str</span>
|
|
106
|
+
<span class="n">name</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></div>
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
<div class="viewcode-block" id="McpTestLocalRequest">
|
|
110
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.mcp_publish_routes.McpTestLocalRequest">[docs]</a>
|
|
111
|
+
<span class="k">class</span><span class="w"> </span><span class="nc">McpTestLocalRequest</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
|
|
112
|
+
<span class="n">name</span><span class="p">:</span> <span class="nb">str</span>
|
|
113
|
+
<span class="n">command</span><span class="p">:</span> <span class="nb">str</span>
|
|
114
|
+
<span class="n">args</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
|
|
115
|
+
<span class="n">env</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span></div>
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
<div class="viewcode-block" id="McpCompleteOAuthRequest">
|
|
119
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.mcp_publish_routes.McpCompleteOAuthRequest">[docs]</a>
|
|
120
|
+
<span class="k">class</span><span class="w"> </span><span class="nc">McpCompleteOAuthRequest</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
|
|
121
|
+
<span class="n">server_name</span><span class="p">:</span> <span class="nb">str</span>
|
|
122
|
+
<span class="n">code</span><span class="p">:</span> <span class="nb">str</span>
|
|
123
|
+
<span class="n">state</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></div>
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
<div class="viewcode-block" id="publish_mcp_server">
|
|
127
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.mcp_publish_routes.publish_mcp_server">[docs]</a>
|
|
128
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/mcp/publish"</span><span class="p">)</span>
|
|
129
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">publish_mcp_server</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">McpServerPublishRequest</span><span class="p">):</span>
|
|
130
|
+
<span class="w"> </span><span class="sd">"""Publish an MCP server to the registry."""</span>
|
|
131
|
+
<span class="k">try</span><span class="p">:</span>
|
|
132
|
+
<span class="c1"># Validate request based on server type</span>
|
|
133
|
+
<span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">server_type</span> <span class="o">==</span> <span class="s1">'local'</span><span class="p">:</span>
|
|
134
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">request</span><span class="o">.</span><span class="n">command</span><span class="p">:</span>
|
|
135
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">"Command is required for local servers"</span><span class="p">)</span>
|
|
136
|
+
<span class="k">elif</span> <span class="n">request</span><span class="o">.</span><span class="n">server_type</span> <span class="o">==</span> <span class="s1">'remote'</span><span class="p">:</span>
|
|
137
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">request</span><span class="o">.</span><span class="n">url</span><span class="p">:</span>
|
|
138
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">"URL is required for remote servers"</span><span class="p">)</span>
|
|
139
|
+
<span class="k">else</span><span class="p">:</span>
|
|
140
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">"Server type must be 'local' or 'remote'"</span><span class="p">)</span>
|
|
141
|
+
|
|
142
|
+
<span class="c1"># Prepare registry publish data</span>
|
|
143
|
+
<span class="n">publish_data</span> <span class="o">=</span> <span class="p">{</span>
|
|
144
|
+
<span class="s2">"title"</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
145
|
+
<span class="s2">"description"</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">description</span><span class="p">,</span>
|
|
146
|
+
<span class="s2">"category"</span><span class="p">:</span> <span class="s2">"mcp_server"</span><span class="p">,</span>
|
|
147
|
+
<span class="s2">"content_type"</span><span class="p">:</span> <span class="s2">"mcp_server"</span><span class="p">,</span>
|
|
148
|
+
<span class="s2">"version"</span><span class="p">:</span> <span class="s2">"1.0.0"</span><span class="p">,</span>
|
|
149
|
+
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"mcp"</span><span class="p">,</span> <span class="s2">"server"</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">server_type</span><span class="p">],</span>
|
|
150
|
+
<span class="s2">"dependencies"</span><span class="p">:</span> <span class="p">[]</span>
|
|
151
|
+
<span class="p">}</span>
|
|
152
|
+
|
|
153
|
+
<span class="c1"># Prepare server data for registry</span>
|
|
154
|
+
<span class="n">server_data</span> <span class="o">=</span> <span class="p">{</span>
|
|
155
|
+
<span class="s2">"name"</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
156
|
+
<span class="s2">"description"</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">description</span><span class="p">,</span>
|
|
157
|
+
<span class="s2">"transport"</span><span class="p">:</span> <span class="s2">"stdio"</span> <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">server_type</span> <span class="o">==</span> <span class="s1">'local'</span> <span class="k">else</span> <span class="s2">"http"</span><span class="p">,</span>
|
|
158
|
+
<span class="s2">"auth_type"</span><span class="p">:</span> <span class="s2">"none"</span> <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">server_type</span> <span class="o">==</span> <span class="s1">'local'</span> <span class="k">else</span> <span class="s2">"auto"</span><span class="p">,</span>
|
|
159
|
+
<span class="s2">"tools"</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">tools</span><span class="p">,</span>
|
|
160
|
+
<span class="s2">"server_type"</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">server_type</span>
|
|
161
|
+
<span class="p">}</span>
|
|
162
|
+
|
|
163
|
+
<span class="c1"># Add type-specific configuration</span>
|
|
164
|
+
<span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">server_type</span> <span class="o">==</span> <span class="s1">'local'</span><span class="p">:</span>
|
|
165
|
+
<span class="n">server_data</span><span class="o">.</span><span class="n">update</span><span class="p">({</span>
|
|
166
|
+
<span class="s2">"command"</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">command</span><span class="p">,</span>
|
|
167
|
+
<span class="s2">"args"</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">args</span> <span class="ow">or</span> <span class="p">[],</span>
|
|
168
|
+
<span class="s2">"env"</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">env</span> <span class="ow">or</span> <span class="p">{}</span>
|
|
169
|
+
<span class="p">})</span>
|
|
170
|
+
<span class="k">else</span><span class="p">:</span>
|
|
171
|
+
<span class="n">server_data</span><span class="o">.</span><span class="n">update</span><span class="p">({</span>
|
|
172
|
+
<span class="s2">"url"</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">url</span>
|
|
173
|
+
<span class="p">})</span>
|
|
174
|
+
|
|
175
|
+
<span class="c1"># Prepare registry publish data</span>
|
|
176
|
+
<span class="n">publish_data</span> <span class="o">=</span> <span class="p">{</span>
|
|
177
|
+
<span class="s2">"title"</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
178
|
+
<span class="s2">"description"</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">description</span><span class="p">,</span>
|
|
179
|
+
<span class="s2">"category"</span><span class="p">:</span> <span class="s2">"mcp_server"</span><span class="p">,</span>
|
|
180
|
+
<span class="s2">"content_type"</span><span class="p">:</span> <span class="s2">"mcp_server"</span><span class="p">,</span>
|
|
181
|
+
<span class="s2">"version"</span><span class="p">:</span> <span class="s2">"1.0.0"</span><span class="p">,</span>
|
|
182
|
+
<span class="s2">"data"</span><span class="p">:</span> <span class="n">server_data</span><span class="p">,</span>
|
|
183
|
+
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"mcp"</span><span class="p">,</span> <span class="s2">"server"</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">server_type</span><span class="p">],</span>
|
|
184
|
+
<span class="s2">"dependencies"</span><span class="p">:</span> <span class="p">[]</span>
|
|
185
|
+
<span class="p">}</span>
|
|
186
|
+
|
|
187
|
+
<span class="c1"># Get registry settings</span>
|
|
188
|
+
<span class="n">registry_url</span> <span class="o">=</span> <span class="s2">"https://registry.mindroot.io"</span> <span class="c1"># Default</span>
|
|
189
|
+
<span class="n">registry_token</span> <span class="o">=</span> <span class="kc">None</span>
|
|
190
|
+
|
|
191
|
+
<span class="k">try</span><span class="p">:</span>
|
|
192
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
|
|
193
|
+
<span class="n">settings_file</span> <span class="o">=</span> <span class="s1">'data/registry_settings.json'</span>
|
|
194
|
+
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">settings_file</span><span class="p">):</span>
|
|
195
|
+
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">settings_file</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
|
196
|
+
<span class="n">settings</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
|
|
197
|
+
<span class="n">registry_url</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"registry_url"</span><span class="p">,</span> <span class="n">registry_url</span><span class="p">)</span>
|
|
198
|
+
<span class="n">registry_token</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"registry_token"</span><span class="p">)</span>
|
|
199
|
+
|
|
200
|
+
<span class="c1"># Try environment variable if no token in file</span>
|
|
201
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">registry_token</span><span class="p">:</span>
|
|
202
|
+
<span class="n">registry_token</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">'REGISTRY_TOKEN'</span><span class="p">)</span>
|
|
203
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
204
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error reading registry settings: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
205
|
+
|
|
206
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">registry_token</span><span class="p">:</span>
|
|
207
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
|
208
|
+
<span class="n">status_code</span><span class="o">=</span><span class="mi">401</span><span class="p">,</span>
|
|
209
|
+
<span class="n">detail</span><span class="o">=</span><span class="s2">"Registry authentication token not configured. Please set REGISTRY_TOKEN or configure in registry settings."</span>
|
|
210
|
+
<span class="p">)</span>
|
|
211
|
+
|
|
212
|
+
<span class="c1"># Publish to registry</span>
|
|
213
|
+
<span class="k">async</span> <span class="k">with</span> <span class="n">httpx</span><span class="o">.</span><span class="n">AsyncClient</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mf">30.0</span><span class="p">)</span> <span class="k">as</span> <span class="n">client</span><span class="p">:</span>
|
|
214
|
+
<span class="n">response</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
|
|
215
|
+
<span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">registry_url</span><span class="si">}</span><span class="s2">/publish"</span><span class="p">,</span>
|
|
216
|
+
<span class="n">headers</span><span class="o">=</span><span class="p">{</span>
|
|
217
|
+
<span class="s2">"Content-Type"</span><span class="p">:</span> <span class="s2">"application/json"</span><span class="p">,</span>
|
|
218
|
+
<span class="s2">"Authorization"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Bearer </span><span class="si">{</span><span class="n">registry_token</span><span class="si">}</span><span class="s2">"</span>
|
|
219
|
+
<span class="p">},</span>
|
|
220
|
+
<span class="n">json</span><span class="o">=</span><span class="n">publish_data</span>
|
|
221
|
+
<span class="p">)</span>
|
|
222
|
+
|
|
223
|
+
<span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">>=</span> <span class="mi">400</span><span class="p">:</span>
|
|
224
|
+
<span class="k">try</span><span class="p">:</span>
|
|
225
|
+
<span class="n">error_detail</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"detail"</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
|
|
226
|
+
<span class="k">except</span><span class="p">:</span>
|
|
227
|
+
<span class="n">error_detail</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">text</span>
|
|
228
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
|
229
|
+
<span class="n">status_code</span><span class="o">=</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="p">,</span>
|
|
230
|
+
<span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Registry publishing failed: </span><span class="si">{</span><span class="n">error_detail</span><span class="si">}</span><span class="s2">"</span>
|
|
231
|
+
<span class="p">)</span>
|
|
232
|
+
|
|
233
|
+
<span class="n">result</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
|
|
234
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
235
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
236
|
+
<span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"MCP Server '</span><span class="si">{</span><span class="n">request</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">' published successfully!"</span><span class="p">,</span>
|
|
237
|
+
<span class="s2">"data"</span><span class="p">:</span> <span class="n">result</span>
|
|
238
|
+
<span class="p">}</span>
|
|
239
|
+
|
|
240
|
+
<span class="k">except</span> <span class="n">HTTPException</span><span class="p">:</span>
|
|
241
|
+
<span class="k">raise</span>
|
|
242
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
243
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">traceback</span>
|
|
244
|
+
<span class="n">traceback</span><span class="o">.</span><span class="n">print_exc</span><span class="p">()</span>
|
|
245
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
<div class="viewcode-block" id="test_local_mcp_server">
|
|
249
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.mcp_publish_routes.test_local_mcp_server">[docs]</a>
|
|
250
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/mcp/test-local"</span><span class="p">)</span>
|
|
251
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">test_local_mcp_server</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">McpTestLocalRequest</span><span class="p">):</span>
|
|
252
|
+
<span class="w"> </span><span class="sd">"""Test connection to a local MCP server and list its capabilities."""</span>
|
|
253
|
+
<span class="k">try</span><span class="p">:</span>
|
|
254
|
+
<span class="c1"># Get the MCP manager service</span>
|
|
255
|
+
<span class="n">mcp_manager</span> <span class="o">=</span> <span class="k">await</span> <span class="n">service_manager</span><span class="o">.</span><span class="n">enhanced_mcp_manager_service</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
|
256
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">mcp_manager</span><span class="p">:</span>
|
|
257
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">"MCP manager service not available"</span><span class="p">)</span>
|
|
258
|
+
|
|
259
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"DEBUG: test_local_mcp_server: Testing local server </span><span class="si">{</span><span class="n">request</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> with command </span><span class="si">{</span><span class="n">request</span><span class="o">.</span><span class="n">command</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
260
|
+
|
|
261
|
+
<span class="c1"># Use the new testing method from MCPManager</span>
|
|
262
|
+
<span class="n">result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">test_local_server_capabilities</span><span class="p">(</span>
|
|
263
|
+
<span class="n">name</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
264
|
+
<span class="n">command</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">command</span><span class="p">,</span>
|
|
265
|
+
<span class="n">args</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">args</span><span class="p">,</span>
|
|
266
|
+
<span class="n">env</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">env</span>
|
|
267
|
+
<span class="p">)</span>
|
|
268
|
+
|
|
269
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"DEBUG: test_local_mcp_server: Result: </span><span class="si">{</span><span class="n">result</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
270
|
+
<span class="k">return</span> <span class="n">result</span>
|
|
271
|
+
|
|
272
|
+
<span class="k">except</span> <span class="n">HTTPException</span><span class="p">:</span>
|
|
273
|
+
<span class="k">raise</span>
|
|
274
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
275
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">traceback</span>
|
|
276
|
+
<span class="n">traceback</span><span class="o">.</span><span class="n">print_exc</span><span class="p">()</span>
|
|
277
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Local server test failed: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
<div class="viewcode-block" id="test_remote_mcp_server">
|
|
281
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.mcp_publish_routes.test_remote_mcp_server">[docs]</a>
|
|
282
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/mcp/test-remote"</span><span class="p">)</span>
|
|
283
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">test_remote_mcp_server</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">McpTestRemoteRequest</span><span class="p">):</span>
|
|
284
|
+
<span class="w"> </span><span class="sd">"""Test connection to a remote MCP server and list its tools using MCP manager OAuth flow."""</span>
|
|
285
|
+
<span class="k">try</span><span class="p">:</span>
|
|
286
|
+
<span class="c1"># Get the MCP manager service</span>
|
|
287
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"Testing remote MCP server connection: "</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
|
|
288
|
+
<span class="n">mcp_manager</span> <span class="o">=</span> <span class="k">await</span> <span class="n">service_manager</span><span class="o">.</span><span class="n">enhanced_mcp_manager_service</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
|
289
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">mcp_manager</span><span class="p">:</span>
|
|
290
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">"MCP manager service not available"</span><span class="p">)</span>
|
|
291
|
+
|
|
292
|
+
<span class="c1"># Generate a unique temporary server name</span>
|
|
293
|
+
<span class="n">temp_server_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"temp_publish_test_</span><span class="si">{</span><span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span><span class="p">[:</span><span class="mi">8</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span>
|
|
294
|
+
<span class="n">server_name</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">name</span> <span class="ow">or</span> <span class="n">temp_server_name</span>
|
|
295
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Using server name: </span><span class="si">{</span><span class="n">server_name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
296
|
+
|
|
297
|
+
<span class="k">try</span><span class="p">:</span>
|
|
298
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">mindroot.coreplugins.mcp_.mod</span><span class="w"> </span><span class="kn">import</span> <span class="n">MCPServer</span>
|
|
299
|
+
|
|
300
|
+
<span class="c1"># Check if server already exists (from registry install flow)</span>
|
|
301
|
+
<span class="n">existing_server</span> <span class="o">=</span> <span class="kc">None</span>
|
|
302
|
+
<span class="k">if</span> <span class="n">server_name</span> <span class="ow">in</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">servers</span><span class="p">:</span>
|
|
303
|
+
<span class="n">existing_server</span> <span class="o">=</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">servers</span><span class="p">[</span><span class="n">server_name</span><span class="p">]</span>
|
|
304
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Found existing server configuration for </span><span class="si">{</span><span class="n">server_name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
305
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Existing server auth_type: </span><span class="si">{</span><span class="n">existing_server</span><span class="o">.</span><span class="n">auth_type</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
306
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Existing server client_id: </span><span class="si">{</span><span class="n">existing_server</span><span class="o">.</span><span class="n">client_id</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
307
|
+
|
|
308
|
+
<span class="k">if</span> <span class="n">existing_server</span><span class="p">:</span>
|
|
309
|
+
<span class="c1"># Use existing server configuration (registry install flow)</span>
|
|
310
|
+
<span class="n">server_to_test</span> <span class="o">=</span> <span class="n">existing_server</span>
|
|
311
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Using existing server config with auth_type=</span><span class="si">{</span><span class="n">server_to_test</span><span class="o">.</span><span class="n">auth_type</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
312
|
+
<span class="k">else</span><span class="p">:</span>
|
|
313
|
+
<span class="c1"># Create temporary server configuration for testing (publish flow)</span>
|
|
314
|
+
<span class="n">temp_server</span> <span class="o">=</span> <span class="n">MCPServer</span><span class="p">(</span>
|
|
315
|
+
<span class="n">name</span><span class="o">=</span><span class="n">server_name</span><span class="p">,</span>
|
|
316
|
+
<span class="n">description</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Temporary server for testing </span><span class="si">{</span><span class="n">request</span><span class="o">.</span><span class="n">url</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
|
|
317
|
+
<span class="n">command</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="c1"># Not used for remote servers</span>
|
|
318
|
+
<span class="n">transport</span><span class="o">=</span><span class="s2">"http"</span><span class="p">,</span>
|
|
319
|
+
<span class="n">url</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">url</span><span class="p">,</span>
|
|
320
|
+
<span class="n">auth_type</span><span class="o">=</span><span class="s2">"oauth2"</span> <span class="c1"># Assume OAuth2 for remote servers</span>
|
|
321
|
+
<span class="p">)</span>
|
|
322
|
+
|
|
323
|
+
<span class="c1"># Add temporary server to MCP manager</span>
|
|
324
|
+
<span class="n">mcp_manager</span><span class="o">.</span><span class="n">add_server</span><span class="p">(</span><span class="n">server_name</span><span class="p">,</span> <span class="n">temp_server</span><span class="p">)</span>
|
|
325
|
+
<span class="n">server_to_test</span> <span class="o">=</span> <span class="n">temp_server</span>
|
|
326
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Created temporary server config for publish flow"</span><span class="p">)</span>
|
|
327
|
+
|
|
328
|
+
<span class="c1"># Note: OAuth client_id will be discovered during the OAuth flow</span>
|
|
329
|
+
|
|
330
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"Connecting to remote MCP server: "</span><span class="p">,</span> <span class="n">server_name</span><span class="p">)</span>
|
|
331
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Server URL: </span><span class="si">{</span><span class="n">request</span><span class="o">.</span><span class="n">url</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
332
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"MCP manager is: "</span><span class="p">,</span> <span class="n">mcp_manager</span><span class="p">)</span>
|
|
333
|
+
<span class="n">mcp_manager</span> <span class="o">=</span> <span class="k">await</span> <span class="n">service_manager</span><span class="o">.</span><span class="n">enhanced_mcp_manager_service</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
|
334
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"MCP manager after re-fetch: "</span><span class="p">,</span> <span class="n">mcp_manager</span><span class="p">)</span>
|
|
335
|
+
|
|
336
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"Running sanity test"</span><span class="p">)</span>
|
|
337
|
+
<span class="k">await</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">sanity_test</span><span class="p">()</span>
|
|
338
|
+
<span class="c1"># Try to connect (this will handle OAuth flow if needed)</span>
|
|
339
|
+
<span class="n">success</span> <span class="o">=</span> <span class="k">await</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">connect_server</span><span class="p">(</span><span class="n">server_name</span><span class="p">)</span>
|
|
340
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"Connection result: "</span><span class="p">,</span> <span class="n">success</span><span class="p">)</span>
|
|
341
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">success</span><span class="p">:</span>
|
|
342
|
+
<span class="c1"># Check if OAuth flow is pending</span>
|
|
343
|
+
<span class="n">oauth_status</span> <span class="o">=</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">get_oauth_status</span><span class="p">(</span><span class="n">server_name</span><span class="p">)</span>
|
|
344
|
+
|
|
345
|
+
<span class="k">if</span> <span class="s2">"oauth_flow"</span> <span class="ow">in</span> <span class="n">oauth_status</span> <span class="ow">and</span> <span class="n">oauth_status</span><span class="p">[</span><span class="s2">"oauth_flow"</span><span class="p">][</span><span class="s2">"status"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"awaiting_authorization"</span><span class="p">:</span>
|
|
346
|
+
<span class="c1"># OAuth flow is pending - return the auth URL for frontend to handle</span>
|
|
347
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
348
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
349
|
+
<span class="s2">"requires_oauth"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
350
|
+
<span class="s2">"auth_url"</span><span class="p">:</span> <span class="n">oauth_status</span><span class="p">[</span><span class="s2">"oauth_flow"</span><span class="p">][</span><span class="s2">"auth_url"</span><span class="p">],</span>
|
|
351
|
+
<span class="s2">"flow_id"</span><span class="p">:</span> <span class="n">oauth_status</span><span class="p">[</span><span class="s2">"oauth_flow"</span><span class="p">][</span><span class="s2">"flow_id"</span><span class="p">],</span>
|
|
352
|
+
<span class="s2">"server_name"</span><span class="p">:</span> <span class="n">server_name</span><span class="p">,</span>
|
|
353
|
+
<span class="s2">"message"</span><span class="p">:</span> <span class="s2">"OAuth authorization required. Please complete the authorization flow."</span>
|
|
354
|
+
<span class="p">}</span>
|
|
355
|
+
<span class="k">else</span><span class="p">:</span>
|
|
356
|
+
<span class="c1"># Try without OAuth first to see if it's a 401</span>
|
|
357
|
+
<span class="k">try</span><span class="p">:</span>
|
|
358
|
+
<span class="k">await</span> <span class="n">test_direct_connection</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
|
|
359
|
+
<span class="k">except</span> <span class="n">HTTPException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
360
|
+
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">401</span><span class="p">:</span>
|
|
361
|
+
<span class="c1"># Server requires auth - try OAuth connection</span>
|
|
362
|
+
<span class="n">oauth_success</span> <span class="o">=</span> <span class="k">await</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">connect_oauth_server</span><span class="p">(</span><span class="n">server_name</span><span class="p">)</span>
|
|
363
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">oauth_success</span><span class="p">:</span>
|
|
364
|
+
<span class="n">oauth_status</span> <span class="o">=</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">get_oauth_status</span><span class="p">(</span><span class="n">server_name</span><span class="p">)</span>
|
|
365
|
+
<span class="k">if</span> <span class="s2">"oauth_flow"</span> <span class="ow">in</span> <span class="n">oauth_status</span><span class="p">:</span>
|
|
366
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
367
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
368
|
+
<span class="s2">"requires_oauth"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
369
|
+
<span class="s2">"auth_url"</span><span class="p">:</span> <span class="n">oauth_status</span><span class="p">[</span><span class="s2">"oauth_flow"</span><span class="p">][</span><span class="s2">"auth_url"</span><span class="p">],</span>
|
|
370
|
+
<span class="s2">"flow_id"</span><span class="p">:</span> <span class="n">oauth_status</span><span class="p">[</span><span class="s2">"oauth_flow"</span><span class="p">][</span><span class="s2">"flow_id"</span><span class="p">],</span>
|
|
371
|
+
<span class="s2">"server_name"</span><span class="p">:</span> <span class="n">server_name</span><span class="p">,</span>
|
|
372
|
+
<span class="s2">"message"</span><span class="p">:</span> <span class="s2">"OAuth authorization required. Please complete the authorization flow."</span>
|
|
373
|
+
<span class="p">}</span>
|
|
374
|
+
<span class="k">raise</span> <span class="n">e</span>
|
|
375
|
+
|
|
376
|
+
<span class="c1"># Get server capabilities (tools, resources, prompts)</span>
|
|
377
|
+
<span class="n">server</span> <span class="o">=</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">servers</span><span class="p">[</span><span class="n">server_name</span><span class="p">]</span>
|
|
378
|
+
<span class="n">tools</span> <span class="o">=</span> <span class="n">server</span><span class="o">.</span><span class="n">capabilities</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"tools"</span><span class="p">,</span> <span class="p">[])</span>
|
|
379
|
+
<span class="n">resources</span> <span class="o">=</span> <span class="n">server</span><span class="o">.</span><span class="n">capabilities</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"resources"</span><span class="p">,</span> <span class="p">[])</span>
|
|
380
|
+
<span class="n">prompts</span> <span class="o">=</span> <span class="n">server</span><span class="o">.</span><span class="n">capabilities</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prompts"</span><span class="p">,</span> <span class="p">[])</span>
|
|
381
|
+
|
|
382
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
383
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
384
|
+
<span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Successfully connected to remote MCP server. Found </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">tools</span><span class="p">)</span><span class="si">}</span><span class="s2"> tools, </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">resources</span><span class="p">)</span><span class="si">}</span><span class="s2"> resources, </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">prompts</span><span class="p">)</span><span class="si">}</span><span class="s2"> prompts."</span><span class="p">,</span>
|
|
385
|
+
<span class="s2">"tools"</span><span class="p">:</span> <span class="n">tools</span><span class="p">,</span>
|
|
386
|
+
<span class="s2">"resources"</span><span class="p">:</span> <span class="n">resources</span><span class="p">,</span>
|
|
387
|
+
<span class="s2">"prompts"</span><span class="p">:</span> <span class="n">prompts</span><span class="p">,</span>
|
|
388
|
+
<span class="s2">"server_name"</span><span class="p">:</span> <span class="n">server_name</span>
|
|
389
|
+
<span class="p">}</span>
|
|
390
|
+
|
|
391
|
+
<span class="k">finally</span><span class="p">:</span>
|
|
392
|
+
<span class="c1"># Clean up temporary server</span>
|
|
393
|
+
<span class="k">try</span><span class="p">:</span>
|
|
394
|
+
<span class="c1"># Only clean up if we created a temporary server (not existing one)</span>
|
|
395
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">existing_server</span><span class="p">:</span>
|
|
396
|
+
<span class="k">await</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">disconnect_server</span><span class="p">(</span><span class="n">server_name</span><span class="p">)</span>
|
|
397
|
+
<span class="n">mcp_manager</span><span class="o">.</span><span class="n">remove_server</span><span class="p">(</span><span class="n">server_name</span><span class="p">)</span>
|
|
398
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Cleaned up temporary server </span><span class="si">{</span><span class="n">server_name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
399
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">cleanup_error</span><span class="p">:</span>
|
|
400
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error cleaning up temporary server </span><span class="si">{</span><span class="n">server_name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">cleanup_error</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
401
|
+
|
|
402
|
+
<span class="k">except</span> <span class="n">HTTPException</span><span class="p">:</span>
|
|
403
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"HTTPException occurred during MCP server test."</span><span class="p">)</span>
|
|
404
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">traceback</span>
|
|
405
|
+
<span class="n">traceback</span><span class="o">.</span><span class="n">print_exc</span><span class="p">()</span>
|
|
406
|
+
<span class="k">raise</span>
|
|
407
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
408
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">traceback</span>
|
|
409
|
+
<span class="n">traceback</span><span class="o">.</span><span class="n">print_exc</span><span class="p">()</span>
|
|
410
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Connection test failed: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
<div class="viewcode-block" id="test_direct_connection">
|
|
414
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.mcp_publish_routes.test_direct_connection">[docs]</a>
|
|
415
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">test_direct_connection</span><span class="p">(</span><span class="n">url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
|
|
416
|
+
<span class="w"> </span><span class="sd">"""Test direct connection to MCP server without OAuth to check if auth is required."""</span>
|
|
417
|
+
<span class="n">headers</span> <span class="o">=</span> <span class="p">{</span>
|
|
418
|
+
<span class="s2">"Content-Type"</span><span class="p">:</span> <span class="s2">"application/json"</span>
|
|
419
|
+
<span class="p">}</span>
|
|
420
|
+
|
|
421
|
+
<span class="c1"># Initialize connection</span>
|
|
422
|
+
<span class="n">init_request</span> <span class="o">=</span> <span class="p">{</span>
|
|
423
|
+
<span class="s2">"jsonrpc"</span><span class="p">:</span> <span class="s2">"2.0"</span><span class="p">,</span>
|
|
424
|
+
<span class="s2">"id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
|
425
|
+
<span class="s2">"method"</span><span class="p">:</span> <span class="s2">"initialize"</span><span class="p">,</span>
|
|
426
|
+
<span class="s2">"params"</span><span class="p">:</span> <span class="p">{</span>
|
|
427
|
+
<span class="s2">"protocolVersion"</span><span class="p">:</span> <span class="s2">"2024-11-05"</span><span class="p">,</span>
|
|
428
|
+
<span class="s2">"capabilities"</span><span class="p">:</span> <span class="p">{</span>
|
|
429
|
+
<span class="s2">"tools"</span><span class="p">:</span> <span class="p">{}</span>
|
|
430
|
+
<span class="p">},</span>
|
|
431
|
+
<span class="s2">"clientInfo"</span><span class="p">:</span> <span class="p">{</span>
|
|
432
|
+
<span class="s2">"name"</span><span class="p">:</span> <span class="s2">"mindroot-tester"</span><span class="p">,</span>
|
|
433
|
+
<span class="s2">"version"</span><span class="p">:</span> <span class="s2">"1.0.0"</span>
|
|
434
|
+
<span class="p">}</span>
|
|
435
|
+
<span class="p">}</span>
|
|
436
|
+
<span class="p">}</span>
|
|
437
|
+
|
|
438
|
+
<span class="k">async</span> <span class="k">with</span> <span class="n">httpx</span><span class="o">.</span><span class="n">AsyncClient</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mf">10.0</span><span class="p">)</span> <span class="k">as</span> <span class="n">client</span><span class="p">:</span>
|
|
439
|
+
<span class="n">init_response</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">init_request</span><span class="p">)</span>
|
|
440
|
+
|
|
441
|
+
<span class="k">if</span> <span class="n">init_response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">401</span><span class="p">:</span>
|
|
442
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">401</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">"Server requires authentication"</span><span class="p">)</span>
|
|
443
|
+
|
|
444
|
+
<span class="k">if</span> <span class="n">init_response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">!=</span> <span class="mi">200</span><span class="p">:</span>
|
|
445
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
|
446
|
+
<span class="n">status_code</span><span class="o">=</span><span class="n">init_response</span><span class="o">.</span><span class="n">status_code</span><span class="p">,</span>
|
|
447
|
+
<span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Failed to initialize: </span><span class="si">{</span><span class="n">init_response</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">"</span>
|
|
448
|
+
<span class="p">)</span>
|
|
449
|
+
|
|
450
|
+
<span class="c1"># List tools</span>
|
|
451
|
+
<span class="n">tools_request</span> <span class="o">=</span> <span class="p">{</span>
|
|
452
|
+
<span class="s2">"jsonrpc"</span><span class="p">:</span> <span class="s2">"2.0"</span><span class="p">,</span>
|
|
453
|
+
<span class="s2">"id"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
|
|
454
|
+
<span class="s2">"method"</span><span class="p">:</span> <span class="s2">"tools/list"</span><span class="p">,</span>
|
|
455
|
+
<span class="s2">"params"</span><span class="p">:</span> <span class="p">{}</span>
|
|
456
|
+
<span class="p">}</span>
|
|
457
|
+
|
|
458
|
+
<span class="n">tools_response</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">tools_request</span><span class="p">)</span>
|
|
459
|
+
|
|
460
|
+
<span class="k">if</span> <span class="n">tools_response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">!=</span> <span class="mi">200</span><span class="p">:</span>
|
|
461
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
|
462
|
+
<span class="n">status_code</span><span class="o">=</span><span class="n">tools_response</span><span class="o">.</span><span class="n">status_code</span><span class="p">,</span>
|
|
463
|
+
<span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Failed to list tools: </span><span class="si">{</span><span class="n">tools_response</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">"</span>
|
|
464
|
+
<span class="p">)</span>
|
|
465
|
+
|
|
466
|
+
<span class="n">tools_data</span> <span class="o">=</span> <span class="n">tools_response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
|
|
467
|
+
<span class="n">tools</span> <span class="o">=</span> <span class="n">tools_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"result"</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"tools"</span><span class="p">,</span> <span class="p">[])</span>
|
|
468
|
+
<span class="k">return</span> <span class="n">tools</span></div>
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
<div class="viewcode-block" id="complete_oauth_flow">
|
|
472
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.mcp_publish_routes.complete_oauth_flow">[docs]</a>
|
|
473
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/mcp/complete-oauth"</span><span class="p">)</span>
|
|
474
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">complete_oauth_flow</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">McpCompleteOAuthRequest</span><span class="p">):</span>
|
|
475
|
+
<span class="w"> </span><span class="sd">"""Complete OAuth flow for MCP server testing."""</span>
|
|
476
|
+
<span class="k">try</span><span class="p">:</span>
|
|
477
|
+
<span class="c1"># Get the enhanced MCP manager service</span>
|
|
478
|
+
<span class="n">mcp_manager</span> <span class="o">=</span> <span class="k">await</span> <span class="n">service_manager</span><span class="o">.</span><span class="n">enhanced_mcp_manager_service</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
|
479
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">mcp_manager</span><span class="p">:</span>
|
|
480
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">"MCP manager service not available"</span><span class="p">)</span>
|
|
481
|
+
|
|
482
|
+
<span class="c1"># Complete the OAuth flow</span>
|
|
483
|
+
<span class="n">success</span> <span class="o">=</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">complete_oauth_flow</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">server_name</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">code</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="p">)</span>
|
|
484
|
+
|
|
485
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">success</span><span class="p">:</span>
|
|
486
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">"Failed to complete OAuth flow"</span><span class="p">)</span>
|
|
487
|
+
|
|
488
|
+
<span class="c1"># Wait a bit longer for the background task to complete the connection</span>
|
|
489
|
+
<span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">6</span><span class="p">)</span>
|
|
490
|
+
|
|
491
|
+
<span class="c1"># Check if server is now connected</span>
|
|
492
|
+
<span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">server_name</span> <span class="ow">in</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">servers</span><span class="p">:</span>
|
|
493
|
+
<span class="n">server</span> <span class="o">=</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">servers</span><span class="p">[</span><span class="n">request</span><span class="o">.</span><span class="n">server_name</span><span class="p">]</span>
|
|
494
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"DEBUG: complete-oauth: server entry found for '</span><span class="si">{</span><span class="n">request</span><span class="o">.</span><span class="n">server_name</span><span class="si">}</span><span class="s2">', status=</span><span class="si">{</span><span class="n">server</span><span class="o">.</span><span class="n">status</span><span class="si">}</span><span class="s2">, tools=</span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">server</span><span class="o">.</span><span class="n">capabilities</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'tools'</span><span class="p">,</span><span class="w"> </span><span class="p">[]))</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
495
|
+
<span class="k">if</span> <span class="n">server</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="s2">"connected"</span><span class="p">:</span>
|
|
496
|
+
<span class="n">tools</span> <span class="o">=</span> <span class="n">server</span><span class="o">.</span><span class="n">capabilities</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"tools"</span><span class="p">,</span> <span class="p">[])</span>
|
|
497
|
+
<span class="n">resources</span> <span class="o">=</span> <span class="n">server</span><span class="o">.</span><span class="n">capabilities</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"resources"</span><span class="p">,</span> <span class="p">[])</span>
|
|
498
|
+
<span class="n">prompts</span> <span class="o">=</span> <span class="n">server</span><span class="o">.</span><span class="n">capabilities</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prompts"</span><span class="p">,</span> <span class="p">[])</span>
|
|
499
|
+
|
|
500
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
501
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
502
|
+
<span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"OAuth completed successfully. Found </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">tools</span><span class="p">)</span><span class="si">}</span><span class="s2"> tools, </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">resources</span><span class="p">)</span><span class="si">}</span><span class="s2"> resources, </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">prompts</span><span class="p">)</span><span class="si">}</span><span class="s2"> prompts."</span><span class="p">,</span>
|
|
503
|
+
<span class="s2">"tools"</span><span class="p">:</span> <span class="n">tools</span><span class="p">,</span>
|
|
504
|
+
<span class="s2">"resources"</span><span class="p">:</span> <span class="n">resources</span><span class="p">,</span>
|
|
505
|
+
<span class="s2">"prompts"</span><span class="p">:</span> <span class="n">prompts</span>
|
|
506
|
+
<span class="p">}</span>
|
|
507
|
+
|
|
508
|
+
<span class="c1"># Not yet connected; surface pending status so frontend can poll</span>
|
|
509
|
+
<span class="k">try</span><span class="p">:</span>
|
|
510
|
+
<span class="n">status</span> <span class="o">=</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">get_oauth_status</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">server_name</span><span class="p">)</span>
|
|
511
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"DEBUG: complete-oauth: oauth-status for '</span><span class="si">{</span><span class="n">request</span><span class="o">.</span><span class="n">server_name</span><span class="si">}</span><span class="s2">' -> </span><span class="si">{</span><span class="n">status</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
512
|
+
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
513
|
+
<span class="n">status</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"pending"</span><span class="p">}</span>
|
|
514
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
515
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
516
|
+
<span class="s2">"message"</span><span class="p">:</span> <span class="s2">"OAuth flow completed, but server connection is still pending."</span><span class="p">,</span>
|
|
517
|
+
<span class="s2">"status"</span><span class="p">:</span> <span class="n">status</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"status"</span><span class="p">,</span> <span class="s2">"pending"</span><span class="p">)</span>
|
|
518
|
+
<span class="p">}</span>
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
522
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
523
|
+
<span class="s2">"message"</span><span class="p">:</span> <span class="s2">"OAuth flow completed, but server connection is still pending."</span><span class="p">,</span>
|
|
524
|
+
<span class="s2">"status"</span><span class="p">:</span> <span class="s2">"pending"</span>
|
|
525
|
+
<span class="p">}</span>
|
|
526
|
+
|
|
527
|
+
<span class="k">except</span> <span class="n">HTTPException</span><span class="p">:</span>
|
|
528
|
+
<span class="k">raise</span>
|
|
529
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
530
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">traceback</span>
|
|
531
|
+
<span class="n">traceback</span><span class="o">.</span><span class="n">print_exc</span><span class="p">()</span>
|
|
532
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"OAuth completion failed: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
<div class="viewcode-block" id="get_oauth_status">
|
|
536
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.mcp_publish_routes.get_oauth_status">[docs]</a>
|
|
537
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/mcp/oauth-status/</span><span class="si">{server_name}</span><span class="s2">"</span><span class="p">)</span>
|
|
538
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_oauth_status</span><span class="p">(</span><span class="n">server_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
|
|
539
|
+
<span class="w"> </span><span class="sd">"""Get OAuth flow status for a server."""</span>
|
|
540
|
+
<span class="k">try</span><span class="p">:</span>
|
|
541
|
+
<span class="c1"># Get the enhanced MCP manager service</span>
|
|
542
|
+
<span class="n">mcp_manager</span> <span class="o">=</span> <span class="k">await</span> <span class="n">service_manager</span><span class="o">.</span><span class="n">enhanced_mcp_manager_service</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
|
543
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">mcp_manager</span><span class="p">:</span>
|
|
544
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s2">"MCP manager service not available"</span><span class="p">)</span>
|
|
545
|
+
|
|
546
|
+
<span class="n">status</span> <span class="o">=</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">get_oauth_status</span><span class="p">(</span><span class="n">server_name</span><span class="p">)</span>
|
|
547
|
+
<span class="k">return</span> <span class="n">status</span>
|
|
548
|
+
|
|
549
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
550
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Failed to get OAuth status: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
|
551
|
+
|
|
552
|
+
</pre></div>
|
|
553
|
+
|
|
554
|
+
</div>
|
|
555
|
+
</div>
|
|
556
|
+
<footer>
|
|
557
|
+
|
|
558
|
+
<hr/>
|
|
559
|
+
|
|
560
|
+
<div role="contentinfo">
|
|
561
|
+
<p>© Copyright 2025, Jason Livesay.</p>
|
|
562
|
+
</div>
|
|
563
|
+
|
|
564
|
+
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
565
|
+
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
566
|
+
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
567
|
+
|
|
568
|
+
|
|
569
|
+
</footer>
|
|
570
|
+
</div>
|
|
571
|
+
</div>
|
|
572
|
+
</section>
|
|
573
|
+
</div>
|
|
574
|
+
<script>
|
|
575
|
+
jQuery(function () {
|
|
576
|
+
SphinxRtdTheme.Navigation.enable(true);
|
|
577
|
+
});
|
|
578
|
+
</script>
|
|
579
|
+
|
|
580
|
+
</body>
|
|
581
|
+
</html>
|