mcphub-server 3.3.0__tar.gz → 3.4.0__tar.gz

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.
Files changed (235) hide show
  1. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/PKG-INFO +3 -3
  2. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/README.md +2 -2
  3. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/dashboard/routes.py +41 -0
  4. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/endpoints/config.py +3 -4
  5. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/plugin_visibility.py +1 -1
  6. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/settings.py +2 -2
  7. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/site_api.py +20 -15
  8. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/service.html +25 -0
  9. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/sites/add.html +15 -0
  10. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/mcphub_server.egg-info/PKG-INFO +3 -3
  11. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/mcphub_server.egg-info/SOURCES.txt +1 -2
  12. mcphub_server-3.4.0/plugins/openpanel/__init__.py +11 -0
  13. mcphub_server-3.4.0/plugins/openpanel/client.py +640 -0
  14. mcphub_server-3.4.0/plugins/openpanel/handlers/__init__.py +48 -0
  15. mcphub_server-3.4.0/plugins/openpanel/handlers/clients.py +191 -0
  16. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/openpanel/handlers/events.py +87 -15
  17. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/openpanel/handlers/export.py +111 -326
  18. mcphub_server-3.4.0/plugins/openpanel/handlers/profiles.py +186 -0
  19. mcphub_server-3.4.0/plugins/openpanel/handlers/projects.py +177 -0
  20. mcphub_server-3.4.0/plugins/openpanel/handlers/reports.py +88 -0
  21. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/openpanel/handlers/system.py +3 -33
  22. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/openpanel/plugin.py +30 -59
  23. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/pyproject.toml +1 -1
  24. mcphub_server-3.4.0/tests/test_openpanel_plugin.py +767 -0
  25. mcphub_server-3.3.0/plugins/openpanel/__init__.py +0 -14
  26. mcphub_server-3.3.0/plugins/openpanel/client.py +0 -1028
  27. mcphub_server-3.3.0/plugins/openpanel/handlers/__init__.py +0 -44
  28. mcphub_server-3.3.0/plugins/openpanel/handlers/clients.py +0 -252
  29. mcphub_server-3.3.0/plugins/openpanel/handlers/dashboards.py +0 -467
  30. mcphub_server-3.3.0/plugins/openpanel/handlers/funnels.py +0 -388
  31. mcphub_server-3.3.0/plugins/openpanel/handlers/profiles.py +0 -451
  32. mcphub_server-3.3.0/plugins/openpanel/handlers/projects.py +0 -344
  33. mcphub_server-3.3.0/plugins/openpanel/handlers/reports.py +0 -537
  34. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/LICENSE +0 -0
  35. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/__init__.py +0 -0
  36. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/admin_utils.py +0 -0
  37. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/api_keys.py +0 -0
  38. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/audit_log.py +0 -0
  39. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/auth.py +0 -0
  40. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/config_snippets.py +0 -0
  41. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/context.py +0 -0
  42. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/dashboard/__init__.py +0 -0
  43. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/dashboard/auth.py +0 -0
  44. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/database.py +0 -0
  45. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/encryption.py +0 -0
  46. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/endpoints/__init__.py +0 -0
  47. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/endpoints/factory.py +0 -0
  48. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/endpoints/middleware.py +0 -0
  49. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/endpoints/registry.py +0 -0
  50. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/health.py +0 -0
  51. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/i18n.py +0 -0
  52. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/middleware/__init__.py +0 -0
  53. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/oauth/__init__.py +0 -0
  54. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/oauth/client_registry.py +0 -0
  55. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/oauth/csrf.py +0 -0
  56. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/oauth/pkce.py +0 -0
  57. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/oauth/schemas.py +0 -0
  58. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/oauth/server.py +0 -0
  59. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/oauth/storage.py +0 -0
  60. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/oauth/token_manager.py +0 -0
  61. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/project_manager.py +0 -0
  62. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/rate_limiter.py +0 -0
  63. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/site_manager.py +0 -0
  64. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/base.html +0 -0
  65. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/404.html +0 -0
  66. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/api-keys/list.html +0 -0
  67. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/audit-logs/list.html +0 -0
  68. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/auth-login.html +0 -0
  69. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/base.html +0 -0
  70. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/connect.html +0 -0
  71. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/health/index.html +0 -0
  72. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/health/projects-partial.html +0 -0
  73. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/index.html +0 -0
  74. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/login.html +0 -0
  75. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/oauth-clients/list.html +0 -0
  76. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/partials/head_assets.html +0 -0
  77. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/profile.html +0 -0
  78. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/projects/detail.html +0 -0
  79. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/projects/list.html +0 -0
  80. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/services_list.html +0 -0
  81. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/settings/index.html +0 -0
  82. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/sites/edit.html +0 -0
  83. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/sites/list.html +0 -0
  84. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/dashboard/user-oauth-clients.html +0 -0
  85. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/oauth/authorize.html +0 -0
  86. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/templates/oauth/error.html +0 -0
  87. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/tool_generator.py +0 -0
  88. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/tool_registry.py +0 -0
  89. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/user_auth.py +0 -0
  90. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/user_endpoints.py +0 -0
  91. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/core/user_keys.py +0 -0
  92. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/mcphub_server.egg-info/dependency_links.txt +0 -0
  93. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/mcphub_server.egg-info/entry_points.txt +0 -0
  94. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/mcphub_server.egg-info/requires.txt +0 -0
  95. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/mcphub_server.egg-info/top_level.txt +0 -0
  96. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/__init__.py +0 -0
  97. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/appwrite/__init__.py +0 -0
  98. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/appwrite/client.py +0 -0
  99. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/appwrite/handlers/__init__.py +0 -0
  100. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/appwrite/handlers/databases.py +0 -0
  101. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/appwrite/handlers/documents.py +0 -0
  102. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/appwrite/handlers/functions.py +0 -0
  103. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/appwrite/handlers/messaging.py +0 -0
  104. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/appwrite/handlers/storage.py +0 -0
  105. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/appwrite/handlers/system.py +0 -0
  106. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/appwrite/handlers/teams.py +0 -0
  107. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/appwrite/handlers/users.py +0 -0
  108. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/appwrite/plugin.py +0 -0
  109. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/base.py +0 -0
  110. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/directus/__init__.py +0 -0
  111. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/directus/client.py +0 -0
  112. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/directus/handlers/__init__.py +0 -0
  113. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/directus/handlers/access.py +0 -0
  114. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/directus/handlers/automation.py +0 -0
  115. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/directus/handlers/collections.py +0 -0
  116. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/directus/handlers/content.py +0 -0
  117. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/directus/handlers/dashboards.py +0 -0
  118. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/directus/handlers/files.py +0 -0
  119. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/directus/handlers/items.py +0 -0
  120. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/directus/handlers/system.py +0 -0
  121. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/directus/handlers/users.py +0 -0
  122. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/directus/plugin.py +0 -0
  123. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/__init__.py +0 -0
  124. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/client.py +0 -0
  125. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/handlers/__init__.py +0 -0
  126. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/handlers/issues.py +0 -0
  127. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/handlers/pull_requests.py +0 -0
  128. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/handlers/repositories.py +0 -0
  129. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/handlers/users.py +0 -0
  130. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/handlers/webhooks.py +0 -0
  131. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/plugin.py +0 -0
  132. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/schemas/__init__.py +0 -0
  133. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/schemas/common.py +0 -0
  134. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/schemas/issue.py +0 -0
  135. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/schemas/pull_request.py +0 -0
  136. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/schemas/repository.py +0 -0
  137. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/schemas/user.py +0 -0
  138. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/gitea/schemas/webhook.py +0 -0
  139. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/n8n/__init__.py +0 -0
  140. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/n8n/client.py +0 -0
  141. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/n8n/handlers/__init__.py +0 -0
  142. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/n8n/handlers/credentials.py +0 -0
  143. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/n8n/handlers/executions.py +0 -0
  144. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/n8n/handlers/projects.py +0 -0
  145. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/n8n/handlers/system.py +0 -0
  146. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/n8n/handlers/tags.py +0 -0
  147. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/n8n/handlers/users.py +0 -0
  148. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/n8n/handlers/variables.py +0 -0
  149. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/n8n/handlers/workflows.py +0 -0
  150. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/n8n/plugin.py +0 -0
  151. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/openpanel/handlers/utils.py +0 -0
  152. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/supabase/__init__.py +0 -0
  153. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/supabase/client.py +0 -0
  154. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/supabase/handlers/__init__.py +0 -0
  155. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/supabase/handlers/admin.py +0 -0
  156. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/supabase/handlers/auth.py +0 -0
  157. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/supabase/handlers/database.py +0 -0
  158. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/supabase/handlers/functions.py +0 -0
  159. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/supabase/handlers/storage.py +0 -0
  160. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/supabase/handlers/system.py +0 -0
  161. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/supabase/plugin.py +0 -0
  162. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/woocommerce/__init__.py +0 -0
  163. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/woocommerce/plugin.py +0 -0
  164. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/__init__.py +0 -0
  165. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/client.py +0 -0
  166. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/__init__.py +0 -0
  167. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/comments.py +0 -0
  168. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/coupons.py +0 -0
  169. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/customers.py +0 -0
  170. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/media.py +0 -0
  171. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/menus.py +0 -0
  172. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/orders.py +0 -0
  173. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/posts.py +0 -0
  174. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/products.py +0 -0
  175. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/reports.py +0 -0
  176. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/seo.py +0 -0
  177. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/site.py +0 -0
  178. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/taxonomy.py +0 -0
  179. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/users.py +0 -0
  180. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/handlers/wp_cli.py +0 -0
  181. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/plugin.py +0 -0
  182. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/plugin_old_backup.py +0 -0
  183. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/schemas/__init__.py +0 -0
  184. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/schemas/common.py +0 -0
  185. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/schemas/media.py +0 -0
  186. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/schemas/order.py +0 -0
  187. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/schemas/post.py +0 -0
  188. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/schemas/product.py +0 -0
  189. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/schemas/seo.py +0 -0
  190. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress/wp_cli.py +0 -0
  191. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress_advanced/__init__.py +0 -0
  192. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress_advanced/handlers/__init__.py +0 -0
  193. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress_advanced/handlers/bulk.py +0 -0
  194. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress_advanced/handlers/database.py +0 -0
  195. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress_advanced/handlers/system.py +0 -0
  196. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress_advanced/plugin.py +0 -0
  197. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress_advanced/schemas/__init__.py +0 -0
  198. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress_advanced/schemas/bulk.py +0 -0
  199. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress_advanced/schemas/database.py +0 -0
  200. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/plugins/wordpress_advanced/schemas/system.py +0 -0
  201. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/server.py +0 -0
  202. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/server_multi.py +0 -0
  203. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/setup.cfg +0 -0
  204. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_admin_system.py +0 -0
  205. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_api_keys.py +0 -0
  206. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_auth.py +0 -0
  207. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_auth_logic.py +0 -0
  208. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_config_snippets.py +0 -0
  209. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_dashboard.py +0 -0
  210. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_database.py +0 -0
  211. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_dynamic_endpoints_integration.py +0 -0
  212. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_encryption.py +0 -0
  213. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_f3_admin_stats.py +0 -0
  214. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_f3_last_tested.py +0 -0
  215. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_f3_service_pages.py +0 -0
  216. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_oauth_basic_auth.py +0 -0
  217. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_oauth_client_registry.py +0 -0
  218. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_oauth_integration.py +0 -0
  219. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_oauth_pkce.py +0 -0
  220. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_oauth_resource.py +0 -0
  221. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_oauth_revoke.py +0 -0
  222. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_oauth_schemas.py +0 -0
  223. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_oauth_storage.py +0 -0
  224. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_oauth_token_manager.py +0 -0
  225. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_plugin_visibility.py +0 -0
  226. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_rate_limiter.py +0 -0
  227. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_site_api.py +0 -0
  228. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_site_manager.py +0 -0
  229. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_tenant_isolation.py +0 -0
  230. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_tool_registry.py +0 -0
  231. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_user_auth.py +0 -0
  232. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_user_endpoints.py +0 -0
  233. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_user_keys.py +0 -0
  234. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_woocommerce_plugin.py +0 -0
  235. {mcphub_server-3.3.0 → mcphub_server-3.4.0}/tests/test_wordpress_plugin.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcphub-server
3
- Version: 3.3.0
3
+ Version: 3.4.0
4
4
  Summary: AI-native management hub for WordPress, WooCommerce, and self-hosted services via Model Context Protocol (MCP)
5
5
  Author-email: MCP Hub <contact@mcphub.dev>
6
6
  License-Expression: MIT
@@ -161,14 +161,14 @@ You should see the login page. Log in with your `MASTER_API_KEY` or via **GitHub
161
161
 
162
162
  ### Try It Now (No Setup Required)
163
163
 
164
- **Don't want to self-host?** Try the demo instance at **[mcp.palebluedot.live](https://mcp.palebluedot.live)**:
164
+ **Don't want to self-host?** Use the hosted instance at **[mcp.example.com](https://mcp.example.com)**:
165
165
 
166
166
  1. Log in with **GitHub** or **Google**
167
167
  2. Add your sites via the dashboard (My Sites → Add Service)
168
168
  3. Go to **Connect** page — generate config for your AI client
169
169
  4. Copy-paste the config into Claude Desktop, VS Code, or Claude Code
170
170
 
171
- Your personal MCP endpoint: `https://mcp.palebluedot.live/u/{your-user-id}/{alias}/mcp`
171
+ Your personal MCP endpoint: `https://mcp.example.com/u/{your-user-id}/{alias}/mcp`
172
172
 
173
173
  ---
174
174
 
@@ -112,14 +112,14 @@ You should see the login page. Log in with your `MASTER_API_KEY` or via **GitHub
112
112
 
113
113
  ### Try It Now (No Setup Required)
114
114
 
115
- **Don't want to self-host?** Try the demo instance at **[mcp.palebluedot.live](https://mcp.palebluedot.live)**:
115
+ **Don't want to self-host?** Use the hosted instance at **[mcp.example.com](https://mcp.example.com)**:
116
116
 
117
117
  1. Log in with **GitHub** or **Google**
118
118
  2. Add your sites via the dashboard (My Sites → Add Service)
119
119
  3. Go to **Connect** page — generate config for your AI client
120
120
  4. Copy-paste the config into Claude Desktop, VS Code, or Claude Code
121
121
 
122
- Your personal MCP endpoint: `https://mcp.palebluedot.live/u/{your-user-id}/{alias}/mcp`
122
+ Your personal MCP endpoint: `https://mcp.example.com/u/{your-user-id}/{alias}/mcp`
123
123
 
124
124
  ---
125
125
 
@@ -3292,6 +3292,46 @@ async def get_service_page_data(plugin_type: str) -> dict | None:
3292
3292
 
3293
3293
  from core.plugin_visibility import is_plugin_public
3294
3294
 
3295
+ # Per-plugin descriptions and notes
3296
+ service_descriptions = {
3297
+ "openpanel": {
3298
+ "en": (
3299
+ "OpenPanel product analytics management. "
3300
+ "Supports event tracking, data export, analytics reports, "
3301
+ "and project/client management via public REST APIs. "
3302
+ "Works with both self-hosted and cloud (openpanel.dev) instances."
3303
+ ),
3304
+ "fa": (
3305
+ "مدیریت آنالیتیکس محصول OpenPanel. "
3306
+ "پشتیبانی از ردیابی رویداد، خروجی داده، گزارش‌های آنالیتیکس، "
3307
+ "و مدیریت پروژه/کلاینت از طریق API‌های عمومی REST. "
3308
+ "هم نسخه خودمیزبان و هم نسخه cloud (openpanel.dev) پشتیبانی می‌شود."
3309
+ ),
3310
+ "notes_en": [
3311
+ "<strong>Site URL must be the API URL</strong>, not the dashboard URL. "
3312
+ "Cloud: <code>https://api.openpanel.dev</code> — "
3313
+ "Self-hosted: your API service URL (e.g., <code>https://analytics.example.com</code>).",
3314
+ "Client must have <strong>root</strong> mode for full access (tracking + export + manage). "
3315
+ "Use <strong>read</strong> mode for analytics only, or <strong>write</strong> mode for tracking only.",
3316
+ "If you have WordPress, install the <a href='/static/plugins/openpanel-self-hosted.zip' "
3317
+ "class='text-primary-400 hover:underline'>OpenPanel WordPress plugin</a> "
3318
+ "to automatically send analytics data to your OpenPanel instance.",
3319
+ ],
3320
+ "notes_fa": [
3321
+ "<strong>آدرس سایت باید آدرس API باشد</strong>، نه داشبورد. "
3322
+ "نسخه Cloud: <code>https://api.openpanel.dev</code> — "
3323
+ "خودمیزبان: آدرس سرویس API شما (مثلاً <code>https://analytics.example.com</code>).",
3324
+ "برای دسترسی کامل، کلاینت باید حالت <strong>root</strong> داشته باشد. "
3325
+ "از حالت <strong>read</strong> برای آنالیتیکس و <strong>write</strong> برای ردیابی استفاده کنید.",
3326
+ "اگر وردپرس دارید، افزونه <a href='/static/plugins/openpanel-self-hosted.zip' "
3327
+ "class='text-primary-400 hover:underline'>OpenPanel WordPress</a> "
3328
+ "را نصب کنید تا داده‌های آنالیتیکس به‌صورت خودکار به OpenPanel ارسال شود.",
3329
+ ],
3330
+ },
3331
+ }
3332
+
3333
+ desc_data = service_descriptions.get(plugin_type, {})
3334
+
3295
3335
  return {
3296
3336
  "plugin_type": plugin_type,
3297
3337
  "display_name": display_name,
@@ -3299,6 +3339,7 @@ async def get_service_page_data(plugin_type: str) -> dict | None:
3299
3339
  "tools_count": len(tools),
3300
3340
  "credential_fields": credential_fields,
3301
3341
  "is_public": is_plugin_public(plugin_type),
3342
+ "description": desc_data,
3302
3343
  }
3303
3344
 
3304
3345
 
@@ -249,16 +249,15 @@ ENDPOINT_CONFIGS = {
249
249
  },
250
250
  max_tools=80,
251
251
  ),
252
- # OpenPanel endpoint - Product Analytics (73 tools) - Phase H
252
+ # OpenPanel endpoint - Product Analytics (42 tools) - Phase H
253
253
  EndpointType.OPENPANEL: EndpointConfig(
254
254
  path="/openpanel",
255
255
  name="OpenPanel Analytics",
256
- description="OpenPanel product analytics management (events, export, funnels, dashboards)",
256
+ description="OpenPanel self-hosted product analytics (events, export, insights, project/client management)",
257
257
  endpoint_type=EndpointType.OPENPANEL,
258
258
  plugin_types=["openpanel"],
259
259
  require_master_key=False,
260
260
  allowed_scopes={"read", "write", "admin"},
261
- # Blacklist system and admin tools
262
261
  tool_blacklist={
263
262
  "manage_api_keys_create",
264
263
  "manage_api_keys_delete",
@@ -266,7 +265,7 @@ ENDPOINT_CONFIGS = {
266
265
  "oauth_register_client",
267
266
  "oauth_revoke_client",
268
267
  },
269
- max_tools=80,
268
+ max_tools=50,
270
269
  ),
271
270
  # Appwrite endpoint - Backend-as-a-Service (100 tools) - Phase I
272
271
  EndpointType.APPWRITE: EndpointConfig(
@@ -15,7 +15,7 @@ Usage:
15
15
  import os
16
16
 
17
17
  # Default plugins available to public (OAuth) users
18
- DEFAULT_PUBLIC_PLUGINS = {"wordpress", "woocommerce", "supabase"}
18
+ DEFAULT_PUBLIC_PLUGINS = {"wordpress", "woocommerce", "supabase", "openpanel"}
19
19
 
20
20
 
21
21
  def _parse_plugins(val: str) -> set[str]:
@@ -3,7 +3,7 @@
3
3
  Usage:
4
4
  from core.settings import get_setting
5
5
 
6
- enabled = await get_setting("ENABLED_PLUGINS", "wordpress,woocommerce,supabase")
6
+ enabled = await get_setting("ENABLED_PLUGINS", "wordpress,woocommerce,supabase,openpanel")
7
7
  max_sites = int(await get_setting("MAX_SITES_PER_USER", "10"))
8
8
  """
9
9
 
@@ -17,7 +17,7 @@ _cached_plugins: set[str] | None = None
17
17
 
18
18
  # Default values for all managed settings
19
19
  SETTING_DEFAULTS: dict[str, str] = {
20
- "ENABLED_PLUGINS": "wordpress,woocommerce,supabase",
20
+ "ENABLED_PLUGINS": "wordpress,woocommerce,supabase,openpanel",
21
21
  "MAX_SITES_PER_USER": "10",
22
22
  "USER_RATE_LIMIT_PER_MIN": "30",
23
23
  "USER_RATE_LIMIT_PER_HR": "500",
@@ -157,7 +157,7 @@ PLUGIN_CREDENTIAL_FIELDS: dict[str, list[dict[str, Any]]] = {
157
157
  "label": "Client ID",
158
158
  "type": "text",
159
159
  "required": True,
160
- "hint": "OpenPanel admin panel → API section",
160
+ "hint": "OpenPanel Dashboard → Settings → Clients → Create client with 'root' mode for full access",
161
161
  },
162
162
  {
163
163
  "name": "client_secret",
@@ -166,6 +166,21 @@ PLUGIN_CREDENTIAL_FIELDS: dict[str, list[dict[str, Any]]] = {
166
166
  "required": True,
167
167
  "hint": "Generated with your Client ID",
168
168
  },
169
+ {
170
+ "name": "project_id",
171
+ "label": "Project ID",
172
+ "type": "text",
173
+ "required": False,
174
+ "hint": "From dashboard URL: dashboard.openpanel.dev/{org}/{project-id}/ — sets default for Export & Insights tools",
175
+ },
176
+ {
177
+ "name": "organization_id",
178
+ "label": "Organization ID",
179
+ "type": "text",
180
+ "required": False,
181
+ "hint": "From dashboard URL: dashboard.openpanel.dev/{org}/{project-id}/",
182
+ "advanced": True,
183
+ },
169
184
  ],
170
185
  "appwrite": [
171
186
  {
@@ -215,7 +230,7 @@ _HEALTH_ENDPOINTS: dict[str, dict[str, Any]] = {
215
230
  "gitea": {"path": "/api/v1/user", "method": "GET"},
216
231
  "n8n": {"path": "/healthz", "method": "GET"},
217
232
  "supabase": {"path": "/rest/v1/", "method": "GET"},
218
- "openpanel": {"path": "/api/v1/oauth/token", "method": "POST"},
233
+ "openpanel": {"path": "/healthcheck", "method": "GET"},
219
234
  "appwrite": {"path": "/v1/health", "method": "GET"},
220
235
  "directus": {"path": "/server/health", "method": "GET"},
221
236
  }
@@ -342,23 +357,13 @@ async def validate_site_connection(
342
357
  elif plugin_type == "directus":
343
358
  headers["Authorization"] = f"Bearer {credentials.get('token', '')}"
344
359
  elif plugin_type == "openpanel":
345
- # OpenPanel uses token exchange — just check that the URL is reachable
346
- pass
360
+ headers["openpanel-client-id"] = credentials.get("client_id", "")
361
+ headers["openpanel-client-secret"] = credentials.get("client_secret", "")
347
362
 
348
363
  try:
349
364
  timeout = aiohttp.ClientTimeout(total=15)
350
365
  async with aiohttp.ClientSession(timeout=timeout) as session:
351
- if method == "POST" and plugin_type == "openpanel":
352
- async with session.post(
353
- check_url,
354
- json={
355
- "clientId": credentials.get("client_id", ""),
356
- "clientSecret": credentials.get("client_secret", ""),
357
- },
358
- ) as resp:
359
- status_code = resp.status
360
- resp_text = await resp.text()
361
- elif method == "POST":
366
+ if method == "POST":
362
367
  async with session.post(check_url, headers=headers) as resp:
363
368
  status_code = resp.status
364
369
  resp_text = await resp.text()
@@ -31,6 +31,31 @@
31
31
  </a>
32
32
  </div>
33
33
 
34
+ <!-- Description & Notes -->
35
+ {% if service.description %}
36
+ <div class="bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 p-6">
37
+ {% if lang == 'fa' and service.description.fa %}
38
+ <p class="text-sm text-gray-600 dark:text-gray-300 leading-relaxed" dir="rtl">{{ service.description.fa }}</p>
39
+ {% elif service.description.en %}
40
+ <p class="text-sm text-gray-600 dark:text-gray-300 leading-relaxed">{{ service.description.en }}</p>
41
+ {% endif %}
42
+
43
+ {% set notes_key = 'notes_fa' if lang == 'fa' else 'notes_en' %}
44
+ {% if service.description[notes_key] %}
45
+ <ul class="mt-4 space-y-2{% if lang == 'fa' %} text-right{% endif %}" {% if lang == 'fa' %}dir="rtl"{% endif %}>
46
+ {% for note in service.description[notes_key] %}
47
+ <li class="flex items-start gap-2 text-sm text-gray-500 dark:text-gray-400">
48
+ <svg class="w-4 h-4 text-primary-400 mt-0.5 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
49
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
50
+ </svg>
51
+ <span>{{ note|safe }}</span>
52
+ </li>
53
+ {% endfor %}
54
+ </ul>
55
+ {% endif %}
56
+ </div>
57
+ {% endif %}
58
+
34
59
  <!-- Overview Cards -->
35
60
  <div class="grid grid-cols-1 md:grid-cols-3 gap-6">
36
61
  <!-- Tools Count -->
@@ -37,6 +37,7 @@
37
37
  <label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">{{ t.site_url }}</label>
38
38
  <input type="url" id="url" name="url" required placeholder="https://example.com"
39
39
  class="w-full bg-gray-50 dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-lg px-4 py-2.5 text-gray-900 dark:text-white placeholder-gray-400 dark:placeholder-gray-500 focus:ring-2 focus:ring-blue-500 focus:border-transparent">
40
+ <p id="url-hint" class="text-xs text-gray-500 dark:text-gray-400 mt-1 hidden"></p>
40
41
  </div>
41
42
 
42
43
  <!-- Alias -->
@@ -73,9 +74,23 @@
73
74
  <script>
74
75
  const pluginFields = {{ plugin_fields_json| safe }};
75
76
 
77
+ const urlHints = {
78
+ 'openpanel': 'OpenPanel API URL — Cloud: https://api.openpanel.dev | Self-hosted: your API service URL (e.g., https://analytics.example.com)',
79
+ 'supabase': 'Your Supabase project URL (e.g., https://xxxxx.supabase.co)',
80
+ };
81
+
76
82
  function updateFields() {
77
83
  const ptype = document.getElementById('plugin_type').value;
78
84
  const container = document.getElementById('credential-fields');
85
+ const urlHintEl = document.getElementById('url-hint');
86
+
87
+ // Update URL hint
88
+ if (urlHints[ptype]) {
89
+ urlHintEl.textContent = urlHints[ptype];
90
+ urlHintEl.classList.remove('hidden');
91
+ } else {
92
+ urlHintEl.classList.add('hidden');
93
+ }
79
94
 
80
95
  if (!ptype || !pluginFields[ptype]) {
81
96
  container.innerHTML = '<label class="block text-sm font-medium text-gray-700 dark:text-gray-300">{{ t.credentials }}</label><p class="text-sm text-gray-500 dark:text-gray-400">{{ t.select_plugin }}</p>';
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcphub-server
3
- Version: 3.3.0
3
+ Version: 3.4.0
4
4
  Summary: AI-native management hub for WordPress, WooCommerce, and self-hosted services via Model Context Protocol (MCP)
5
5
  Author-email: MCP Hub <contact@mcphub.dev>
6
6
  License-Expression: MIT
@@ -161,14 +161,14 @@ You should see the login page. Log in with your `MASTER_API_KEY` or via **GitHub
161
161
 
162
162
  ### Try It Now (No Setup Required)
163
163
 
164
- **Don't want to self-host?** Try the demo instance at **[mcp.palebluedot.live](https://mcp.palebluedot.live)**:
164
+ **Don't want to self-host?** Use the hosted instance at **[mcp.example.com](https://mcp.example.com)**:
165
165
 
166
166
  1. Log in with **GitHub** or **Google**
167
167
  2. Add your sites via the dashboard (My Sites → Add Service)
168
168
  3. Go to **Connect** page — generate config for your AI client
169
169
  4. Copy-paste the config into Claude Desktop, VS Code, or Claude Code
170
170
 
171
- Your personal MCP endpoint: `https://mcp.palebluedot.live/u/{your-user-id}/{alias}/mcp`
171
+ Your personal MCP endpoint: `https://mcp.example.com/u/{your-user-id}/{alias}/mcp`
172
172
 
173
173
  ---
174
174
 
@@ -133,10 +133,8 @@ plugins/openpanel/client.py
133
133
  plugins/openpanel/plugin.py
134
134
  plugins/openpanel/handlers/__init__.py
135
135
  plugins/openpanel/handlers/clients.py
136
- plugins/openpanel/handlers/dashboards.py
137
136
  plugins/openpanel/handlers/events.py
138
137
  plugins/openpanel/handlers/export.py
139
- plugins/openpanel/handlers/funnels.py
140
138
  plugins/openpanel/handlers/profiles.py
141
139
  plugins/openpanel/handlers/projects.py
142
140
  plugins/openpanel/handlers/reports.py
@@ -212,6 +210,7 @@ tests/test_oauth_revoke.py
212
210
  tests/test_oauth_schemas.py
213
211
  tests/test_oauth_storage.py
214
212
  tests/test_oauth_token_manager.py
213
+ tests/test_openpanel_plugin.py
215
214
  tests/test_plugin_visibility.py
216
215
  tests/test_rate_limiter.py
217
216
  tests/test_site_api.py
@@ -0,0 +1,11 @@
1
+ """
2
+ OpenPanel Plugin - Product Analytics Management.
3
+
4
+ Self-hosted OpenPanel management through public REST APIs (42 tools).
5
+ Event tracking, data export, analytics, project & client management.
6
+ """
7
+
8
+ from plugins.openpanel.client import OpenPanelClient
9
+ from plugins.openpanel.plugin import OpenPanelPlugin
10
+
11
+ __all__ = ["OpenPanelPlugin", "OpenPanelClient"]