mindroot 9.10.0__py3-none-any.whl → 9.12.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/__init__.py +1 -0
- mindroot/coreplugins/__init__.py +2 -0
- 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/plugins/default_plugin_manifest.json +1 -1
- mindroot/server.py +10 -1
- {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/METADATA +1 -1
- {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/RECORD +418 -10
- {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/WHEEL +0 -0
- {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/entry_points.txt +0 -0
- {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/licenses/LICENSE +0 -0
- {mindroot-9.10.0.dist-info → mindroot-9.12.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,510 @@
|
|
|
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.mcp_.mod — 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
|
+
<!-- Local TOC -->
|
|
43
|
+
<div class="local-toc"></div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
</nav>
|
|
47
|
+
|
|
48
|
+
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #343131" >
|
|
49
|
+
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
50
|
+
<a href="../../../../index.html">MindRoot</a>
|
|
51
|
+
</nav>
|
|
52
|
+
|
|
53
|
+
<div class="wy-nav-content">
|
|
54
|
+
<div class="rst-content">
|
|
55
|
+
<div role="navigation" aria-label="Page navigation">
|
|
56
|
+
<ul class="wy-breadcrumbs">
|
|
57
|
+
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
|
58
|
+
<li class="breadcrumb-item"><a href="../../../index.html">Module code</a></li>
|
|
59
|
+
<li class="breadcrumb-item active">mindroot.coreplugins.mcp_.mod</li>
|
|
60
|
+
<li class="wy-breadcrumbs-aside">
|
|
61
|
+
</li>
|
|
62
|
+
</ul>
|
|
63
|
+
<hr/>
|
|
64
|
+
</div>
|
|
65
|
+
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|
66
|
+
<div itemprop="articleBody">
|
|
67
|
+
|
|
68
|
+
<h1>Source code for mindroot.coreplugins.mcp_.mod</h1><div class="highlight"><pre>
|
|
69
|
+
<span></span><span class="kn">import</span><span class="w"> </span><span class="nn">asyncio</span>
|
|
70
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
|
|
71
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">json</span>
|
|
72
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">urllib.parse</span><span class="w"> </span><span class="kn">import</span> <span class="n">parse_qs</span><span class="p">,</span> <span class="n">urlparse</span>
|
|
73
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">subprocess</span>
|
|
74
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
|
|
75
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">uuid</span>
|
|
76
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">datetime</span><span class="w"> </span><span class="kn">import</span> <span class="n">datetime</span>
|
|
77
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
|
|
78
|
+
<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">Dict</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Any</span>
|
|
79
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">contextlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">AsyncExitStack</span>
|
|
80
|
+
|
|
81
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
|
|
82
|
+
<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>
|
|
83
|
+
|
|
84
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">lib.providers.commands</span><span class="w"> </span><span class="kn">import</span> <span class="n">command</span>
|
|
85
|
+
<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</span>
|
|
86
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">.mcp_manager</span><span class="w"> </span><span class="kn">import</span> <span class="n">MCPManager</span><span class="p">,</span> <span class="n">MCPServer</span>
|
|
87
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">.server_installer</span><span class="w"> </span><span class="kn">import</span> <span class="n">MCPServerInstaller</span>
|
|
88
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">.dynamic_commands</span><span class="w"> </span><span class="kn">import</span> <span class="n">MCPDynamicCommands</span>
|
|
89
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">.oauth_storage</span><span class="w"> </span><span class="kn">import</span> <span class="n">MCPTokenStorage</span>
|
|
90
|
+
|
|
91
|
+
<span class="k">try</span><span class="p">:</span>
|
|
92
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">mcp</span><span class="w"> </span><span class="kn">import</span> <span class="n">ClientSession</span><span class="p">,</span> <span class="n">StdioServerParameters</span>
|
|
93
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">mcp.client.stdio</span><span class="w"> </span><span class="kn">import</span> <span class="n">stdio_client</span>
|
|
94
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">mcp.client.streamable_http</span><span class="w"> </span><span class="kn">import</span> <span class="n">streamablehttp_client</span>
|
|
95
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">mcp.client.sse</span><span class="w"> </span><span class="kn">import</span> <span class="n">sse_client</span>
|
|
96
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">mcp.client.auth</span><span class="w"> </span><span class="kn">import</span> <span class="n">OAuthClientProvider</span><span class="p">,</span> <span class="n">TokenStorage</span>
|
|
97
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">mcp.shared.auth</span><span class="w"> </span><span class="kn">import</span> <span class="n">OAuthClientMetadata</span><span class="p">,</span> <span class="n">OAuthToken</span><span class="p">,</span> <span class="n">OAuthClientInformationFull</span>
|
|
98
|
+
<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">AnyUrl</span>
|
|
99
|
+
<span class="n">MCP_AVAILABLE</span> <span class="o">=</span> <span class="kc">True</span>
|
|
100
|
+
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
|
|
101
|
+
<span class="c1"># MCP not installed yet</span>
|
|
102
|
+
<span class="n">ClientSession</span> <span class="o">=</span> <span class="kc">None</span>
|
|
103
|
+
<span class="n">StdioServerParameters</span> <span class="o">=</span> <span class="kc">None</span>
|
|
104
|
+
<span class="n">stdio_client</span> <span class="o">=</span> <span class="kc">None</span>
|
|
105
|
+
<span class="n">streamablehttp_client</span> <span class="o">=</span> <span class="kc">None</span>
|
|
106
|
+
<span class="n">sse_client</span> <span class="o">=</span> <span class="kc">None</span>
|
|
107
|
+
<span class="n">OAuthClientProvider</span> <span class="o">=</span> <span class="kc">None</span>
|
|
108
|
+
<span class="n">OAuthClientMetadata</span> <span class="o">=</span> <span class="kc">None</span>
|
|
109
|
+
<span class="n">OAuthToken</span> <span class="o">=</span> <span class="kc">None</span>
|
|
110
|
+
<span class="n">OAuthClientInformationFull</span> <span class="o">=</span> <span class="kc">None</span>
|
|
111
|
+
<span class="n">AnyUrl</span> <span class="o">=</span> <span class="kc">None</span>
|
|
112
|
+
<span class="n">MCP_AVAILABLE</span> <span class="o">=</span> <span class="kc">False</span>
|
|
113
|
+
|
|
114
|
+
<div class="viewcode-block" id="handle_redirect">
|
|
115
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.handle_redirect">[docs]</a>
|
|
116
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">handle_redirect</span><span class="p">(</span><span class="n">auth_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
117
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Visit: </span><span class="si">{</span><span class="n">auth_url</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
<div class="viewcode-block" id="handle_callback">
|
|
122
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.handle_callback">[docs]</a>
|
|
123
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">handle_callback</span><span class="p">()</span> <span class="o">-></span> <span class="nb">tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">]:</span>
|
|
124
|
+
<span class="n">callback_url</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s2">"Paste callback URL: "</span><span class="p">)</span>
|
|
125
|
+
<span class="n">params</span> <span class="o">=</span> <span class="n">parse_qs</span><span class="p">(</span><span class="n">urlparse</span><span class="p">(</span><span class="n">callback_url</span><span class="p">)</span><span class="o">.</span><span class="n">query</span><span class="p">)</span>
|
|
126
|
+
<span class="k">return</span> <span class="n">params</span><span class="p">[</span><span class="s2">"code"</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">params</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"state"</span><span class="p">,</span> <span class="p">[</span><span class="kc">None</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span></div>
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
<span class="c1"># Global MCP manager instance</span>
|
|
131
|
+
<span class="n">mcp_manager</span> <span class="o">=</span> <span class="n">MCPManager</span><span class="p">()</span>
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
<div class="viewcode-block" id="mcp_manager_service">
|
|
135
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.mcp_manager_service">[docs]</a>
|
|
136
|
+
<span class="nd">@service</span><span class="p">()</span>
|
|
137
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">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>
|
|
138
|
+
<span class="w"> </span><span class="sd">"""Service to access the MCP manager"""</span>
|
|
139
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"returning mcp_manager"</span><span class="p">)</span>
|
|
140
|
+
<span class="k">return</span> <span class="n">mcp_manager</span></div>
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
<div class="viewcode-block" id="enhanced_mcp_manager_service">
|
|
144
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.enhanced_mcp_manager_service">[docs]</a>
|
|
145
|
+
<span class="nd">@service</span><span class="p">()</span>
|
|
146
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">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>
|
|
147
|
+
<span class="w"> </span><span class="sd">"""Service to access enhanced MCP manager (same as mcp_manager_service now)"""</span>
|
|
148
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"returning enhanced MCP manager service"</span><span class="p">)</span>
|
|
149
|
+
<span class="k">return</span> <span class="n">mcp_manager</span></div>
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
<div class="viewcode-block" id="mcp_connect">
|
|
154
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.mcp_connect">[docs]</a>
|
|
155
|
+
<span class="nd">@command</span><span class="p">()</span>
|
|
156
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">mcp_connect</span><span class="p">(</span><span class="n">server_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
157
|
+
<span class="w"> </span><span class="sd">"""Connect to an MCP server</span>
|
|
158
|
+
<span class="sd"> </span>
|
|
159
|
+
<span class="sd"> Example:</span>
|
|
160
|
+
<span class="sd"> { "mcp_connect": { "server_name": "filesystem" } }</span>
|
|
161
|
+
<span class="sd"> """</span>
|
|
162
|
+
<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>
|
|
163
|
+
<span class="k">if</span> <span class="n">success</span><span class="p">:</span>
|
|
164
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Successfully connected to MCP server: </span><span class="si">{</span><span class="n">server_name</span><span class="si">}</span><span class="s2">"</span>
|
|
165
|
+
<span class="k">else</span><span class="p">:</span>
|
|
166
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Failed to connect to MCP server: </span><span class="si">{</span><span class="n">server_name</span><span class="si">}</span><span class="s2">"</span></div>
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
<div class="viewcode-block" id="mcp_disconnect">
|
|
171
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.mcp_disconnect">[docs]</a>
|
|
172
|
+
<span class="nd">@command</span><span class="p">()</span>
|
|
173
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">mcp_disconnect</span><span class="p">(</span><span class="n">server_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
174
|
+
<span class="w"> </span><span class="sd">"""Disconnect from an MCP server</span>
|
|
175
|
+
<span class="sd"> </span>
|
|
176
|
+
<span class="sd"> Example:</span>
|
|
177
|
+
<span class="sd"> { "mcp_disconnect": { "server_name": "filesystem" } }</span>
|
|
178
|
+
<span class="sd"> """</span>
|
|
179
|
+
<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">disconnect_server</span><span class="p">(</span><span class="n">server_name</span><span class="p">)</span>
|
|
180
|
+
<span class="k">if</span> <span class="n">success</span><span class="p">:</span>
|
|
181
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Successfully disconnected from MCP server: </span><span class="si">{</span><span class="n">server_name</span><span class="si">}</span><span class="s2">"</span>
|
|
182
|
+
<span class="k">else</span><span class="p">:</span>
|
|
183
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Failed to disconnect from MCP server: </span><span class="si">{</span><span class="n">server_name</span><span class="si">}</span><span class="s2">"</span></div>
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
<div class="viewcode-block" id="mcp_list_servers">
|
|
188
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.mcp_list_servers">[docs]</a>
|
|
189
|
+
<span class="nd">@command</span><span class="p">()</span>
|
|
190
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">mcp_list_servers</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
191
|
+
<span class="w"> </span><span class="sd">"""List all configured MCP servers</span>
|
|
192
|
+
<span class="sd"> </span>
|
|
193
|
+
<span class="sd"> Example:</span>
|
|
194
|
+
<span class="sd"> { "mcp_list_servers": {} }</span>
|
|
195
|
+
<span class="sd"> """</span>
|
|
196
|
+
<span class="n">servers</span> <span class="o">=</span> <span class="p">[]</span>
|
|
197
|
+
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">server</span> <span class="ow">in</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">servers</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
198
|
+
<span class="n">servers</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
199
|
+
<span class="s2">"name"</span><span class="p">:</span> <span class="n">name</span><span class="p">,</span>
|
|
200
|
+
<span class="s2">"description"</span><span class="p">:</span> <span class="n">server</span><span class="o">.</span><span class="n">description</span><span class="p">,</span>
|
|
201
|
+
<span class="s2">"status"</span><span class="p">:</span> <span class="n">server</span><span class="o">.</span><span class="n">status</span><span class="p">,</span>
|
|
202
|
+
<span class="s2">"transport"</span><span class="p">:</span> <span class="n">server</span><span class="o">.</span><span class="n">transport</span><span class="p">,</span>
|
|
203
|
+
<span class="s2">"tools_count"</span><span class="p">:</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="s2">"tools"</span><span class="p">,</span> <span class="p">[])),</span>
|
|
204
|
+
<span class="s2">"resources_count"</span><span class="p">:</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="s2">"resources"</span><span class="p">,</span> <span class="p">[])),</span>
|
|
205
|
+
<span class="s2">"prompts_count"</span><span class="p">:</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="s2">"prompts"</span><span class="p">,</span> <span class="p">[]))</span>
|
|
206
|
+
<span class="p">})</span>
|
|
207
|
+
<span class="k">return</span> <span class="n">servers</span></div>
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
<span class="c1"># Enhanced commands from enhanced_mod.py</span>
|
|
212
|
+
<div class="viewcode-block" id="mcp_enhanced_connect">
|
|
213
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.mcp_enhanced_connect">[docs]</a>
|
|
214
|
+
<span class="nd">@command</span><span class="p">()</span>
|
|
215
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">mcp_enhanced_connect</span><span class="p">(</span><span class="n">server_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
216
|
+
<span class="w"> </span><span class="sd">"""Connect to MCP server with enhanced features</span>
|
|
217
|
+
<span class="sd"> </span>
|
|
218
|
+
<span class="sd"> Example:</span>
|
|
219
|
+
<span class="sd"> { "mcp_enhanced_connect": { "server_name": "calculator" } }</span>
|
|
220
|
+
<span class="sd"> """</span>
|
|
221
|
+
<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>
|
|
222
|
+
<span class="k">if</span> <span class="n">success</span><span class="p">:</span>
|
|
223
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Successfully connected to </span><span class="si">{</span><span class="n">server_name</span><span class="si">}</span><span class="s2"> with enhanced features"</span>
|
|
224
|
+
<span class="k">else</span><span class="p">:</span>
|
|
225
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Failed to connect to </span><span class="si">{</span><span class="n">server_name</span><span class="si">}</span><span class="s2">"</span></div>
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
<div class="viewcode-block" id="mcp_enhanced_disconnect">
|
|
230
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.mcp_enhanced_disconnect">[docs]</a>
|
|
231
|
+
<span class="nd">@command</span><span class="p">()</span>
|
|
232
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">mcp_enhanced_disconnect</span><span class="p">(</span><span class="n">server_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
233
|
+
<span class="w"> </span><span class="sd">"""Disconnect from MCP server</span>
|
|
234
|
+
<span class="sd"> </span>
|
|
235
|
+
<span class="sd"> Example:</span>
|
|
236
|
+
<span class="sd"> { "mcp_enhanced_disconnect": { "server_name": "calculator" } }</span>
|
|
237
|
+
<span class="sd"> """</span>
|
|
238
|
+
<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">disconnect_server</span><span class="p">(</span><span class="n">server_name</span><span class="p">)</span>
|
|
239
|
+
<span class="k">if</span> <span class="n">success</span><span class="p">:</span>
|
|
240
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Successfully disconnected from </span><span class="si">{</span><span class="n">server_name</span><span class="si">}</span><span class="s2">"</span>
|
|
241
|
+
<span class="k">else</span><span class="p">:</span>
|
|
242
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Failed to disconnect from </span><span class="si">{</span><span class="n">server_name</span><span class="si">}</span><span class="s2">"</span></div>
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
<div class="viewcode-block" id="mcp_install_uvx_server">
|
|
247
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.mcp_install_uvx_server">[docs]</a>
|
|
248
|
+
<span class="nd">@command</span><span class="p">()</span>
|
|
249
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">mcp_install_uvx_server</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">package</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
250
|
+
<span class="w"> </span><span class="sd">"""Install and configure a uvx-based MCP server</span>
|
|
251
|
+
<span class="sd"> </span>
|
|
252
|
+
<span class="sd"> Example:</span>
|
|
253
|
+
<span class="sd"> { "mcp_install_uvx_server": {</span>
|
|
254
|
+
<span class="sd"> "name": "calculator",</span>
|
|
255
|
+
<span class="sd"> "package": "mcp-server-calculator",</span>
|
|
256
|
+
<span class="sd"> "description": "Calculator server"</span>
|
|
257
|
+
<span class="sd"> } }</span>
|
|
258
|
+
<span class="sd"> """</span>
|
|
259
|
+
<span class="n">server</span> <span class="o">=</span> <span class="n">MCPServer</span><span class="p">(</span>
|
|
260
|
+
<span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
|
|
261
|
+
<span class="n">description</span><span class="o">=</span><span class="n">description</span> <span class="ow">or</span> <span class="sa">f</span><span class="s2">"MCP server: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
|
|
262
|
+
<span class="n">command</span><span class="o">=</span><span class="s2">"uvx"</span><span class="p">,</span>
|
|
263
|
+
<span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="n">package</span><span class="p">],</span>
|
|
264
|
+
<span class="n">install_method</span><span class="o">=</span><span class="s2">"uvx"</span><span class="p">,</span>
|
|
265
|
+
<span class="n">install_package</span><span class="o">=</span><span class="n">package</span><span class="p">,</span>
|
|
266
|
+
<span class="n">auto_install</span><span class="o">=</span><span class="kc">True</span>
|
|
267
|
+
<span class="p">)</span>
|
|
268
|
+
|
|
269
|
+
<span class="n">mcp_manager</span><span class="o">.</span><span class="n">add_server</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">server</span><span class="p">)</span>
|
|
270
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Configured uvx server </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> with package </span><span class="si">{</span><span class="n">package</span><span class="si">}</span><span class="s2">"</span></div>
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
<div class="viewcode-block" id="mcp_install_npx_server">
|
|
275
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.mcp_install_npx_server">[docs]</a>
|
|
276
|
+
<span class="nd">@command</span><span class="p">()</span>
|
|
277
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">mcp_install_npx_server</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">package</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
278
|
+
<span class="w"> </span><span class="sd">"""Install and configure an npx-based MCP server</span>
|
|
279
|
+
<span class="sd"> </span>
|
|
280
|
+
<span class="sd"> Example:</span>
|
|
281
|
+
<span class="sd"> { "mcp_install_npx_server": {</span>
|
|
282
|
+
<span class="sd"> "name": "github",</span>
|
|
283
|
+
<span class="sd"> "package": "@modelcontextprotocol/server-github",</span>
|
|
284
|
+
<span class="sd"> "description": "GitHub server"</span>
|
|
285
|
+
<span class="sd"> } }</span>
|
|
286
|
+
<span class="sd"> """</span>
|
|
287
|
+
<span class="n">server</span> <span class="o">=</span> <span class="n">MCPServer</span><span class="p">(</span>
|
|
288
|
+
<span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
|
|
289
|
+
<span class="n">description</span><span class="o">=</span><span class="n">description</span> <span class="ow">or</span> <span class="sa">f</span><span class="s2">"MCP server: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
|
|
290
|
+
<span class="n">command</span><span class="o">=</span><span class="s2">"npx"</span><span class="p">,</span>
|
|
291
|
+
<span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="s2">"-y"</span><span class="p">,</span> <span class="n">package</span><span class="p">],</span>
|
|
292
|
+
<span class="n">install_method</span><span class="o">=</span><span class="s2">"npx"</span><span class="p">,</span>
|
|
293
|
+
<span class="n">install_package</span><span class="o">=</span><span class="n">package</span><span class="p">,</span>
|
|
294
|
+
<span class="n">auto_install</span><span class="o">=</span><span class="kc">True</span>
|
|
295
|
+
<span class="p">)</span>
|
|
296
|
+
|
|
297
|
+
<span class="n">mcp_manager</span><span class="o">.</span><span class="n">add_server</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">server</span><span class="p">)</span>
|
|
298
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Configured npx server </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> with package </span><span class="si">{</span><span class="n">package</span><span class="si">}</span><span class="s2">"</span></div>
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
<div class="viewcode-block" id="mcp_debug_connection">
|
|
303
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.mcp_debug_connection">[docs]</a>
|
|
304
|
+
<span class="nd">@command</span><span class="p">()</span>
|
|
305
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">mcp_debug_connection</span><span class="p">(</span><span class="n">server_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
306
|
+
<span class="w"> </span><span class="sd">"""Debug MCP server connection and dynamic command registration</span>
|
|
307
|
+
<span class="sd"> </span>
|
|
308
|
+
<span class="sd"> Example:</span>
|
|
309
|
+
<span class="sd"> { "mcp_debug_connection": { "server_name": "calculator" } }</span>
|
|
310
|
+
<span class="sd"> { "mcp_debug_connection": { "server_name": "github" } }</span>
|
|
311
|
+
<span class="sd"> """</span>
|
|
312
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">.catalog_commands</span><span class="w"> </span><span class="kn">import</span> <span class="n">mcp_catalog_info</span><span class="p">,</span> <span class="n">mcp_catalog_install_and_run</span>
|
|
313
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">lib.providers.commands</span><span class="w"> </span><span class="kn">import</span> <span class="n">command_manager</span>
|
|
314
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">json</span>
|
|
315
|
+
|
|
316
|
+
<span class="n">debug_info</span> <span class="o">=</span> <span class="p">{</span>
|
|
317
|
+
<span class="s2">"server_name"</span><span class="p">:</span> <span class="n">server_name</span><span class="p">,</span>
|
|
318
|
+
<span class="s2">"steps"</span><span class="p">:</span> <span class="p">[]</span>
|
|
319
|
+
<span class="p">}</span>
|
|
320
|
+
|
|
321
|
+
<span class="c1"># Step 1: Check initial state</span>
|
|
322
|
+
<span class="n">initial_commands</span> <span class="o">=</span> <span class="p">[</span><span class="n">name</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">command_manager</span><span class="o">.</span><span class="n">functions</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'mcp_'</span><span class="p">)]</span>
|
|
323
|
+
<span class="n">debug_info</span><span class="p">[</span><span class="s2">"steps"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
324
|
+
<span class="s2">"step"</span><span class="p">:</span> <span class="s2">"1_initial_state"</span><span class="p">,</span>
|
|
325
|
+
<span class="s2">"initial_mcp_commands_count"</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">initial_commands</span><span class="p">),</span>
|
|
326
|
+
<span class="s2">"dynamic_commands"</span><span class="p">:</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">dynamic_commands</span><span class="o">.</span><span class="n">get_registered_commands</span><span class="p">()</span>
|
|
327
|
+
<span class="p">})</span>
|
|
328
|
+
|
|
329
|
+
<span class="c1"># Step 2: Get server info</span>
|
|
330
|
+
<span class="k">try</span><span class="p">:</span>
|
|
331
|
+
<span class="n">server_info</span> <span class="o">=</span> <span class="k">await</span> <span class="n">mcp_catalog_info</span><span class="p">(</span><span class="n">server_name</span><span class="p">)</span>
|
|
332
|
+
<span class="n">debug_info</span><span class="p">[</span><span class="s2">"steps"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
333
|
+
<span class="s2">"step"</span><span class="p">:</span> <span class="s2">"2_server_info"</span><span class="p">,</span>
|
|
334
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
335
|
+
<span class="s2">"server_info"</span><span class="p">:</span> <span class="n">server_info</span>
|
|
336
|
+
<span class="p">})</span>
|
|
337
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
338
|
+
<span class="n">debug_info</span><span class="p">[</span><span class="s2">"steps"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
339
|
+
<span class="s2">"step"</span><span class="p">:</span> <span class="s2">"2_server_info"</span><span class="p">,</span>
|
|
340
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
341
|
+
<span class="s2">"error"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
|
342
|
+
<span class="p">})</span>
|
|
343
|
+
<span class="k">return</span> <span class="n">debug_info</span>
|
|
344
|
+
|
|
345
|
+
<span class="c1"># Step 3: Install and run</span>
|
|
346
|
+
<span class="k">try</span><span class="p">:</span>
|
|
347
|
+
<span class="n">result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">mcp_catalog_install_and_run</span><span class="p">(</span><span class="n">server_name</span><span class="p">)</span>
|
|
348
|
+
<span class="n">debug_info</span><span class="p">[</span><span class="s2">"steps"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
349
|
+
<span class="s2">"step"</span><span class="p">:</span> <span class="s2">"3_install_and_run"</span><span class="p">,</span>
|
|
350
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
351
|
+
<span class="s2">"result"</span><span class="p">:</span> <span class="n">result</span>
|
|
352
|
+
<span class="p">})</span>
|
|
353
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
354
|
+
<span class="n">debug_info</span><span class="p">[</span><span class="s2">"steps"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
355
|
+
<span class="s2">"step"</span><span class="p">:</span> <span class="s2">"3_install_and_run"</span><span class="p">,</span>
|
|
356
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
357
|
+
<span class="s2">"error"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
|
358
|
+
<span class="p">})</span>
|
|
359
|
+
<span class="k">return</span> <span class="n">debug_info</span>
|
|
360
|
+
|
|
361
|
+
<span class="c1"># Step 4: Check server status</span>
|
|
362
|
+
<span class="n">server_status</span> <span class="o">=</span> <span class="p">{}</span>
|
|
363
|
+
<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>
|
|
364
|
+
<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>
|
|
365
|
+
<span class="n">server_status</span> <span class="o">=</span> <span class="p">{</span>
|
|
366
|
+
<span class="s2">"status"</span><span class="p">:</span> <span class="n">server</span><span class="o">.</span><span class="n">status</span><span class="p">,</span>
|
|
367
|
+
<span class="s2">"capabilities"</span><span class="p">:</span> <span class="n">server</span><span class="o">.</span><span class="n">capabilities</span><span class="p">,</span>
|
|
368
|
+
<span class="s2">"has_session"</span><span class="p">:</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">sessions</span>
|
|
369
|
+
<span class="p">}</span>
|
|
370
|
+
|
|
371
|
+
<span class="n">debug_info</span><span class="p">[</span><span class="s2">"steps"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
372
|
+
<span class="s2">"step"</span><span class="p">:</span> <span class="s2">"4_server_status"</span><span class="p">,</span>
|
|
373
|
+
<span class="s2">"server_found"</span><span class="p">:</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>
|
|
374
|
+
<span class="s2">"server_status"</span><span class="p">:</span> <span class="n">server_status</span>
|
|
375
|
+
<span class="p">})</span>
|
|
376
|
+
|
|
377
|
+
<span class="c1"># Step 5: Check dynamic commands</span>
|
|
378
|
+
<span class="n">final_commands</span> <span class="o">=</span> <span class="p">[</span><span class="n">name</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">command_manager</span><span class="o">.</span><span class="n">functions</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'mcp_'</span><span class="p">)]</span>
|
|
379
|
+
<span class="n">new_commands</span> <span class="o">=</span> <span class="p">[</span><span class="n">cmd</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">final_commands</span> <span class="k">if</span> <span class="n">cmd</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">initial_commands</span><span class="p">]</span>
|
|
380
|
+
|
|
381
|
+
<span class="n">debug_info</span><span class="p">[</span><span class="s2">"steps"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
382
|
+
<span class="s2">"step"</span><span class="p">:</span> <span class="s2">"5_dynamic_commands"</span><span class="p">,</span>
|
|
383
|
+
<span class="s2">"total_mcp_commands"</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">final_commands</span><span class="p">),</span>
|
|
384
|
+
<span class="s2">"new_commands"</span><span class="p">:</span> <span class="n">new_commands</span><span class="p">,</span>
|
|
385
|
+
<span class="s2">"dynamic_commands_tracker"</span><span class="p">:</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">dynamic_commands</span><span class="o">.</span><span class="n">get_registered_commands</span><span class="p">()</span>
|
|
386
|
+
<span class="p">})</span>
|
|
387
|
+
|
|
388
|
+
<span class="c1"># Step 6: Analyze tools</span>
|
|
389
|
+
<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>
|
|
390
|
+
<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>
|
|
391
|
+
<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="s1">'tools'</span><span class="p">,</span> <span class="p">[])</span>
|
|
392
|
+
<span class="n">tool_analysis</span> <span class="o">=</span> <span class="p">[]</span>
|
|
393
|
+
|
|
394
|
+
<span class="k">for</span> <span class="n">tool</span> <span class="ow">in</span> <span class="n">tools</span><span class="p">:</span>
|
|
395
|
+
<span class="n">tool_name</span> <span class="o">=</span> <span class="n">tool</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'name'</span><span class="p">,</span> <span class="s1">'unknown'</span><span class="p">)</span>
|
|
396
|
+
<span class="c1">#expected_cmd = f"mcp_{server_name}_{tool_name}"</span>
|
|
397
|
+
<span class="n">expecte_cmd</span> <span class="o">=</span> <span class="s2">"mcp_"</span><span class="o">+</span><span class="n">tool_name</span>
|
|
398
|
+
<span class="n">is_registered</span> <span class="o">=</span> <span class="n">expected_cmd</span> <span class="ow">in</span> <span class="n">command_manager</span><span class="o">.</span><span class="n">functions</span>
|
|
399
|
+
<span class="n">tool_analysis</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
400
|
+
<span class="s2">"tool_name"</span><span class="p">:</span> <span class="n">tool_name</span><span class="p">,</span>
|
|
401
|
+
<span class="s2">"expected_command"</span><span class="p">:</span> <span class="n">expected_cmd</span><span class="p">,</span>
|
|
402
|
+
<span class="s2">"is_registered"</span><span class="p">:</span> <span class="n">is_registered</span><span class="p">,</span>
|
|
403
|
+
<span class="s2">"tool_details"</span><span class="p">:</span> <span class="n">tool</span>
|
|
404
|
+
<span class="p">})</span>
|
|
405
|
+
|
|
406
|
+
<span class="n">debug_info</span><span class="p">[</span><span class="s2">"steps"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
407
|
+
<span class="s2">"step"</span><span class="p">:</span> <span class="s2">"6_tool_analysis"</span><span class="p">,</span>
|
|
408
|
+
<span class="s2">"tools_count"</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">tools</span><span class="p">),</span>
|
|
409
|
+
<span class="s2">"tool_analysis"</span><span class="p">:</span> <span class="n">tool_analysis</span>
|
|
410
|
+
<span class="p">})</span>
|
|
411
|
+
|
|
412
|
+
<span class="c1"># Step 7: Manual verification if session exists</span>
|
|
413
|
+
<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">sessions</span><span class="p">:</span>
|
|
414
|
+
<span class="k">try</span><span class="p">:</span>
|
|
415
|
+
<span class="n">session</span> <span class="o">=</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">sessions</span><span class="p">[</span><span class="n">server_name</span><span class="p">]</span>
|
|
416
|
+
<span class="n">tools_result</span> <span class="o">=</span> <span class="k">await</span> <span class="n">session</span><span class="o">.</span><span class="n">list_tools</span><span class="p">()</span>
|
|
417
|
+
<span class="n">debug_info</span><span class="p">[</span><span class="s2">"steps"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
418
|
+
<span class="s2">"step"</span><span class="p">:</span> <span class="s2">"7_manual_verification"</span><span class="p">,</span>
|
|
419
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
420
|
+
<span class="s2">"direct_tools_count"</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">tools_result</span><span class="o">.</span><span class="n">tools</span><span class="p">),</span>
|
|
421
|
+
<span class="s2">"direct_tools"</span><span class="p">:</span> <span class="p">[{</span>
|
|
422
|
+
<span class="s2">"name"</span><span class="p">:</span> <span class="n">tool</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
423
|
+
<span class="s2">"description"</span><span class="p">:</span> <span class="n">tool</span><span class="o">.</span><span class="n">description</span>
|
|
424
|
+
<span class="p">}</span> <span class="k">for</span> <span class="n">tool</span> <span class="ow">in</span> <span class="n">tools_result</span><span class="o">.</span><span class="n">tools</span><span class="p">]</span>
|
|
425
|
+
<span class="p">})</span>
|
|
426
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
427
|
+
<span class="n">debug_info</span><span class="p">[</span><span class="s2">"steps"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
428
|
+
<span class="s2">"step"</span><span class="p">:</span> <span class="s2">"7_manual_verification"</span><span class="p">,</span>
|
|
429
|
+
<span class="s2">"success"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
430
|
+
<span class="s2">"error"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
|
431
|
+
<span class="p">})</span>
|
|
432
|
+
|
|
433
|
+
<span class="k">return</span> <span class="n">debug_info</span></div>
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
<div class="viewcode-block" id="mcp_check_tools">
|
|
437
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.mcp_check_tools">[docs]</a>
|
|
438
|
+
<span class="nd">@command</span><span class="p">()</span>
|
|
439
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">mcp_check_tools</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
440
|
+
<span class="w"> </span><span class="sd">"""Check availability of installation tools</span>
|
|
441
|
+
<span class="sd"> </span>
|
|
442
|
+
<span class="sd"> Example:</span>
|
|
443
|
+
<span class="sd"> { "mcp_check_tools": {} }</span>
|
|
444
|
+
<span class="sd"> """</span>
|
|
445
|
+
<span class="n">tools</span> <span class="o">=</span> <span class="k">await</span> <span class="n">MCPServerInstaller</span><span class="o">.</span><span class="n">check_tools</span><span class="p">()</span>
|
|
446
|
+
<span class="k">return</span> <span class="n">tools</span></div>
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
|
|
450
|
+
<div class="viewcode-block" id="mcp_list_dynamic_commands">
|
|
451
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.mcp_list_dynamic_commands">[docs]</a>
|
|
452
|
+
<span class="nd">@command</span><span class="p">()</span>
|
|
453
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">mcp_list_dynamic_commands</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
454
|
+
<span class="w"> </span><span class="sd">"""List dynamically registered MCP commands</span>
|
|
455
|
+
<span class="sd"> </span>
|
|
456
|
+
<span class="sd"> Example:</span>
|
|
457
|
+
<span class="sd"> { "mcp_list_dynamic_commands": {} }</span>
|
|
458
|
+
<span class="sd"> """</span>
|
|
459
|
+
<span class="n">commands</span> <span class="o">=</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">dynamic_commands</span><span class="o">.</span><span class="n">get_registered_commands</span><span class="p">()</span>
|
|
460
|
+
<span class="k">return</span> <span class="p">{</span><span class="s2">"dynamic_commands"</span><span class="p">:</span> <span class="n">commands</span><span class="p">,</span> <span class="s2">"count"</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">commands</span><span class="p">)}</span></div>
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
<div class="viewcode-block" id="mcp_refresh_dynamic_commands">
|
|
465
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.mcp_.html#mindroot.coreplugins.mcp_.mod.mcp_refresh_dynamic_commands">[docs]</a>
|
|
466
|
+
<span class="nd">@command</span><span class="p">()</span>
|
|
467
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">mcp_refresh_dynamic_commands</span><span class="p">(</span><span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
468
|
+
<span class="w"> </span><span class="sd">"""Refresh dynamic command registration for all connected servers</span>
|
|
469
|
+
<span class="sd"> </span>
|
|
470
|
+
<span class="sd"> Example:</span>
|
|
471
|
+
<span class="sd"> { "mcp_refresh_dynamic_commands": {} }</span>
|
|
472
|
+
<span class="sd"> """</span>
|
|
473
|
+
<span class="n">refreshed</span> <span class="o">=</span> <span class="p">[]</span>
|
|
474
|
+
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">session</span> <span class="ow">in</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
475
|
+
<span class="n">tools</span> <span class="o">=</span> <span class="k">await</span> <span class="n">session</span><span class="o">.</span><span class="n">list_tools</span><span class="p">()</span>
|
|
476
|
+
<span class="k">await</span> <span class="n">mcp_manager</span><span class="o">.</span><span class="n">dynamic_commands</span><span class="o">.</span><span class="n">register_tools</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">tools</span><span class="o">.</span><span class="n">tools</span><span class="p">)</span>
|
|
477
|
+
<span class="n">refreshed</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">tools</span><span class="o">.</span><span class="n">tools</span><span class="p">)</span><span class="si">}</span><span class="s2"> tools"</span><span class="p">)</span>
|
|
478
|
+
|
|
479
|
+
<span class="k">return</span> <span class="p">{</span><span class="s2">"refreshed_servers"</span><span class="p">:</span> <span class="n">refreshed</span><span class="p">,</span> <span class="s2">"total_dynamic_commands"</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">mcp_manager</span><span class="o">.</span><span class="n">dynamic_commands</span><span class="o">.</span><span class="n">get_registered_commands</span><span class="p">())}</span></div>
|
|
480
|
+
|
|
481
|
+
</pre></div>
|
|
482
|
+
|
|
483
|
+
</div>
|
|
484
|
+
</div>
|
|
485
|
+
<footer>
|
|
486
|
+
|
|
487
|
+
<hr/>
|
|
488
|
+
|
|
489
|
+
<div role="contentinfo">
|
|
490
|
+
<p>© Copyright 2025, Jason Livesay.</p>
|
|
491
|
+
</div>
|
|
492
|
+
|
|
493
|
+
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
494
|
+
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
495
|
+
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
</footer>
|
|
499
|
+
</div>
|
|
500
|
+
</div>
|
|
501
|
+
</section>
|
|
502
|
+
</div>
|
|
503
|
+
<script>
|
|
504
|
+
jQuery(function () {
|
|
505
|
+
SphinxRtdTheme.Navigation.enable(true);
|
|
506
|
+
});
|
|
507
|
+
</script>
|
|
508
|
+
|
|
509
|
+
</body>
|
|
510
|
+
</html>
|