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.
- mcp_ticketer/__version__.py +1 -1
- mcp_ticketer/_version_scm.py +1 -0
- mcp_ticketer/adapters/aitrackdown.py +122 -0
- mcp_ticketer/adapters/asana/adapter.py +121 -0
- mcp_ticketer/adapters/github/__init__.py +26 -0
- mcp_ticketer/adapters/{github.py → github/adapter.py} +1506 -365
- mcp_ticketer/adapters/github/client.py +335 -0
- mcp_ticketer/adapters/github/mappers.py +797 -0
- mcp_ticketer/adapters/github/queries.py +692 -0
- mcp_ticketer/adapters/github/types.py +460 -0
- mcp_ticketer/adapters/jira/__init__.py +35 -0
- mcp_ticketer/adapters/{jira.py → jira/adapter.py} +250 -678
- mcp_ticketer/adapters/jira/client.py +271 -0
- mcp_ticketer/adapters/jira/mappers.py +246 -0
- mcp_ticketer/adapters/jira/queries.py +216 -0
- mcp_ticketer/adapters/jira/types.py +304 -0
- mcp_ticketer/adapters/linear/adapter.py +1000 -92
- mcp_ticketer/adapters/linear/client.py +91 -1
- mcp_ticketer/adapters/linear/mappers.py +107 -0
- mcp_ticketer/adapters/linear/queries.py +112 -2
- mcp_ticketer/adapters/linear/types.py +50 -10
- mcp_ticketer/cli/configure.py +524 -89
- mcp_ticketer/cli/install_mcp_server.py +418 -0
- mcp_ticketer/cli/main.py +10 -0
- mcp_ticketer/cli/mcp_configure.py +177 -49
- mcp_ticketer/cli/platform_installer.py +9 -0
- mcp_ticketer/cli/setup_command.py +157 -1
- mcp_ticketer/cli/ticket_commands.py +443 -81
- mcp_ticketer/cli/utils.py +113 -0
- mcp_ticketer/core/__init__.py +28 -0
- mcp_ticketer/core/adapter.py +367 -1
- mcp_ticketer/core/milestone_manager.py +252 -0
- mcp_ticketer/core/models.py +345 -0
- mcp_ticketer/core/project_utils.py +281 -0
- mcp_ticketer/core/project_validator.py +376 -0
- mcp_ticketer/core/session_state.py +6 -1
- mcp_ticketer/core/state_matcher.py +36 -3
- mcp_ticketer/mcp/server/__main__.py +2 -1
- mcp_ticketer/mcp/server/routing.py +68 -0
- mcp_ticketer/mcp/server/tools/__init__.py +7 -4
- mcp_ticketer/mcp/server/tools/attachment_tools.py +3 -1
- mcp_ticketer/mcp/server/tools/config_tools.py +233 -35
- mcp_ticketer/mcp/server/tools/milestone_tools.py +338 -0
- mcp_ticketer/mcp/server/tools/search_tools.py +30 -1
- mcp_ticketer/mcp/server/tools/ticket_tools.py +37 -1
- mcp_ticketer/queue/queue.py +68 -0
- {mcp_ticketer-2.0.1.dist-info → mcp_ticketer-2.2.13.dist-info}/METADATA +33 -3
- {mcp_ticketer-2.0.1.dist-info → mcp_ticketer-2.2.13.dist-info}/RECORD +72 -36
- mcp_ticketer-2.2.13.dist-info/top_level.txt +2 -0
- py_mcp_installer/examples/phase3_demo.py +178 -0
- py_mcp_installer/scripts/manage_version.py +54 -0
- py_mcp_installer/setup.py +6 -0
- py_mcp_installer/src/py_mcp_installer/__init__.py +153 -0
- py_mcp_installer/src/py_mcp_installer/command_builder.py +445 -0
- py_mcp_installer/src/py_mcp_installer/config_manager.py +541 -0
- py_mcp_installer/src/py_mcp_installer/exceptions.py +243 -0
- py_mcp_installer/src/py_mcp_installer/installation_strategy.py +617 -0
- py_mcp_installer/src/py_mcp_installer/installer.py +656 -0
- py_mcp_installer/src/py_mcp_installer/mcp_inspector.py +750 -0
- py_mcp_installer/src/py_mcp_installer/platform_detector.py +451 -0
- py_mcp_installer/src/py_mcp_installer/platforms/__init__.py +26 -0
- py_mcp_installer/src/py_mcp_installer/platforms/claude_code.py +225 -0
- py_mcp_installer/src/py_mcp_installer/platforms/codex.py +181 -0
- py_mcp_installer/src/py_mcp_installer/platforms/cursor.py +191 -0
- py_mcp_installer/src/py_mcp_installer/types.py +222 -0
- py_mcp_installer/src/py_mcp_installer/utils.py +463 -0
- py_mcp_installer/tests/__init__.py +0 -0
- py_mcp_installer/tests/platforms/__init__.py +0 -0
- py_mcp_installer/tests/test_platform_detector.py +17 -0
- mcp_ticketer-2.0.1.dist-info/top_level.txt +0 -1
- {mcp_ticketer-2.0.1.dist-info → mcp_ticketer-2.2.13.dist-info}/WHEEL +0 -0
- {mcp_ticketer-2.0.1.dist-info → mcp_ticketer-2.2.13.dist-info}/entry_points.txt +0 -0
- {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=
|
|
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=
|
|
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=
|
|
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=
|
|
17
|
-
mcp_ticketer/adapters/linear/client.py,sha256=
|
|
18
|
-
mcp_ticketer/adapters/linear/mappers.py,sha256=
|
|
19
|
-
mcp_ticketer/adapters/linear/queries.py,sha256=
|
|
20
|
-
mcp_ticketer/adapters/linear/types.py,sha256=
|
|
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=
|
|
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=
|
|
45
|
-
mcp_ticketer/cli/mcp_configure.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
59
|
-
mcp_ticketer/core/__init__.py,sha256=
|
|
60
|
-
mcp_ticketer/core/adapter.py,sha256=
|
|
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/
|
|
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=
|
|
75
|
-
mcp_ticketer/core/state_matcher.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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,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,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
|
+
]
|