mcp-ticketer 0.4.10__tar.gz → 0.4.11__tar.gz

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 (303) hide show
  1. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/CHANGELOG.md +22 -0
  2. {mcp_ticketer-0.4.10/src/mcp_ticketer.egg-info → mcp_ticketer-0.4.11}/PKG-INFO +1 -1
  3. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/pyproject.toml +1 -1
  4. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/__version__.py +1 -1
  5. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/auggie_configure.py +5 -7
  6. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/codex_configure.py +5 -7
  7. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/gemini_configure.py +5 -7
  8. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/mcp_configure.py +4 -8
  9. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11/src/mcp_ticketer.egg-info}/PKG-INFO +1 -1
  10. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer.egg-info/SOURCES.txt +0 -1
  11. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/e2e/test_mcp_jsonrpc.py +2 -2
  12. mcp_ticketer-0.4.10/test_mcp_configure_fix.py +0 -153
  13. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.aitrackdown-test/comments/comment-20251024141042175430.json +0 -0
  14. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.aitrackdown-test/comments/comment-20251024141042175768.json +0 -0
  15. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.aitrackdown-test/comments/comment-20251024141042175888.json +0 -0
  16. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.aitrackdown-test/comments/comment-20251024141042175987.json +0 -0
  17. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.aitrackdown-test/comments/comment-20251024141042176075.json +0 -0
  18. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.aitrackdown-test/comments/comment-20251024141042176163.json +0 -0
  19. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.aitrackdown-test/tickets/task-20251024141042175062.json +0 -0
  20. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.aitrackdown-test/tickets/task-20251024141042175285.json +0 -0
  21. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.claude.json +0 -0
  22. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.coveragerc +0 -0
  23. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.cursor/mcp.json +0 -0
  24. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.env.example +0 -0
  25. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.github/workflows/docs.yml +0 -0
  26. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.github/workflows/publish.yml +0 -0
  27. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.github/workflows/test.yml +0 -0
  28. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.mcp/config.json +0 -0
  29. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.pre-commit-config.yaml +0 -0
  30. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.python-version +0 -0
  31. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/.readthedocs.yaml +0 -0
  32. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/CLAUDE.md +0 -0
  33. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/CLI_RESTRUCTURE_REPORT.md +0 -0
  34. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/CLI_RESTRUCTURE_TEST_REPORT.md +0 -0
  35. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/FIXES_v0.4.10.md +0 -0
  36. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/IMPLEMENTATION_SUMMARY.md +0 -0
  37. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/LICENSE +0 -0
  38. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/MANIFEST.in +0 -0
  39. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/MCP_CONFIGURE_FIX.md +0 -0
  40. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/Makefile +0 -0
  41. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/PATH_TRAVERSAL_SECURITY_TEST_REPORT.md +0 -0
  42. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/QUALITY_GATE_REPORT.md +0 -0
  43. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/README.md +0 -0
  44. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/SECURITY_RESCAN_REPORT.md +0 -0
  45. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/TEST_RESULTS.txt +0 -0
  46. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/VERIFICATION_COMPLETE.md +0 -0
  47. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/VERIFICATION_REPORT.md +0 -0
  48. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/VERIFICATION_SUMMARY.md +0 -0
  49. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/VERIFICATION_v0.4.3.md +0 -0
  50. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/debug_epic_creation.py +0 -0
  51. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/debug_full_flow.py +0 -0
  52. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/debug_worker_epic.py +0 -0
  53. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/ADAPTERS.md +0 -0
  54. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/AI_CLIENT_INTEGRATION.md +0 -0
  55. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/API_REFERENCE.md +0 -0
  56. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/ATTACHMENTS.md +0 -0
  57. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/CONFIGURATION.md +0 -0
  58. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/CONFIG_RESOLUTION_FLOW.md +0 -0
  59. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/DEVELOPER_GUIDE.md +0 -0
  60. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/ENV_DISCOVERY.md +0 -0
  61. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/MCP_INTEGRATION.md +0 -0
  62. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/MIGRATION_GUIDE.md +0 -0
  63. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/PROJECT_CONFIG.md +0 -0
  64. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/PR_INTEGRATION.md +0 -0
  65. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/QUEUE_SYSTEM.md +0 -0
  66. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/QUICK_START.md +0 -0
  67. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/QUICK_START_ENV.md +0 -0
  68. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/README.md +0 -0
  69. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/USER_GUIDE.md +0 -0
  70. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/VERSIONING_AND_BUILD_TRACKING.md +0 -0
  71. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_archive/README.md +0 -0
  72. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/ADAPTERS.md.txt +0 -0
  73. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/API_REFERENCE.md.txt +0 -0
  74. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/CONFIGURATION.md.txt +0 -0
  75. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/DEVELOPER_GUIDE.md.txt +0 -0
  76. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/MCP_INTEGRATION.md.txt +0 -0
  77. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/MIGRATION_GUIDE.md.txt +0 -0
  78. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/USER_GUIDE.md.txt +0 -0
  79. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/adapters/github.md.txt +0 -0
  80. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/adapters.rst.txt +0 -0
  81. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/api.rst.txt +0 -0
  82. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/cli.rst.txt +0 -0
  83. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/development.rst.txt +0 -0
  84. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/examples.rst.txt +0 -0
  85. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/index.rst.txt +0 -0
  86. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/installation.rst.txt +0 -0
  87. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/_build/_sources/prd/mcp-ticketer-prd.md.txt +0 -0
  88. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/adapters/github.md +0 -0
  89. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/adapters.rst +0 -0
  90. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/api.rst +0 -0
  91. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/changelogs/CHANGELOG_v0.2.0.md +0 -0
  92. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/changelogs/CHANGELOG_v0.3.0.md +0 -0
  93. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/changelogs/CHANGELOG_v0.3.1.md +0 -0
  94. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/cli.rst +0 -0
  95. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/conf.py +0 -0
  96. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/development/CODE_STRUCTURE.md +0 -0
  97. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/development/CONTRIBUTING.md +0 -0
  98. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/development/RELEASE.md +0 -0
  99. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/development/RELEASING.md +0 -0
  100. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/development.rst +0 -0
  101. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/examples.rst +0 -0
  102. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/guides/BULLETPROOF_TICKET_CREATION_GUIDE.md +0 -0
  103. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/index.rst +0 -0
  104. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/installation.rst +0 -0
  105. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/prd/mcp-ticketer-prd.md +0 -0
  106. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/releases/PUBLICATION_GUIDE_v0.2.0.md +0 -0
  107. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/releases/PUBLICATION_SUCCESS_v0.2.0.md +0 -0
  108. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/releases/PUBLICATION_SUCCESS_v0.3.0.md +0 -0
  109. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/releases/PUBLICATION_SUCCESS_v0.3.1.md +0 -0
  110. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/releases/PUBLICATION_SUCCESS_v0.3.4.md +0 -0
  111. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/releases/PUBLICATION_SUCCESS_v0.3.5.md +0 -0
  112. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/releases/RELEASE_v0.1.39_SUMMARY.md +0 -0
  113. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/releases/RELEASE_v0.2.0_SUMMARY.md +0 -0
  114. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/CONFIG_RESOLUTION_FIX.md +0 -0
  115. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/CREDENTIAL_VALIDATION_FIX.md +0 -0
  116. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/DIAGNOSTICS_FEATURE.md +0 -0
  117. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/ENV_DISCOVERY_COMPLETE.md +0 -0
  118. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/FIX_SUMMARY.md +0 -0
  119. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/HIERARCHY_IMPLEMENTATION_SUMMARY.md +0 -0
  120. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/IMPLEMENTATION_SUMMARY.md +0 -0
  121. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/MCP_CONFIGURATION_TEST_REPORT.md +0 -0
  122. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/OPTIMIZATION_SUMMARY.md +0 -0
  123. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/PROJECT_INITIALIZATION_SUMMARY.md +0 -0
  124. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/TEST_COVERAGE_REPORT.md +0 -0
  125. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/TEST_REPORT.md +0 -0
  126. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/TEST_RESULTS_SUMMARY.md +0 -0
  127. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/reports/VERIFICATION_RESULTS.md +0 -0
  128. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/requirements.txt +0 -0
  129. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/setup/CLAUDE_DESKTOP_SETUP.md +0 -0
  130. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/setup/CODEX_INTEGRATION.md +0 -0
  131. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/setup/JIRA_SETUP.md +0 -0
  132. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/setup/LINEAR_SETUP.md +0 -0
  133. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/summaries/AUTO_DISCOVERY_BUG_FIX_SUMMARY.md +0 -0
  134. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/summaries/BULLETPROOF_IMPROVEMENTS_SUMMARY.md +0 -0
  135. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/summaries/COMMAND_SYNONYMS_SUMMARY.md +0 -0
  136. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/summaries/COMPREHENSIVE_TESTING_SUMMARY.md +0 -0
  137. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/summaries/INTERACTIVE_CLI_SETUP_SUMMARY.md +0 -0
  138. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/summaries/LINEAR_ADAPTER_INITIALIZATION_BUG_FIX.md +0 -0
  139. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/summaries/MODULE_REFACTORING_ANALYSIS.md +0 -0
  140. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/summaries/MODULE_REFACTORING_SUMMARY.md +0 -0
  141. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/summaries/PROJECT_CLEANUP_SUMMARY.md +0 -0
  142. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/docs/summaries/REFACTORED_ENV_SOLUTION_SUMMARY.md +0 -0
  143. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/mcp-ticketer +0 -0
  144. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/mcp-ticketer-server +0 -0
  145. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/pytest.ini +0 -0
  146. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/requirements-dev.txt +0 -0
  147. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/requirements.txt +0 -0
  148. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/scripts/README.md +0 -0
  149. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/scripts/install.sh +0 -0
  150. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/scripts/manage_version.py +0 -0
  151. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/scripts/mcp_server.sh +0 -0
  152. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/scripts/test_set_command.sh +0 -0
  153. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/setup.cfg +0 -0
  154. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/setup.py +0 -0
  155. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/__init__.py +0 -0
  156. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/adapters/__init__.py +0 -0
  157. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/adapters/aitrackdown.py +0 -0
  158. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/adapters/github.py +0 -0
  159. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/adapters/hybrid.py +0 -0
  160. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/adapters/jira.py +0 -0
  161. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/adapters/linear/__init__.py +0 -0
  162. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/adapters/linear/adapter.py +0 -0
  163. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/adapters/linear/client.py +0 -0
  164. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/adapters/linear/mappers.py +0 -0
  165. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/adapters/linear/queries.py +0 -0
  166. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/adapters/linear/types.py +0 -0
  167. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/adapters/linear.py +0 -0
  168. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cache/__init__.py +0 -0
  169. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cache/memory.py +0 -0
  170. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/__init__.py +0 -0
  171. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/adapter_diagnostics.py +0 -0
  172. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/configure.py +0 -0
  173. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/diagnostics.py +0 -0
  174. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/discover.py +0 -0
  175. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/linear_commands.py +0 -0
  176. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/main.py +0 -0
  177. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/migrate_config.py +0 -0
  178. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/platform_commands.py +0 -0
  179. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/python_detection.py +0 -0
  180. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/queue_commands.py +0 -0
  181. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/simple_health.py +0 -0
  182. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/ticket_commands.py +0 -0
  183. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/cli/utils.py +0 -0
  184. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/core/__init__.py +0 -0
  185. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/core/adapter.py +0 -0
  186. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/core/config.py +0 -0
  187. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/core/env_discovery.py +0 -0
  188. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/core/env_loader.py +0 -0
  189. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/core/exceptions.py +0 -0
  190. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/core/http_client.py +0 -0
  191. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/core/mappers.py +0 -0
  192. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/core/models.py +0 -0
  193. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/core/project_config.py +0 -0
  194. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/core/registry.py +0 -0
  195. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/__init__.py +0 -0
  196. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/__main__.py +0 -0
  197. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/__init__.py +0 -0
  198. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/__main__.py +0 -0
  199. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/constants.py +0 -0
  200. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/dto.py +0 -0
  201. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/main.py +0 -0
  202. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/response_builder.py +0 -0
  203. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/server_sdk.py +0 -0
  204. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/tools/__init__.py +0 -0
  205. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/tools/attachment_tools.py +0 -0
  206. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/tools/bulk_tools.py +0 -0
  207. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/tools/comment_tools.py +0 -0
  208. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/tools/hierarchy_tools.py +0 -0
  209. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/tools/pr_tools.py +0 -0
  210. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/tools/search_tools.py +0 -0
  211. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/mcp/server/tools/ticket_tools.py +0 -0
  212. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/py.typed +0 -0
  213. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/queue/__init__.py +0 -0
  214. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/queue/__main__.py +0 -0
  215. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/queue/health_monitor.py +0 -0
  216. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/queue/manager.py +0 -0
  217. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/queue/queue.py +0 -0
  218. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/queue/run_worker.py +0 -0
  219. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/queue/ticket_registry.py +0 -0
  220. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer/queue/worker.py +0 -0
  221. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer.egg-info/dependency_links.txt +0 -0
  222. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer.egg-info/entry_points.txt +0 -0
  223. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer.egg-info/not-zip-safe +0 -0
  224. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer.egg-info/requires.txt +0 -0
  225. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/src/mcp_ticketer.egg-info/top_level.txt +0 -0
  226. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/test-tickets/tickets/task-20250924002724.json +0 -0
  227. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/test_linear_fixes.py +0 -0
  228. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/test_mcp_integration.py +0 -0
  229. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/test_structure_validation.py +0 -0
  230. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/test_worker_persistence.py +0 -0
  231. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/README.md +0 -0
  232. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/__init__.py +0 -0
  233. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/linear/__init__.py +0 -0
  234. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/linear/test_adapter.py +0 -0
  235. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/linear/test_adapter_validation.py +0 -0
  236. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/linear/test_client.py +0 -0
  237. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/linear/test_mappers.py +0 -0
  238. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/linear/test_project_resolution.py +0 -0
  239. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/linear/test_queries.py +0 -0
  240. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/linear/test_types.py +0 -0
  241. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/test_aitrackdown.py +0 -0
  242. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/test_aitrackdown_security.py +0 -0
  243. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/test_github.py +0 -0
  244. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/test_github_token.py +0 -0
  245. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/test_jira.py +0 -0
  246. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/test_jira_direct.py +0 -0
  247. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/test_jira_projects.py +0 -0
  248. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/test_linear.py +0 -0
  249. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/test_linear_config.py +0 -0
  250. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/adapters/test_linear_native.py +0 -0
  251. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/cli/test_python_detection.py +0 -0
  252. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/conftest.py +0 -0
  253. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/core/debug_credential_validation.py +0 -0
  254. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/core/test_actual_worker_execution.py +0 -0
  255. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/core/test_config_resolution.py +0 -0
  256. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/core/test_env_discovery.py +0 -0
  257. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/core/test_environment_handoff.py +0 -0
  258. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/core/test_queue_processing.py +0 -0
  259. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/core/test_queue_system.py +0 -0
  260. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/core/test_unified_env_loading.py +0 -0
  261. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/debug/debug_adapter_cache.py +0 -0
  262. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/debug/debug_cli_config.py +0 -0
  263. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/debug/debug_cli_vs_simulation.py +0 -0
  264. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/debug/debug_linear_teams.py +0 -0
  265. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/debug/debug_search.py +0 -0
  266. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/debug/debug_test.py +0 -0
  267. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/debug/debug_worker_adapter.py +0 -0
  268. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/debug/debug_worker_simulation.py +0 -0
  269. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/debug/debug_worker_subprocess.py +0 -0
  270. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/e2e/test_comments_and_attachments.py +0 -0
  271. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/e2e/test_complete_ticket_workflow.py +0 -0
  272. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/e2e/test_complete_workflow.py +0 -0
  273. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/e2e/test_hierarchy_validation.py +0 -0
  274. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/e2e/test_state_transitions.py +0 -0
  275. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/integration/test_aitrackdown_commenting.py +0 -0
  276. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/integration/test_all_adapters.py +0 -0
  277. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/integration/test_commenting_functionality.py +0 -0
  278. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/integration/test_comprehensive.py +0 -0
  279. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/integration/test_hierarchy_and_workflow.py +0 -0
  280. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/integration/test_jira_github_adapters.py +0 -0
  281. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/integration/test_mcp_server_qa.py +0 -0
  282. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/integration/test_pr_functionality.py +0 -0
  283. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/integration/test_serve_config.py +0 -0
  284. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/integration/test_user_assignment.py +0 -0
  285. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/performance/test_optimizations.py +0 -0
  286. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/performance/test_performance.py +0 -0
  287. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/run_comprehensive_tests.py +0 -0
  288. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/test_api_usage.py +0 -0
  289. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/test_base_adapter.py +0 -0
  290. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/test_basic.py +0 -0
  291. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/test_codex_config.py +0 -0
  292. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/test_comprehensive_qa.py +0 -0
  293. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/test_error_handling.py +0 -0
  294. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/test_linear_teams.py +0 -0
  295. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/test_models.py +0 -0
  296. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/test_queue.py +0 -0
  297. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/unit/__init__.py +0 -0
  298. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/unit/test_cache_memory.py +0 -0
  299. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/unit/test_core_exceptions.py +0 -0
  300. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/unit/test_core_models.py +0 -0
  301. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tests/unit/test_core_registry.py +0 -0
  302. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/tox.ini +0 -0
  303. {mcp_ticketer-0.4.10 → mcp_ticketer-0.4.11}/verify_fixes.sh +0 -0
@@ -4,6 +4,28 @@ All notable changes to MCP Ticketer will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.4.11] - 2025-10-28
8
+
9
+ ### Fixed
10
+ - **CRITICAL: MCP Installer Command Structure**: Fixed all MCP installers to use Python module invocation pattern
11
+ - Changed from: `command: {venv}/bin/mcp-ticketer`, `args: ["mcp", project_path]`
12
+ - Changed to: `command: {venv}/bin/python`, `args: ["-m", "mcp_ticketer.mcp.server", project_path]`
13
+ - Affects: Claude Code, Auggie CLI, Gemini CLI, and Codex CLI installers
14
+ - Impact: Installer now works with any Python environment (pip, pipx, editable installs)
15
+ - Matches established pattern from mcp-vector-search and other MCP servers
16
+
17
+ ### Files Modified
18
+ - `src/mcp_ticketer/cli/mcp_configure.py` - Claude Code/Desktop installer
19
+ - `src/mcp_ticketer/cli/auggie_configure.py` - Auggie CLI installer
20
+ - `src/mcp_ticketer/cli/gemini_configure.py` - Gemini CLI installer
21
+ - `src/mcp_ticketer/cli/codex_configure.py` - Codex CLI installer
22
+
23
+ ### Technical Details
24
+ - Uses Python executable directly with `-m` module flag
25
+ - No longer depends on `mcp-ticketer` binary existing in target venv
26
+ - Works across all installation methods and Python environments
27
+ - Provides consistent behavior with other MCP ecosystem tools
28
+
7
29
  ## [0.4.10] - 2025-10-28
8
30
 
9
31
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-ticketer
3
- Version: 0.4.10
3
+ Version: 0.4.11
4
4
  Summary: Universal ticket management interface for AI agents with MCP support
5
5
  Author-email: MCP Ticketer Team <support@mcp-ticketer.io>
6
6
  Maintainer-email: MCP Ticketer Team <support@mcp-ticketer.io>
@@ -152,7 +152,7 @@ extend-exclude = '''
152
152
  '''
153
153
 
154
154
  [tool.ruff]
155
- target-version = "0.4.10"
155
+ target-version = "py39"
156
156
  line-length = 88
157
157
 
158
158
  [tool.ruff.lint]
@@ -1,6 +1,6 @@
1
1
  """Version information for mcp-ticketer package."""
2
2
 
3
- __version__ = "0.4.10"
3
+ __version__ = "0.4.11"
4
4
  __version_info__ = tuple(int(part) for part in __version__.split("."))
5
5
 
6
6
  # Package metadata
@@ -85,11 +85,9 @@ def create_auggie_server_config(
85
85
  Auggie MCP server configuration dict
86
86
 
87
87
  """
88
- # Get mcp-ticketer CLI command from same directory as Python
88
+ # Use Python module invocation pattern (works regardless of where package is installed)
89
89
  from pathlib import Path
90
90
 
91
- python_dir = Path(python_path).parent
92
- mcp_ticketer_cmd = str(python_dir / "mcp-ticketer")
93
91
  # Get adapter configuration
94
92
  adapter = project_config.get("default_adapter", "aitrackdown")
95
93
  adapters_config = project_config.get("adapters", {})
@@ -139,14 +137,14 @@ def create_auggie_server_config(
139
137
  if "project_key" in adapter_config:
140
138
  env_vars["JIRA_PROJECT_KEY"] = adapter_config["project_key"]
141
139
 
142
- # Use CLI command: mcp-ticketer mcp
143
- args = ["mcp"]
140
+ # Use Python module invocation pattern
141
+ args = ["-m", "mcp_ticketer.mcp.server"]
144
142
  if project_path:
145
143
  args.append(project_path)
146
144
 
147
145
  # Create server configuration (simpler than Gemini - no timeout/trust)
148
146
  config = {
149
- "command": mcp_ticketer_cmd,
147
+ "command": python_path,
150
148
  "args": args,
151
149
  "env": env_vars,
152
150
  }
@@ -303,7 +301,7 @@ def configure_auggie_mcp(force: bool = False) -> None:
303
301
  console.print(" Server name: mcp-ticketer")
304
302
  console.print(f" Adapter: {adapter}")
305
303
  console.print(f" Python: {python_path}")
306
- console.print(" Command: mcp-ticketer mcp")
304
+ console.print(" Command: python -m mcp_ticketer.mcp.server")
307
305
  console.print(" Scope: Global (affects all projects)")
308
306
  console.print(f" Project path: {project_path}")
309
307
  if "env" in server_config:
@@ -87,9 +87,7 @@ def create_codex_server_config(
87
87
  Codex MCP server configuration dict
88
88
 
89
89
  """
90
- # Get mcp-ticketer CLI command from same directory as Python
91
- python_dir = Path(python_path).parent
92
- mcp_ticketer_cmd = str(python_dir / "mcp-ticketer")
90
+ # Use Python module invocation pattern (works regardless of where package is installed)
93
91
 
94
92
  # Get adapter configuration
95
93
  adapter = project_config.get("default_adapter", "aitrackdown")
@@ -140,14 +138,14 @@ def create_codex_server_config(
140
138
  if "project_key" in adapter_config:
141
139
  env_vars["JIRA_PROJECT_KEY"] = adapter_config["project_key"]
142
140
 
143
- # Use CLI command: mcp-ticketer mcp
144
- args = ["mcp"]
141
+ # Use Python module invocation pattern
142
+ args = ["-m", "mcp_ticketer.mcp.server"]
145
143
  if project_path:
146
144
  args.append(project_path)
147
145
 
148
146
  # Create server configuration with Codex-specific structure
149
147
  config: dict[str, Any] = {
150
- "command": mcp_ticketer_cmd,
148
+ "command": python_path,
151
149
  "args": args,
152
150
  "env": env_vars,
153
151
  }
@@ -311,7 +309,7 @@ def configure_codex_mcp(force: bool = False) -> None:
311
309
  console.print(" Server name: mcp-ticketer")
312
310
  console.print(f" Adapter: {adapter}")
313
311
  console.print(f" Python: {python_path}")
314
- console.print(" Command: mcp-ticketer mcp")
312
+ console.print(" Command: python -m mcp_ticketer.mcp.server")
315
313
  console.print(" Scope: global (Codex only supports global config)")
316
314
  console.print(f" Project path: {project_path}")
317
315
  if "env" in server_config:
@@ -87,9 +87,7 @@ def create_gemini_server_config(
87
87
  Gemini MCP server configuration dict
88
88
 
89
89
  """
90
- # Get mcp-ticketer CLI command from same directory as Python
91
- python_dir = Path(python_path).parent
92
- mcp_ticketer_cmd = str(python_dir / "mcp-ticketer")
90
+ # Use Python module invocation pattern (works regardless of where package is installed)
93
91
 
94
92
  # Get adapter configuration
95
93
  adapter = project_config.get("default_adapter", "aitrackdown")
@@ -140,14 +138,14 @@ def create_gemini_server_config(
140
138
  if "project_key" in adapter_config:
141
139
  env_vars["JIRA_PROJECT_KEY"] = adapter_config["project_key"]
142
140
 
143
- # Use CLI command: mcp-ticketer mcp
144
- args = ["mcp"]
141
+ # Use Python module invocation pattern
142
+ args = ["-m", "mcp_ticketer.mcp.server"]
145
143
  if project_path:
146
144
  args.append(project_path)
147
145
 
148
146
  # Create server configuration with Gemini-specific options
149
147
  config = {
150
- "command": mcp_ticketer_cmd,
148
+ "command": python_path,
151
149
  "args": args,
152
150
  "env": env_vars,
153
151
  "timeout": 15000, # 15 seconds timeout
@@ -304,7 +302,7 @@ def configure_gemini_mcp(
304
302
  console.print(" Server name: mcp-ticketer")
305
303
  console.print(f" Adapter: {adapter}")
306
304
  console.print(f" Python: {python_path}")
307
- console.print(" Command: mcp-ticketer mcp")
305
+ console.print(" Command: python -m mcp_ticketer.mcp.server")
308
306
  console.print(f" Timeout: {server_config['timeout']}ms")
309
307
  console.print(f" Trust: {server_config['trust']}")
310
308
  if project_path:
@@ -177,12 +177,8 @@ def create_mcp_server_config(
177
177
  MCP server configuration dict matching Claude Code stdio pattern
178
178
 
179
179
  """
180
- # Get mcp-ticketer CLI command from same directory as Python
181
- python_dir = Path(python_path).parent
182
- mcp_ticketer_cmd = str(python_dir / "mcp-ticketer")
183
-
184
- # Use CLI command: mcp-ticketer mcp
185
- args = ["mcp"]
180
+ # Use Python module invocation pattern (works regardless of where package is installed)
181
+ args = ["-m", "mcp_ticketer.mcp.server"]
186
182
 
187
183
  # Add project path if provided
188
184
  if project_path:
@@ -191,7 +187,7 @@ def create_mcp_server_config(
191
187
  # REQUIRED: Add "type": "stdio" for Claude Code compatibility
192
188
  config = {
193
189
  "type": "stdio",
194
- "command": mcp_ticketer_cmd,
190
+ "command": python_path,
195
191
  "args": args,
196
192
  }
197
193
 
@@ -497,7 +493,7 @@ def configure_claude_mcp(global_config: bool = False, force: bool = False) -> No
497
493
  console.print(" Server name: mcp-ticketer")
498
494
  console.print(f" Adapter: {adapter}")
499
495
  console.print(f" Python: {python_path}")
500
- console.print(" Command: mcp-ticketer mcp")
496
+ console.print(" Command: python -m mcp_ticketer.mcp.server")
501
497
  if absolute_project_path:
502
498
  console.print(f" Project path: {absolute_project_path}")
503
499
  if "env" in server_config:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-ticketer
3
- Version: 0.4.10
3
+ Version: 0.4.11
4
4
  Summary: Universal ticket management interface for AI agents with MCP support
5
5
  Author-email: MCP Ticketer Team <support@mcp-ticketer.io>
6
6
  Maintainer-email: MCP Ticketer Team <support@mcp-ticketer.io>
@@ -34,7 +34,6 @@ requirements-dev.txt
34
34
  requirements.txt
35
35
  setup.py
36
36
  test_linear_fixes.py
37
- test_mcp_configure_fix.py
38
37
  test_mcp_integration.py
39
38
  test_structure_validation.py
40
39
  test_worker_persistence.py
@@ -127,7 +127,7 @@ class TestMCPJsonRpcProtocol:
127
127
  response = json.loads(line_bytes.decode())
128
128
  return response
129
129
 
130
- except asyncio.TimeoutError:
130
+ except TimeoutError:
131
131
  # Include stderr for debugging timeout issues
132
132
  stderr_output = ""
133
133
  if process.stderr:
@@ -138,7 +138,7 @@ class TestMCPJsonRpcProtocol:
138
138
  except Exception:
139
139
  pass
140
140
 
141
- raise asyncio.TimeoutError(
141
+ raise TimeoutError(
142
142
  f"No response received within {timeout}s. "
143
143
  f"Stderr: {stderr_output[:500] if stderr_output else '(empty)'}"
144
144
  )
@@ -1,153 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Test script to verify MCP configuration fixes."""
3
-
4
- import json
5
- import tempfile
6
- from pathlib import Path
7
- from unittest.mock import patch
8
-
9
- from src.mcp_ticketer.cli.mcp_configure import (
10
- configure_claude_mcp,
11
- find_claude_mcp_config,
12
- load_claude_mcp_config,
13
- save_claude_mcp_config,
14
- )
15
-
16
-
17
- def test_find_claude_code_config():
18
- """Test that Claude Code config points to ~/.claude.json."""
19
- config_path = find_claude_mcp_config(global_config=False)
20
- assert config_path == Path.home() / ".claude.json"
21
- print("✓ find_claude_mcp_config returns ~/.claude.json for Claude Code")
22
-
23
-
24
- def test_load_claude_code_config_structure():
25
- """Test that Claude Code config loads with projects structure."""
26
- with tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False) as f:
27
- test_config = {
28
- "projects": {
29
- "/some/project/path": {
30
- "mcpServers": {"some-server": {"type": "stdio", "command": "cmd"}}
31
- }
32
- }
33
- }
34
- json.dump(test_config, f)
35
- f.flush()
36
- temp_path = Path(f.name)
37
-
38
- try:
39
- config = load_claude_mcp_config(temp_path, is_claude_code=True)
40
- assert "projects" in config
41
- assert "/some/project/path" in config["projects"]
42
- print("✓ load_claude_mcp_config handles projects structure correctly")
43
- finally:
44
- temp_path.unlink()
45
-
46
-
47
- def test_load_claude_code_config_empty():
48
- """Test that empty config returns correct structure."""
49
- config = load_claude_mcp_config(Path("/nonexistent/path"), is_claude_code=True)
50
- assert config == {"projects": {}}
51
- print("✓ load_claude_mcp_config returns projects structure for new configs")
52
-
53
-
54
- def test_load_claude_desktop_config_empty():
55
- """Test that empty Desktop config returns correct structure."""
56
- config = load_claude_mcp_config(Path("/nonexistent/path"), is_claude_code=False)
57
- assert config == {"mcpServers": {}}
58
- print("✓ load_claude_mcp_config returns mcpServers structure for Desktop")
59
-
60
-
61
- def test_load_invalid_json():
62
- """Test that invalid JSON is handled gracefully."""
63
- with tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False) as f:
64
- f.write("{invalid json")
65
- f.flush()
66
- temp_path = Path(f.name)
67
-
68
- try:
69
- config = load_claude_mcp_config(temp_path, is_claude_code=True)
70
- assert config == {"projects": {}}
71
- print("✓ load_claude_mcp_config handles invalid JSON gracefully")
72
- finally:
73
- temp_path.unlink()
74
-
75
-
76
- def test_save_and_load_roundtrip():
77
- """Test that save and load work correctly."""
78
- with tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False) as f:
79
- temp_path = Path(f.name)
80
-
81
- try:
82
- test_config = {
83
- "projects": {
84
- "/test/project": {
85
- "mcpServers": {
86
- "mcp-ticketer": {
87
- "type": "stdio",
88
- "command": "/path/to/mcp-ticketer",
89
- "args": ["mcp", "/test/project"],
90
- }
91
- }
92
- }
93
- }
94
- }
95
-
96
- # Save
97
- save_claude_mcp_config(temp_path, test_config)
98
-
99
- # Load
100
- loaded = load_claude_mcp_config(temp_path, is_claude_code=True)
101
-
102
- assert loaded == test_config
103
- assert loaded["projects"]["/test/project"]["mcpServers"]["mcp-ticketer"]["type"] == "stdio"
104
- print("✓ save_claude_mcp_config and load_claude_mcp_config work correctly")
105
- finally:
106
- temp_path.unlink()
107
-
108
-
109
- def test_configure_structure():
110
- """Test the structure created by configure_claude_mcp."""
111
- # This test would need mocking, so just verify the expected structure
112
- expected_structure = {
113
- "projects": {
114
- "/absolute/path/to/project": {
115
- "mcpServers": {
116
- "mcp-ticketer": {
117
- "type": "stdio",
118
- "command": "/path/to/mcp-ticketer",
119
- "args": ["mcp", "/absolute/path/to/project"],
120
- "env": {
121
- "PYTHONPATH": "/absolute/path/to/project",
122
- "MCP_TICKETER_ADAPTER": "linear",
123
- },
124
- }
125
- }
126
- }
127
- }
128
- }
129
-
130
- # Verify structure
131
- assert "projects" in expected_structure
132
- project_path = list(expected_structure["projects"].keys())[0]
133
- assert "mcpServers" in expected_structure["projects"][project_path]
134
- assert "mcp-ticketer" in expected_structure["projects"][project_path]["mcpServers"]
135
-
136
- server_config = expected_structure["projects"][project_path]["mcpServers"]["mcp-ticketer"]
137
- assert server_config["type"] == "stdio"
138
- assert "mcp" in server_config["args"]
139
- print("✓ Expected configuration structure is correct")
140
-
141
-
142
- if __name__ == "__main__":
143
- print("\n🧪 Testing MCP Configuration Fixes\n")
144
-
145
- test_find_claude_code_config()
146
- test_load_claude_code_config_structure()
147
- test_load_claude_code_config_empty()
148
- test_load_claude_desktop_config_empty()
149
- test_load_invalid_json()
150
- test_save_and_load_roundtrip()
151
- test_configure_structure()
152
-
153
- print("\n✅ All tests passed!\n")
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes