mcp-ticketer 2.0.1__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 (73) hide show
  1. mcp_ticketer/__version__.py +1 -1
  2. mcp_ticketer/_version_scm.py +1 -0
  3. mcp_ticketer/adapters/aitrackdown.py +122 -0
  4. mcp_ticketer/adapters/asana/adapter.py +121 -0
  5. mcp_ticketer/adapters/github/__init__.py +26 -0
  6. mcp_ticketer/adapters/{github.py → github/adapter.py} +1506 -365
  7. mcp_ticketer/adapters/github/client.py +335 -0
  8. mcp_ticketer/adapters/github/mappers.py +797 -0
  9. mcp_ticketer/adapters/github/queries.py +692 -0
  10. mcp_ticketer/adapters/github/types.py +460 -0
  11. mcp_ticketer/adapters/jira/__init__.py +35 -0
  12. mcp_ticketer/adapters/{jira.py → jira/adapter.py} +250 -678
  13. mcp_ticketer/adapters/jira/client.py +271 -0
  14. mcp_ticketer/adapters/jira/mappers.py +246 -0
  15. mcp_ticketer/adapters/jira/queries.py +216 -0
  16. mcp_ticketer/adapters/jira/types.py +304 -0
  17. mcp_ticketer/adapters/linear/adapter.py +1000 -92
  18. mcp_ticketer/adapters/linear/client.py +91 -1
  19. mcp_ticketer/adapters/linear/mappers.py +107 -0
  20. mcp_ticketer/adapters/linear/queries.py +112 -2
  21. mcp_ticketer/adapters/linear/types.py +50 -10
  22. mcp_ticketer/cli/configure.py +524 -89
  23. mcp_ticketer/cli/install_mcp_server.py +418 -0
  24. mcp_ticketer/cli/main.py +10 -0
  25. mcp_ticketer/cli/mcp_configure.py +177 -49
  26. mcp_ticketer/cli/platform_installer.py +9 -0
  27. mcp_ticketer/cli/setup_command.py +157 -1
  28. mcp_ticketer/cli/ticket_commands.py +443 -81
  29. mcp_ticketer/cli/utils.py +113 -0
  30. mcp_ticketer/core/__init__.py +28 -0
  31. mcp_ticketer/core/adapter.py +367 -1
  32. mcp_ticketer/core/milestone_manager.py +252 -0
  33. mcp_ticketer/core/models.py +345 -0
  34. mcp_ticketer/core/project_utils.py +281 -0
  35. mcp_ticketer/core/project_validator.py +376 -0
  36. mcp_ticketer/core/session_state.py +6 -1
  37. mcp_ticketer/core/state_matcher.py +36 -3
  38. mcp_ticketer/mcp/server/__main__.py +2 -1
  39. mcp_ticketer/mcp/server/routing.py +68 -0
  40. mcp_ticketer/mcp/server/tools/__init__.py +7 -4
  41. mcp_ticketer/mcp/server/tools/attachment_tools.py +3 -1
  42. mcp_ticketer/mcp/server/tools/config_tools.py +233 -35
  43. mcp_ticketer/mcp/server/tools/milestone_tools.py +338 -0
  44. mcp_ticketer/mcp/server/tools/search_tools.py +30 -1
  45. mcp_ticketer/mcp/server/tools/ticket_tools.py +37 -1
  46. mcp_ticketer/queue/queue.py +68 -0
  47. {mcp_ticketer-2.0.1.dist-info → mcp_ticketer-2.2.13.dist-info}/METADATA +33 -3
  48. {mcp_ticketer-2.0.1.dist-info → mcp_ticketer-2.2.13.dist-info}/RECORD +72 -36
  49. mcp_ticketer-2.2.13.dist-info/top_level.txt +2 -0
  50. py_mcp_installer/examples/phase3_demo.py +178 -0
  51. py_mcp_installer/scripts/manage_version.py +54 -0
  52. py_mcp_installer/setup.py +6 -0
  53. py_mcp_installer/src/py_mcp_installer/__init__.py +153 -0
  54. py_mcp_installer/src/py_mcp_installer/command_builder.py +445 -0
  55. py_mcp_installer/src/py_mcp_installer/config_manager.py +541 -0
  56. py_mcp_installer/src/py_mcp_installer/exceptions.py +243 -0
  57. py_mcp_installer/src/py_mcp_installer/installation_strategy.py +617 -0
  58. py_mcp_installer/src/py_mcp_installer/installer.py +656 -0
  59. py_mcp_installer/src/py_mcp_installer/mcp_inspector.py +750 -0
  60. py_mcp_installer/src/py_mcp_installer/platform_detector.py +451 -0
  61. py_mcp_installer/src/py_mcp_installer/platforms/__init__.py +26 -0
  62. py_mcp_installer/src/py_mcp_installer/platforms/claude_code.py +225 -0
  63. py_mcp_installer/src/py_mcp_installer/platforms/codex.py +181 -0
  64. py_mcp_installer/src/py_mcp_installer/platforms/cursor.py +191 -0
  65. py_mcp_installer/src/py_mcp_installer/types.py +222 -0
  66. py_mcp_installer/src/py_mcp_installer/utils.py +463 -0
  67. py_mcp_installer/tests/__init__.py +0 -0
  68. py_mcp_installer/tests/platforms/__init__.py +0 -0
  69. py_mcp_installer/tests/test_platform_detector.py +17 -0
  70. mcp_ticketer-2.0.1.dist-info/top_level.txt +0 -1
  71. {mcp_ticketer-2.0.1.dist-info → mcp_ticketer-2.2.13.dist-info}/WHEEL +0 -0
  72. {mcp_ticketer-2.0.1.dist-info → mcp_ticketer-2.2.13.dist-info}/entry_points.txt +0 -0
  73. {mcp_ticketer-2.0.1.dist-info → mcp_ticketer-2.2.13.dist-info}/licenses/LICENSE +0 -0
@@ -1,23 +1,34 @@
1
1
  mcp_ticketer/__init__.py,sha256=701DkKv4mtXRwbG6GjYhryb-aV8FVmq3RMF-qD_V3I8,497
2
- mcp_ticketer/__version__.py,sha256=EqOji6h6txPxaIEoykOdGq0NLqp2P8qW8fccZmQ_aS8,1131
2
+ mcp_ticketer/__version__.py,sha256=9ibdPM2IF_JsIpRPY4qxMIeoeJH09YY7JaL64r4hr0w,1132
3
+ mcp_ticketer/_version_scm.py,sha256=reQIi1vO4KcrdUnNUfBn6Z9EHAL38cGH1-9nU006LR4,48
3
4
  mcp_ticketer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
5
  mcp_ticketer/adapters/__init__.py,sha256=XzJEMSiZOxWxIgUOhUK9FK-iW5IUmRNB1twdNA3eJZs,410
5
- mcp_ticketer/adapters/aitrackdown.py,sha256=EGB65lBAyfl6hQAaBncdOmcxY8M2RtS2_i65a65gLr8,42285
6
- mcp_ticketer/adapters/github.py,sha256=FqfJQ6E7W-sjkLHx7wY5zZevICUF8aPjNlcuXHBSKwc,73401
6
+ mcp_ticketer/adapters/aitrackdown.py,sha256=h1dbIkXIzebjnpENCii4y_3S3Aly-2XpOVjcZDiabwI,45762
7
7
  mcp_ticketer/adapters/hybrid.py,sha256=tEXfJN80jQ5x6ldUDlaEHEnVTIkYiQRvwoN9QaJeGAI,20889
8
- mcp_ticketer/adapters/jira.py,sha256=6cE7-3MAwhL5S21mJp6OIK67Ve47NpFJn-7ZEKM_ybA,61460
9
8
  mcp_ticketer/adapters/linear.py,sha256=trm6ZhmlUl80sj51WAPAox_R2HQZXZ-h1QXJsrFYDCQ,587
10
9
  mcp_ticketer/adapters/asana/__init__.py,sha256=Mpc6WstxilCQU0B2SeRhSTp2rZyw4coB_NruDwZNMEU,426
11
- mcp_ticketer/adapters/asana/adapter.py,sha256=V8ACIuKLR8k26zHUxgN3AlO8nNVSBMHmd08gO3OI23s,46819
10
+ mcp_ticketer/adapters/asana/adapter.py,sha256=2HZ_uotGBTlWoztVXMGBskfSI8qPfExnvypkaSH-xSA,50218
12
11
  mcp_ticketer/adapters/asana/client.py,sha256=jbT1F51rUYmtcBEiZ4RRCnCHdEPqM9HqUsnxInOgIH8,8590
13
12
  mcp_ticketer/adapters/asana/mappers.py,sha256=y4tebHlaciLPAVFEsBULUo-r0bPoXik7CE5Xcq3HsVY,10421
14
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
15
26
  mcp_ticketer/adapters/linear/__init__.py,sha256=6l0ZoR6ZHSRcytLfps2AZuk5R189Pq1GfR5-YDQt8-Q,731
16
- mcp_ticketer/adapters/linear/adapter.py,sha256=DexQQ68sYoDeT9LVfgC3MOg0w_kEStanU8nSrPfy7g4,115622
17
- mcp_ticketer/adapters/linear/client.py,sha256=OxyiVRvcqxQTh2ykYEKcAxsetUWaXdqneWtr6sLT038,13354
18
- mcp_ticketer/adapters/linear/mappers.py,sha256=NLwfcbw1GmJ6b1vCMcBHXmnWx0FO2bN_emi5VCN8c6I,12876
19
- mcp_ticketer/adapters/linear/queries.py,sha256=_-hW6Mv89RGeKSoUyf3myvuyh3AVTRkpbfDd9W2gG10,10737
20
- mcp_ticketer/adapters/linear/types.py,sha256=1NSQCdM37zTH1uJF2_92XJlCTKm7zLqRoQjdIZXpXgA,10376
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
21
32
  mcp_ticketer/analysis/__init__.py,sha256=SyhnEkigSaNX2wrHuu8PPUXaaHgzXNG60CLEBikv3HQ,2208
22
33
  mcp_ticketer/analysis/dependency_graph.py,sha256=6XPb5tHNvKG1PAwIO557k6j4Re_sDJjStkgWp8Jh0Q4,8374
23
34
  mcp_ticketer/analysis/health_assessment.py,sha256=-0TbhzJjleSxArJUEiM91cCFrJWqNnwKYfXDGGME22Q,9522
@@ -33,31 +44,32 @@ mcp_ticketer/cli/__init__.py,sha256=l9Q8iKmfGkTu0cssHBVqNZTsL4eAtFzOB25AED_0G6g,
33
44
  mcp_ticketer/cli/adapter_diagnostics.py,sha256=RLDaFPW2UfHP5dVXr-gKjKyEk4600ekr4jYOy79UHqA,15023
34
45
  mcp_ticketer/cli/auggie_configure.py,sha256=d38Ptji9huKPZOS5szy8lMALPrvpXOEmTAxB06pT2g0,12399
35
46
  mcp_ticketer/cli/codex_configure.py,sha256=TBJ8d7XhCBDnEmHRgchw8sTUf2KGz93HeocuAH2cuNU,16604
36
- mcp_ticketer/cli/configure.py,sha256=wmmHgKvZX-sofb8-41eQN97tNg73W20NBdPZidQ1Img,46776
47
+ mcp_ticketer/cli/configure.py,sha256=PspDhcnRvD-sjWIh_gAa5gIlMphuuCtVz1-H2Ews7IQ,64066
37
48
  mcp_ticketer/cli/cursor_configure.py,sha256=N7UYshMvPIViTzU3UVHBIZ3tv3pMO9i5rQwnLwT_BeU,11077
38
49
  mcp_ticketer/cli/diagnostics.py,sha256=7jeY1u7v7AbANVqzeP0EiAfDRfK3EPzyUC3hq4o22AE,30376
39
50
  mcp_ticketer/cli/discover.py,sha256=jpjrTN8wBeiBZm5yKjSOm9-wfK9XWeuwp7vkY9pzUkg,22463
40
51
  mcp_ticketer/cli/gemini_configure.py,sha256=cA8zT-zeVkQI8KrHYVRlblbsMfb6C8rhiZRxZZ4Nfmo,13313
41
52
  mcp_ticketer/cli/init_command.py,sha256=PvBl3Mo8y3fHK0rwg-fYz-JNsVQdn6WP931FlMEA8e4,35132
53
+ mcp_ticketer/cli/install_mcp_server.py,sha256=LHlaZd75cU6toDh-jzlSfvSeQoWwbBCDOpDeH8FSpTs,14688
42
54
  mcp_ticketer/cli/instruction_commands.py,sha256=C3wB9wtPsVbbZMG54-jWOFzWT5Z4vqkqKEn952LYlb8,14286
43
55
  mcp_ticketer/cli/linear_commands.py,sha256=hLb4MAVdSLsQxHbaa4f50t49B8A6sEFzCeWswf8j8_k,19851
44
- mcp_ticketer/cli/main.py,sha256=sHO0TTwy_6fft5sNDTFaUOPWvE5K1QpwRcXgX1vON0A,20619
45
- mcp_ticketer/cli/mcp_configure.py,sha256=gjZFjI_Xsc6eTBSo1RhQJmK3_HeGUElNBV3E_PVmSQ4,41518
56
+ mcp_ticketer/cli/main.py,sha256=3FNolr8F1TFu7VDWyJPPm2zaEFic5L1TeL6dee_Chgw,20941
57
+ mcp_ticketer/cli/mcp_configure.py,sha256=aOWb_HIIdawg6qciqzefNxi5Du30UTWPUP0b71lsjG0,46303
46
58
  mcp_ticketer/cli/mcp_server_commands.py,sha256=pdi8wByzi_E0LtWmz_xsQbZ-z5KJ6KA9JVXl3svwjKw,14184
47
59
  mcp_ticketer/cli/migrate_config.py,sha256=5zeN1jtj6seKuQXEgSvL6PjZ_c6qkqx9w3VGFR4dwKY,6164
48
60
  mcp_ticketer/cli/platform_commands.py,sha256=p1rkkkzGYexAugx9cmt1yNGI4oEPuD8sKMl60qBbTmY,3672
49
61
  mcp_ticketer/cli/platform_detection.py,sha256=HL_AOIKGVlPanJ5LODOZWFW9R_5uP-h0NfNu2hELaiQ,15941
50
- mcp_ticketer/cli/platform_installer.py,sha256=4n10rpO-UQTTZa5xTKti3UJcjNG97GN1HzoUBYvBNSQ,19679
62
+ mcp_ticketer/cli/platform_installer.py,sha256=TzhnDOP4fnrOtSS2fXV3C5vT_qR3DVRDTQF9vVXAv8o,20154
51
63
  mcp_ticketer/cli/project_update_commands.py,sha256=DVK5SVt5Fz4lt8uW0rjWrRBJ1iLml-wxJUM-IEQl72w,11431
52
64
  mcp_ticketer/cli/python_detection.py,sha256=qmhi0CIDKH_AUVGkJ9jyY1zBpx1cwiQNv0vnEvMYDFQ,4272
53
65
  mcp_ticketer/cli/queue_commands.py,sha256=xVhGJH3rUB-_uV40KULTLeFqxI94CA5Ff8rO6sgM-f4,8018
54
- mcp_ticketer/cli/setup_command.py,sha256=lfdY8Bwi9UNlmwYOVG4cI8Ge--5tGrR-E0PchK6ALys,23241
66
+ mcp_ticketer/cli/setup_command.py,sha256=gZ_9eXCW5NFGqcFrqgHzY9EjisuZPgYEouEqgZWPsWI,29386
55
67
  mcp_ticketer/cli/simple_health.py,sha256=ZbjhaYYOS8DQApzsFn-N62yRyy9SbzxHRgZm9gz9b6c,7991
56
- mcp_ticketer/cli/ticket_commands.py,sha256=A9g0uNAm_bJMrCwpqaAlHiMq0-mjQCyVPtVwA4aiIOw,35726
68
+ mcp_ticketer/cli/ticket_commands.py,sha256=XASykz0F3-GD2VFJjRqfQT6wR8pvGem2kClgWt8Q9_s,49041
57
69
  mcp_ticketer/cli/update_checker.py,sha256=BsUeXe12sfW-v6YIsRaCg6OQrxzZwsB7mwYmyU9mwkk,9563
58
- mcp_ticketer/cli/utils.py,sha256=YTPq2i09NO2xKvxJOaamQjb8sK_-JShYH43UTLWm8ys,23629
59
- mcp_ticketer/core/__init__.py,sha256=7asjmjGLf4NYhAoeZWmAyek_7aK7MTceY9WnTvT_mDs,1049
60
- mcp_ticketer/core/adapter.py,sha256=Mn5HmYhIeuazr7CXso0BOpU8z1pyM08g5bjOmkCJHb0,16747
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
61
73
  mcp_ticketer/core/config.py,sha256=0VjxlTAQMcyoehyY5oczhG2YqVmtggqZ_0ZiRz4y8Vw,19942
62
74
  mcp_ticketer/core/env_discovery.py,sha256=hTPmztjzgAjkbtyUVjHNpgeTONKhDzDZ3hYnkNSH2NA,21331
63
75
  mcp_ticketer/core/env_loader.py,sha256=ulV6pqziUcsdtAU-Ll5HiEJZmXObTDDRFxVQ6ZR-NP8,11801
@@ -66,57 +78,81 @@ mcp_ticketer/core/http_client.py,sha256=f8duQwqTimgC3UMTCynyPYeULYzYKHszjfwscbJ6
66
78
  mcp_ticketer/core/instructions.py,sha256=i3otZW_ClYnejFsur8hvW2ezsL92RjlrjzrKlL_vTLA,14428
67
79
  mcp_ticketer/core/label_manager.py,sha256=A1Szogrk9RnBZQtBMqDzz76u9VcosjNVYvFulhxZTb4,23932
68
80
  mcp_ticketer/core/mappers.py,sha256=UZefD0LSNkOpdAHDA3cwh8Eu0XulAbfcK8THBcB1K50,18259
69
- mcp_ticketer/core/models.py,sha256=aVQArCqUkbbIdsTGetu4d-m7i5PfBL9GRCRdADM0T44,19846
81
+ mcp_ticketer/core/milestone_manager.py,sha256=KZycNblTeyqo-0DH6JUIEAJqfYQVYSTuJH25HjYBxJ8,7640
82
+ mcp_ticketer/core/models.py,sha256=ghxuAxqYi1hkYAXA0BbQHWXun182fBK2Snarxjn0dQs,33237
70
83
  mcp_ticketer/core/onepassword_secrets.py,sha256=bCt0KFgZ-dyy1r3S71mR7EdcZNsgGGOtdX0YdQWqBxE,12694
71
84
  mcp_ticketer/core/priority_matcher.py,sha256=gcBOllSuamTGv_xOlETLMBVvM0npFu3V6tDHyyj3x8g,15134
72
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
73
88
  mcp_ticketer/core/registry.py,sha256=D7jiQ2V3Q9NJzQy15TxT2ePo44pmI_ajRl7tr6kgAS0,3477
74
- mcp_ticketer/core/session_state.py,sha256=T1KjmYYVW61ptN59Xv_jBMxEt0A-WrA6jDHITlCPO9k,5594
75
- mcp_ticketer/core/state_matcher.py,sha256=ML6Yw7m7JnesGos7ktT_c4U9YBu9uqBLqtLx46AJCw8,19189
89
+ mcp_ticketer/core/session_state.py,sha256=1milmAipXbICsNk84rtvCGbSi5TFpMWqk481TX9rGx8,5792
90
+ mcp_ticketer/core/state_matcher.py,sha256=2MUryG4A92QM1kVUXjFL5wCUDpA0HvKK3QgehnJOl6Q,20608
76
91
  mcp_ticketer/core/url_parser.py,sha256=NhgyLmu9s7tPyJjVr0mmKpU_WmHkhjgypu8NDXrQ4Io,14863
77
92
  mcp_ticketer/core/validators.py,sha256=GqtBs3K8c7NH4YgigS3e6SiiazDJl6ruPwgz77RsRck,1848
78
93
  mcp_ticketer/defaults/ticket_instructions.md,sha256=gLyKghAy7WmhRnltN3YjaD_X18csBY2-orX80SUNHOA,18165
79
94
  mcp_ticketer/mcp/__init__.py,sha256=iJfA61v2N-C1_I4WdVc1HV4I57OaqI9ciY6zywVYcLE,885
80
95
  mcp_ticketer/mcp/__main__.py,sha256=Fo_5KJOFako2gi1Z1kk5zEt2sGJW6BX6oXlYp7twYTs,1713
81
96
  mcp_ticketer/mcp/server/__init__.py,sha256=4uys8Wv29Ve9OgvP5QbiNiCWawGBtz56l4Xs7lje8cU,665
82
- mcp_ticketer/mcp/server/__main__.py,sha256=xE1n94M5n2tKyT6qFIOXaqRXX7L--SxmCglKUPcljG0,1711
97
+ mcp_ticketer/mcp/server/__main__.py,sha256=3v1qZWyy3SFJQ5RD2CO-EabDb-X4qEWJoC-mAqSzTm8,1733
83
98
  mcp_ticketer/mcp/server/constants.py,sha256=EBGsJtBPaTCvAm5rOMknckrXActrNIls7lRklnh1L4s,2072
84
99
  mcp_ticketer/mcp/server/diagnostic_helper.py,sha256=xBEh1qiOZmc3ynXWgbACahpH-kvphiOHXFgppklx0hg,5249
85
100
  mcp_ticketer/mcp/server/dto.py,sha256=FR_OBtaxrno8AsHynPwUUW715iAoaBkrr7Ud8HZTQW8,7233
86
101
  mcp_ticketer/mcp/server/main.py,sha256=6L_Q5lF1AOVxKsXCijUTMtBcfEJUcCg3M8IHGu3c46Q,52176
87
102
  mcp_ticketer/mcp/server/response_builder.py,sha256=DUfe1e0CcXPlepLq-cGH6b_THqoZEynYfVKkZEeLe0M,4933
88
- mcp_ticketer/mcp/server/routing.py,sha256=9SvdLAnbx6EQMAtuOWIrdP_oO8jediOv-0Z63rh8WKs,24671
103
+ mcp_ticketer/mcp/server/routing.py,sha256=qb4Y11sno4HZwveIWe6Gx3lXdujJ4n2bc6Pf_fCXkaU,27458
89
104
  mcp_ticketer/mcp/server/server_sdk.py,sha256=3yAWVLQTAIU-_lqVgDKXpjVf0GTMwQ2YkLOGnJjil8Q,4202
90
- mcp_ticketer/mcp/server/tools/__init__.py,sha256=XO4c-HMXw0k2ulh0SZ4i69-VRBveMolpsfoRYdTHbTc,2624
105
+ mcp_ticketer/mcp/server/tools/__init__.py,sha256=dnIJE-whHJezZ-_JfCeAQqTbpjRccelVnUU-a6kTUZk,2630
91
106
  mcp_ticketer/mcp/server/tools/analysis_tools.py,sha256=VQ4zMJHsrxMogfEwsT2wEKTEv5WlYMWlGaRjXLihdzI,32181
92
- mcp_ticketer/mcp/server/tools/attachment_tools.py,sha256=2dKbErqeIH-JVZ_SpNxtDMB4qfMTTQE6Gnm8cxPzfh8,7544
107
+ mcp_ticketer/mcp/server/tools/attachment_tools.py,sha256=6SO9ZQ2P0DOGfUMhYvkPusle1Jatjk-xv7WzoB02Ee8,7573
93
108
  mcp_ticketer/mcp/server/tools/bulk_tools.py,sha256=GXYa0SsbXQpEOyzy8xx_qh6lTxZIzwimVw4Q0-Kb9wQ,12430
94
109
  mcp_ticketer/mcp/server/tools/comment_tools.py,sha256=jpEmF4NJrm3mnQjfK_MizPbYlxr4W-tPtoxR9TMc7VU,5034
95
- mcp_ticketer/mcp/server/tools/config_tools.py,sha256=LfhIC2189O7uNCs-SaULD1Cpw8SiUPRuI1_W0tyqfS4,54707
110
+ mcp_ticketer/mcp/server/tools/config_tools.py,sha256=RC0fAHRbfH2NIDCrf_JkfzD6qHM6Et7pXS-idB7QQF8,62048
96
111
  mcp_ticketer/mcp/server/tools/diagnostic_tools.py,sha256=7VT6MJfkdk5kaJj6Dlkzob4NEwH5rdN15bO_FJKmrFA,7443
97
112
  mcp_ticketer/mcp/server/tools/hierarchy_tools.py,sha256=B8cAa_RoDnPuw8FR0d2lyXnFRhhhPmICEy5DeNiLTac,39231
98
113
  mcp_ticketer/mcp/server/tools/instruction_tools.py,sha256=6uSIqHWlxD-SBhFkOEwhq-Dcl4kvEy-JSjSyCREYRXA,9118
99
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
100
116
  mcp_ticketer/mcp/server/tools/pr_tools.py,sha256=5K5mSOVVEG67SVFtRJVGOziAOZ__-znUDhVX45zYwG4,4449
101
117
  mcp_ticketer/mcp/server/tools/project_status_tools.py,sha256=iOJAZviMIp5PwYqHSvKCKH1e4ErdVtb-Ckl3Fuk2arc,5371
102
118
  mcp_ticketer/mcp/server/tools/project_update_tools.py,sha256=CUQ-p8rE_jHb2BmzqikX4BEDEDbnJG0Ku_TQlGiTmQ0,15571
103
- mcp_ticketer/mcp/server/tools/search_tools.py,sha256=mIZpl_xyZTw1YsZPC1ecQvXd2zhSjzV_zGoaDiOBPVI,10854
119
+ mcp_ticketer/mcp/server/tools/search_tools.py,sha256=XtFNJ_sr5Z_T6TtYUDY2WchcmY_THqhpKro9NFeZZwo,11996
104
120
  mcp_ticketer/mcp/server/tools/session_tools.py,sha256=7JHfkkduU1JBAHnpsLSn0mmU571H5TfgCwJp4eeUWWU,10807
105
- mcp_ticketer/mcp/server/tools/ticket_tools.py,sha256=NGjTIX7pweKnGweoJqezMLegG3_F28D55lNwdV7tCZ0,52264
121
+ mcp_ticketer/mcp/server/tools/ticket_tools.py,sha256=D1dzuxp7Anq7CnIE0T4z3NwNws9q4-IQWhCB5lCPARM,53773
106
122
  mcp_ticketer/mcp/server/tools/user_ticket_tools.py,sha256=A-jimNC6kIAfcjw7TXmyiS2WF-J3HFagmIp1mSU56y0,15193
107
123
  mcp_ticketer/queue/__init__.py,sha256=ut4EkrXng9RJlFPZRKUa3elhHo3MFGhshBXquZ16vcs,278
108
124
  mcp_ticketer/queue/__main__.py,sha256=gc_tE9NUdK07OJfTZuD4t6KeBD_vxFQIhknGTQUG_jk,109
109
125
  mcp_ticketer/queue/health_monitor.py,sha256=Mtp0_HC72VmkJY_zc1soXhWr7KBebThF63JPF5JcKaE,12279
110
126
  mcp_ticketer/queue/manager.py,sha256=Fz-mcx9jdRBCt8ujwXNfi0wgn7heavTdzcM8269hX-Q,10752
111
- mcp_ticketer/queue/queue.py,sha256=8I9Jqk4kbzBulOkG6wX9xvd5KqHQiOsyJxBT5ka5UiM,17947
127
+ mcp_ticketer/queue/queue.py,sha256=WHRJNq8drcGvLwAbpPUgCdXOtrUAquLfLCIrCRvh3BA,20383
112
128
  mcp_ticketer/queue/run_worker.py,sha256=WTYvNxvyXxBOVYvMOVVC9F5_FCGV1oT3uJRppDAFA0k,1027
113
129
  mcp_ticketer/queue/ticket_registry.py,sha256=wT5kN0xjBHYNNj4hgnZ1DYGv8pkHcSXV-FR-eViOoL4,15510
114
130
  mcp_ticketer/queue/worker.py,sha256=Pey3DaisGRDfG3FVoaTSxFfrYKHN16HZNPkZ9Pi5Lfw,21115
115
131
  mcp_ticketer/utils/__init__.py,sha256=2qyoz_GyANeC4khC1a6HnY4zvOgKlkuyudWH1BCPlX0,199
116
132
  mcp_ticketer/utils/token_utils.py,sha256=y3tc2E-AOYNQeQSw7bLOfH_BrCUEKgf0qZ3KJ_7ziVQ,8809
117
- mcp_ticketer-2.0.1.dist-info/licenses/LICENSE,sha256=KOVrunjtILSzY-2N8Lqa3-Q8dMaZIG4LrlLTr9UqL08,1073
118
- mcp_ticketer-2.0.1.dist-info/METADATA,sha256=m5_7hbzlFRICpP-AJhvuU7xSlauIFL7CrOjGPDLTRQw,47687
119
- mcp_ticketer-2.0.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
120
- mcp_ticketer-2.0.1.dist-info/entry_points.txt,sha256=o1IxVhnHnBNG7FZzbFq-Whcs1Djbofs0qMjiUYBLx2s,60
121
- mcp_ticketer-2.0.1.dist-info/top_level.txt,sha256=WnAG4SOT1Vm9tIwl70AbGG_nA217YyV3aWFhxLH2rxw,13
122
- mcp_ticketer-2.0.1.dist-info/RECORD,,
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
+ ]