mcp-ticketer 0.12.0__py3-none-any.whl → 2.2.13__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mcp-ticketer might be problematic. Click here for more details.

Files changed (129) hide show
  1. mcp_ticketer/__init__.py +10 -10
  2. mcp_ticketer/__version__.py +1 -1
  3. mcp_ticketer/_version_scm.py +1 -0
  4. mcp_ticketer/adapters/aitrackdown.py +507 -6
  5. mcp_ticketer/adapters/asana/adapter.py +229 -0
  6. mcp_ticketer/adapters/asana/mappers.py +14 -0
  7. mcp_ticketer/adapters/github/__init__.py +26 -0
  8. mcp_ticketer/adapters/github/adapter.py +3229 -0
  9. mcp_ticketer/adapters/github/client.py +335 -0
  10. mcp_ticketer/adapters/github/mappers.py +797 -0
  11. mcp_ticketer/adapters/github/queries.py +692 -0
  12. mcp_ticketer/adapters/github/types.py +460 -0
  13. mcp_ticketer/adapters/hybrid.py +47 -5
  14. mcp_ticketer/adapters/jira/__init__.py +35 -0
  15. mcp_ticketer/adapters/jira/adapter.py +1351 -0
  16. mcp_ticketer/adapters/jira/client.py +271 -0
  17. mcp_ticketer/adapters/jira/mappers.py +246 -0
  18. mcp_ticketer/adapters/jira/queries.py +216 -0
  19. mcp_ticketer/adapters/jira/types.py +304 -0
  20. mcp_ticketer/adapters/linear/adapter.py +2730 -139
  21. mcp_ticketer/adapters/linear/client.py +175 -3
  22. mcp_ticketer/adapters/linear/mappers.py +203 -8
  23. mcp_ticketer/adapters/linear/queries.py +280 -3
  24. mcp_ticketer/adapters/linear/types.py +120 -4
  25. mcp_ticketer/analysis/__init__.py +56 -0
  26. mcp_ticketer/analysis/dependency_graph.py +255 -0
  27. mcp_ticketer/analysis/health_assessment.py +304 -0
  28. mcp_ticketer/analysis/orphaned.py +218 -0
  29. mcp_ticketer/analysis/project_status.py +594 -0
  30. mcp_ticketer/analysis/similarity.py +224 -0
  31. mcp_ticketer/analysis/staleness.py +266 -0
  32. mcp_ticketer/automation/__init__.py +11 -0
  33. mcp_ticketer/automation/project_updates.py +378 -0
  34. mcp_ticketer/cli/adapter_diagnostics.py +3 -1
  35. mcp_ticketer/cli/auggie_configure.py +17 -5
  36. mcp_ticketer/cli/codex_configure.py +97 -61
  37. mcp_ticketer/cli/configure.py +1288 -105
  38. mcp_ticketer/cli/cursor_configure.py +314 -0
  39. mcp_ticketer/cli/diagnostics.py +13 -12
  40. mcp_ticketer/cli/discover.py +5 -0
  41. mcp_ticketer/cli/gemini_configure.py +17 -5
  42. mcp_ticketer/cli/init_command.py +880 -0
  43. mcp_ticketer/cli/install_mcp_server.py +418 -0
  44. mcp_ticketer/cli/instruction_commands.py +6 -0
  45. mcp_ticketer/cli/main.py +267 -3175
  46. mcp_ticketer/cli/mcp_configure.py +821 -119
  47. mcp_ticketer/cli/mcp_server_commands.py +415 -0
  48. mcp_ticketer/cli/platform_detection.py +77 -12
  49. mcp_ticketer/cli/platform_installer.py +545 -0
  50. mcp_ticketer/cli/project_update_commands.py +350 -0
  51. mcp_ticketer/cli/setup_command.py +795 -0
  52. mcp_ticketer/cli/simple_health.py +12 -10
  53. mcp_ticketer/cli/ticket_commands.py +705 -103
  54. mcp_ticketer/cli/utils.py +113 -0
  55. mcp_ticketer/core/__init__.py +56 -6
  56. mcp_ticketer/core/adapter.py +533 -2
  57. mcp_ticketer/core/config.py +21 -21
  58. mcp_ticketer/core/exceptions.py +7 -1
  59. mcp_ticketer/core/label_manager.py +732 -0
  60. mcp_ticketer/core/mappers.py +31 -19
  61. mcp_ticketer/core/milestone_manager.py +252 -0
  62. mcp_ticketer/core/models.py +480 -0
  63. mcp_ticketer/core/onepassword_secrets.py +1 -1
  64. mcp_ticketer/core/priority_matcher.py +463 -0
  65. mcp_ticketer/core/project_config.py +132 -14
  66. mcp_ticketer/core/project_utils.py +281 -0
  67. mcp_ticketer/core/project_validator.py +376 -0
  68. mcp_ticketer/core/session_state.py +176 -0
  69. mcp_ticketer/core/state_matcher.py +625 -0
  70. mcp_ticketer/core/url_parser.py +425 -0
  71. mcp_ticketer/core/validators.py +69 -0
  72. mcp_ticketer/mcp/server/__main__.py +2 -1
  73. mcp_ticketer/mcp/server/diagnostic_helper.py +175 -0
  74. mcp_ticketer/mcp/server/main.py +106 -25
  75. mcp_ticketer/mcp/server/routing.py +723 -0
  76. mcp_ticketer/mcp/server/server_sdk.py +58 -0
  77. mcp_ticketer/mcp/server/tools/__init__.py +33 -11
  78. mcp_ticketer/mcp/server/tools/analysis_tools.py +854 -0
  79. mcp_ticketer/mcp/server/tools/attachment_tools.py +5 -5
  80. mcp_ticketer/mcp/server/tools/bulk_tools.py +259 -202
  81. mcp_ticketer/mcp/server/tools/comment_tools.py +74 -12
  82. mcp_ticketer/mcp/server/tools/config_tools.py +1391 -145
  83. mcp_ticketer/mcp/server/tools/diagnostic_tools.py +211 -0
  84. mcp_ticketer/mcp/server/tools/hierarchy_tools.py +870 -460
  85. mcp_ticketer/mcp/server/tools/instruction_tools.py +7 -5
  86. mcp_ticketer/mcp/server/tools/label_tools.py +942 -0
  87. mcp_ticketer/mcp/server/tools/milestone_tools.py +338 -0
  88. mcp_ticketer/mcp/server/tools/pr_tools.py +3 -7
  89. mcp_ticketer/mcp/server/tools/project_status_tools.py +158 -0
  90. mcp_ticketer/mcp/server/tools/project_update_tools.py +473 -0
  91. mcp_ticketer/mcp/server/tools/search_tools.py +209 -97
  92. mcp_ticketer/mcp/server/tools/session_tools.py +308 -0
  93. mcp_ticketer/mcp/server/tools/ticket_tools.py +1107 -124
  94. mcp_ticketer/mcp/server/tools/user_ticket_tools.py +218 -236
  95. mcp_ticketer/queue/queue.py +68 -0
  96. mcp_ticketer/queue/worker.py +1 -1
  97. mcp_ticketer/utils/__init__.py +5 -0
  98. mcp_ticketer/utils/token_utils.py +246 -0
  99. mcp_ticketer-2.2.13.dist-info/METADATA +1396 -0
  100. mcp_ticketer-2.2.13.dist-info/RECORD +158 -0
  101. mcp_ticketer-2.2.13.dist-info/top_level.txt +2 -0
  102. py_mcp_installer/examples/phase3_demo.py +178 -0
  103. py_mcp_installer/scripts/manage_version.py +54 -0
  104. py_mcp_installer/setup.py +6 -0
  105. py_mcp_installer/src/py_mcp_installer/__init__.py +153 -0
  106. py_mcp_installer/src/py_mcp_installer/command_builder.py +445 -0
  107. py_mcp_installer/src/py_mcp_installer/config_manager.py +541 -0
  108. py_mcp_installer/src/py_mcp_installer/exceptions.py +243 -0
  109. py_mcp_installer/src/py_mcp_installer/installation_strategy.py +617 -0
  110. py_mcp_installer/src/py_mcp_installer/installer.py +656 -0
  111. py_mcp_installer/src/py_mcp_installer/mcp_inspector.py +750 -0
  112. py_mcp_installer/src/py_mcp_installer/platform_detector.py +451 -0
  113. py_mcp_installer/src/py_mcp_installer/platforms/__init__.py +26 -0
  114. py_mcp_installer/src/py_mcp_installer/platforms/claude_code.py +225 -0
  115. py_mcp_installer/src/py_mcp_installer/platforms/codex.py +181 -0
  116. py_mcp_installer/src/py_mcp_installer/platforms/cursor.py +191 -0
  117. py_mcp_installer/src/py_mcp_installer/types.py +222 -0
  118. py_mcp_installer/src/py_mcp_installer/utils.py +463 -0
  119. py_mcp_installer/tests/__init__.py +0 -0
  120. py_mcp_installer/tests/platforms/__init__.py +0 -0
  121. py_mcp_installer/tests/test_platform_detector.py +17 -0
  122. mcp_ticketer/adapters/github.py +0 -1574
  123. mcp_ticketer/adapters/jira.py +0 -1258
  124. mcp_ticketer-0.12.0.dist-info/METADATA +0 -550
  125. mcp_ticketer-0.12.0.dist-info/RECORD +0 -91
  126. mcp_ticketer-0.12.0.dist-info/top_level.txt +0 -1
  127. {mcp_ticketer-0.12.0.dist-info → mcp_ticketer-2.2.13.dist-info}/WHEEL +0 -0
  128. {mcp_ticketer-0.12.0.dist-info → mcp_ticketer-2.2.13.dist-info}/entry_points.txt +0 -0
  129. {mcp_ticketer-0.12.0.dist-info → mcp_ticketer-2.2.13.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,158 @@
1
+ mcp_ticketer/__init__.py,sha256=701DkKv4mtXRwbG6GjYhryb-aV8FVmq3RMF-qD_V3I8,497
2
+ mcp_ticketer/__version__.py,sha256=9ibdPM2IF_JsIpRPY4qxMIeoeJH09YY7JaL64r4hr0w,1132
3
+ mcp_ticketer/_version_scm.py,sha256=reQIi1vO4KcrdUnNUfBn6Z9EHAL38cGH1-9nU006LR4,48
4
+ mcp_ticketer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ mcp_ticketer/adapters/__init__.py,sha256=XzJEMSiZOxWxIgUOhUK9FK-iW5IUmRNB1twdNA3eJZs,410
6
+ mcp_ticketer/adapters/aitrackdown.py,sha256=h1dbIkXIzebjnpENCii4y_3S3Aly-2XpOVjcZDiabwI,45762
7
+ mcp_ticketer/adapters/hybrid.py,sha256=tEXfJN80jQ5x6ldUDlaEHEnVTIkYiQRvwoN9QaJeGAI,20889
8
+ mcp_ticketer/adapters/linear.py,sha256=trm6ZhmlUl80sj51WAPAox_R2HQZXZ-h1QXJsrFYDCQ,587
9
+ mcp_ticketer/adapters/asana/__init__.py,sha256=Mpc6WstxilCQU0B2SeRhSTp2rZyw4coB_NruDwZNMEU,426
10
+ mcp_ticketer/adapters/asana/adapter.py,sha256=2HZ_uotGBTlWoztVXMGBskfSI8qPfExnvypkaSH-xSA,50218
11
+ mcp_ticketer/adapters/asana/client.py,sha256=jbT1F51rUYmtcBEiZ4RRCnCHdEPqM9HqUsnxInOgIH8,8590
12
+ mcp_ticketer/adapters/asana/mappers.py,sha256=y4tebHlaciLPAVFEsBULUo-r0bPoXik7CE5Xcq3HsVY,10421
13
+ mcp_ticketer/adapters/asana/types.py,sha256=aVeBkFDPin82O1k-93UQGSvG6UVrhtHgSG4VTWJ-YqM,3999
14
+ mcp_ticketer/adapters/github/__init__.py,sha256=qiprpzTDSGnmj9SYegTmVoYCnwZWwsjIvV8yos7ZP6s,839
15
+ mcp_ticketer/adapters/github/adapter.py,sha256=bn0ToYNGlpUjE5JUcAshZkDaOvFRwI3jlWbWVrzc9Eg,113694
16
+ mcp_ticketer/adapters/github/client.py,sha256=kkmJnZWqlB76HGEC7GSSyC2U0cLFkxOAP7UCxDT8ZsA,10480
17
+ mcp_ticketer/adapters/github/mappers.py,sha256=nq96gq5S4Q38N0rm7TKao9HqaLjFxpCj1rGGP_9PP3s,25032
18
+ mcp_ticketer/adapters/github/queries.py,sha256=oWjILtWMKSRAAfv2uCPcHUD3euSZ_U0RQjCWqlrqI-c,17237
19
+ mcp_ticketer/adapters/github/types.py,sha256=OobBg7y2FXIhNIBQZq__sx4jjUEMU4gfD1diC28prio,13162
20
+ mcp_ticketer/adapters/jira/__init__.py,sha256=aI7jOn5DO2qCST5O_texa2Aw5B-f7gNbzzo3hJ2Vlkk,841
21
+ mcp_ticketer/adapters/jira/adapter.py,sha256=K097yXlBdPhDCmNfBy1AdyhvThOuwtNkbUI-Y6uLdtc,45827
22
+ mcp_ticketer/adapters/jira/client.py,sha256=F9QfcX_cOsKQS9cOXWSMdxX7zsUK6BsanobSyrCgRSc,7335
23
+ mcp_ticketer/adapters/jira/mappers.py,sha256=Yj5TvdWKWEG7dnWNAKo-8HeqN-SKS4XYQYmvzv4cPxI,7297
24
+ mcp_ticketer/adapters/jira/queries.py,sha256=En2D2syIuSK-iIBrwKl94tUgzq5lxjAEbZ7vEuXrKsM,5139
25
+ mcp_ticketer/adapters/jira/types.py,sha256=sdHMV3JcDsXG8KF6YEBHQAQLwwR1qXhjWKlUrV8vVmY,8084
26
+ mcp_ticketer/adapters/linear/__init__.py,sha256=6l0ZoR6ZHSRcytLfps2AZuk5R189Pq1GfR5-YDQt8-Q,731
27
+ mcp_ticketer/adapters/linear/adapter.py,sha256=EQ8plNdO_33fOcWxfEMgI4TOn_PlQWkCqQVyQWNAspo,151162
28
+ mcp_ticketer/adapters/linear/client.py,sha256=GbwDZH_ckNmHopTxfZO0zcClw3yvpPDPNJUFmSR8PmU,17304
29
+ mcp_ticketer/adapters/linear/mappers.py,sha256=B8gf3lJzyRnB5RtU6WZEkIqccKFaM5eBQRsJqUDA2c8,16376
30
+ mcp_ticketer/adapters/linear/queries.py,sha256=H-Mu-leuybqgBzq6DxozFwgOoa11rUq_WvuS0kHNAFI,13260
31
+ mcp_ticketer/adapters/linear/types.py,sha256=KFsbhd97vbbu8UeOycT5NbjzCZb4T_0piUB22QcSBzM,11774
32
+ mcp_ticketer/analysis/__init__.py,sha256=SyhnEkigSaNX2wrHuu8PPUXaaHgzXNG60CLEBikv3HQ,2208
33
+ mcp_ticketer/analysis/dependency_graph.py,sha256=6XPb5tHNvKG1PAwIO557k6j4Re_sDJjStkgWp8Jh0Q4,8374
34
+ mcp_ticketer/analysis/health_assessment.py,sha256=-0TbhzJjleSxArJUEiM91cCFrJWqNnwKYfXDGGME22Q,9522
35
+ mcp_ticketer/analysis/orphaned.py,sha256=FGohc13w3w3am0AGhi9KdW_s2m6flwycNibcvpwRXxw,6907
36
+ mcp_ticketer/analysis/project_status.py,sha256=DuK3_BKYm8Gh3VCM_ONODXGfl0ES5vyCfqUx5QOrFcg,18882
37
+ mcp_ticketer/analysis/similarity.py,sha256=xrW2JTxpR1_g1bi-AnxXgqf4jkEl76CpYo7StT49I8w,7345
38
+ mcp_ticketer/analysis/staleness.py,sha256=PacgEthsp5Q8-msEJkITN2O3D26jiDM4FFNFrBVEo6M,8572
39
+ mcp_ticketer/automation/__init__.py,sha256=IHCgB5LuePwuQjeeE-HBLXfxXz0T0Ircb6tSm873H2k,335
40
+ mcp_ticketer/automation/project_updates.py,sha256=5_kz13Y2GY9C7LlEC8bsIJ9JODUCWKtZR72F4jB6rSs,13030
41
+ mcp_ticketer/cache/__init__.py,sha256=Xcd-cKnt-Cx7jBzvfzUUUPaGkmyXFi5XUFWw3Z4b7d4,138
42
+ mcp_ticketer/cache/memory.py,sha256=ZLzDryFbuxJL4J4d4i9uS_QkIKu4V7ZOnkGxFHFW7FA,5074
43
+ mcp_ticketer/cli/__init__.py,sha256=l9Q8iKmfGkTu0cssHBVqNZTsL4eAtFzOB25AED_0G6g,89
44
+ mcp_ticketer/cli/adapter_diagnostics.py,sha256=RLDaFPW2UfHP5dVXr-gKjKyEk4600ekr4jYOy79UHqA,15023
45
+ mcp_ticketer/cli/auggie_configure.py,sha256=d38Ptji9huKPZOS5szy8lMALPrvpXOEmTAxB06pT2g0,12399
46
+ mcp_ticketer/cli/codex_configure.py,sha256=TBJ8d7XhCBDnEmHRgchw8sTUf2KGz93HeocuAH2cuNU,16604
47
+ mcp_ticketer/cli/configure.py,sha256=PspDhcnRvD-sjWIh_gAa5gIlMphuuCtVz1-H2Ews7IQ,64066
48
+ mcp_ticketer/cli/cursor_configure.py,sha256=N7UYshMvPIViTzU3UVHBIZ3tv3pMO9i5rQwnLwT_BeU,11077
49
+ mcp_ticketer/cli/diagnostics.py,sha256=7jeY1u7v7AbANVqzeP0EiAfDRfK3EPzyUC3hq4o22AE,30376
50
+ mcp_ticketer/cli/discover.py,sha256=jpjrTN8wBeiBZm5yKjSOm9-wfK9XWeuwp7vkY9pzUkg,22463
51
+ mcp_ticketer/cli/gemini_configure.py,sha256=cA8zT-zeVkQI8KrHYVRlblbsMfb6C8rhiZRxZZ4Nfmo,13313
52
+ mcp_ticketer/cli/init_command.py,sha256=PvBl3Mo8y3fHK0rwg-fYz-JNsVQdn6WP931FlMEA8e4,35132
53
+ mcp_ticketer/cli/install_mcp_server.py,sha256=LHlaZd75cU6toDh-jzlSfvSeQoWwbBCDOpDeH8FSpTs,14688
54
+ mcp_ticketer/cli/instruction_commands.py,sha256=C3wB9wtPsVbbZMG54-jWOFzWT5Z4vqkqKEn952LYlb8,14286
55
+ mcp_ticketer/cli/linear_commands.py,sha256=hLb4MAVdSLsQxHbaa4f50t49B8A6sEFzCeWswf8j8_k,19851
56
+ mcp_ticketer/cli/main.py,sha256=3FNolr8F1TFu7VDWyJPPm2zaEFic5L1TeL6dee_Chgw,20941
57
+ mcp_ticketer/cli/mcp_configure.py,sha256=aOWb_HIIdawg6qciqzefNxi5Du30UTWPUP0b71lsjG0,46303
58
+ mcp_ticketer/cli/mcp_server_commands.py,sha256=pdi8wByzi_E0LtWmz_xsQbZ-z5KJ6KA9JVXl3svwjKw,14184
59
+ mcp_ticketer/cli/migrate_config.py,sha256=5zeN1jtj6seKuQXEgSvL6PjZ_c6qkqx9w3VGFR4dwKY,6164
60
+ mcp_ticketer/cli/platform_commands.py,sha256=p1rkkkzGYexAugx9cmt1yNGI4oEPuD8sKMl60qBbTmY,3672
61
+ mcp_ticketer/cli/platform_detection.py,sha256=HL_AOIKGVlPanJ5LODOZWFW9R_5uP-h0NfNu2hELaiQ,15941
62
+ mcp_ticketer/cli/platform_installer.py,sha256=TzhnDOP4fnrOtSS2fXV3C5vT_qR3DVRDTQF9vVXAv8o,20154
63
+ mcp_ticketer/cli/project_update_commands.py,sha256=DVK5SVt5Fz4lt8uW0rjWrRBJ1iLml-wxJUM-IEQl72w,11431
64
+ mcp_ticketer/cli/python_detection.py,sha256=qmhi0CIDKH_AUVGkJ9jyY1zBpx1cwiQNv0vnEvMYDFQ,4272
65
+ mcp_ticketer/cli/queue_commands.py,sha256=xVhGJH3rUB-_uV40KULTLeFqxI94CA5Ff8rO6sgM-f4,8018
66
+ mcp_ticketer/cli/setup_command.py,sha256=gZ_9eXCW5NFGqcFrqgHzY9EjisuZPgYEouEqgZWPsWI,29386
67
+ mcp_ticketer/cli/simple_health.py,sha256=ZbjhaYYOS8DQApzsFn-N62yRyy9SbzxHRgZm9gz9b6c,7991
68
+ mcp_ticketer/cli/ticket_commands.py,sha256=XASykz0F3-GD2VFJjRqfQT6wR8pvGem2kClgWt8Q9_s,49041
69
+ mcp_ticketer/cli/update_checker.py,sha256=BsUeXe12sfW-v6YIsRaCg6OQrxzZwsB7mwYmyU9mwkk,9563
70
+ mcp_ticketer/cli/utils.py,sha256=8mVdSWMpmtU8lR4oA2bMcxOnlXsBSx_b2qdB9D4T2oE,26942
71
+ mcp_ticketer/core/__init__.py,sha256=h3CO_AeRGS3scbEj9EmrZK9ocP_8tHX7uqIJM8ZVFBI,1624
72
+ mcp_ticketer/core/adapter.py,sha256=aNPNxDe3oupPK3o253TwHGiw4-r41RPaneTWyTp38Bc,26306
73
+ mcp_ticketer/core/config.py,sha256=0VjxlTAQMcyoehyY5oczhG2YqVmtggqZ_0ZiRz4y8Vw,19942
74
+ mcp_ticketer/core/env_discovery.py,sha256=hTPmztjzgAjkbtyUVjHNpgeTONKhDzDZ3hYnkNSH2NA,21331
75
+ mcp_ticketer/core/env_loader.py,sha256=ulV6pqziUcsdtAU-Ll5HiEJZmXObTDDRFxVQ6ZR-NP8,11801
76
+ mcp_ticketer/core/exceptions.py,sha256=lDj3eW6w7a-3txVJd1bB--JqQun1FdQpqCVi1sI-zLo,3922
77
+ mcp_ticketer/core/http_client.py,sha256=f8duQwqTimgC3UMTCynyPYeULYzYKHszjfwscbJ67eA,13950
78
+ mcp_ticketer/core/instructions.py,sha256=i3otZW_ClYnejFsur8hvW2ezsL92RjlrjzrKlL_vTLA,14428
79
+ mcp_ticketer/core/label_manager.py,sha256=A1Szogrk9RnBZQtBMqDzz76u9VcosjNVYvFulhxZTb4,23932
80
+ mcp_ticketer/core/mappers.py,sha256=UZefD0LSNkOpdAHDA3cwh8Eu0XulAbfcK8THBcB1K50,18259
81
+ mcp_ticketer/core/milestone_manager.py,sha256=KZycNblTeyqo-0DH6JUIEAJqfYQVYSTuJH25HjYBxJ8,7640
82
+ mcp_ticketer/core/models.py,sha256=ghxuAxqYi1hkYAXA0BbQHWXun182fBK2Snarxjn0dQs,33237
83
+ mcp_ticketer/core/onepassword_secrets.py,sha256=bCt0KFgZ-dyy1r3S71mR7EdcZNsgGGOtdX0YdQWqBxE,12694
84
+ mcp_ticketer/core/priority_matcher.py,sha256=gcBOllSuamTGv_xOlETLMBVvM0npFu3V6tDHyyj3x8g,15134
85
+ mcp_ticketer/core/project_config.py,sha256=KVCxL4CfSDd5A9ft6WHz1kffnYtX0wEpNz_OHt_rNg0,29341
86
+ mcp_ticketer/core/project_utils.py,sha256=XtlcHfu_O7msBL0W_VWN1PaHc4qZLfEPcNcutjMyzW4,9113
87
+ mcp_ticketer/core/project_validator.py,sha256=8FMPMEX2A5W_ktMvZdQ5qQOJIb5gzRIOF93AnjHuUVY,14248
88
+ mcp_ticketer/core/registry.py,sha256=D7jiQ2V3Q9NJzQy15TxT2ePo44pmI_ajRl7tr6kgAS0,3477
89
+ mcp_ticketer/core/session_state.py,sha256=1milmAipXbICsNk84rtvCGbSi5TFpMWqk481TX9rGx8,5792
90
+ mcp_ticketer/core/state_matcher.py,sha256=2MUryG4A92QM1kVUXjFL5wCUDpA0HvKK3QgehnJOl6Q,20608
91
+ mcp_ticketer/core/url_parser.py,sha256=NhgyLmu9s7tPyJjVr0mmKpU_WmHkhjgypu8NDXrQ4Io,14863
92
+ mcp_ticketer/core/validators.py,sha256=GqtBs3K8c7NH4YgigS3e6SiiazDJl6ruPwgz77RsRck,1848
93
+ mcp_ticketer/defaults/ticket_instructions.md,sha256=gLyKghAy7WmhRnltN3YjaD_X18csBY2-orX80SUNHOA,18165
94
+ mcp_ticketer/mcp/__init__.py,sha256=iJfA61v2N-C1_I4WdVc1HV4I57OaqI9ciY6zywVYcLE,885
95
+ mcp_ticketer/mcp/__main__.py,sha256=Fo_5KJOFako2gi1Z1kk5zEt2sGJW6BX6oXlYp7twYTs,1713
96
+ mcp_ticketer/mcp/server/__init__.py,sha256=4uys8Wv29Ve9OgvP5QbiNiCWawGBtz56l4Xs7lje8cU,665
97
+ mcp_ticketer/mcp/server/__main__.py,sha256=3v1qZWyy3SFJQ5RD2CO-EabDb-X4qEWJoC-mAqSzTm8,1733
98
+ mcp_ticketer/mcp/server/constants.py,sha256=EBGsJtBPaTCvAm5rOMknckrXActrNIls7lRklnh1L4s,2072
99
+ mcp_ticketer/mcp/server/diagnostic_helper.py,sha256=xBEh1qiOZmc3ynXWgbACahpH-kvphiOHXFgppklx0hg,5249
100
+ mcp_ticketer/mcp/server/dto.py,sha256=FR_OBtaxrno8AsHynPwUUW715iAoaBkrr7Ud8HZTQW8,7233
101
+ mcp_ticketer/mcp/server/main.py,sha256=6L_Q5lF1AOVxKsXCijUTMtBcfEJUcCg3M8IHGu3c46Q,52176
102
+ mcp_ticketer/mcp/server/response_builder.py,sha256=DUfe1e0CcXPlepLq-cGH6b_THqoZEynYfVKkZEeLe0M,4933
103
+ mcp_ticketer/mcp/server/routing.py,sha256=qb4Y11sno4HZwveIWe6Gx3lXdujJ4n2bc6Pf_fCXkaU,27458
104
+ mcp_ticketer/mcp/server/server_sdk.py,sha256=3yAWVLQTAIU-_lqVgDKXpjVf0GTMwQ2YkLOGnJjil8Q,4202
105
+ mcp_ticketer/mcp/server/tools/__init__.py,sha256=dnIJE-whHJezZ-_JfCeAQqTbpjRccelVnUU-a6kTUZk,2630
106
+ mcp_ticketer/mcp/server/tools/analysis_tools.py,sha256=VQ4zMJHsrxMogfEwsT2wEKTEv5WlYMWlGaRjXLihdzI,32181
107
+ mcp_ticketer/mcp/server/tools/attachment_tools.py,sha256=6SO9ZQ2P0DOGfUMhYvkPusle1Jatjk-xv7WzoB02Ee8,7573
108
+ mcp_ticketer/mcp/server/tools/bulk_tools.py,sha256=GXYa0SsbXQpEOyzy8xx_qh6lTxZIzwimVw4Q0-Kb9wQ,12430
109
+ mcp_ticketer/mcp/server/tools/comment_tools.py,sha256=jpEmF4NJrm3mnQjfK_MizPbYlxr4W-tPtoxR9TMc7VU,5034
110
+ mcp_ticketer/mcp/server/tools/config_tools.py,sha256=RC0fAHRbfH2NIDCrf_JkfzD6qHM6Et7pXS-idB7QQF8,62048
111
+ mcp_ticketer/mcp/server/tools/diagnostic_tools.py,sha256=7VT6MJfkdk5kaJj6Dlkzob4NEwH5rdN15bO_FJKmrFA,7443
112
+ mcp_ticketer/mcp/server/tools/hierarchy_tools.py,sha256=B8cAa_RoDnPuw8FR0d2lyXnFRhhhPmICEy5DeNiLTac,39231
113
+ mcp_ticketer/mcp/server/tools/instruction_tools.py,sha256=6uSIqHWlxD-SBhFkOEwhq-Dcl4kvEy-JSjSyCREYRXA,9118
114
+ mcp_ticketer/mcp/server/tools/label_tools.py,sha256=Xswloj8MaaPvqq_vWLEnfrPQTDjeCnBZmWmOPzKq4RU,33847
115
+ mcp_ticketer/mcp/server/tools/milestone_tools.py,sha256=eA-0mkoUDsRN2H6_5_6Q7CXv9Q4tBzAKrIyIThDGJBA,10409
116
+ mcp_ticketer/mcp/server/tools/pr_tools.py,sha256=5K5mSOVVEG67SVFtRJVGOziAOZ__-znUDhVX45zYwG4,4449
117
+ mcp_ticketer/mcp/server/tools/project_status_tools.py,sha256=iOJAZviMIp5PwYqHSvKCKH1e4ErdVtb-Ckl3Fuk2arc,5371
118
+ mcp_ticketer/mcp/server/tools/project_update_tools.py,sha256=CUQ-p8rE_jHb2BmzqikX4BEDEDbnJG0Ku_TQlGiTmQ0,15571
119
+ mcp_ticketer/mcp/server/tools/search_tools.py,sha256=XtFNJ_sr5Z_T6TtYUDY2WchcmY_THqhpKro9NFeZZwo,11996
120
+ mcp_ticketer/mcp/server/tools/session_tools.py,sha256=7JHfkkduU1JBAHnpsLSn0mmU571H5TfgCwJp4eeUWWU,10807
121
+ mcp_ticketer/mcp/server/tools/ticket_tools.py,sha256=D1dzuxp7Anq7CnIE0T4z3NwNws9q4-IQWhCB5lCPARM,53773
122
+ mcp_ticketer/mcp/server/tools/user_ticket_tools.py,sha256=A-jimNC6kIAfcjw7TXmyiS2WF-J3HFagmIp1mSU56y0,15193
123
+ mcp_ticketer/queue/__init__.py,sha256=ut4EkrXng9RJlFPZRKUa3elhHo3MFGhshBXquZ16vcs,278
124
+ mcp_ticketer/queue/__main__.py,sha256=gc_tE9NUdK07OJfTZuD4t6KeBD_vxFQIhknGTQUG_jk,109
125
+ mcp_ticketer/queue/health_monitor.py,sha256=Mtp0_HC72VmkJY_zc1soXhWr7KBebThF63JPF5JcKaE,12279
126
+ mcp_ticketer/queue/manager.py,sha256=Fz-mcx9jdRBCt8ujwXNfi0wgn7heavTdzcM8269hX-Q,10752
127
+ mcp_ticketer/queue/queue.py,sha256=WHRJNq8drcGvLwAbpPUgCdXOtrUAquLfLCIrCRvh3BA,20383
128
+ mcp_ticketer/queue/run_worker.py,sha256=WTYvNxvyXxBOVYvMOVVC9F5_FCGV1oT3uJRppDAFA0k,1027
129
+ mcp_ticketer/queue/ticket_registry.py,sha256=wT5kN0xjBHYNNj4hgnZ1DYGv8pkHcSXV-FR-eViOoL4,15510
130
+ mcp_ticketer/queue/worker.py,sha256=Pey3DaisGRDfG3FVoaTSxFfrYKHN16HZNPkZ9Pi5Lfw,21115
131
+ mcp_ticketer/utils/__init__.py,sha256=2qyoz_GyANeC4khC1a6HnY4zvOgKlkuyudWH1BCPlX0,199
132
+ mcp_ticketer/utils/token_utils.py,sha256=y3tc2E-AOYNQeQSw7bLOfH_BrCUEKgf0qZ3KJ_7ziVQ,8809
133
+ mcp_ticketer-2.2.13.dist-info/licenses/LICENSE,sha256=KOVrunjtILSzY-2N8Lqa3-Q8dMaZIG4LrlLTr9UqL08,1073
134
+ py_mcp_installer/setup.py,sha256=5yQ6D6GWVeFdlzjp2dcbxORctaRHnvci2Me6F_Cpf7w,132
135
+ py_mcp_installer/examples/phase3_demo.py,sha256=g5FLy3QVo6DVe2Dt1WoD3RRSs-eLouq7opEDyFyf1XQ,5766
136
+ py_mcp_installer/scripts/manage_version.py,sha256=8s0BfUPMu8eI207a38vub5Bd5VSy1eBun79Pk-r6th8,1436
137
+ py_mcp_installer/src/py_mcp_installer/__init__.py,sha256=qpJ1C1_I8q0JuwG4Wo_Z0eJD4OlE5L8IfG5tSJH-Q-w,3601
138
+ py_mcp_installer/src/py_mcp_installer/command_builder.py,sha256=oL1mWhCQWVWMkYA3ODKFsHFfLp3y4fg0tbDJIEQ0LRg,14565
139
+ py_mcp_installer/src/py_mcp_installer/config_manager.py,sha256=FrCUEdO_cs6D1Mmz46_A1jVmjR1_Q_h8pKXkb0wBvgk,18133
140
+ py_mcp_installer/src/py_mcp_installer/exceptions.py,sha256=Vz6JxRFjYA5vPQMESIDlxslEPEk1_1GOIYEx-bbfPqs,7669
141
+ py_mcp_installer/src/py_mcp_installer/installation_strategy.py,sha256=P3HrHynqGllTZYXdqeFcgzpd31FijZw5Ossil4OQNmE,19919
142
+ py_mcp_installer/src/py_mcp_installer/installer.py,sha256=Nt7jfrOo-E8p0YDwcT1Nk2Ighp6tjWsV4UCKu3bsZiM,22272
143
+ py_mcp_installer/src/py_mcp_installer/mcp_inspector.py,sha256=D4Q5z3rnTX_ifVHkqQ1rUcR7lEjlrhMEP4t3vqKt2uU,25906
144
+ py_mcp_installer/src/py_mcp_installer/platform_detector.py,sha256=031MKS_GNKu7vWImWYdE5-3OtjWLRGfnrODwD7_uaxQ,14158
145
+ py_mcp_installer/src/py_mcp_installer/types.py,sha256=-y7KXyf3LC_4VK0O8aKb8x0-0uNlO1nKn8UvJDWcRyg,6895
146
+ py_mcp_installer/src/py_mcp_installer/utils.py,sha256=IJglxKAc4XL9HwIn2udB-jiXwO1oO65YCFXJPm98Js0,13563
147
+ py_mcp_installer/src/py_mcp_installer/platforms/__init__.py,sha256=BVK6A0uteJiSQeLqBv08yzgGoIh9MDTuF7GQiFwaTLk,611
148
+ py_mcp_installer/src/py_mcp_installer/platforms/claude_code.py,sha256=JJ2ocbEXVagBZBj0ubwxTXf-X2uM0UYCbSD1xQmhF-Q,7364
149
+ py_mcp_installer/src/py_mcp_installer/platforms/codex.py,sha256=jm_pLfSQuSyoZOzeVq18f6AvULcLnRIyGhZ_JUg2QVw,5578
150
+ py_mcp_installer/src/py_mcp_installer/platforms/cursor.py,sha256=2ZP9DW9X555y3VSKK3T4Y6Q7al3blMZtjtq7kTyoMHs,6042
151
+ py_mcp_installer/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
+ py_mcp_installer/tests/test_platform_detector.py,sha256=8e_8Xl545yl70hE1FmUksHNOBeYPJ95tDhf0U5mp7c4,521
153
+ py_mcp_installer/tests/platforms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
+ mcp_ticketer-2.2.13.dist-info/METADATA,sha256=W4V08WUsBKNHjQKQMLzHbwzw2SrLkTNmsDPUqWEi0Ms,48681
155
+ mcp_ticketer-2.2.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
156
+ mcp_ticketer-2.2.13.dist-info/entry_points.txt,sha256=o1IxVhnHnBNG7FZzbFq-Whcs1Djbofs0qMjiUYBLx2s,60
157
+ mcp_ticketer-2.2.13.dist-info/top_level.txt,sha256=kkz96wtnK0m_lVL6V9uF5JOheteVd0Gfo6hg_bLoM5A,30
158
+ mcp_ticketer-2.2.13.dist-info/RECORD,,
@@ -0,0 +1,2 @@
1
+ mcp_ticketer
2
+ py_mcp_installer
@@ -0,0 +1,178 @@
1
+ #!/usr/bin/env python3
2
+ """Phase 3 Demo: MCPInstaller and MCPInspector usage examples.
3
+
4
+ This script demonstrates the main API features of py-mcp-installer Phase 3.
5
+ """
6
+
7
+ import sys
8
+ from pathlib import Path
9
+
10
+ # Add src to path for local development
11
+ sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
12
+
13
+ from py_mcp_installer import (
14
+ MCPInstaller,
15
+ Scope,
16
+ )
17
+
18
+
19
+ def demo_auto_detection() -> None:
20
+ """Demo: Auto-detect platform and show info."""
21
+ print("\n" + "=" * 60)
22
+ print("Demo 1: Auto-Detection")
23
+ print("=" * 60)
24
+
25
+ try:
26
+ installer = MCPInstaller.auto_detect(verbose=True)
27
+ info = installer.platform_info
28
+
29
+ print(f"\n✅ Detected Platform: {info.platform.value}")
30
+ print(f" Confidence: {info.confidence:.2%}")
31
+ print(f" Config Path: {info.config_path}")
32
+ print(f" CLI Available: {info.cli_available}")
33
+ print(f" Scope Support: {info.scope_support.value}")
34
+
35
+ except Exception as e:
36
+ print(f"\n❌ Detection failed: {e}")
37
+
38
+
39
+ def demo_inspection() -> None:
40
+ """Demo: Run inspection and show results."""
41
+ print("\n" + "=" * 60)
42
+ print("Demo 2: Installation Inspection")
43
+ print("=" * 60)
44
+
45
+ try:
46
+ installer = MCPInstaller.auto_detect()
47
+ report = installer.inspect_installation()
48
+
49
+ print(f"\n{report.summary()}")
50
+
51
+ if report.issues:
52
+ print("\nIssues Found:")
53
+ for issue in report.issues:
54
+ icon = {"error": "❌", "warning": "⚠️", "info": "ℹ️"}[issue.severity]
55
+ print(f"\n {icon} [{issue.severity.upper()}] {issue.message}")
56
+ if issue.server_name:
57
+ print(f" Server: {issue.server_name}")
58
+ print(f" Fix: {issue.fix_suggestion}")
59
+ if issue.auto_fixable:
60
+ print(" (Auto-fixable)")
61
+
62
+ if report.recommendations:
63
+ print("\nRecommendations:")
64
+ for rec in report.recommendations:
65
+ print(f" • {rec}")
66
+
67
+ except Exception as e:
68
+ print(f"\n❌ Inspection failed: {e}")
69
+
70
+
71
+ def demo_list_servers() -> None:
72
+ """Demo: List installed servers."""
73
+ print("\n" + "=" * 60)
74
+ print("Demo 3: List Installed Servers")
75
+ print("=" * 60)
76
+
77
+ try:
78
+ installer = MCPInstaller.auto_detect()
79
+ servers = installer.list_servers(scope=Scope.PROJECT)
80
+
81
+ if servers:
82
+ print(f"\n✅ Found {len(servers)} server(s):\n")
83
+ for server in servers:
84
+ print(f" 📦 {server.name}")
85
+ print(f" Command: {server.command}")
86
+ if server.args:
87
+ print(f" Args: {' '.join(server.args)}")
88
+ if server.env:
89
+ print(f" Env Vars: {', '.join(server.env.keys())}")
90
+ if server.description:
91
+ print(f" Description: {server.description}")
92
+ print()
93
+ else:
94
+ print("\n⚠️ No servers installed")
95
+
96
+ except Exception as e:
97
+ print(f"\n❌ Failed to list servers: {e}")
98
+
99
+
100
+ def demo_dry_run_install() -> None:
101
+ """Demo: Dry-run installation (safe preview)."""
102
+ print("\n" + "=" * 60)
103
+ print("Demo 4: Dry-Run Installation")
104
+ print("=" * 60)
105
+
106
+ try:
107
+ installer = MCPInstaller.auto_detect(dry_run=True, verbose=True)
108
+
109
+ print("\n🔍 Previewing installation (no actual changes)...\n")
110
+
111
+ result = installer.install_server(
112
+ name="demo-server",
113
+ command="uv",
114
+ args=["run", "demo-server", "mcp"],
115
+ description="Demo server for testing",
116
+ )
117
+
118
+ if result.success:
119
+ print(f"\n✅ {result.message}")
120
+ print(f" Would install to: {result.config_path}")
121
+ else:
122
+ print(f"\n❌ {result.message}")
123
+
124
+ except Exception as e:
125
+ print(f"\n❌ Dry-run failed: {e}")
126
+
127
+
128
+ def demo_get_server() -> None:
129
+ """Demo: Get specific server details."""
130
+ print("\n" + "=" * 60)
131
+ print("Demo 5: Get Server Details")
132
+ print("=" * 60)
133
+
134
+ try:
135
+ installer = MCPInstaller.auto_detect()
136
+ servers = installer.list_servers()
137
+
138
+ if servers:
139
+ # Get first server as example
140
+ server_name = servers[0].name
141
+ server = installer.get_server(server_name)
142
+
143
+ if server:
144
+ print(f"\n✅ Server Details: {server.name}\n")
145
+ print(f" Command: {server.command}")
146
+ print(f" Args: {server.args}")
147
+ print(f" Env Vars: {list(server.env.keys())}")
148
+ print(f" Description: {server.description or '(none)'}")
149
+ else:
150
+ print(f"\n⚠️ Server '{server_name}' not found")
151
+ else:
152
+ print("\n⚠️ No servers installed to query")
153
+
154
+ except Exception as e:
155
+ print(f"\n❌ Failed to get server: {e}")
156
+
157
+
158
+ def main() -> None:
159
+ """Run all demos."""
160
+ print("\n╔══════════════════════════════════════════════════════════╗")
161
+ print("║ py-mcp-installer Phase 3 Demo ║")
162
+ print("║ MCPInstaller & MCPInspector API Examples ║")
163
+ print("╚══════════════════════════════════════════════════════════╝")
164
+
165
+ # Run demos
166
+ demo_auto_detection()
167
+ demo_inspection()
168
+ demo_list_servers()
169
+ demo_get_server()
170
+ demo_dry_run_install()
171
+
172
+ print("\n" + "=" * 60)
173
+ print("✅ All demos completed!")
174
+ print("=" * 60 + "\n")
175
+
176
+
177
+ if __name__ == "__main__":
178
+ main()
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env python3
2
+ """Version management for py-mcp-installer-service."""
3
+ import re
4
+ import sys
5
+ from pathlib import Path
6
+ from typing import Literal
7
+
8
+ REPO_ROOT = Path(__file__).parent.parent
9
+ VERSION_FILE = REPO_ROOT / "VERSION"
10
+ INIT_FILE = REPO_ROOT / "src/py_mcp_installer/__init__.py"
11
+
12
+
13
+ def get_current_version() -> str:
14
+ """Read version from VERSION file."""
15
+ return VERSION_FILE.read_text().strip()
16
+
17
+
18
+ def bump_version(bump_type: Literal["major", "minor", "patch"]) -> str:
19
+ """Bump version and update files."""
20
+ current = get_current_version()
21
+ major, minor, patch = map(int, current.split("."))
22
+
23
+ if bump_type == "major":
24
+ major += 1
25
+ minor = 0
26
+ patch = 0
27
+ elif bump_type == "minor":
28
+ minor += 1
29
+ patch = 0
30
+ else: # patch
31
+ patch += 1
32
+
33
+ new_version = f"{major}.{minor}.{patch}"
34
+
35
+ # Update VERSION file
36
+ VERSION_FILE.write_text(f"{new_version}\n")
37
+
38
+ # Update __init__.py
39
+ init_content = INIT_FILE.read_text()
40
+ init_content = re.sub(
41
+ r'__version__ = "[^"]+"', f'__version__ = "{new_version}"', init_content
42
+ )
43
+ INIT_FILE.write_text(init_content)
44
+
45
+ return new_version
46
+
47
+
48
+ if __name__ == "__main__":
49
+ if len(sys.argv) < 2:
50
+ print(get_current_version())
51
+ elif sys.argv[1] == "bump":
52
+ bump_type = sys.argv[2] if len(sys.argv) > 2 else "patch"
53
+ new_version = bump_version(bump_type)
54
+ print(new_version)
@@ -0,0 +1,6 @@
1
+ """Setup configuration for py-mcp-installer-service."""
2
+
3
+ from setuptools import setup
4
+
5
+ # Configuration is in pyproject.toml
6
+ setup()
@@ -0,0 +1,153 @@
1
+ """py-mcp-installer-service: Universal MCP server installer for AI coding tools.
2
+
3
+ This library provides a production-ready, type-safe solution for installing
4
+ and configuring MCP (Model Context Protocol) servers across 8 major AI coding
5
+ platforms.
6
+
7
+ Quick Start:
8
+ >>> from py_mcp_installer import PlatformDetector, MCPServerConfig
9
+ >>> detector = PlatformDetector()
10
+ >>> info = detector.detect()
11
+ >>> print(f"Detected {info.platform} with {info.confidence} confidence")
12
+
13
+ Supported Platforms:
14
+ - Claude Code (claude_code)
15
+ - Claude Desktop (claude_desktop)
16
+ - Cursor (cursor)
17
+ - Auggie (auggie)
18
+ - Codex (codex)
19
+ - Gemini CLI (gemini_cli)
20
+ - Windsurf (windsurf)
21
+ - Antigravity (antigravity) - TBD
22
+
23
+ Design Principles:
24
+ - Zero external dependencies (except TOML parsing)
25
+ - 100% type coverage (mypy --strict)
26
+ - Cross-platform (macOS, Linux, Windows)
27
+ - Atomic operations with backup/restore
28
+ - Clear error messages with recovery suggestions
29
+ """
30
+
31
+ __version__ = "0.0.3"
32
+
33
+ # Core types
34
+ from .command_builder import CommandBuilder
35
+
36
+ # Phase 2 modules
37
+ from .config_manager import ConfigManager
38
+
39
+ # Exceptions
40
+ from .exceptions import (
41
+ AtomicWriteError,
42
+ BackupError,
43
+ CommandNotFoundError,
44
+ ConfigurationError,
45
+ InstallationError,
46
+ PlatformDetectionError,
47
+ PlatformNotSupportedError,
48
+ PyMCPInstallerError,
49
+ ValidationError,
50
+ )
51
+ from .installation_strategy import (
52
+ InstallationStrategy as BaseInstallationStrategy,
53
+ )
54
+ from .installation_strategy import (
55
+ JSONManipulationStrategy,
56
+ NativeCLIStrategy,
57
+ TOMLManipulationStrategy,
58
+ )
59
+ from .installer import MCPInstaller
60
+
61
+ # Phase 3 modules
62
+ from .mcp_inspector import InspectionReport, MCPInspector, ValidationIssue
63
+
64
+ # Platform detection
65
+ from .platform_detector import PlatformDetector
66
+
67
+ # Platform-specific implementations
68
+ from .platforms import (
69
+ ClaudeCodeStrategy,
70
+ CodexStrategy,
71
+ CursorStrategy,
72
+ )
73
+ from .types import (
74
+ ArgsList,
75
+ ConfigFormat,
76
+ EnvDict,
77
+ InstallationResult,
78
+ InstallationStrategy,
79
+ InstallMethod,
80
+ JsonDict,
81
+ MCPServerConfig,
82
+ Platform,
83
+ PlatformInfo,
84
+ Scope,
85
+ )
86
+
87
+ # Utilities
88
+ from .utils import (
89
+ atomic_write,
90
+ backup_file,
91
+ mask_credentials,
92
+ parse_json_safe,
93
+ parse_toml_safe,
94
+ resolve_command_path,
95
+ restore_backup,
96
+ validate_json_structure,
97
+ validate_toml_structure,
98
+ )
99
+
100
+ __all__ = [
101
+ # Version
102
+ "__version__",
103
+ # Core Types
104
+ "Platform",
105
+ "InstallMethod",
106
+ "Scope",
107
+ "ConfigFormat",
108
+ "InstallationStrategy",
109
+ "MCPServerConfig",
110
+ "PlatformInfo",
111
+ "InstallationResult",
112
+ "JsonDict",
113
+ "EnvDict",
114
+ "ArgsList",
115
+ # Exceptions
116
+ "PyMCPInstallerError",
117
+ "PlatformDetectionError",
118
+ "ConfigurationError",
119
+ "InstallationError",
120
+ "ValidationError",
121
+ "CommandNotFoundError",
122
+ "BackupError",
123
+ "AtomicWriteError",
124
+ "PlatformNotSupportedError",
125
+ # Platform Detection
126
+ "PlatformDetector",
127
+ # Utilities
128
+ "atomic_write",
129
+ "backup_file",
130
+ "restore_backup",
131
+ "parse_json_safe",
132
+ "parse_toml_safe",
133
+ "mask_credentials",
134
+ "resolve_command_path",
135
+ "validate_json_structure",
136
+ "validate_toml_structure",
137
+ # Phase 2 modules
138
+ "ConfigManager",
139
+ "CommandBuilder",
140
+ "BaseInstallationStrategy",
141
+ "NativeCLIStrategy",
142
+ "JSONManipulationStrategy",
143
+ "TOMLManipulationStrategy",
144
+ # Platform implementations
145
+ "ClaudeCodeStrategy",
146
+ "CursorStrategy",
147
+ "CodexStrategy",
148
+ # Phase 3 modules
149
+ "MCPInstaller",
150
+ "MCPInspector",
151
+ "ValidationIssue",
152
+ "InspectionReport",
153
+ ]