@ngocsangairvds/vsaf 3.1.27 → 3.2.2

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 (303) hide show
  1. package/package.json +2 -2
  2. package/src/global.js +65 -39
  3. package/tools/skills/vds-scripts-skill/.openskills.json +6 -0
  4. package/tools/skills/vds-scripts-skill/QUALITY.md +44 -0
  5. package/tools/skills/vds-scripts-skill/SKILL.md +135 -0
  6. package/tools/skills/vds-scripts-skill/references/audit-commands.md +171 -0
  7. package/tools/skills/vds-scripts-skill/references/capability-index.md +34 -0
  8. package/tools/skills/vds-scripts-skill/references/development-commands.md +12 -0
  9. package/tools/skills/vds-scripts-skill/references/google-sheets.md +73 -0
  10. package/tools/skills/vds-scripts-skill/references/integration-commands.md +17 -0
  11. package/tools/skills/vds-scripts-skill/references/platform-bootstrap.md +31 -0
  12. package/tools/skills/vds-scripts-skill/references/specialist-routing.md +14 -0
  13. package/tools/skills/vds-scripts-skill/references/validation-commands.md +15 -0
  14. package/tools/skills/vsaf-build/SKILL.md +32 -2
  15. package/tools/skills/vsaf-ship/SKILL.md +41 -10
  16. package/tools/skills/vsaf-test/SKILL.md +8 -0
  17. package/tools/vds-scripts/.mcp.json +11 -0
  18. package/tools/vds-scripts/.secrets.baseline +133 -0
  19. package/tools/vds-scripts/AGENTS.md +152 -0
  20. package/tools/vds-scripts/CLAUDE.md +101 -0
  21. package/tools/vds-scripts/CLI_COMMAND_OPTIMIZATION.md +156 -0
  22. package/tools/vds-scripts/PACKAGE_P125B_IMPLEMENTATION_SUMMARY.md +131 -0
  23. package/tools/vds-scripts/PROJECT_COMPLETION_SUMMARY.md +45 -0
  24. package/tools/vds-scripts/README.md +97 -0
  25. package/tools/vds-scripts/bitbucket_manifest_mapping.toml +34 -0
  26. package/tools/vds-scripts/bitbucket_orchestrator/ARCHITECTURE_ANALYSIS.md +258 -0
  27. package/tools/vds-scripts/bitbucket_orchestrator/BITBUCKET_API_PRACTICES.md +393 -0
  28. package/tools/vds-scripts/bitbucket_orchestrator/EVALUATION_REPORT.md +61 -0
  29. package/tools/vds-scripts/bitbucket_orchestrator/FEATURES.md +908 -0
  30. package/tools/vds-scripts/bitbucket_orchestrator/README.md +687 -0
  31. package/tools/vds-scripts/bitbucket_orchestrator/pyproject.toml +40 -0
  32. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/__init__.py +20 -0
  33. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/async_client.py +657 -0
  34. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/cli.py +2108 -0
  35. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/client.py +2534 -0
  36. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/config.py +171 -0
  37. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/errors.py +67 -0
  38. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/factory.py +185 -0
  39. package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/protocols.py +244 -0
  40. package/tools/vds-scripts/bitbucket_orchestrator/tests/__init__.py +8 -0
  41. package/tools/vds-scripts/bitbucket_orchestrator/tests/conftest.py +65 -0
  42. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_advanced_search.py +151 -0
  43. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_async_client.py +546 -0
  44. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_branch_permissions.py +145 -0
  45. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_cli.py +115 -0
  46. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client.py +157 -0
  47. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_branch_conditions.py +79 -0
  48. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_code_advanced.py +163 -0
  49. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_code_file.py +32 -0
  50. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_deployment_environments.py +194 -0
  51. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_issues.py +164 -0
  52. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_pipelines_advanced.py +179 -0
  53. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_pr_blockers.py +119 -0
  54. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_repository_variables.py +156 -0
  55. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code.py +98 -0
  56. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code_advanced.py +282 -0
  57. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code_insights.py +335 -0
  58. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_conditions.py +147 -0
  59. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_config.py +131 -0
  60. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_deployment_env.py +352 -0
  61. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_factory.py +371 -0
  62. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_fork_operations.py +204 -0
  63. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_issue_cli.py +261 -0
  64. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_pipeline_advanced.py +270 -0
  65. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_pr_blocker.py +204 -0
  66. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_protocols.py +334 -0
  67. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_repo_settings.py +343 -0
  68. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_repo_variables.py +270 -0
  69. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_webhooks.py +189 -0
  70. package/tools/vds-scripts/bitbucket_orchestrator/tests/test_workspace.py +233 -0
  71. package/tools/vds-scripts/bitbucket_orchestrator/uv.lock +742 -0
  72. package/tools/vds-scripts/confluence_orchestrator/Dockerfile +19 -0
  73. package/tools/vds-scripts/confluence_orchestrator/README.md +412 -0
  74. package/tools/vds-scripts/confluence_orchestrator/SYNC_SCRIPTS.md +127 -0
  75. package/tools/vds-scripts/confluence_orchestrator/SYNC_STANDARDIZATION.md +108 -0
  76. package/tools/vds-scripts/confluence_orchestrator/pyproject.toml +48 -0
  77. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/__init__.py +20 -0
  78. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/cli.py +2532 -0
  79. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/config.py +175 -0
  80. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content.py +290 -0
  81. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content_v2.py +94 -0
  82. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/crawl_tree.py +1835 -0
  83. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/errors.py +80 -0
  84. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/eventing.py +109 -0
  85. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/http.py +1114 -0
  86. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/orchestration.py +165 -0
  87. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/reporting.py +78 -0
  88. package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/tree.py +121 -0
  89. package/tools/vds-scripts/confluence_orchestrator/sync_pdfs_from_markdown.py +213 -0
  90. package/tools/vds-scripts/confluence_orchestrator/sync_pdfs_to_confluence.py +305 -0
  91. package/tools/vds-scripts/confluence_orchestrator/sync_png_attachments.py +305 -0
  92. package/tools/vds-scripts/confluence_orchestrator/tests/__init__.py +0 -0
  93. package/tools/vds-scripts/confluence_orchestrator/tests/conftest.py +8 -0
  94. package/tools/vds-scripts/confluence_orchestrator/tests/test_advanced_content.py +224 -0
  95. package/tools/vds-scripts/confluence_orchestrator/tests/test_advanced_search.py +188 -0
  96. package/tools/vds-scripts/confluence_orchestrator/tests/test_cache_management.py +247 -0
  97. package/tools/vds-scripts/confluence_orchestrator/tests/test_cli.py +499 -0
  98. package/tools/vds-scripts/confluence_orchestrator/tests/test_config.py +83 -0
  99. package/tools/vds-scripts/confluence_orchestrator/tests/test_content.py +186 -0
  100. package/tools/vds-scripts/confluence_orchestrator/tests/test_content_flags.py +27 -0
  101. package/tools/vds-scripts/confluence_orchestrator/tests/test_crawl_tree.py +2250 -0
  102. package/tools/vds-scripts/confluence_orchestrator/tests/test_draft_management.py +223 -0
  103. package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing.py +71 -0
  104. package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_chaos.py +37 -0
  105. package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_rate_limit.py +44 -0
  106. package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_timeout.py +49 -0
  107. package/tools/vds-scripts/confluence_orchestrator/tests/test_export.py +230 -0
  108. package/tools/vds-scripts/confluence_orchestrator/tests/test_history.py +204 -0
  109. package/tools/vds-scripts/confluence_orchestrator/tests/test_http.py +117 -0
  110. package/tools/vds-scripts/confluence_orchestrator/tests/test_orchestration.py +91 -0
  111. package/tools/vds-scripts/confluence_orchestrator/tests/test_reporting.py +24 -0
  112. package/tools/vds-scripts/confluence_orchestrator/tests/test_search_cql.py +34 -0
  113. package/tools/vds-scripts/confluence_orchestrator/tests/test_space_management.py +237 -0
  114. package/tools/vds-scripts/confluence_orchestrator/tests/test_space_permissions.py +332 -0
  115. package/tools/vds-scripts/confluence_orchestrator/tests/test_user_group_management.py +388 -0
  116. package/tools/vds-scripts/confluence_orchestrator/uv.lock +1023 -0
  117. package/tools/vds-scripts/git_orchestrator/ENHANCEMENT_SUMMARY.md +119 -0
  118. package/tools/vds-scripts/git_orchestrator/README.md +280 -0
  119. package/tools/vds-scripts/git_orchestrator/VERIFICATION_REPORT.md +152 -0
  120. package/tools/vds-scripts/git_orchestrator/pyproject.toml +35 -0
  121. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__init__.py +7 -0
  122. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__main__.py +4 -0
  123. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/cli.py +847 -0
  124. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/logging_config.py +63 -0
  125. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/manifest.py +129 -0
  126. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/orchestrator.py +819 -0
  127. package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/reporting.py +53 -0
  128. package/tools/vds-scripts/git_orchestrator/tests/__init__.py +0 -0
  129. package/tools/vds-scripts/git_orchestrator/tests/test_cli_settings.py +21 -0
  130. package/tools/vds-scripts/git_orchestrator/tests/test_integration.py +74 -0
  131. package/tools/vds-scripts/git_orchestrator/tests/test_manifest.py +79 -0
  132. package/tools/vds-scripts/git_orchestrator/tests/test_orchestrator.py +204 -0
  133. package/tools/vds-scripts/git_orchestrator/tests/test_public_api.py +236 -0
  134. package/tools/vds-scripts/git_orchestrator/tests/test_resilience.py +345 -0
  135. package/tools/vds-scripts/git_orchestrator/uv.lock +271 -0
  136. package/tools/vds-scripts/jira_orchestrator/README.md +770 -0
  137. package/tools/vds-scripts/jira_orchestrator/pyproject.toml +39 -0
  138. package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/__init__.py +1 -0
  139. package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/adapter.py +1320 -0
  140. package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/cli.py +2271 -0
  141. package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/config.py +138 -0
  142. package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/errors.py +67 -0
  143. package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/reporting.py +65 -0
  144. package/tools/vds-scripts/jira_orchestrator/tests/__init__.py +1 -0
  145. package/tools/vds-scripts/jira_orchestrator/tests/conftest.py +86 -0
  146. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_agile_list_payloads.py +54 -0
  147. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_bulk_operations.py +69 -0
  148. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_components.py +57 -0
  149. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_createmeta.py +45 -0
  150. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_dashboard.py +117 -0
  151. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_issue_properties.py +54 -0
  152. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_permissions_compat.py +42 -0
  153. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_reindex.py +42 -0
  154. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_remote_links.py +76 -0
  155. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_transitions.py +91 -0
  156. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_user_management.py +110 -0
  157. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_version_management.py +133 -0
  158. package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_watchers.py +41 -0
  159. package/tools/vds-scripts/jira_orchestrator/tests/test_advanced_search.py +164 -0
  160. package/tools/vds-scripts/jira_orchestrator/tests/test_agile.py +256 -0
  161. package/tools/vds-scripts/jira_orchestrator/tests/test_application_properties.py +193 -0
  162. package/tools/vds-scripts/jira_orchestrator/tests/test_backlog.py +91 -0
  163. package/tools/vds-scripts/jira_orchestrator/tests/test_bulk_operations.py +277 -0
  164. package/tools/vds-scripts/jira_orchestrator/tests/test_cli.py +106 -0
  165. package/tools/vds-scripts/jira_orchestrator/tests/test_components.py +106 -0
  166. package/tools/vds-scripts/jira_orchestrator/tests/test_config.py +164 -0
  167. package/tools/vds-scripts/jira_orchestrator/tests/test_dashboard.py +122 -0
  168. package/tools/vds-scripts/jira_orchestrator/tests/test_discover_fields.py +207 -0
  169. package/tools/vds-scripts/jira_orchestrator/tests/test_filter_management.py +333 -0
  170. package/tools/vds-scripts/jira_orchestrator/tests/test_issue_archiving.py +164 -0
  171. package/tools/vds-scripts/jira_orchestrator/tests/test_issue_links.py +257 -0
  172. package/tools/vds-scripts/jira_orchestrator/tests/test_issue_properties.py +171 -0
  173. package/tools/vds-scripts/jira_orchestrator/tests/test_link_types.py +314 -0
  174. package/tools/vds-scripts/jira_orchestrator/tests/test_parse_set.py +37 -0
  175. package/tools/vds-scripts/jira_orchestrator/tests/test_permissions.py +273 -0
  176. package/tools/vds-scripts/jira_orchestrator/tests/test_reindex.py +81 -0
  177. package/tools/vds-scripts/jira_orchestrator/tests/test_remote_links.py +254 -0
  178. package/tools/vds-scripts/jira_orchestrator/tests/test_security_schemes.py +170 -0
  179. package/tools/vds-scripts/jira_orchestrator/tests/test_transitions_changelog.py +114 -0
  180. package/tools/vds-scripts/jira_orchestrator/tests/test_user_management.py +226 -0
  181. package/tools/vds-scripts/jira_orchestrator/tests/test_version_management.py +339 -0
  182. package/tools/vds-scripts/jira_orchestrator/tests/test_watchers.py +101 -0
  183. package/tools/vds-scripts/jira_orchestrator/tests/test_worklog.py +223 -0
  184. package/tools/vds-scripts/jira_orchestrator/uv.lock +738 -0
  185. package/tools/vds-scripts/mcp_server/Dockerfile +34 -0
  186. package/tools/vds-scripts/mcp_server/README.md +140 -0
  187. package/tools/vds-scripts/mcp_server/pyproject.toml +42 -0
  188. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/__init__.py +4 -0
  189. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/config.py +36 -0
  190. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/server.py +66 -0
  191. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/__init__.py +14 -0
  192. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/bitbucket_tools.py +47 -0
  193. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/confluence_tools.py +59 -0
  194. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/git_tools.py +71 -0
  195. package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/jira_tools.py +63 -0
  196. package/tools/vds-scripts/mcp_server/tests/__init__.py +2 -0
  197. package/tools/vds-scripts/mcp_server/tests/conftest.py +29 -0
  198. package/tools/vds-scripts/mcp_server/tests/unit/__init__.py +2 -0
  199. package/tools/vds-scripts/mcp_server/tests/unit/test_bitbucket_tools.py +25 -0
  200. package/tools/vds-scripts/mcp_server/tests/unit/test_confluence_tools.py +25 -0
  201. package/tools/vds-scripts/mcp_server/tests/unit/test_git_tools.py +32 -0
  202. package/tools/vds-scripts/mcp_server/tests/unit/test_jira_tools.py +32 -0
  203. package/tools/vds-scripts/mcp_server/tests/verification/__init__.py +2 -0
  204. package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_confluence_tools.py +40 -0
  205. package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_jira_tools.py +37 -0
  206. package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_tool_registration.py +47 -0
  207. package/tools/vds-scripts/mcp_server/uv.lock +1032 -0
  208. package/tools/vds-scripts/mypy.ini +5 -0
  209. package/tools/vds-scripts/pyproject.toml +29 -0
  210. package/tools/vds-scripts/repo-manifest.yaml +273 -0
  211. package/tools/vds-scripts/repo-manifest.yaml.example +25 -0
  212. package/tools/vds-scripts/scripts/BRD-Validation-API.postman_collection.json +706 -0
  213. package/tools/vds-scripts/scripts/BRD-Validation-README.md +308 -0
  214. package/tools/vds-scripts/scripts/README.md +162 -0
  215. package/tools/vds-scripts/scripts/bootstrap_uv.sh +30 -0
  216. package/tools/vds-scripts/scripts/brd-validation-environment.json +51 -0
  217. package/tools/vds-scripts/scripts/brd-validation-test-results.json +13023 -0
  218. package/tools/vds-scripts/scripts/brd_coverage_report.json +276 -0
  219. package/tools/vds-scripts/scripts/create_memory_session.py +35 -0
  220. package/tools/vds-scripts/scripts/deployment/load_docker_images_offline.sh +90 -0
  221. package/tools/vds-scripts/scripts/final_completion_report.md +139 -0
  222. package/tools/vds-scripts/scripts/folder_structure_report.json +321 -0
  223. package/tools/vds-scripts/scripts/generate_completion_report.py +125 -0
  224. package/tools/vds-scripts/scripts/generate_intellij_modules.py +150 -0
  225. package/tools/vds-scripts/scripts/link_integrity_report.json +807 -0
  226. package/tools/vds-scripts/scripts/move_audit_artifact_pages.py +255 -0
  227. package/tools/vds-scripts/scripts/move_audit_artifact_pages_rest.py +165 -0
  228. package/tools/vds-scripts/scripts/move_wrong_dept_pages.py +216 -0
  229. package/tools/vds-scripts/scripts/save_intellij_memories.py +120 -0
  230. package/tools/vds-scripts/scripts/save_memories_to_vds_ai.py +83 -0
  231. package/tools/vds-scripts/scripts/save_memories_vds_style.py +129 -0
  232. package/tools/vds-scripts/scripts/search_intellij_memories.py +50 -0
  233. package/tools/vds-scripts/scripts/setup_intellij_workspace.py +65 -0
  234. package/tools/vds-scripts/scripts/target-state-automation/README.md +89 -0
  235. package/tools/vds-scripts/scripts/target-state-automation/confluence_sync_coordinator.sh +27 -0
  236. package/tools/vds-scripts/scripts/target-state-automation/coordination.sh +114 -0
  237. package/tools/vds-scripts/scripts/target-state-automation/diagram_coordinator.sh +25 -0
  238. package/tools/vds-scripts/scripts/target-state-automation/docs_root.sh +22 -0
  239. package/tools/vds-scripts/scripts/target-state-automation/generate_diagrams.sh +22 -0
  240. package/tools/vds-scripts/scripts/target-state-automation/markdown_coordinator.sh +25 -0
  241. package/tools/vds-scripts/scripts/target-state-automation/progress_dashboard.sh +17 -0
  242. package/tools/vds-scripts/scripts/target-state-automation/schema_coordinator.sh +25 -0
  243. package/tools/vds-scripts/scripts/target-state-automation/sync_confluence.sh +30 -0
  244. package/tools/vds-scripts/scripts/target-state-automation/update_dependencies.sh +19 -0
  245. package/tools/vds-scripts/scripts/target-state-automation/validate_links.sh +86 -0
  246. package/tools/vds-scripts/scripts/target-state-automation/validate_markdown.sh +52 -0
  247. package/tools/vds-scripts/scripts/target-state-automation/validate_schemas.sh +26 -0
  248. package/tools/vds-scripts/scripts/target-state-automation/validate_structure.sh +98 -0
  249. package/tools/vds-scripts/scripts/update_modules_xml.py +190 -0
  250. package/tools/vds-scripts/scripts/uv-workspace-alignment-verification-2026-03-25.md +128 -0
  251. package/tools/vds-scripts/scripts/validate_brd_coverage.py +179 -0
  252. package/tools/vds-scripts/scripts/validate_folder_structure.py +240 -0
  253. package/tools/vds-scripts/scripts/validate_link_integrity.py +272 -0
  254. package/tools/vds-scripts/scripts/vds_sh_helpers.sh +180 -0
  255. package/tools/vds-scripts/scripts/verification/phase2_portable_paths_ubuntu_docker.sh +26 -0
  256. package/tools/vds-scripts/scripts/worktree_uv.sh +48 -0
  257. package/tools/vds-scripts/uv.lock +8 -0
  258. package/tools/vds-scripts/vds_cli/README.md +126 -0
  259. package/tools/vds-scripts/vds_cli/VERIFICATION_REPORT.md +41 -0
  260. package/tools/vds-scripts/vds_cli/pyproject.toml +38 -0
  261. package/tools/vds-scripts/vds_cli/src/vds_cli/__init__.py +3 -0
  262. package/tools/vds-scripts/vds_cli/src/vds_cli/cli.py +173 -0
  263. package/tools/vds-scripts/vds_cli/src/vds_cli/docs_sync.py +1203 -0
  264. package/tools/vds-scripts/vds_cli/src/vds_cli/env.py +41 -0
  265. package/tools/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/__init__.py +3 -0
  266. package/tools/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/google_sheets_orchestrator.py +198 -0
  267. package/tools/vds-scripts/vds_cli/src/vds_cli/router.py +93 -0
  268. package/tools/vds-scripts/vds_cli/src/vds_cli/sync_api.py +647 -0
  269. package/tools/vds-scripts/vds_cli/src/vds_cli/sync_service.py +266 -0
  270. package/tools/vds-scripts/vds_cli/tests/__init__.py +2 -0
  271. package/tools/vds-scripts/vds_cli/tests/conftest.py +49 -0
  272. package/tools/vds-scripts/vds_cli/tests/unit/__init__.py +2 -0
  273. package/tools/vds-scripts/vds_cli/tests/unit/test_cli.py +143 -0
  274. package/tools/vds-scripts/vds_cli/tests/unit/test_docs_sync.py +422 -0
  275. package/tools/vds-scripts/vds_cli/tests/unit/test_env.py +51 -0
  276. package/tools/vds-scripts/vds_cli/tests/unit/test_router.py +72 -0
  277. package/tools/vds-scripts/vds_cli/tests/unit/test_sync_api.py +357 -0
  278. package/tools/vds-scripts/vds_cli/tests/unit/test_sync_service.py +160 -0
  279. package/tools/vds-scripts/vds_cli/tests/verification/__init__.py +2 -0
  280. package/tools/vds-scripts/vds_cli/tests/verification/test_bitbucket_real.py +33 -0
  281. package/tools/vds-scripts/vds_cli/tests/verification/test_confluence_real.py +35 -0
  282. package/tools/vds-scripts/vds_cli/tests/verification/test_jira_real.py +41 -0
  283. package/tools/vds-scripts/vds_cli/uv.lock +524 -0
  284. package/tools/vds-scripts/vds_cli_common/README.md +190 -0
  285. package/tools/vds-scripts/vds_cli_common/pyproject.toml +92 -0
  286. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/__init__.py +34 -0
  287. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/completers.py +139 -0
  288. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/context.py +201 -0
  289. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/env.py +119 -0
  290. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/errors.py +318 -0
  291. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/output.py +284 -0
  292. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/paths.py +78 -0
  293. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/testing.py +213 -0
  294. package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/version.py +85 -0
  295. package/tools/vds-scripts/vds_cli_common/tests/__init__.py +1 -0
  296. package/tools/vds-scripts/vds_cli_common/tests/test_completers.py +148 -0
  297. package/tools/vds-scripts/vds_cli_common/tests/test_context.py +192 -0
  298. package/tools/vds-scripts/vds_cli_common/tests/test_env.py +102 -0
  299. package/tools/vds-scripts/vds_cli_common/tests/test_errors.py +186 -0
  300. package/tools/vds-scripts/vds_cli_common/tests/test_output.py +229 -0
  301. package/tools/vds-scripts/vds_cli_common/tests/test_paths.py +61 -0
  302. package/tools/vds-scripts/vds_cli_common/tests/test_testing.py +138 -0
  303. package/tools/vds-scripts/vds_cli_common/tests/test_version.py +64 -0
@@ -0,0 +1,34 @@
1
+ # syntax=docker/dockerfile:1
2
+ FROM python:3.12-slim
3
+
4
+ # Install system dependencies
5
+ RUN apt-get update && apt-get install -y \
6
+ curl \
7
+ ca-certificates \
8
+ git \
9
+ && rm -rf /var/lib/apt/lists/*
10
+
11
+ # Install uv
12
+ RUN curl -LsSf https://astral.sh/uv/install.sh | sh
13
+
14
+ # Set PATH for uv
15
+ ENV PATH="/root/.local/bin:/root/.cargo/bin:$PATH"
16
+ ENV UV_SYSTEM_PYTHON=1
17
+
18
+ # Set working directory
19
+ WORKDIR /app
20
+
21
+ # Copy MCP server
22
+ COPY mcp_server /app/mcp_server
23
+
24
+ # Install MCP server
25
+ RUN cd /app/mcp_server && \
26
+ uv sync --frozen --project /app/mcp_server
27
+
28
+ # Health check
29
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
30
+ CMD uv run --project /app/mcp_server vds-mcp-server --help || exit 1
31
+
32
+ # Default command
33
+ ENTRYPOINT ["uv", "run", "--project", "/app/mcp_server", "vds-mcp-server"]
34
+
@@ -0,0 +1,140 @@
1
+ # VDS MCP Server
2
+
3
+ Model Context Protocol (MCP) server for VDS Platform operations, enabling AI agents to interact with JIRA, Confluence,
4
+ Bitbucket, and Git through a standardized interface.
5
+
6
+ ## Installation
7
+
8
+ ```bash
9
+ cd vds-scripts
10
+ # Optional: sync every package once
11
+ ./scripts/bootstrap_uv.sh
12
+
13
+ # Package-specific sync (only when you need dev extras)
14
+ uv sync --project mcp_server
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ### Start MCP Server
20
+
21
+ ```bash
22
+ # Using stdio transport (default)
23
+ uv run vds-mcp-server
24
+
25
+ # Or directly
26
+ uv run --project mcp_server python -m vds_mcp_server.server
27
+ ```
28
+
29
+ ### Available Tools
30
+
31
+ The MCP server exposes the following tools:
32
+
33
+ #### JIRA Tools
34
+
35
+ - `jira_search` - Search JIRA issues using JQL query
36
+ - `jira_get_issue` - Get JIRA issue details
37
+ - `jira_list_projects` - List all JIRA projects
38
+
39
+ #### Confluence Tools
40
+
41
+ - `confluence_search` - Search Confluence content using CQL query
42
+ - `confluence_get_page` - Get Confluence page content
43
+
44
+ #### Bitbucket Tools
45
+
46
+ - `bitbucket_list_projects` - List all Bitbucket projects
47
+ - `bitbucket_list_repositories` - List repositories in a project
48
+
49
+ #### Git Tools
50
+
51
+ - `git_clone` - Clone a VDS project repository
52
+ - `git_status` - Get Git repository status
53
+ - `git_pull` - Pull latest changes from Git repositories
54
+
55
+ ## Client Integration
56
+
57
+ ### Claude Desktop Configuration
58
+
59
+ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
60
+
61
+ ```json
62
+ {
63
+ "mcpServers": {
64
+ "vds-orchestrator": {
65
+ "command": "uv",
66
+ "args": [
67
+ "run",
68
+ "--project",
69
+ "/path/to/vds-scripts/mcp_server",
70
+ "vds-mcp-server"
71
+ ],
72
+ "env": {
73
+ "VDS_USERNAME": "${VDS_USERNAME}",
74
+ "VDS_PASSWORD": "${VDS_PASSWORD}",
75
+ "BITBUCKET_ACCESS_TOKEN": "${BITBUCKET_ACCESS_TOKEN}",
76
+ "INTERNAL_CONFLUENCE_TOKEN": "${INTERNAL_CONFLUENCE_TOKEN}",
77
+ "EXTERNAL_CONFLUENCE_TOKEN": "${EXTERNAL_CONFLUENCE_TOKEN}"
78
+ }
79
+ }
80
+ }
81
+ }
82
+ ```
83
+
84
+ ### Using with Docker
85
+
86
+ ```bash
87
+ cd vds-scripts/docker
88
+ docker-compose up -d mcp-server
89
+ ```
90
+
91
+ ## Development
92
+
93
+ ### Running Tests
94
+
95
+ ```bash
96
+ # Unit tests
97
+ uv run --project mcp_server pytest tests/unit/ -v
98
+
99
+ # Verification tests (requires credentials)
100
+ uv run --project mcp_server pytest tests/verification/ -v
101
+
102
+ # With coverage
103
+ uv run --project mcp_server pytest tests/ -v --cov=vds_mcp_server --cov-report=term-missing
104
+ ```
105
+
106
+ ### Code Quality
107
+
108
+ ```bash
109
+ # Lint check
110
+ uv run --project mcp_server ruff check src/
111
+
112
+ # Format code
113
+ uv run --project mcp_server ruff format src/
114
+ ```
115
+
116
+ ## Architecture
117
+
118
+ The MCP server uses:
119
+
120
+ - **FastMCP**: High-level MCP server interface from official Python SDK
121
+ - **VDS CLI**: Executes commands via `vds-cli` subprocess
122
+ - **Tool Registration**: All tools registered at server startup
123
+
124
+ ## Requirements
125
+
126
+ - Python >= 3.11
127
+ - uv (for package management)
128
+ - vds-cli (must be installed and available in PATH)
129
+ - Environment file at `~/.vds/.env` with credentials
130
+
131
+ ## Dependencies
132
+
133
+ - **mcp** >= 1.0.0 - Official MCP Python SDK (Context7: `/modelcontextprotocol/python-sdk`)
134
+ - **typer** >= 0.20.0 - CLI framework
135
+ - **pydantic** >= 2.12.3 - Data validation
136
+ - **pydantic-settings** >= 2.12.0 - Settings management
137
+
138
+ ______________________________________________________________________
139
+
140
+ *Last updated: 2025-11-12*
@@ -0,0 +1,42 @@
1
+ [project]
2
+ name = "vds-mcp-server"
3
+ version = "1.0.0"
4
+ description = "Model Context Protocol server for VDS Platform operations"
5
+ requires-python = ">=3.11"
6
+ dependencies = [
7
+ "mcp>=1.0.0", # Official MCP Python SDK - Context7: /modelcontextprotocol/python-sdk
8
+ "typer>=0.20.0", # CLI framework
9
+ "pydantic>=2.12.3", # Data validation
10
+ "pydantic-settings>=2.12.0", # Settings management
11
+ ]
12
+
13
+ [project.scripts]
14
+ vds-mcp-server = "vds_mcp_server.server:main"
15
+
16
+ [build-system]
17
+ requires = ["hatchling>=1.20.0"]
18
+ build-backend = "hatchling.build"
19
+
20
+ [project.optional-dependencies]
21
+ dev = [
22
+ "pytest>=9.0.1",
23
+ "pytest-cov>=5.0.0",
24
+ "pytest-asyncio>=0.24.0",
25
+ "ruff>=0.14.5",
26
+ ]
27
+
28
+ [tool.uv]
29
+ package = true
30
+
31
+ [tool.uv.sources]
32
+ vds_mcp_server = { path = "src" }
33
+
34
+
35
+ [dependency-groups]
36
+ dev = [
37
+ "pytest>=9.0.1",
38
+ "pytest-cov>=5.0.0",
39
+ "pytest-asyncio>=0.24.0",
40
+ "ruff>=0.14.5",
41
+ ]
42
+
@@ -0,0 +1,4 @@
1
+ """VDS MCP Server - Model Context Protocol server for VDS Platform operations."""
2
+
3
+ __version__ = "1.0.0"
4
+
@@ -0,0 +1,36 @@
1
+ """Configuration management for MCP server.
2
+
3
+ Based on pydantic-settings v2.12.0+ API
4
+ Context7: /pydantic/pydantic-settings
5
+ """
6
+
7
+ from pathlib import Path
8
+
9
+ from pydantic_settings import BaseSettings, SettingsConfigDict
10
+
11
+
12
+ class MCPServerSettings(BaseSettings):
13
+ """MCP server configuration settings."""
14
+
15
+ model_config = SettingsConfigDict(
16
+ env_file=Path.home() / ".vds" / ".env",
17
+ env_file_encoding="utf-8",
18
+ case_sensitive=False,
19
+ )
20
+
21
+ # VDS credentials (required for orchestrator operations)
22
+ vds_username: str | None = None
23
+ vds_password: str | None = None
24
+ bitbucket_access_token: str | None = None
25
+ internal_confluence_token: str | None = None
26
+ external_confluence_token: str | None = None
27
+
28
+ # MCP server settings
29
+ server_name: str = "vds-orchestrator"
30
+ server_version: str = "1.0.0"
31
+
32
+
33
+ def load_settings() -> MCPServerSettings:
34
+ """Load MCP server settings from environment."""
35
+ return MCPServerSettings()
36
+
@@ -0,0 +1,66 @@
1
+ """MCP Server for VDS Platform operations.
2
+
3
+ Based on MCP Python SDK v1.0.0+
4
+ Context7: /modelcontextprotocol/python-sdk
5
+ Key Features: FastMCP, tool registration, stdio transport
6
+ """
7
+
8
+ import subprocess
9
+ from typing import Any
10
+
11
+ from mcp.server.fastmcp import FastMCP
12
+
13
+ from .config import load_settings
14
+ from .tools import (
15
+ register_bitbucket_tools,
16
+ register_confluence_tools,
17
+ register_git_tools,
18
+ register_jira_tools,
19
+ )
20
+
21
+ # Initialize FastMCP server
22
+ mcp = FastMCP("VDS Orchestrator")
23
+
24
+
25
+ async def execute_vds_cli(*args: str) -> dict[str, Any]:
26
+ """Execute VDS CLI command via subprocess.
27
+
28
+ Args:
29
+ *args: Command arguments to pass to vds-cli
30
+
31
+ Returns:
32
+ dict: Command execution result with stdout, stderr, returncode
33
+ """
34
+ cmd = ["vds-cli"] + list(args)
35
+ result = subprocess.run(
36
+ cmd,
37
+ capture_output=True,
38
+ text=True,
39
+ check=False,
40
+ )
41
+ return {
42
+ "stdout": result.stdout,
43
+ "stderr": result.stderr,
44
+ "returncode": result.returncode,
45
+ }
46
+
47
+
48
+ # Register all tool modules
49
+ register_jira_tools(mcp, execute_vds_cli)
50
+ register_confluence_tools(mcp, execute_vds_cli)
51
+ register_bitbucket_tools(mcp, execute_vds_cli)
52
+ register_git_tools(mcp, execute_vds_cli)
53
+
54
+
55
+ def main() -> None:
56
+ """Main entry point for MCP server."""
57
+ # Load settings to ensure environment is configured
58
+ load_settings()
59
+
60
+ # Run server with stdio transport (default)
61
+ mcp.run()
62
+
63
+
64
+ if __name__ == "__main__":
65
+ main()
66
+
@@ -0,0 +1,14 @@
1
+ """MCP tools for VDS Platform orchestrators."""
2
+
3
+ from .bitbucket_tools import register_bitbucket_tools
4
+ from .confluence_tools import register_confluence_tools
5
+ from .git_tools import register_git_tools
6
+ from .jira_tools import register_jira_tools
7
+
8
+ __all__ = [
9
+ "register_jira_tools",
10
+ "register_confluence_tools",
11
+ "register_bitbucket_tools",
12
+ "register_git_tools",
13
+ ]
14
+
@@ -0,0 +1,47 @@
1
+ """Bitbucket tools for MCP server.
2
+
3
+ Based on MCP Python SDK v1.0.0+
4
+ Context7: /modelcontextprotocol/python-sdk
5
+ """
6
+
7
+ from collections.abc import Callable
8
+ from typing import Any
9
+
10
+ from mcp.server.fastmcp import FastMCP
11
+
12
+
13
+ def register_bitbucket_tools(mcp: FastMCP, execute_cli: Callable[..., Any]) -> None:
14
+ """Register Bitbucket tools with MCP server.
15
+
16
+ Args:
17
+ mcp: FastMCP server instance
18
+ execute_cli: Function to execute VDS CLI commands
19
+ """
20
+
21
+ @mcp.tool()
22
+ async def bitbucket_list_projects() -> str:
23
+ """List all Bitbucket projects.
24
+
25
+ Returns:
26
+ str: JSON-formatted list of projects
27
+ """
28
+ result = await execute_cli("bitbucket", "projects")
29
+ if result["returncode"] != 0:
30
+ return f"Error: {result['stderr']}"
31
+ return result["stdout"]
32
+
33
+ @mcp.tool()
34
+ async def bitbucket_list_repositories(project_key: str) -> str:
35
+ """List repositories in a Bitbucket project.
36
+
37
+ Args:
38
+ project_key: Project key (e.g., "LEP")
39
+
40
+ Returns:
41
+ str: JSON-formatted list of repositories
42
+ """
43
+ result = await execute_cli("bitbucket", "repositories", project_key)
44
+ if result["returncode"] != 0:
45
+ return f"Error: {result['stderr']}"
46
+ return result["stdout"]
47
+
@@ -0,0 +1,59 @@
1
+ """Confluence tools for MCP server.
2
+
3
+ Based on MCP Python SDK v1.0.0+
4
+ Context7: /modelcontextprotocol/python-sdk
5
+ """
6
+
7
+ from collections.abc import Callable
8
+ from typing import Any
9
+
10
+ from mcp.server.fastmcp import FastMCP
11
+
12
+
13
+ def register_confluence_tools(mcp: FastMCP, execute_cli: Callable[..., Any]) -> None:
14
+ """Register Confluence tools with MCP server.
15
+
16
+ Args:
17
+ mcp: FastMCP server instance
18
+ execute_cli: Function to execute VDS CLI commands
19
+ """
20
+
21
+ @mcp.tool()
22
+ async def confluence_search(
23
+ query: str, server: str = "internal", limit: int = 10
24
+ ) -> str:
25
+ """Search Confluence content using CQL query.
26
+
27
+ Args:
28
+ query: CQL query string (e.g., "space = TDOV")
29
+ server: Server to query ("internal" or "external", default: "internal")
30
+ limit: Maximum number of results (default: 10)
31
+
32
+ Returns:
33
+ str: JSON-formatted search results
34
+ """
35
+ result = await execute_cli(
36
+ "confluence", "content", "search", query, f"--server={server}", f"--limit={limit}"
37
+ )
38
+ if result["returncode"] != 0:
39
+ return f"Error: {result['stderr']}"
40
+ return result["stdout"]
41
+
42
+ @mcp.tool()
43
+ async def confluence_get_page(page_id: str, server: str = "internal") -> str:
44
+ """Get Confluence page content.
45
+
46
+ Args:
47
+ page_id: Page ID (e.g., "99647801")
48
+ server: Server to query ("internal" or "external", default: "internal")
49
+
50
+ Returns:
51
+ str: JSON-formatted page content
52
+ """
53
+ result = await execute_cli(
54
+ "confluence", "content", "page", page_id, f"--server={server}"
55
+ )
56
+ if result["returncode"] != 0:
57
+ return f"Error: {result['stderr']}"
58
+ return result["stdout"]
59
+
@@ -0,0 +1,71 @@
1
+ """Git tools for MCP server.
2
+
3
+ Based on MCP Python SDK v1.0.0+
4
+ Context7: /modelcontextprotocol/python-sdk
5
+ """
6
+
7
+ from collections.abc import Callable
8
+ from typing import Any
9
+
10
+ from mcp.server.fastmcp import FastMCP
11
+
12
+
13
+ def register_git_tools(mcp: FastMCP, execute_cli: Callable[..., Any]) -> None:
14
+ """Register Git tools with MCP server.
15
+
16
+ Args:
17
+ mcp: FastMCP server instance
18
+ execute_cli: Function to execute VDS CLI commands
19
+ """
20
+
21
+ @mcp.tool()
22
+ async def git_clone(project: str) -> str:
23
+ """Clone a VDS project repository.
24
+
25
+ Args:
26
+ project: Project name (e.g., "lep", "insurance")
27
+
28
+ Returns:
29
+ str: Clone operation result
30
+ """
31
+ result = await execute_cli("git", "clone", project)
32
+ if result["returncode"] != 0:
33
+ return f"Error: {result['stderr']}"
34
+ return result["stdout"]
35
+
36
+ @mcp.tool()
37
+ async def git_status(match: str | None = None) -> str:
38
+ """Get Git repository status.
39
+
40
+ Args:
41
+ match: Pattern to match repositories (e.g., "*service*")
42
+
43
+ Returns:
44
+ str: Status information for matching repositories
45
+ """
46
+ args = ["git", "status"]
47
+ if match:
48
+ args.extend(["--match", match])
49
+ result = await execute_cli(*args)
50
+ if result["returncode"] != 0:
51
+ return f"Error: {result['stderr']}"
52
+ return result["stdout"]
53
+
54
+ @mcp.tool()
55
+ async def git_pull(project: str | None = None) -> str:
56
+ """Pull latest changes from Git repositories.
57
+
58
+ Args:
59
+ project: Project name to pull (optional, pulls all if not specified)
60
+
61
+ Returns:
62
+ str: Pull operation result
63
+ """
64
+ args = ["git", "pull"]
65
+ if project:
66
+ args.extend(["--project", project])
67
+ result = await execute_cli(*args)
68
+ if result["returncode"] != 0:
69
+ return f"Error: {result['stderr']}"
70
+ return result["stdout"]
71
+
@@ -0,0 +1,63 @@
1
+ """JIRA tools for MCP server.
2
+
3
+ Based on MCP Python SDK v1.0.0+
4
+ Context7: /modelcontextprotocol/python-sdk
5
+ """
6
+
7
+ from collections.abc import Callable
8
+ from typing import Any
9
+
10
+ from mcp.server.fastmcp import FastMCP
11
+
12
+
13
+ def register_jira_tools(mcp: FastMCP, execute_cli: Callable[..., Any]) -> None:
14
+ """Register JIRA tools with MCP server.
15
+
16
+ Args:
17
+ mcp: FastMCP server instance
18
+ execute_cli: Function to execute VDS CLI commands
19
+ """
20
+
21
+ @mcp.tool()
22
+ async def jira_search(query: str, limit: int = 20) -> str:
23
+ """Search JIRA issues using JQL query.
24
+
25
+ Args:
26
+ query: JQL query string (e.g., "project = NTTC")
27
+ limit: Maximum number of results (default: 20)
28
+
29
+ Returns:
30
+ str: JSON-formatted search results
31
+ """
32
+ result = await execute_cli("jira", "search", query, f"--limit={limit}")
33
+ if result["returncode"] != 0:
34
+ return f"Error: {result['stderr']}"
35
+ return result["stdout"]
36
+
37
+ @mcp.tool()
38
+ async def jira_get_issue(issue_key: str) -> str:
39
+ """Get JIRA issue details.
40
+
41
+ Args:
42
+ issue_key: Issue key (e.g., "NTTC-123")
43
+
44
+ Returns:
45
+ str: JSON-formatted issue details
46
+ """
47
+ result = await execute_cli("jira", "issue", issue_key)
48
+ if result["returncode"] != 0:
49
+ return f"Error: {result['stderr']}"
50
+ return result["stdout"]
51
+
52
+ @mcp.tool()
53
+ async def jira_list_projects() -> str:
54
+ """List all JIRA projects.
55
+
56
+ Returns:
57
+ str: JSON-formatted list of projects
58
+ """
59
+ result = await execute_cli("jira", "projects")
60
+ if result["returncode"] != 0:
61
+ return f"Error: {result['stderr']}"
62
+ return result["stdout"]
63
+
@@ -0,0 +1,2 @@
1
+ """Test suite for VDS MCP Server."""
2
+
@@ -0,0 +1,29 @@
1
+ """Pytest configuration and fixtures for MCP server tests."""
2
+
3
+ from collections.abc import AsyncGenerator
4
+ from unittest.mock import Mock
5
+
6
+ import pytest
7
+ from mcp.client.session import ClientSession
8
+ from mcp.shared.memory import create_connected_server_and_client_session
9
+ from vds_mcp_server.server import mcp
10
+
11
+
12
+ @pytest.fixture
13
+ def anyio_backend() -> str:
14
+ """Use asyncio backend for tests."""
15
+ return "asyncio"
16
+
17
+
18
+ @pytest.fixture
19
+ async def client_session() -> AsyncGenerator[ClientSession]:
20
+ """Create in-memory MCP client session for testing."""
21
+ async with create_connected_server_and_client_session(mcp, raise_exceptions=True) as session:
22
+ yield session
23
+
24
+
25
+ @pytest.fixture
26
+ def mock_execute_cli() -> Mock:
27
+ """Mock CLI execution function."""
28
+ return Mock(return_value={"stdout": "test output", "stderr": "", "returncode": 0})
29
+
@@ -0,0 +1,2 @@
1
+ """Unit tests for VDS MCP Server."""
2
+
@@ -0,0 +1,25 @@
1
+ """Unit tests for Bitbucket tools.
2
+
3
+ Based on pytest v8.3.3+ API
4
+ Context7: /pytest-dev/pytest
5
+ """
6
+
7
+ import pytest
8
+ from mcp.client.session import ClientSession
9
+
10
+ pytestmark = pytest.mark.anyio
11
+
12
+
13
+ async def test_bitbucket_list_projects_tool(client_session: ClientSession) -> None:
14
+ """Test bitbucket_list_projects tool is available."""
15
+ tools = await client_session.list_tools()
16
+ tool_names = [tool.name for tool in tools.tools]
17
+ assert "bitbucket_list_projects" in tool_names
18
+
19
+
20
+ async def test_bitbucket_list_repositories_tool(client_session: ClientSession) -> None:
21
+ """Test bitbucket_list_repositories tool is available."""
22
+ tools = await client_session.list_tools()
23
+ tool_names = [tool.name for tool in tools.tools]
24
+ assert "bitbucket_list_repositories" in tool_names
25
+
@@ -0,0 +1,25 @@
1
+ """Unit tests for Confluence tools.
2
+
3
+ Based on pytest v8.3.3+ API
4
+ Context7: /pytest-dev/pytest
5
+ """
6
+
7
+ import pytest
8
+ from mcp.client.session import ClientSession
9
+
10
+ pytestmark = pytest.mark.anyio
11
+
12
+
13
+ async def test_confluence_search_tool(client_session: ClientSession) -> None:
14
+ """Test confluence_search tool is available."""
15
+ tools = await client_session.list_tools()
16
+ tool_names = [tool.name for tool in tools.tools]
17
+ assert "confluence_search" in tool_names
18
+
19
+
20
+ async def test_confluence_get_page_tool(client_session: ClientSession) -> None:
21
+ """Test confluence_get_page tool is available."""
22
+ tools = await client_session.list_tools()
23
+ tool_names = [tool.name for tool in tools.tools]
24
+ assert "confluence_get_page" in tool_names
25
+