mcp-ticketer 0.3.0__py3-none-any.whl → 2.2.9__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.
- mcp_ticketer/__init__.py +10 -10
- mcp_ticketer/__version__.py +3 -3
- mcp_ticketer/_version_scm.py +1 -0
- mcp_ticketer/adapters/__init__.py +2 -0
- mcp_ticketer/adapters/aitrackdown.py +930 -52
- mcp_ticketer/adapters/asana/__init__.py +15 -0
- mcp_ticketer/adapters/asana/adapter.py +1537 -0
- mcp_ticketer/adapters/asana/client.py +292 -0
- mcp_ticketer/adapters/asana/mappers.py +348 -0
- mcp_ticketer/adapters/asana/types.py +146 -0
- mcp_ticketer/adapters/github/__init__.py +26 -0
- mcp_ticketer/adapters/github/adapter.py +3229 -0
- 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/hybrid.py +58 -16
- mcp_ticketer/adapters/jira/__init__.py +35 -0
- mcp_ticketer/adapters/jira/adapter.py +1351 -0
- 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/__init__.py +1 -1
- mcp_ticketer/adapters/linear/adapter.py +3810 -462
- mcp_ticketer/adapters/linear/client.py +312 -69
- mcp_ticketer/adapters/linear/mappers.py +305 -85
- mcp_ticketer/adapters/linear/queries.py +317 -17
- mcp_ticketer/adapters/linear/types.py +187 -64
- mcp_ticketer/adapters/linear.py +2 -2
- mcp_ticketer/analysis/__init__.py +56 -0
- mcp_ticketer/analysis/dependency_graph.py +255 -0
- mcp_ticketer/analysis/health_assessment.py +304 -0
- mcp_ticketer/analysis/orphaned.py +218 -0
- mcp_ticketer/analysis/project_status.py +594 -0
- mcp_ticketer/analysis/similarity.py +224 -0
- mcp_ticketer/analysis/staleness.py +266 -0
- mcp_ticketer/automation/__init__.py +11 -0
- mcp_ticketer/automation/project_updates.py +378 -0
- mcp_ticketer/cache/memory.py +9 -8
- mcp_ticketer/cli/adapter_diagnostics.py +91 -54
- mcp_ticketer/cli/auggie_configure.py +116 -15
- mcp_ticketer/cli/codex_configure.py +274 -82
- mcp_ticketer/cli/configure.py +1323 -151
- mcp_ticketer/cli/cursor_configure.py +314 -0
- mcp_ticketer/cli/diagnostics.py +209 -114
- mcp_ticketer/cli/discover.py +297 -26
- mcp_ticketer/cli/gemini_configure.py +119 -26
- mcp_ticketer/cli/init_command.py +880 -0
- mcp_ticketer/cli/install_mcp_server.py +418 -0
- mcp_ticketer/cli/instruction_commands.py +435 -0
- mcp_ticketer/cli/linear_commands.py +256 -130
- mcp_ticketer/cli/main.py +140 -1544
- mcp_ticketer/cli/mcp_configure.py +1013 -100
- mcp_ticketer/cli/mcp_server_commands.py +415 -0
- mcp_ticketer/cli/migrate_config.py +12 -8
- mcp_ticketer/cli/platform_commands.py +123 -0
- mcp_ticketer/cli/platform_detection.py +477 -0
- mcp_ticketer/cli/platform_installer.py +545 -0
- mcp_ticketer/cli/project_update_commands.py +350 -0
- mcp_ticketer/cli/python_detection.py +126 -0
- mcp_ticketer/cli/queue_commands.py +15 -15
- mcp_ticketer/cli/setup_command.py +794 -0
- mcp_ticketer/cli/simple_health.py +84 -59
- mcp_ticketer/cli/ticket_commands.py +1375 -0
- mcp_ticketer/cli/update_checker.py +313 -0
- mcp_ticketer/cli/utils.py +195 -72
- mcp_ticketer/core/__init__.py +64 -1
- mcp_ticketer/core/adapter.py +618 -18
- mcp_ticketer/core/config.py +77 -68
- mcp_ticketer/core/env_discovery.py +75 -16
- mcp_ticketer/core/env_loader.py +121 -97
- mcp_ticketer/core/exceptions.py +32 -24
- mcp_ticketer/core/http_client.py +26 -26
- mcp_ticketer/core/instructions.py +405 -0
- mcp_ticketer/core/label_manager.py +732 -0
- mcp_ticketer/core/mappers.py +42 -30
- mcp_ticketer/core/milestone_manager.py +252 -0
- mcp_ticketer/core/models.py +566 -19
- mcp_ticketer/core/onepassword_secrets.py +379 -0
- mcp_ticketer/core/priority_matcher.py +463 -0
- mcp_ticketer/core/project_config.py +189 -49
- mcp_ticketer/core/project_utils.py +281 -0
- mcp_ticketer/core/project_validator.py +376 -0
- mcp_ticketer/core/registry.py +3 -3
- mcp_ticketer/core/session_state.py +176 -0
- mcp_ticketer/core/state_matcher.py +592 -0
- mcp_ticketer/core/url_parser.py +425 -0
- mcp_ticketer/core/validators.py +69 -0
- mcp_ticketer/defaults/ticket_instructions.md +644 -0
- mcp_ticketer/mcp/__init__.py +29 -1
- mcp_ticketer/mcp/__main__.py +60 -0
- mcp_ticketer/mcp/server/__init__.py +25 -0
- mcp_ticketer/mcp/server/__main__.py +60 -0
- mcp_ticketer/mcp/server/constants.py +58 -0
- mcp_ticketer/mcp/server/diagnostic_helper.py +175 -0
- mcp_ticketer/mcp/server/dto.py +195 -0
- mcp_ticketer/mcp/server/main.py +1343 -0
- mcp_ticketer/mcp/server/response_builder.py +206 -0
- mcp_ticketer/mcp/server/routing.py +723 -0
- mcp_ticketer/mcp/server/server_sdk.py +151 -0
- mcp_ticketer/mcp/server/tools/__init__.py +69 -0
- mcp_ticketer/mcp/server/tools/analysis_tools.py +854 -0
- mcp_ticketer/mcp/server/tools/attachment_tools.py +224 -0
- mcp_ticketer/mcp/server/tools/bulk_tools.py +330 -0
- mcp_ticketer/mcp/server/tools/comment_tools.py +152 -0
- mcp_ticketer/mcp/server/tools/config_tools.py +1564 -0
- mcp_ticketer/mcp/server/tools/diagnostic_tools.py +211 -0
- mcp_ticketer/mcp/server/tools/hierarchy_tools.py +942 -0
- mcp_ticketer/mcp/server/tools/instruction_tools.py +295 -0
- mcp_ticketer/mcp/server/tools/label_tools.py +942 -0
- mcp_ticketer/mcp/server/tools/milestone_tools.py +338 -0
- mcp_ticketer/mcp/server/tools/pr_tools.py +150 -0
- mcp_ticketer/mcp/server/tools/project_status_tools.py +158 -0
- mcp_ticketer/mcp/server/tools/project_update_tools.py +473 -0
- mcp_ticketer/mcp/server/tools/search_tools.py +318 -0
- mcp_ticketer/mcp/server/tools/session_tools.py +308 -0
- mcp_ticketer/mcp/server/tools/ticket_tools.py +1413 -0
- mcp_ticketer/mcp/server/tools/user_ticket_tools.py +364 -0
- mcp_ticketer/queue/__init__.py +1 -0
- mcp_ticketer/queue/health_monitor.py +168 -136
- mcp_ticketer/queue/manager.py +78 -63
- mcp_ticketer/queue/queue.py +108 -21
- mcp_ticketer/queue/run_worker.py +2 -2
- mcp_ticketer/queue/ticket_registry.py +213 -155
- mcp_ticketer/queue/worker.py +96 -58
- mcp_ticketer/utils/__init__.py +5 -0
- mcp_ticketer/utils/token_utils.py +246 -0
- mcp_ticketer-2.2.9.dist-info/METADATA +1396 -0
- mcp_ticketer-2.2.9.dist-info/RECORD +158 -0
- mcp_ticketer-2.2.9.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/adapters/github.py +0 -1354
- mcp_ticketer/adapters/jira.py +0 -1011
- mcp_ticketer/mcp/server.py +0 -2030
- mcp_ticketer-0.3.0.dist-info/METADATA +0 -414
- mcp_ticketer-0.3.0.dist-info/RECORD +0 -59
- mcp_ticketer-0.3.0.dist-info/top_level.txt +0 -1
- {mcp_ticketer-0.3.0.dist-info → mcp_ticketer-2.2.9.dist-info}/WHEEL +0 -0
- {mcp_ticketer-0.3.0.dist-info → mcp_ticketer-2.2.9.dist-info}/entry_points.txt +0 -0
- {mcp_ticketer-0.3.0.dist-info → mcp_ticketer-2.2.9.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=gAlL4RktYHK8wDzoxkITozBFMnqbhe-MRPpibrzcJ6k,1131
|
|
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=0ijrUeGu5nixSoIoI_LtO1ZEj_hCYUeYAPLouQyJXXo,64055
|
|
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=3_WhjrNasVxPHMhOPM30cAOeP0qmvTxsnM4ksS0zDLM,46373
|
|
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=hxn0sBAl8JRR6e7dMDnZ3nVot-mHlBROHZc_Q_NfWj0,29360
|
|
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=ML6Yw7m7JnesGos7ktT_c4U9YBu9uqBLqtLx46AJCw8,19189
|
|
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=xE1n94M5n2tKyT6qFIOXaqRXX7L--SxmCglKUPcljG0,1711
|
|
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=NK3WhiAaNzrnFUZm2OxaTETIsVnBHXKHNMfnQsO2n_Y,2755
|
|
106
|
+
mcp_ticketer/mcp/server/tools/analysis_tools.py,sha256=VQ4zMJHsrxMogfEwsT2wEKTEv5WlYMWlGaRjXLihdzI,32181
|
|
107
|
+
mcp_ticketer/mcp/server/tools/attachment_tools.py,sha256=2dKbErqeIH-JVZ_SpNxtDMB4qfMTTQE6Gnm8cxPzfh8,7544
|
|
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=ucIPu1vVS4smscYBgTO7XzmsHdyL12mgnj4sV61Taco,59901
|
|
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.9.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.9.dist-info/METADATA,sha256=0nRUgJIGcSPlN58qjWXFCi7sWCK_q-AoI12Yi-2FmRA,48680
|
|
155
|
+
mcp_ticketer-2.2.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
156
|
+
mcp_ticketer-2.2.9.dist-info/entry_points.txt,sha256=o1IxVhnHnBNG7FZzbFq-Whcs1Djbofs0qMjiUYBLx2s,60
|
|
157
|
+
mcp_ticketer-2.2.9.dist-info/top_level.txt,sha256=kkz96wtnK0m_lVL6V9uF5JOheteVd0Gfo6hg_bLoM5A,30
|
|
158
|
+
mcp_ticketer-2.2.9.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
|
+
]
|