mcp-dbutils 1.0.2__tar.gz → 1.0.4__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 (216) hide show
  1. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/CHANGELOG.md +14 -0
  2. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/PKG-INFO +1 -1
  3. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/installation-platform-specific.md +15 -24
  4. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/installation.md +29 -4
  5. mcp_dbutils-1.0.4/docs/design/multi_database_architecture.md +420 -0
  6. mcp_dbutils-1.0.4/docs/design/multi_database_class_diagram.md +440 -0
  7. mcp_dbutils-1.0.4/docs/design/multi_database_data_flow.md +386 -0
  8. mcp_dbutils-1.0.4/docs/design/multi_database_implementation_plan.md +350 -0
  9. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/installation-platform-specific.md +19 -38
  10. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/installation.md +29 -4
  11. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/installation-platform-specific.md +15 -24
  12. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/installation.md +29 -4
  13. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/installation-platform-specific.md +15 -24
  14. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/installation.md +29 -4
  15. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/installation-platform-specific.md +15 -24
  16. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/installation.md +29 -4
  17. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/installation-platform-specific.md +19 -38
  18. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/installation.md +29 -4
  19. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/pyproject.toml +1 -1
  20. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/base.py +8 -4
  21. mcp_dbutils-1.0.4/tests/unit/test_permission_combinations.py +224 -0
  22. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_sql_parsing.py +74 -0
  23. mcp_dbutils-1.0.4/tests/unit/test_table_name_handling.py +151 -0
  24. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.coveragerc +0 -0
  25. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/bug_report_ar.md +0 -0
  26. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/bug_report_en.md +0 -0
  27. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/bug_report_es.md +0 -0
  28. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/bug_report_fr.md +0 -0
  29. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/bug_report_ru.md +0 -0
  30. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/bug_report_zh.md +0 -0
  31. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  32. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/documentation_improvement_ar.md +0 -0
  33. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/documentation_improvement_en.md +0 -0
  34. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/documentation_improvement_es.md +0 -0
  35. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/documentation_improvement_fr.md +0 -0
  36. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/documentation_improvement_ru.md +0 -0
  37. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/documentation_improvement_zh.md +0 -0
  38. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/feature_request_ar.md +0 -0
  39. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/feature_request_en.md +0 -0
  40. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/feature_request_es.md +0 -0
  41. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/feature_request_fr.md +0 -0
  42. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/feature_request_ru.md +0 -0
  43. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/feature_request_zh.md +0 -0
  44. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/performance_issue_ar.md +0 -0
  45. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/performance_issue_en.md +0 -0
  46. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/performance_issue_es.md +0 -0
  47. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/performance_issue_fr.md +0 -0
  48. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/performance_issue_ru.md +0 -0
  49. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/performance_issue_zh.md +0 -0
  50. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/security_vulnerability_ar.md +0 -0
  51. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/security_vulnerability_en.md +0 -0
  52. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/security_vulnerability_es.md +0 -0
  53. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/security_vulnerability_fr.md +0 -0
  54. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/security_vulnerability_ru.md +0 -0
  55. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/ISSUE_TEMPLATE/security_vulnerability_zh.md +0 -0
  56. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/workflows/code-style.yml +0 -0
  57. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/workflows/issue-translator.yml +0 -0
  58. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/workflows/quality-assurance.yml +0 -0
  59. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.github/workflows/release.yml +0 -0
  60. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.gitignore +0 -0
  61. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.pre-commit-config.yaml +0 -0
  62. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/.releaserc.json +0 -0
  63. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/Dockerfile +0 -0
  64. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/LICENSE +0 -0
  65. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/README.md +0 -0
  66. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/README_AR.md +0 -0
  67. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/README_EN.md +0 -0
  68. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/README_ES.md +0 -0
  69. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/README_FR.md +0 -0
  70. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/README_RU.md +0 -0
  71. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/config.yaml.example +0 -0
  72. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/configuration.md +0 -0
  73. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/examples/README.md +0 -0
  74. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/examples/advanced-llm-interactions.md +0 -0
  75. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/examples/mysql-examples.md +0 -0
  76. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/examples/postgresql-examples.md +0 -0
  77. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/examples/sqlite-examples.md +0 -0
  78. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/technical/architecture.md +0 -0
  79. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/technical/development.md +0 -0
  80. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/technical/security.md +0 -0
  81. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/technical/sonarcloud-integration.md +0 -0
  82. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/technical/testing.md +0 -0
  83. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ar/usage.md +0 -0
  84. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/document-consistency-check.md +0 -0
  85. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/document-version-history.md +0 -0
  86. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/configuration.md +0 -0
  87. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/examples/advanced-llm-interactions.md +0 -0
  88. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/examples/mysql-examples.md +0 -0
  89. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/examples/postgresql-examples.md +0 -0
  90. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/examples/sqlite-examples.md +0 -0
  91. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/technical/architecture.md +0 -0
  92. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/technical/development.md +0 -0
  93. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/technical/security.md +0 -0
  94. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/technical/sonarcloud-integration.md +0 -0
  95. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/technical/testing.md +0 -0
  96. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/en/usage.md +0 -0
  97. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/configuration.md +0 -0
  98. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/examples/README.md +0 -0
  99. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/examples/advanced-llm-interactions.md +0 -0
  100. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/examples/mysql-examples.md +0 -0
  101. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/examples/postgresql-examples.md +0 -0
  102. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/examples/sqlite-examples.md +0 -0
  103. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/technical/architecture.md +0 -0
  104. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/technical/development.md +0 -0
  105. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/technical/security.md +0 -0
  106. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/technical/sonarcloud-integration.md +0 -0
  107. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/technical/testing.md +0 -0
  108. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/es/usage.md +0 -0
  109. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/configuration.md +0 -0
  110. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/examples/README.md +0 -0
  111. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/examples/advanced-llm-interactions.md +0 -0
  112. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/examples/mysql-examples.md +0 -0
  113. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/examples/postgresql-examples.md +0 -0
  114. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/examples/sqlite-examples.md +0 -0
  115. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/technical/architecture.md +0 -0
  116. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/technical/development.md +0 -0
  117. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/technical/security.md +0 -0
  118. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/technical/sonarcloud-integration.md +0 -0
  119. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/technical/testing.md +0 -0
  120. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/fr/usage.md +0 -0
  121. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/index.md +0 -0
  122. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/configuration.md +0 -0
  123. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/examples/README.md +0 -0
  124. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/examples/advanced-llm-interactions.md +0 -0
  125. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/examples/mysql-examples.md +0 -0
  126. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/examples/postgresql-examples.md +0 -0
  127. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/examples/sqlite-examples.md +0 -0
  128. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/technical/architecture.md +0 -0
  129. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/technical/development.md +0 -0
  130. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/technical/security.md +0 -0
  131. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/technical/sonarcloud-integration.md +0 -0
  132. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/technical/testing.md +0 -0
  133. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/ru/usage.md +0 -0
  134. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/write-operations.md +0 -0
  135. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/configuration-write-operations.md +0 -0
  136. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/configuration.md +0 -0
  137. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/examples/advanced-llm-interactions.md +0 -0
  138. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/examples/mysql-examples.md +0 -0
  139. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/examples/postgresql-examples.md +0 -0
  140. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/examples/sqlite-examples.md +0 -0
  141. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/security-best-practices.md +0 -0
  142. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/architecture.md +0 -0
  143. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/audit-logging.md +0 -0
  144. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/development.md +0 -0
  145. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/security.md +0 -0
  146. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/sonarcloud-integration.md +0 -0
  147. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/testing.md +0 -0
  148. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/technical/write-operations-design.md +0 -0
  149. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/usage-write-operations.md +0 -0
  150. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/docs/zh/usage.md +0 -0
  151. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/examples/config.yaml +0 -0
  152. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/check_docs_consistency.py +0 -0
  153. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/check_zh_docs.py +0 -0
  154. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/fix_en_nav_links.py +0 -0
  155. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/fix_imports.sh +0 -0
  156. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/fix_remaining_issues.sh +0 -0
  157. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/fix_zh_nav_links.py +0 -0
  158. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/run_sonar_analysis.sh +0 -0
  159. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/scripts/sonar-ai-fix.fish +0 -0
  160. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/smithery.yaml +0 -0
  161. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/sonar-project.properties +0 -0
  162. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/__init__.py +0 -0
  163. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/audit.py +0 -0
  164. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/config.py +0 -0
  165. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/log.py +0 -0
  166. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/mysql/__init__.py +0 -0
  167. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/mysql/config.py +0 -0
  168. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/mysql/handler.py +0 -0
  169. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/mysql/server.py +0 -0
  170. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/postgres/__init__.py +0 -0
  171. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/postgres/config.py +0 -0
  172. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/postgres/handler.py +0 -0
  173. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/postgres/server.py +0 -0
  174. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/sqlite/__init__.py +0 -0
  175. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/sqlite/config.py +0 -0
  176. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/sqlite/handler.py +0 -0
  177. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/sqlite/server.py +0 -0
  178. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/src/mcp_dbutils/stats.py +0 -0
  179. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/conftest.py +0 -0
  180. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/__init__.py +0 -0
  181. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/conftest.py +0 -0
  182. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/fixtures.py +0 -0
  183. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_list_connections.py +0 -0
  184. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_logging.py +0 -0
  185. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_monitoring.py +0 -0
  186. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_monitoring_enhanced.py +0 -0
  187. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_mysql.py +0 -0
  188. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_mysql_config.py +0 -0
  189. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_mysql_config_helpers.py +0 -0
  190. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_mysql_handler_extended.py +0 -0
  191. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_postgres.py +0 -0
  192. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_postgres_config.py +0 -0
  193. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_prompts.py +0 -0
  194. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_sqlite.py +0 -0
  195. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_sqlite_config.py +0 -0
  196. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_sqlite_handler_extended.py +0 -0
  197. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_tools.py +0 -0
  198. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/integration/test_tools_advanced.py +0 -0
  199. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/test_write_operations.py +0 -0
  200. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_audit.py +0 -0
  201. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_base.py +0 -0
  202. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_base_extended.py +0 -0
  203. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_base_handlers.py +0 -0
  204. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_base_helpers.py +0 -0
  205. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_base_server.py +0 -0
  206. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_base_write_operations.py +0 -0
  207. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_init.py +0 -0
  208. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_log.py +0 -0
  209. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_mysql_handler.py +0 -0
  210. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_mysql_server.py +0 -0
  211. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_postgres_handler.py +0 -0
  212. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_postgres_server.py +0 -0
  213. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_sqlite_handler.py +0 -0
  214. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_sqlite_server.py +0 -0
  215. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_stats.py +0 -0
  216. {mcp_dbutils-1.0.2 → mcp_dbutils-1.0.4}/tests/unit/test_write_permissions.py +0 -0
@@ -1,3 +1,17 @@
1
+ ## [1.0.4](https://github.com/donghao1393/mcp-dbutils/compare/v1.0.3...v1.0.4) (2025-05-12)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * 修改文档中的Docker安装说明,添加获取项目代码步骤 ([#111](https://github.com/donghao1393/mcp-dbutils/issues/111)) ([e56805f](https://github.com/donghao1393/mcp-dbutils/commit/e56805fe01ae32e28c60cdeaf2458d936ee8ca15)), closes [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110) [#110](https://github.com/donghao1393/mcp-dbutils/issues/110)
7
+
8
+ ## [1.0.3](https://github.com/donghao1393/mcp-dbutils/compare/v1.0.2...v1.0.3) (2025-05-05)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * 修复_extract_table_name方法处理多行SQL语句的问题 ([#98](https://github.com/donghao1393/mcp-dbutils/issues/98)) ([69eb5e1](https://github.com/donghao1393/mcp-dbutils/commit/69eb5e11e5007a5d36b09ff2bedbc1d3997815af)), closes [#97](https://github.com/donghao1393/mcp-dbutils/issues/97)
14
+
1
15
  ## [1.0.2](https://github.com/donghao1393/mcp-dbutils/compare/v1.0.1...v1.0.2) (2025-05-05)
2
16
 
3
17
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-dbutils
3
- Version: 1.0.2
3
+ Version: 1.0.4
4
4
  Summary: MCP Database Utilities Service
5
5
  Author: Dong Hao
6
6
  License-Expression: MIT
@@ -214,39 +214,30 @@ npx -y @smithery/cli install @donghao1393/mcp-dbutils --client claude
214
214
  - Docker مثبت ويعمل
215
215
  - اتصال بالإنترنت (لتنزيل صورة Docker)
216
216
 
217
- ### استخدام صورة Docker الرسمية
217
+ ### استخدام صورة Docker
218
218
 
219
- 1. قم بسحب صورة Docker:
219
+ 1. احصل على كود المشروع:
220
220
  ```bash
221
- docker pull mcp/dbutils
221
+ git clone https://github.com/donghao1393/mcp-dbutils.git
222
222
  ```
223
+ أو قم بتنزيل أحدث إصدار من [صفحة الإصدارات](https://github.com/donghao1393/mcp-dbutils/releases) واستخراجه
223
224
 
224
- 2. قم بتشغيل الحاوية مع ملف التكوين الخاص بك:
225
+ 2. انتقل إلى دليل المشروع:
225
226
  ```bash
226
- docker run -i --rm -v /path/to/config.yaml:/app/config.yaml mcp/dbutils --config /app/config.yaml
227
+ cd mcp-dbutils
227
228
  ```
228
229
 
229
- ### إنشاء صورة Docker مخصصة
230
-
231
- إذا كنت بحاجة إلى تخصيص صورة Docker، يمكنك إنشاء Dockerfile الخاص بك:
232
-
233
- ```dockerfile
234
- FROM python:3.10-slim
235
-
236
- WORKDIR /app
237
-
238
- RUN pip install --no-cache-dir mcp-dbutils
239
-
240
- ENTRYPOINT ["mcp-dbutils"]
241
- CMD ["--help"]
242
- ```
230
+ 3. قم ببناء صورة MCP Database Utilities:
231
+ ```bash
232
+ docker build -t mcp/dbutils .
233
+ ```
243
234
 
244
- قم ببناء وتشغيل صورتك المخصصة:
235
+ 4. قم بتكوين تطبيق الذكاء الاصطناعي الخاص بك لاستخدام هذه الصورة (انظر [دليل التثبيت](installation.md) الخيار ب)
245
236
 
246
- ```bash
247
- docker build -t custom-mcp-dbutils .
248
- docker run -i --rm -v /path/to/config.yaml:/app/config.yaml custom-mcp-dbutils --config /app/config.yaml
249
- ```
237
+ > **ملاحظة**:
238
+ > - يحتوي دليل المشروع الجذر بالفعل على Dockerfile، لذلك لا تحتاج إلى إنشاء واحد يدويًا
239
+ > - للتحديث إلى أحدث إصدار، ستحتاج إلى الحصول على أحدث كود وإعادة بناء الصورة
240
+ > - هذه خدمة MCP، مخصصة بشكل أساسي ليتم استدعاؤها بواسطة LLMs في تطبيقات الذكاء الاصطناعي، وليس لتشغيلها كخدمة مستقلة
250
241
 
251
242
  ## التثبيت بدون اتصال بالإنترنت
252
243
 
@@ -132,7 +132,25 @@ connections:
132
132
 
133
133
  نفس الخطوة 2 في الخيار أ، قم بإنشاء ملف `config.yaml`.
134
134
 
135
- ### الخطوة 3: تكوين تطبيق الذكاء الاصطناعي الخاص بك
135
+ ### الخطوة 3: الحصول على كود المشروع وبناء صورة Docker
136
+
137
+ 1. أولاً، احصل على كود المشروع (اختر إحدى الطرق التالية):
138
+ - استنساخ المشروع من GitHub: `git clone https://github.com/donghao1393/mcp-dbutils.git`
139
+ - أو قم بتنزيل أحدث إصدار من [صفحة الإصدارات](https://github.com/donghao1393/mcp-dbutils/releases) واستخراجه
140
+
141
+ 2. انتقل إلى دليل المشروع:
142
+ ```bash
143
+ cd mcp-dbutils
144
+ ```
145
+
146
+ 3. قم ببناء صورة Docker:
147
+ ```bash
148
+ docker build -t mcp/dbutils .
149
+ ```
150
+
151
+ > **ملاحظة**: يحتوي دليل المشروع الجذر بالفعل على Dockerfile، لذلك لا تحتاج إلى إنشاء واحد يدويًا. للتحديث إلى أحدث إصدار، ستحتاج إلى الحصول على أحدث كود وإعادة بناء الصورة.
152
+
153
+ ### الخطوة 4: تكوين تطبيق الذكاء الاصطناعي الخاص بك
136
154
 
137
155
  #### تكوين Claude Desktop
138
156
 
@@ -304,9 +322,16 @@ uv pip install -U mcp-dbutils
304
322
 
305
323
  ### تحديث الخيار ب (Docker)
306
324
 
307
- ```bash
308
- docker pull mcp/dbutils:latest
309
- ```
325
+ 1. احصل على أحدث كود للمشروع:
326
+ ```bash
327
+ git pull
328
+ ```
329
+ أو قم بتنزيل أحدث إصدار من [صفحة الإصدارات](https://github.com/donghao1393/mcp-dbutils/releases)
330
+
331
+ 2. أعد بناء صورة Docker الخاصة بك:
332
+ ```bash
333
+ docker build -t mcp/dbutils .
334
+ ```
310
335
 
311
336
  ### تحديث الخيار ج (Smithery)
312
337
 
@@ -0,0 +1,420 @@
1
+ # 多数据库支持架构设计
2
+
3
+ ## 1. 概述
4
+
5
+ 本文档描述了MCP Database Utilities的多数据库支持架构设计,旨在提供一个统一的接口来支持不同类型的数据库,包括关系型数据库(如MySQL、PostgreSQL)和NoSQL数据库(如MongoDB、Redis)。
6
+
7
+ ## 2. 设计目标
8
+
9
+ - 提供统一的接口,隐藏不同数据库的实现细节
10
+ - 支持动态切换数据库类型
11
+ - 保持现有功能的兼容性
12
+ - 提供灵活的扩展机制,便于添加新的数据库类型
13
+ - 维持高性能和可靠性
14
+ - 支持统一的权限控制和审计机制
15
+
16
+ ## 3. 架构概览
17
+
18
+ 多数据库支持架构采用分层设计,包括以下几个主要层次:
19
+
20
+ ```mermaid
21
+ graph TD
22
+ Client[客户端] --> API[API层]
23
+ API --> Permission[权限层]
24
+ Permission --> Query[查询层]
25
+ Query --> Adapter[适配器层]
26
+ Adapter --> Connection[连接层]
27
+ Connection --> DB[(数据库)]
28
+
29
+ subgraph 适配器层
30
+ SQLAdapter[SQL适配器]
31
+ MongoAdapter[MongoDB适配器]
32
+ RedisAdapter[Redis适配器]
33
+ end
34
+
35
+ subgraph 连接层
36
+ SQLConnection[SQL连接]
37
+ MongoConnection[MongoDB连接]
38
+ RedisConnection[Redis连接]
39
+ end
40
+ ```
41
+
42
+ ### 3.1 连接层
43
+
44
+ 连接层负责管理与不同数据库的连接,包括连接池管理、认证和基本连接参数处理。
45
+
46
+ 主要组件:
47
+ - `ConnectionFactory`:工厂类,负责创建适当类型的连接
48
+ - `BaseConnection`:所有连接类的基类,定义通用接口
49
+ - `SQLConnection`:SQL数据库连接类
50
+ - `MongoConnection`:MongoDB连接类
51
+ - `RedisConnection`:Redis连接类
52
+
53
+ ### 3.2 适配器层
54
+
55
+ 适配器层为每种数据库类型提供一个适配器,实现统一的接口,将通用操作转换为特定数据库的操作。
56
+
57
+ 主要组件:
58
+ - `BaseAdapter`:所有适配器的基类,定义通用接口
59
+ - `SQLAdapter`:SQL数据库适配器
60
+ - `MongoAdapter`:MongoDB适配器
61
+ - `RedisAdapter`:Redis适配器
62
+
63
+ ### 3.3 查询层
64
+
65
+ 查询层提供统一的查询构建API,将通用查询转换为特定数据库的查询语言。
66
+
67
+ 主要组件:
68
+ - `QueryBuilder`:查询构建器基类
69
+ - `SQLQueryBuilder`:SQL查询构建器
70
+ - `MongoQueryBuilder`:MongoDB查询构建器
71
+ - `RedisCommandBuilder`:Redis命令构建器
72
+
73
+ ### 3.4 权限层
74
+
75
+ 权限层负责统一的权限检查和控制,确保操作符合权限规则。
76
+
77
+ 主要组件:
78
+ - `PermissionChecker`:权限检查器
79
+ - `OperationValidator`:操作验证器
80
+ - `AuditLogger`:审计日志记录器
81
+
82
+ ### 3.5 API层
83
+
84
+ API层提供统一的对外接口,是客户端与数据库交互的入口点。
85
+
86
+ 主要组件:
87
+ - `DatabaseClient`:统一的客户端接口
88
+ - `ConnectionManager`:连接管理器
89
+ - `TransactionManager`:事务管理器
90
+
91
+ ## 4. 关键接口设计
92
+
93
+ ### 4.1 BaseConnection接口
94
+
95
+ ```python
96
+ class BaseConnection:
97
+ """所有数据库连接的基类"""
98
+
99
+ def connect(self):
100
+ """建立连接"""
101
+ pass
102
+
103
+ def disconnect(self):
104
+ """断开连接"""
105
+ pass
106
+
107
+ def is_connected(self):
108
+ """检查连接状态"""
109
+ pass
110
+
111
+ def execute(self, query, params=None):
112
+ """执行查询"""
113
+ pass
114
+
115
+ def begin_transaction(self):
116
+ """开始事务"""
117
+ pass
118
+
119
+ def commit(self):
120
+ """提交事务"""
121
+ pass
122
+
123
+ def rollback(self):
124
+ """回滚事务"""
125
+ pass
126
+ ```
127
+
128
+ ### 4.2 BaseAdapter接口
129
+
130
+ ```python
131
+ class BaseAdapter:
132
+ """所有数据库适配器的基类"""
133
+
134
+ def __init__(self, connection):
135
+ """初始化适配器"""
136
+ self.connection = connection
137
+
138
+ def execute_query(self, query, params=None):
139
+ """执行查询"""
140
+ pass
141
+
142
+ def execute_write(self, query, params=None):
143
+ """执行写操作"""
144
+ pass
145
+
146
+ def list_resources(self):
147
+ """列出资源(表/集合/键)"""
148
+ pass
149
+
150
+ def describe_resource(self, resource_name):
151
+ """描述资源结构"""
152
+ pass
153
+
154
+ def get_resource_stats(self, resource_name):
155
+ """获取资源统计信息"""
156
+ pass
157
+
158
+ def extract_resource_name(self, query):
159
+ """从查询中提取资源名称"""
160
+ pass
161
+ ```
162
+
163
+ ### 4.3 QueryBuilder接口
164
+
165
+ ```python
166
+ class QueryBuilder:
167
+ """查询构建器基类"""
168
+
169
+ def select(self, resource_name, fields=None):
170
+ """构建选择查询"""
171
+ pass
172
+
173
+ def insert(self, resource_name, data):
174
+ """构建插入查询"""
175
+ pass
176
+
177
+ def update(self, resource_name, data, condition):
178
+ """构建更新查询"""
179
+ pass
180
+
181
+ def delete(self, resource_name, condition):
182
+ """构建删除查询"""
183
+ pass
184
+
185
+ def build(self):
186
+ """构建最终查询"""
187
+ pass
188
+ ```
189
+
190
+ ### 4.4 PermissionChecker接口
191
+
192
+ ```python
193
+ class PermissionChecker:
194
+ """权限检查器"""
195
+
196
+ def check_permission(self, connection_name, resource_name, operation_type):
197
+ """检查权限"""
198
+ pass
199
+
200
+ def get_allowed_operations(self, connection_name, resource_name):
201
+ """获取允许的操作"""
202
+ pass
203
+ ```
204
+
205
+ ## 5. 数据流
206
+
207
+ 以下是典型操作的数据流:
208
+
209
+ ### 5.1 读操作
210
+
211
+ ```mermaid
212
+ sequenceDiagram
213
+ participant Client
214
+ participant API as API层
215
+ participant Permission as 权限层
216
+ participant Query as 查询层
217
+ participant Adapter as 适配器层
218
+ participant Connection as 连接层
219
+ participant DB as 数据库
220
+
221
+ Client->>API: 执行查询
222
+ API->>Permission: 检查权限
223
+ Permission-->>API: 权限验证通过
224
+ API->>Query: 构建查询
225
+ Query-->>API: 返回查询对象
226
+ API->>Adapter: 执行查询
227
+ Adapter->>Connection: 发送查询
228
+ Connection->>DB: 执行数据库操作
229
+ DB-->>Connection: 返回结果
230
+ Connection-->>Adapter: 返回结果
231
+ Adapter-->>API: 转换并返回结果
232
+ API-->>Client: 返回最终结果
233
+ ```
234
+
235
+ ### 5.2 写操作
236
+
237
+ ```mermaid
238
+ sequenceDiagram
239
+ participant Client
240
+ participant API as API层
241
+ participant Permission as 权限层
242
+ participant Query as 查询层
243
+ participant Adapter as 适配器层
244
+ participant Connection as 连接层
245
+ participant DB as 数据库
246
+
247
+ Client->>API: 执行写操作
248
+ API->>Permission: 检查写权限
249
+ Permission-->>API: 权限验证通过
250
+ API->>Query: 构建写操作
251
+ Query-->>API: 返回写操作对象
252
+ API->>Adapter: 执行写操作
253
+ Adapter->>Connection: 发送写操作
254
+ Connection->>DB: 执行数据库操作
255
+ DB-->>Connection: 返回结果
256
+ Connection-->>Adapter: 返回结果
257
+ Adapter-->>API: 转换并返回结果
258
+ API-->>Client: 返回最终结果
259
+ ```
260
+
261
+ ## 6. 资源命名和操作类型统一
262
+
263
+ ### 6.1 资源命名
264
+
265
+ 不同数据库使用不同的术语来表示数据存储单元:
266
+
267
+ | 数据库类型 | 资源类型 |
268
+ |----------|---------|
269
+ | SQL | 表(Table) |
270
+ | MongoDB | 集合(Collection) |
271
+ | Redis | 键(Key) |
272
+
273
+ 为了统一这些概念,我们将使用"资源"(Resource)作为通用术语,并在适配器层进行适当的转换。
274
+
275
+ ### 6.2 操作类型统一
276
+
277
+ 不同数据库支持不同的操作类型,我们将定义一组通用的操作类型:
278
+
279
+ | 通用操作类型 | SQL等价操作 | MongoDB等价操作 | Redis等价操作 |
280
+ |------------|-----------|--------------|-------------|
281
+ | READ | SELECT | find | GET, HGET等 |
282
+ | INSERT | INSERT | insertOne | SET, HSET等 |
283
+ | UPDATE | UPDATE | updateOne | SET, HSET等 |
284
+ | DELETE | DELETE | deleteOne | DEL, HDEL等 |
285
+
286
+ ## 7. 错误处理和重试机制
287
+
288
+ ### 7.1 错误类型统一
289
+
290
+ 不同数据库产生不同类型的错误,我们将定义一组通用的错误类型:
291
+
292
+ - `ConnectionError`:连接错误
293
+ - `AuthenticationError`:认证错误
294
+ - `ResourceNotFoundError`:资源不存在
295
+ - `DuplicateKeyError`:重复键错误
296
+ - `PermissionError`:权限错误
297
+ - `QueryError`:查询错误
298
+ - `TransactionError`:事务错误
299
+
300
+ ### 7.2 重试机制
301
+
302
+ 对于临时性错误(如连接超时),我们将实现统一的重试机制:
303
+
304
+ - 指数退避算法
305
+ - 可配置的最大重试次数
306
+ - 可配置的重试间隔
307
+ - 特定错误类型的重试策略
308
+
309
+ ## 8. 配置管理
310
+
311
+ 配置文件将扩展以支持多数据库类型:
312
+
313
+ ```yaml
314
+ connections:
315
+ mysql_conn:
316
+ type: mysql
317
+ host: localhost
318
+ port: 3306
319
+ database: test_db
320
+ username: user
321
+ password: pass
322
+ writable: true
323
+ write_permissions:
324
+ default_policy: read_only
325
+ tables:
326
+ users:
327
+ operations: [INSERT, UPDATE]
328
+
329
+ mongo_conn:
330
+ type: mongodb
331
+ uri: mongodb://localhost:27017
332
+ database: test_db
333
+ writable: true
334
+ write_permissions:
335
+ default_policy: read_only
336
+ collections:
337
+ users:
338
+ operations: [INSERT, UPDATE]
339
+
340
+ redis_conn:
341
+ type: redis
342
+ host: localhost
343
+ port: 6379
344
+ database: 0
345
+ writable: true
346
+ write_permissions:
347
+ default_policy: read_only
348
+ keys:
349
+ user:*:
350
+ operations: [SET, DEL]
351
+ ```
352
+
353
+ ## 9. 实现计划
354
+
355
+ 多数据库支持架构的实现将分为以下几个阶段:
356
+
357
+ ### 阶段1:基础架构设计和实现
358
+
359
+ - 设计和实现连接层
360
+ - 设计和实现适配器层
361
+ - 设计和实现基本的查询层
362
+ - 更新配置管理
363
+
364
+ ### 阶段2:SQL数据库支持
365
+
366
+ - 实现SQL连接和适配器
367
+ - 实现SQL查询构建器
368
+ - 实现SQL权限检查
369
+
370
+ ### 阶段3:MongoDB支持
371
+
372
+ - 实现MongoDB连接和适配器
373
+ - 实现MongoDB查询构建器
374
+ - 实现MongoDB权限检查
375
+
376
+ ### 阶段4:Redis支持
377
+
378
+ - 实现Redis连接和适配器
379
+ - 实现Redis命令构建器
380
+ - 实现Redis权限检查
381
+
382
+ ### 阶段5:高级功能和优化
383
+
384
+ - 实现事务支持
385
+ - 优化性能
386
+ - 完善错误处理和重试机制
387
+ - 增强测试覆盖率
388
+
389
+ ## 10. 兼容性考虑
390
+
391
+ 为了保持与现有代码的兼容性,我们将:
392
+
393
+ - 保持现有API的向后兼容性
394
+ - 提供迁移工具和指南
395
+ - 在一段时间内同时支持旧API和新API
396
+ - 逐步弃用旧API
397
+
398
+ ## 11. 测试策略
399
+
400
+ 测试策略将包括:
401
+
402
+ - 单元测试:测试各个组件的功能
403
+ - 集成测试:测试组件之间的交互
404
+ - 端到端测试:测试完整的数据流
405
+ - 性能测试:测试系统在不同负载下的性能
406
+ - 兼容性测试:测试与不同数据库版本的兼容性
407
+
408
+ ## 12. 文档计划
409
+
410
+ 文档计划将包括:
411
+
412
+ - 架构设计文档
413
+ - API参考文档
414
+ - 用户指南
415
+ - 迁移指南
416
+ - 示例和教程
417
+
418
+ ## 13. 总结
419
+
420
+ 多数据库支持架构将为MCP Database Utilities提供一个灵活、可扩展的基础,支持不同类型的数据库,同时保持统一的接口和一致的用户体验。通过分层设计和适当的抽象,我们可以隔离不同数据库的特性差异,提供统一的接口,同时保持足够的灵活性来支持各种数据库特性。