mcp-ticketer 0.4.1__tar.gz → 0.4.3__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 (291) hide show
  1. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.env.example +11 -4
  2. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/CHANGELOG.md +72 -1
  3. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/PKG-INFO +90 -17
  4. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/README.md +86 -14
  5. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/AI_CLIENT_INTEGRATION.md +38 -37
  6. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/API_REFERENCE.md +103 -0
  7. mcp_ticketer-0.4.3/docs/ATTACHMENTS.md +564 -0
  8. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/MIGRATION_GUIDE.md +196 -10
  9. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/QUICK_START.md +121 -22
  10. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/setup/CODEX_INTEGRATION.md +27 -18
  11. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/summaries/INTERACTIVE_CLI_SETUP_SUMMARY.md +4 -3
  12. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/pyproject.toml +5 -4
  13. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/pytest.ini +1 -0
  14. mcp_ticketer-0.4.3/src/mcp_ticketer/__init__.py +18 -0
  15. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/__version__.py +1 -1
  16. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/adapters/aitrackdown.py +243 -11
  17. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/adapters/github.py +15 -14
  18. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/adapters/hybrid.py +11 -11
  19. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/adapters/jira.py +22 -25
  20. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/adapters/linear/adapter.py +9 -21
  21. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/adapters/linear/client.py +2 -1
  22. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/adapters/linear/mappers.py +2 -1
  23. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cache/memory.py +6 -5
  24. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/adapter_diagnostics.py +4 -2
  25. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/auggie_configure.py +66 -0
  26. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/codex_configure.py +70 -2
  27. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/configure.py +7 -14
  28. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/diagnostics.py +2 -2
  29. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/discover.py +6 -11
  30. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/gemini_configure.py +68 -2
  31. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/linear_commands.py +6 -7
  32. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/main.py +341 -203
  33. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/mcp_configure.py +61 -2
  34. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/ticket_commands.py +27 -30
  35. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/utils.py +23 -22
  36. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/core/__init__.py +3 -1
  37. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/core/adapter.py +82 -13
  38. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/core/config.py +27 -29
  39. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/core/env_discovery.py +10 -10
  40. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/core/env_loader.py +8 -8
  41. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/core/http_client.py +16 -16
  42. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/core/mappers.py +10 -10
  43. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/core/models.py +50 -20
  44. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/core/project_config.py +40 -34
  45. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/core/registry.py +2 -2
  46. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/mcp/dto.py +32 -32
  47. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/mcp/response_builder.py +2 -2
  48. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/mcp/server.py +17 -37
  49. mcp_ticketer-0.4.3/src/mcp_ticketer/mcp/server_sdk.py +93 -0
  50. mcp_ticketer-0.4.3/src/mcp_ticketer/mcp/tools/__init__.py +36 -0
  51. mcp_ticketer-0.4.3/src/mcp_ticketer/mcp/tools/attachment_tools.py +179 -0
  52. mcp_ticketer-0.4.3/src/mcp_ticketer/mcp/tools/bulk_tools.py +273 -0
  53. mcp_ticketer-0.4.3/src/mcp_ticketer/mcp/tools/comment_tools.py +90 -0
  54. mcp_ticketer-0.4.3/src/mcp_ticketer/mcp/tools/hierarchy_tools.py +383 -0
  55. mcp_ticketer-0.4.3/src/mcp_ticketer/mcp/tools/pr_tools.py +154 -0
  56. mcp_ticketer-0.4.3/src/mcp_ticketer/mcp/tools/search_tools.py +206 -0
  57. mcp_ticketer-0.4.3/src/mcp_ticketer/mcp/tools/ticket_tools.py +277 -0
  58. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/queue/health_monitor.py +4 -4
  59. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/queue/manager.py +2 -2
  60. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/queue/queue.py +16 -16
  61. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/queue/ticket_registry.py +7 -7
  62. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/queue/worker.py +2 -2
  63. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer.egg-info/PKG-INFO +90 -17
  64. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer.egg-info/SOURCES.txt +11 -12
  65. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer.egg-info/requires.txt +2 -1
  66. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/linear/test_client.py +2 -5
  67. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/linear/test_mappers.py +9 -13
  68. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/linear/test_queries.py +8 -24
  69. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/linear/test_types.py +9 -11
  70. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/test_aitrackdown.py +2 -8
  71. mcp_ticketer-0.4.3/tests/adapters/test_aitrackdown_security.py +338 -0
  72. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/test_github.py +2 -1
  73. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/test_jira_direct.py +2 -1
  74. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/test_linear_config.py +0 -1
  75. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/test_linear_native.py +2 -2
  76. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/conftest.py +2 -8
  77. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/core/test_env_discovery.py +3 -6
  78. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/core/test_unified_env_loading.py +2 -5
  79. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/e2e/test_complete_ticket_workflow.py +2 -8
  80. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/e2e/test_complete_workflow.py +1 -0
  81. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/integration/test_all_adapters.py +4 -9
  82. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/integration/test_commenting_functionality.py +2 -1
  83. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/integration/test_comprehensive.py +2 -8
  84. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/integration/test_hierarchy_and_workflow.py +2 -8
  85. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/integration/test_mcp_server_qa.py +2 -2
  86. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/test_api_usage.py +2 -1
  87. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/test_models.py +2 -8
  88. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/unit/test_cache_memory.py +2 -6
  89. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/unit/test_core_exceptions.py +6 -14
  90. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/unit/test_core_models.py +2 -9
  91. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/unit/test_core_registry.py +5 -5
  92. mcp_ticketer-0.4.1/CLI_RESTRUCTURING_SUMMARY.md +0 -272
  93. mcp_ticketer-0.4.1/LINEAR_ADAPTER_REVIEW.md +0 -477
  94. mcp_ticketer-0.4.1/LINEAR_FIX_RECOMMENDATION.md +0 -292
  95. mcp_ticketer-0.4.1/LINEAR_GRAPHQL_TYPE_ANALYSIS.md +0 -300
  96. mcp_ticketer-0.4.1/LINEAR_LABEL_FIX_SUMMARY.md +0 -262
  97. mcp_ticketer-0.4.1/LINEAR_PATTERN_COMPARISON.md +0 -441
  98. mcp_ticketer-0.4.1/LINEAR_QUERY_ALTERNATIVE_ANALYSIS.md +0 -278
  99. mcp_ticketer-0.4.1/LINEAR_RESEARCH_SUMMARY.md +0 -423
  100. mcp_ticketer-0.4.1/LINEAR_TAGS_FIX_SUMMARY.md +0 -238
  101. mcp_ticketer-0.4.1/QUICK_WINS_IMPLEMENTATION.md +0 -320
  102. mcp_ticketer-0.4.1/SECURITY_SCAN_REPORT_v0.1.24.md +0 -668
  103. mcp_ticketer-0.4.1/V0.3.2_RELEASE_FIXES_SUMMARY.md +0 -472
  104. mcp_ticketer-0.4.1/src/mcp_ticketer/__init__.py +0 -27
  105. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.aitrackdown-test/comments/comment-20251024141042175430.json +0 -0
  106. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.aitrackdown-test/comments/comment-20251024141042175768.json +0 -0
  107. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.aitrackdown-test/comments/comment-20251024141042175888.json +0 -0
  108. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.aitrackdown-test/comments/comment-20251024141042175987.json +0 -0
  109. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.aitrackdown-test/comments/comment-20251024141042176075.json +0 -0
  110. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.aitrackdown-test/comments/comment-20251024141042176163.json +0 -0
  111. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.aitrackdown-test/tickets/task-20251024141042175062.json +0 -0
  112. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.aitrackdown-test/tickets/task-20251024141042175285.json +0 -0
  113. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.claude.json +0 -0
  114. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.coveragerc +0 -0
  115. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.cursor/mcp.json +0 -0
  116. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.github/workflows/docs.yml +0 -0
  117. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.github/workflows/publish.yml +0 -0
  118. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.github/workflows/test.yml +0 -0
  119. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.mcp/config.json +0 -0
  120. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.pre-commit-config.yaml +0 -0
  121. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.python-version +0 -0
  122. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/.readthedocs.yaml +0 -0
  123. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/CLAUDE.md +0 -0
  124. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/LICENSE +0 -0
  125. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/MANIFEST.in +0 -0
  126. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/Makefile +0 -0
  127. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/debug_epic_creation.py +0 -0
  128. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/debug_full_flow.py +0 -0
  129. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/debug_worker_epic.py +0 -0
  130. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/ADAPTERS.md +0 -0
  131. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/CONFIGURATION.md +0 -0
  132. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/CONFIG_RESOLUTION_FLOW.md +0 -0
  133. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/DEVELOPER_GUIDE.md +0 -0
  134. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/ENV_DISCOVERY.md +0 -0
  135. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/MCP_INTEGRATION.md +0 -0
  136. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/PROJECT_CONFIG.md +0 -0
  137. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/PR_INTEGRATION.md +0 -0
  138. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/QUEUE_SYSTEM.md +0 -0
  139. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/QUICK_START_ENV.md +0 -0
  140. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/README.md +0 -0
  141. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/USER_GUIDE.md +0 -0
  142. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/VERSIONING_AND_BUILD_TRACKING.md +0 -0
  143. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_archive/README.md +0 -0
  144. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/ADAPTERS.md.txt +0 -0
  145. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/API_REFERENCE.md.txt +0 -0
  146. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/CONFIGURATION.md.txt +0 -0
  147. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/DEVELOPER_GUIDE.md.txt +0 -0
  148. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/MCP_INTEGRATION.md.txt +0 -0
  149. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/MIGRATION_GUIDE.md.txt +0 -0
  150. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/USER_GUIDE.md.txt +0 -0
  151. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/adapters/github.md.txt +0 -0
  152. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/adapters.rst.txt +0 -0
  153. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/api.rst.txt +0 -0
  154. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/cli.rst.txt +0 -0
  155. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/development.rst.txt +0 -0
  156. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/examples.rst.txt +0 -0
  157. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/index.rst.txt +0 -0
  158. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/installation.rst.txt +0 -0
  159. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/_build/_sources/prd/mcp-ticketer-prd.md.txt +0 -0
  160. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/adapters/github.md +0 -0
  161. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/adapters.rst +0 -0
  162. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/api.rst +0 -0
  163. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/changelogs/CHANGELOG_v0.2.0.md +0 -0
  164. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/changelogs/CHANGELOG_v0.3.0.md +0 -0
  165. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/changelogs/CHANGELOG_v0.3.1.md +0 -0
  166. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/cli.rst +0 -0
  167. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/conf.py +0 -0
  168. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/development/CODE_STRUCTURE.md +0 -0
  169. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/development/CONTRIBUTING.md +0 -0
  170. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/development/RELEASE.md +0 -0
  171. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/development/RELEASING.md +0 -0
  172. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/development.rst +0 -0
  173. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/examples.rst +0 -0
  174. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/guides/BULLETPROOF_TICKET_CREATION_GUIDE.md +0 -0
  175. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/index.rst +0 -0
  176. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/installation.rst +0 -0
  177. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/prd/mcp-ticketer-prd.md +0 -0
  178. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/releases/PUBLICATION_GUIDE_v0.2.0.md +0 -0
  179. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/releases/PUBLICATION_SUCCESS_v0.2.0.md +0 -0
  180. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/releases/PUBLICATION_SUCCESS_v0.3.0.md +0 -0
  181. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/releases/PUBLICATION_SUCCESS_v0.3.1.md +0 -0
  182. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/releases/PUBLICATION_SUCCESS_v0.3.4.md +0 -0
  183. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/releases/PUBLICATION_SUCCESS_v0.3.5.md +0 -0
  184. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/releases/RELEASE_v0.1.39_SUMMARY.md +0 -0
  185. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/releases/RELEASE_v0.2.0_SUMMARY.md +0 -0
  186. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/CONFIG_RESOLUTION_FIX.md +0 -0
  187. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/CREDENTIAL_VALIDATION_FIX.md +0 -0
  188. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/DIAGNOSTICS_FEATURE.md +0 -0
  189. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/ENV_DISCOVERY_COMPLETE.md +0 -0
  190. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/FIX_SUMMARY.md +0 -0
  191. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/HIERARCHY_IMPLEMENTATION_SUMMARY.md +0 -0
  192. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/IMPLEMENTATION_SUMMARY.md +0 -0
  193. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/MCP_CONFIGURATION_TEST_REPORT.md +0 -0
  194. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/OPTIMIZATION_SUMMARY.md +0 -0
  195. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/PROJECT_INITIALIZATION_SUMMARY.md +0 -0
  196. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/TEST_COVERAGE_REPORT.md +0 -0
  197. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/TEST_REPORT.md +0 -0
  198. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/TEST_RESULTS_SUMMARY.md +0 -0
  199. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/reports/VERIFICATION_RESULTS.md +0 -0
  200. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/requirements.txt +0 -0
  201. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/setup/CLAUDE_DESKTOP_SETUP.md +0 -0
  202. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/setup/JIRA_SETUP.md +0 -0
  203. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/setup/LINEAR_SETUP.md +0 -0
  204. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/summaries/AUTO_DISCOVERY_BUG_FIX_SUMMARY.md +0 -0
  205. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/summaries/BULLETPROOF_IMPROVEMENTS_SUMMARY.md +0 -0
  206. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/summaries/COMMAND_SYNONYMS_SUMMARY.md +0 -0
  207. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/summaries/COMPREHENSIVE_TESTING_SUMMARY.md +0 -0
  208. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/summaries/LINEAR_ADAPTER_INITIALIZATION_BUG_FIX.md +0 -0
  209. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/summaries/MODULE_REFACTORING_ANALYSIS.md +0 -0
  210. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/summaries/MODULE_REFACTORING_SUMMARY.md +0 -0
  211. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/summaries/PROJECT_CLEANUP_SUMMARY.md +0 -0
  212. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/docs/summaries/REFACTORED_ENV_SOLUTION_SUMMARY.md +0 -0
  213. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/mcp-ticketer +0 -0
  214. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/mcp-ticketer-server +0 -0
  215. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/requirements-dev.txt +0 -0
  216. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/requirements.txt +0 -0
  217. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/scripts/README.md +0 -0
  218. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/scripts/install.sh +0 -0
  219. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/scripts/manage_version.py +0 -0
  220. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/scripts/mcp_server.sh +0 -0
  221. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/scripts/test_set_command.sh +0 -0
  222. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/setup.cfg +0 -0
  223. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/setup.py +0 -0
  224. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/adapters/__init__.py +0 -0
  225. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/adapters/linear/__init__.py +0 -0
  226. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/adapters/linear/queries.py +0 -0
  227. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/adapters/linear/types.py +0 -0
  228. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/adapters/linear.py +0 -0
  229. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cache/__init__.py +0 -0
  230. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/__init__.py +0 -0
  231. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/migrate_config.py +0 -0
  232. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/platform_commands.py +0 -0
  233. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/queue_commands.py +0 -0
  234. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/cli/simple_health.py +0 -0
  235. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/core/exceptions.py +0 -0
  236. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/mcp/__init__.py +0 -0
  237. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/mcp/constants.py +0 -0
  238. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/py.typed +0 -0
  239. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/queue/__init__.py +0 -0
  240. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/queue/__main__.py +0 -0
  241. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer/queue/run_worker.py +0 -0
  242. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer.egg-info/dependency_links.txt +0 -0
  243. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer.egg-info/entry_points.txt +0 -0
  244. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer.egg-info/not-zip-safe +0 -0
  245. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/src/mcp_ticketer.egg-info/top_level.txt +0 -0
  246. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/test-tickets/tickets/task-20250924002724.json +0 -0
  247. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/test_linear_fixes.py +0 -0
  248. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/test_worker_persistence.py +0 -0
  249. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/README.md +0 -0
  250. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/__init__.py +0 -0
  251. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/linear/__init__.py +0 -0
  252. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/linear/test_adapter.py +0 -0
  253. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/test_github_token.py +0 -0
  254. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/test_jira.py +0 -0
  255. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/test_jira_projects.py +0 -0
  256. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/adapters/test_linear.py +0 -0
  257. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/core/debug_credential_validation.py +0 -0
  258. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/core/test_actual_worker_execution.py +0 -0
  259. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/core/test_config_resolution.py +0 -0
  260. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/core/test_environment_handoff.py +0 -0
  261. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/core/test_queue_processing.py +0 -0
  262. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/core/test_queue_system.py +0 -0
  263. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/debug/debug_adapter_cache.py +0 -0
  264. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/debug/debug_cli_config.py +0 -0
  265. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/debug/debug_cli_vs_simulation.py +0 -0
  266. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/debug/debug_linear_teams.py +0 -0
  267. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/debug/debug_search.py +0 -0
  268. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/debug/debug_test.py +0 -0
  269. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/debug/debug_worker_adapter.py +0 -0
  270. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/debug/debug_worker_simulation.py +0 -0
  271. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/debug/debug_worker_subprocess.py +0 -0
  272. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/e2e/test_comments_and_attachments.py +0 -0
  273. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/e2e/test_hierarchy_validation.py +0 -0
  274. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/e2e/test_state_transitions.py +0 -0
  275. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/integration/test_aitrackdown_commenting.py +0 -0
  276. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/integration/test_jira_github_adapters.py +0 -0
  277. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/integration/test_pr_functionality.py +0 -0
  278. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/integration/test_serve_config.py +0 -0
  279. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/integration/test_user_assignment.py +0 -0
  280. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/performance/test_optimizations.py +0 -0
  281. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/performance/test_performance.py +0 -0
  282. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/run_comprehensive_tests.py +0 -0
  283. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/test_base_adapter.py +0 -0
  284. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/test_basic.py +0 -0
  285. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/test_codex_config.py +0 -0
  286. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/test_comprehensive_qa.py +0 -0
  287. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/test_error_handling.py +0 -0
  288. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/test_linear_teams.py +0 -0
  289. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/test_queue.py +0 -0
  290. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tests/unit/__init__.py +0 -0
  291. {mcp_ticketer-0.4.1 → mcp_ticketer-0.4.3}/tox.ini +0 -0
@@ -14,10 +14,17 @@
14
14
  # Get your API key from: https://linear.app/settings/api
15
15
  LINEAR_API_KEY=lin_api_YOUR_KEY_HERE
16
16
 
17
- # Your Linear team ID (recommended for auto-discovery)
18
- # Find it in: Settings Teams Your Team
19
- # Or from the URL when viewing your team: linear.app/YOUR-TEAM-ID/...
20
- LINEAR_TEAM_ID=YOUR-TEAM-ID
17
+ # Linear Team Identification - Choose ONE of the following:
18
+ # Option 1: Team key (recommended - short code like 'ENG', 'DESIGN', 'PRODUCT')
19
+ LINEAR_TEAM_KEY=ENG
20
+
21
+ # Option 2: Team UUID (for advanced use cases)
22
+ # LINEAR_TEAM_ID=02d15669-7351-4451-9719-807576c16049
23
+
24
+ # How to find your team key:
25
+ # 1. Go to Linear Settings → Teams
26
+ # 2. Select your team
27
+ # 3. Look for the "Key" field (e.g., "ENG")
21
28
 
22
29
  # Optional: Linear project ID
23
30
  # LINEAR_PROJECT_ID=YOUR-PROJECT-ID
@@ -4,7 +4,78 @@ 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
- ## [Unreleased]
7
+ ## [0.4.3] - 2025-10-27
8
+
9
+ ### Added
10
+ - **LINEAR_TEAM_KEY Environment Variable**: Easier Linear configuration with team keys
11
+ - Added `LINEAR_TEAM_KEY` support as primary configuration option
12
+ - Team key (e.g., "ENG", "DESIGN") now recommended over team ID (UUID)
13
+ - Automatic resolution of team key to team ID in Linear adapter
14
+ - Updated `.env.example` with LINEAR_TEAM_KEY as default option
15
+ - CLI `init` command now prompts for team key by default
16
+ - **Command Synonyms**: Init, install, and setup commands are now fully synonymous
17
+ - `mcp-ticketer init` - Initialize configuration
18
+ - `mcp-ticketer install` - Install and configure (same as init)
19
+ - `mcp-ticketer setup` - Setup (same as init)
20
+ - All three commands accept identical parameters and behave identically
21
+ - **Attachment Model**: Universal file attachment support
22
+ - New `Attachment` model in core models for cross-adapter attachment representation
23
+ - Fields: id, ticket_id, filename, url, content_type, size_bytes, created_at, created_by, description, metadata
24
+ - Full documentation in new `docs/ATTACHMENTS.md` guide
25
+ - **AITrackdown Attachment Support**: Complete file attachment implementation
26
+ - `add_attachment()` - Upload files to local filesystem with security features
27
+ - `get_attachments()` - List all attachments for a ticket
28
+ - `delete_attachment()` - Remove specific attachments
29
+ - Local filesystem storage in `.aitrackdown/attachments/<ticket-id>/` directories
30
+ - Automatic filename sanitization to prevent security issues
31
+ - SHA256 checksumming for file integrity verification
32
+ - MIME type detection based on file extension
33
+ - Size validation with configurable limits (default 100MB)
34
+ - Organized per-ticket storage structure
35
+ - **MCP Attachment Tools**: AI agent attachment support with fallback
36
+ - `ticket_attach` - Add file attachments via MCP
37
+ - `ticket_attachments` - List attachments via MCP
38
+ - `ticket_delete_attachment` - Delete attachments via MCP
39
+ - Automatic fallback to comments for adapters without attachment support
40
+ - Graceful degradation for Linear, Jira, and GitHub adapters
41
+
42
+ ### Changed
43
+ - **Linear Configuration**: LINEAR_TEAM_KEY is now the primary/recommended option
44
+ - Team ID (LINEAR_TEAM_ID) still supported for backward compatibility
45
+ - CLI init flow updated to prompt for team key first
46
+ - Documentation updated across README, QUICK_START, and setup guides
47
+ - **Environment Variable Priority**: LINEAR_TEAM_KEY takes precedence over LINEAR_TEAM_ID
48
+ - When both are present, LINEAR_TEAM_KEY is used
49
+ - Adapter automatically resolves team key to team ID via GraphQL
50
+ - **Documentation Structure**: New comprehensive attachment documentation
51
+ - Created `docs/ATTACHMENTS.md` (400+ lines)
52
+ - Updated README.md with attachment examples and LINEAR_TEAM_KEY info
53
+ - Updated QUICK_START.md with attachment usage and Linear team key setup
54
+ - Updated API_REFERENCE.md with complete Attachment model specification
55
+ - Added configuration section to README with Linear setup details
56
+
57
+ ### Fixed
58
+ - **LINEAR_TEAM_KEY Environment Loading**: Proper loading from .env files
59
+ - Fixed `project_config.py` to check all LINEAR_* environment variables
60
+ - Environment variable discovery now detects LINEAR_TEAM_KEY
61
+ - Resolves issues where LINEAR_TEAM_KEY wasn't being recognized
62
+
63
+ ### Documentation
64
+ - **New Files**:
65
+ - `docs/ATTACHMENTS.md` - Comprehensive attachment guide with examples, security notes, and roadmap
66
+ - **Updated Files**:
67
+ - `README.md` - Added attachment features, LINEAR_TEAM_KEY configuration, and command synonyms
68
+ - `docs/QUICK_START.md` - Added attachment examples and LINEAR_TEAM_KEY setup instructions
69
+ - `docs/API_REFERENCE.md` - Added Attachment model specification and adapter methods
70
+ - `.env.example` - Updated with LINEAR_TEAM_KEY as primary option with clear instructions
71
+
72
+ ### Security
73
+ - **Attachment Security Features**:
74
+ - Filename sanitization prevents path traversal and injection attacks
75
+ - Path resolution validates files stay within allowed directories
76
+ - File size limits prevent disk exhaustion
77
+ - SHA256 checksums enable integrity verification
78
+ - Isolated per-ticket storage prevents cross-ticket access
8
79
 
9
80
  ## [0.3.6] - 2025-01-25
10
81
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-ticketer
3
- Version: 0.4.1
3
+ Version: 0.4.3
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>
@@ -30,11 +30,12 @@ Classifier: Topic :: Software Development :: Bug Tracking
30
30
  Classifier: Topic :: System :: Monitoring
31
31
  Classifier: Topic :: Internet :: WWW/HTTP
32
32
  Classifier: Typing :: Typed
33
- Requires-Python: >=3.9
33
+ Requires-Python: >=3.10
34
34
  Description-Content-Type: text/markdown
35
35
  License-File: LICENSE
36
36
  Requires-Dist: gql[httpx]>=3.0.0
37
37
  Requires-Dist: httpx>=0.25.0
38
+ Requires-Dist: mcp>=1.2.0
38
39
  Requires-Dist: psutil>=5.9.0
39
40
  Requires-Dist: pydantic>=2.0
40
41
  Requires-Dist: python-dotenv>=1.0.0
@@ -65,7 +66,7 @@ Requires-Dist: sphinx-autodoc-typehints>=1.25.0; extra == "docs"
65
66
  Requires-Dist: sphinx-click>=5.1.0; extra == "docs"
66
67
  Requires-Dist: myst-parser>=2.0.0; extra == "docs"
67
68
  Provides-Extra: mcp
68
- Requires-Dist: mcp>=0.1.0; extra == "mcp"
69
+ Requires-Dist: mcp>=1.2.0; extra == "mcp"
69
70
  Provides-Extra: jira
70
71
  Requires-Dist: jira>=3.5.0; extra == "jira"
71
72
  Requires-Dist: ai-trackdown-pytools>=1.5.0; extra == "jira"
@@ -103,6 +104,7 @@ Universal ticket management interface for AI agents with MCP (Model Context Prot
103
104
  - **🎨 Rich CLI**: Beautiful terminal interface with colors and tables
104
105
  - **📊 State Machine**: Built-in state transitions with validation
105
106
  - **🔍 Advanced Search**: Full-text search with multiple filters
107
+ - **📎 File Attachments**: Upload, list, and manage ticket attachments (AITrackdown adapter)
106
108
  - **📦 Easy Installation**: Available on PyPI with simple pip install
107
109
 
108
110
  ## 📦 Installation
@@ -138,29 +140,37 @@ MCP Ticketer integrates with multiple AI clients via the Model Context Protocol
138
140
 
139
141
  | AI Client | Support | Config Type | Project-Level | Setup Command |
140
142
  |-----------|---------|-------------|---------------|---------------|
141
- | **Claude Code** | ✅ Native | JSON | ✅ Yes | `mcp-ticketer mcp claude` |
142
- | **Gemini CLI** | ✅ Full | JSON | Yes | `mcp-ticketer mcp gemini` |
143
- | **Codex CLI** | ✅ Full | TOML | Global only | `mcp-ticketer mcp codex` |
144
- | **Auggie** | ✅ Full | JSON | ❌ Global only | `mcp-ticketer mcp auggie` |
143
+ | **Claude Code** | ✅ Native | JSON | ✅ Yes | `mcp-ticketer install claude-code` |
144
+ | **Claude Desktop** | ✅ Full | JSON | Global only | `mcp-ticketer install claude-desktop` |
145
+ | **Gemini CLI** | ✅ Full | JSON | Yes | `mcp-ticketer install gemini` |
146
+ | **Codex CLI** | ✅ Full | TOML | ❌ Global only | `mcp-ticketer install codex` |
147
+ | **Auggie** | ✅ Full | JSON | ❌ Global only | `mcp-ticketer install auggie` |
145
148
 
146
149
  ### Quick MCP Setup
147
150
 
148
151
  ```bash
149
152
  # Claude Code (recommended for project-specific workflows)
150
- mcp-ticketer init --adapter aitrackdown # First, initialize an adapter
151
- mcp-ticketer mcp claude # Then configure MCP
153
+ mcp-ticketer init --adapter aitrackdown # First, initialize an adapter
154
+ mcp-ticketer install claude-code # Then install MCP configuration
155
+
156
+ # Claude Desktop (global configuration)
157
+ mcp-ticketer init --adapter aitrackdown
158
+ mcp-ticketer install claude-desktop
152
159
 
153
160
  # Gemini CLI (Google's AI client)
154
161
  mcp-ticketer init --adapter aitrackdown
155
- mcp-ticketer mcp gemini --scope project
162
+ mcp-ticketer install gemini
156
163
 
157
164
  # Codex CLI (global configuration, requires restart)
158
165
  mcp-ticketer init --adapter aitrackdown
159
- mcp-ticketer mcp codex
166
+ mcp-ticketer install codex
160
167
 
161
168
  # Auggie (simple global setup)
162
169
  mcp-ticketer init --adapter aitrackdown
163
- mcp-ticketer mcp auggie
170
+ mcp-ticketer install auggie
171
+
172
+ # Show available platforms
173
+ mcp-ticketer install
164
174
  ```
165
175
 
166
176
  **See [AI Client Integration Guide](docs/AI_CLIENT_INTEGRATION.md) for detailed setup instructions.**
@@ -174,6 +184,10 @@ mcp-ticketer mcp auggie
174
184
  mcp-ticketer init --adapter aitrackdown
175
185
 
176
186
  # For Linear (requires API key)
187
+ # Option 1: Using team key (recommended)
188
+ mcp-ticketer init --adapter linear --team-key ENG
189
+
190
+ # Option 2: Using team ID
177
191
  mcp-ticketer init --adapter linear --team-id YOUR_TEAM_ID
178
192
 
179
193
  # For JIRA (requires server and credentials)
@@ -185,6 +199,11 @@ mcp-ticketer init --adapter jira \
185
199
  mcp-ticketer init --adapter github --repo owner/repo
186
200
  ```
187
201
 
202
+ **Note:** The following commands are synonymous and can be used interchangeably:
203
+ - `mcp-ticketer init` - Initialize configuration
204
+ - `mcp-ticketer install` - Install and configure (same as init)
205
+ - `mcp-ticketer setup` - Setup (same as init)
206
+
188
207
  ### 2. Create Your First Ticket
189
208
 
190
209
  ```bash
@@ -213,6 +232,24 @@ mcp-ticketer transition TICKET-123 in_progress
213
232
  mcp-ticketer search "login bug" --state open
214
233
  ```
215
234
 
235
+ ### 4. Working with Attachments (AITrackdown)
236
+
237
+ ```bash
238
+ # Add attachment via MCP tools
239
+ mcp-ticketer mcp call ticket_attach '{
240
+ "ticket_id": "task-123",
241
+ "file_path": "/path/to/document.pdf",
242
+ "description": "Project specification"
243
+ }'
244
+
245
+ # List attachments
246
+ mcp-ticketer mcp call ticket_attachments '{
247
+ "ticket_id": "task-123"
248
+ }'
249
+ ```
250
+
251
+ For programmatic access, see the [Attachments Guide](docs/ATTACHMENTS.md).
252
+
216
253
  ## 🤖 MCP Server Integration
217
254
 
218
255
  MCP Ticketer provides seamless integration with AI clients through automatic configuration:
@@ -221,11 +258,16 @@ MCP Ticketer provides seamless integration with AI clients through automatic con
221
258
  # Run MCP server manually (for testing)
222
259
  mcp-ticketer serve
223
260
 
224
- # Or configure your AI client automatically (recommended)
225
- mcp-ticketer mcp claude # For Claude Code
226
- mcp-ticketer mcp gemini # For Gemini CLI
227
- mcp-ticketer mcp codex # For Codex CLI
228
- mcp-ticketer mcp auggie # For Auggie
261
+ # Or install MCP configuration automatically (recommended)
262
+ mcp-ticketer install claude-code # For Claude Code (project-level)
263
+ mcp-ticketer install claude-desktop # For Claude Desktop (global)
264
+ mcp-ticketer install gemini # For Gemini CLI
265
+ mcp-ticketer install codex # For Codex CLI
266
+ mcp-ticketer install auggie # For Auggie
267
+
268
+ # Remove MCP configuration when needed
269
+ mcp-ticketer remove claude-code # Remove from Claude Code
270
+ mcp-ticketer uninstall auggie # Alias for remove
229
271
  ```
230
272
 
231
273
  **Configuration is automatic** - the commands above will:
@@ -252,6 +294,37 @@ mcp-ticketer mcp auggie # For Auggie
252
294
 
253
295
  **See [AI Client Integration Guide](docs/AI_CLIENT_INTEGRATION.md) for client-specific details.**
254
296
 
297
+ ## ⚙️ Configuration
298
+
299
+ ### Linear Configuration
300
+
301
+ Configure Linear using either a team **key** (recommended) or team **ID**:
302
+
303
+ **Option 1: Team Key** (Recommended)
304
+ ```bash
305
+ # In .env or environment
306
+ LINEAR_API_KEY=lin_api_...
307
+ LINEAR_TEAM_KEY=ENG
308
+ ```
309
+
310
+ **Option 2: Team ID**
311
+ ```bash
312
+ # In .env or environment
313
+ LINEAR_API_KEY=lin_api_...
314
+ LINEAR_TEAM_ID=02d15669-7351-4451-9719-807576c16049
315
+ ```
316
+
317
+ **Finding your team key in Linear:**
318
+ 1. Go to Linear Settings → Teams
319
+ 2. Select your team
320
+ 3. Look for the "Key" field (e.g., "ENG", "DESIGN", "PRODUCT")
321
+
322
+ The team key is a short, human-readable identifier that's easier to use than the UUID-based team ID.
323
+
324
+ ### Environment Variables
325
+
326
+ See [.env.example](.env.example) for a complete list of supported environment variables for all adapters.
327
+
255
328
  ## 📚 Documentation
256
329
 
257
330
  Full documentation is available at [https://mcp-ticketerer.readthedocs.io](https://mcp-ticketerer.readthedocs.io)
@@ -19,6 +19,7 @@ Universal ticket management interface for AI agents with MCP (Model Context Prot
19
19
  - **🎨 Rich CLI**: Beautiful terminal interface with colors and tables
20
20
  - **📊 State Machine**: Built-in state transitions with validation
21
21
  - **🔍 Advanced Search**: Full-text search with multiple filters
22
+ - **📎 File Attachments**: Upload, list, and manage ticket attachments (AITrackdown adapter)
22
23
  - **📦 Easy Installation**: Available on PyPI with simple pip install
23
24
 
24
25
  ## 📦 Installation
@@ -54,29 +55,37 @@ MCP Ticketer integrates with multiple AI clients via the Model Context Protocol
54
55
 
55
56
  | AI Client | Support | Config Type | Project-Level | Setup Command |
56
57
  |-----------|---------|-------------|---------------|---------------|
57
- | **Claude Code** | ✅ Native | JSON | ✅ Yes | `mcp-ticketer mcp claude` |
58
- | **Gemini CLI** | ✅ Full | JSON | Yes | `mcp-ticketer mcp gemini` |
59
- | **Codex CLI** | ✅ Full | TOML | Global only | `mcp-ticketer mcp codex` |
60
- | **Auggie** | ✅ Full | JSON | ❌ Global only | `mcp-ticketer mcp auggie` |
58
+ | **Claude Code** | ✅ Native | JSON | ✅ Yes | `mcp-ticketer install claude-code` |
59
+ | **Claude Desktop** | ✅ Full | JSON | Global only | `mcp-ticketer install claude-desktop` |
60
+ | **Gemini CLI** | ✅ Full | JSON | Yes | `mcp-ticketer install gemini` |
61
+ | **Codex CLI** | ✅ Full | TOML | ❌ Global only | `mcp-ticketer install codex` |
62
+ | **Auggie** | ✅ Full | JSON | ❌ Global only | `mcp-ticketer install auggie` |
61
63
 
62
64
  ### Quick MCP Setup
63
65
 
64
66
  ```bash
65
67
  # Claude Code (recommended for project-specific workflows)
66
- mcp-ticketer init --adapter aitrackdown # First, initialize an adapter
67
- mcp-ticketer mcp claude # Then configure MCP
68
+ mcp-ticketer init --adapter aitrackdown # First, initialize an adapter
69
+ mcp-ticketer install claude-code # Then install MCP configuration
70
+
71
+ # Claude Desktop (global configuration)
72
+ mcp-ticketer init --adapter aitrackdown
73
+ mcp-ticketer install claude-desktop
68
74
 
69
75
  # Gemini CLI (Google's AI client)
70
76
  mcp-ticketer init --adapter aitrackdown
71
- mcp-ticketer mcp gemini --scope project
77
+ mcp-ticketer install gemini
72
78
 
73
79
  # Codex CLI (global configuration, requires restart)
74
80
  mcp-ticketer init --adapter aitrackdown
75
- mcp-ticketer mcp codex
81
+ mcp-ticketer install codex
76
82
 
77
83
  # Auggie (simple global setup)
78
84
  mcp-ticketer init --adapter aitrackdown
79
- mcp-ticketer mcp auggie
85
+ mcp-ticketer install auggie
86
+
87
+ # Show available platforms
88
+ mcp-ticketer install
80
89
  ```
81
90
 
82
91
  **See [AI Client Integration Guide](docs/AI_CLIENT_INTEGRATION.md) for detailed setup instructions.**
@@ -90,6 +99,10 @@ mcp-ticketer mcp auggie
90
99
  mcp-ticketer init --adapter aitrackdown
91
100
 
92
101
  # For Linear (requires API key)
102
+ # Option 1: Using team key (recommended)
103
+ mcp-ticketer init --adapter linear --team-key ENG
104
+
105
+ # Option 2: Using team ID
93
106
  mcp-ticketer init --adapter linear --team-id YOUR_TEAM_ID
94
107
 
95
108
  # For JIRA (requires server and credentials)
@@ -101,6 +114,11 @@ mcp-ticketer init --adapter jira \
101
114
  mcp-ticketer init --adapter github --repo owner/repo
102
115
  ```
103
116
 
117
+ **Note:** The following commands are synonymous and can be used interchangeably:
118
+ - `mcp-ticketer init` - Initialize configuration
119
+ - `mcp-ticketer install` - Install and configure (same as init)
120
+ - `mcp-ticketer setup` - Setup (same as init)
121
+
104
122
  ### 2. Create Your First Ticket
105
123
 
106
124
  ```bash
@@ -129,6 +147,24 @@ mcp-ticketer transition TICKET-123 in_progress
129
147
  mcp-ticketer search "login bug" --state open
130
148
  ```
131
149
 
150
+ ### 4. Working with Attachments (AITrackdown)
151
+
152
+ ```bash
153
+ # Add attachment via MCP tools
154
+ mcp-ticketer mcp call ticket_attach '{
155
+ "ticket_id": "task-123",
156
+ "file_path": "/path/to/document.pdf",
157
+ "description": "Project specification"
158
+ }'
159
+
160
+ # List attachments
161
+ mcp-ticketer mcp call ticket_attachments '{
162
+ "ticket_id": "task-123"
163
+ }'
164
+ ```
165
+
166
+ For programmatic access, see the [Attachments Guide](docs/ATTACHMENTS.md).
167
+
132
168
  ## 🤖 MCP Server Integration
133
169
 
134
170
  MCP Ticketer provides seamless integration with AI clients through automatic configuration:
@@ -137,11 +173,16 @@ MCP Ticketer provides seamless integration with AI clients through automatic con
137
173
  # Run MCP server manually (for testing)
138
174
  mcp-ticketer serve
139
175
 
140
- # Or configure your AI client automatically (recommended)
141
- mcp-ticketer mcp claude # For Claude Code
142
- mcp-ticketer mcp gemini # For Gemini CLI
143
- mcp-ticketer mcp codex # For Codex CLI
144
- mcp-ticketer mcp auggie # For Auggie
176
+ # Or install MCP configuration automatically (recommended)
177
+ mcp-ticketer install claude-code # For Claude Code (project-level)
178
+ mcp-ticketer install claude-desktop # For Claude Desktop (global)
179
+ mcp-ticketer install gemini # For Gemini CLI
180
+ mcp-ticketer install codex # For Codex CLI
181
+ mcp-ticketer install auggie # For Auggie
182
+
183
+ # Remove MCP configuration when needed
184
+ mcp-ticketer remove claude-code # Remove from Claude Code
185
+ mcp-ticketer uninstall auggie # Alias for remove
145
186
  ```
146
187
 
147
188
  **Configuration is automatic** - the commands above will:
@@ -168,6 +209,37 @@ mcp-ticketer mcp auggie # For Auggie
168
209
 
169
210
  **See [AI Client Integration Guide](docs/AI_CLIENT_INTEGRATION.md) for client-specific details.**
170
211
 
212
+ ## ⚙️ Configuration
213
+
214
+ ### Linear Configuration
215
+
216
+ Configure Linear using either a team **key** (recommended) or team **ID**:
217
+
218
+ **Option 1: Team Key** (Recommended)
219
+ ```bash
220
+ # In .env or environment
221
+ LINEAR_API_KEY=lin_api_...
222
+ LINEAR_TEAM_KEY=ENG
223
+ ```
224
+
225
+ **Option 2: Team ID**
226
+ ```bash
227
+ # In .env or environment
228
+ LINEAR_API_KEY=lin_api_...
229
+ LINEAR_TEAM_ID=02d15669-7351-4451-9719-807576c16049
230
+ ```
231
+
232
+ **Finding your team key in Linear:**
233
+ 1. Go to Linear Settings → Teams
234
+ 2. Select your team
235
+ 3. Look for the "Key" field (e.g., "ENG", "DESIGN", "PRODUCT")
236
+
237
+ The team key is a short, human-readable identifier that's easier to use than the UUID-based team ID.
238
+
239
+ ### Environment Variables
240
+
241
+ See [.env.example](.env.example) for a complete list of supported environment variables for all adapters.
242
+
171
243
  ## 📚 Documentation
172
244
 
173
245
  Full documentation is available at [https://mcp-ticketerer.readthedocs.io](https://mcp-ticketerer.readthedocs.io)
@@ -77,11 +77,12 @@ Before integrating with any AI client, ensure you have:
77
77
  pip install mcp-ticketer
78
78
  mcp-ticketer init --adapter aitrackdown
79
79
 
80
- # 2. Configure your AI client (choose ONE)
81
- mcp-ticketer mcp claude # Claude Code (recommended)
82
- mcp-ticketer mcp gemini # Gemini CLI
83
- mcp-ticketer mcp codex # Codex CLI
84
- mcp-ticketer mcp auggie # Auggie
80
+ # 2. Install MCP configuration for your AI client (choose ONE)
81
+ mcp-ticketer install claude-code # Claude Code (project-level, recommended)
82
+ mcp-ticketer install claude-desktop # Claude Desktop (global)
83
+ mcp-ticketer install gemini # Gemini CLI
84
+ mcp-ticketer install codex # Codex CLI
85
+ mcp-ticketer install auggie # Auggie
85
86
  ```
86
87
 
87
88
  ---
@@ -135,14 +136,14 @@ mcp-ticketer init --adapter github --repo owner/repo
135
136
  #### Step 3: Configure MCP Integration
136
137
 
137
138
  ```bash
138
- # Project-level configuration (recommended)
139
- mcp-ticketer mcp claude
139
+ # Project-level configuration (recommended for Claude Code)
140
+ mcp-ticketer install claude-code
140
141
 
141
- # Global configuration (Claude Desktop)
142
- mcp-ticketer mcp claude --global
142
+ # Global configuration (for Claude Desktop)
143
+ mcp-ticketer install claude-desktop
143
144
 
144
- # Force overwrite existing configuration
145
- mcp-ticketer mcp claude --force
145
+ # Preview changes without applying them
146
+ mcp-ticketer install claude-code --dry-run
146
147
  ```
147
148
 
148
149
  #### Step 4: Verify Configuration
@@ -274,14 +275,11 @@ mcp-ticketer init --adapter aitrackdown
274
275
  #### Step 3: Configure MCP Integration
275
276
 
276
277
  ```bash
277
- # Project-level configuration (recommended)
278
- mcp-ticketer mcp gemini --scope project
278
+ # Install Gemini CLI configuration (project-level by default)
279
+ mcp-ticketer install gemini
279
280
 
280
- # User-level configuration (global)
281
- mcp-ticketer mcp gemini --scope user
282
-
283
- # Force overwrite
284
- mcp-ticketer mcp gemini --scope project --force
281
+ # Preview changes without applying them
282
+ mcp-ticketer install gemini --dry-run
285
283
  ```
286
284
 
287
285
  #### Step 4: Verify Configuration
@@ -399,11 +397,11 @@ mcp-ticketer init --adapter aitrackdown
399
397
  #### Step 3: Configure MCP Integration
400
398
 
401
399
  ```bash
402
- # Configure Codex (global-only)
403
- mcp-ticketer mcp codex
400
+ # Install Codex CLI configuration (global-only)
401
+ mcp-ticketer install codex
404
402
 
405
- # Force overwrite
406
- mcp-ticketer mcp codex --force
403
+ # Preview changes without applying them
404
+ mcp-ticketer install codex --dry-run
407
405
  ```
408
406
 
409
407
  ⚠️ **IMPORTANT:** Codex CLI does NOT support project-level configuration.
@@ -500,11 +498,11 @@ mcp-ticketer init --adapter aitrackdown
500
498
  #### Step 3: Configure MCP Integration
501
499
 
502
500
  ```bash
503
- # Configure Auggie (global-only)
504
- mcp-ticketer mcp auggie
501
+ # Install Auggie configuration (global-only)
502
+ mcp-ticketer install auggie
505
503
 
506
- # Force overwrite
507
- mcp-ticketer mcp auggie --force
504
+ # Preview changes without applying them
505
+ mcp-ticketer install auggie --dry-run
508
506
  ```
509
507
 
510
508
  #### Step 4: Restart Auggie
@@ -711,8 +709,9 @@ This ensures tickets are accessible across all projects when using Auggie.
711
709
  # Find the binary path
712
710
  which mcp-ticketer
713
711
 
714
- # Update config with absolute path
715
- mcp-ticketer mcp claude --force
712
+ # Reinstall configuration
713
+ mcp-ticketer remove claude-code
714
+ mcp-ticketer install claude-code
716
715
  ```
717
716
 
718
717
  #### 2. "Adapter not configured"
@@ -753,8 +752,9 @@ cat .gemini/settings.json
753
752
  # Verify .gitignore
754
753
  cat .gitignore | grep .gemini
755
754
 
756
- # Reconfigure
757
- mcp-ticketer mcp gemini --scope project --force
755
+ # Reinstall configuration
756
+ mcp-ticketer remove gemini
757
+ mcp-ticketer install gemini
758
758
  ```
759
759
 
760
760
  #### 5. "Server not responding" (Codex CLI)
@@ -817,8 +817,8 @@ python -c "import tomli; print(tomli.load(open('~/.codex/config.toml', 'rb')))"
817
817
  # 1. Your adapter config is already compatible
818
818
  # No changes needed to .mcp-ticketer/config.json
819
819
 
820
- # 2. Configure Gemini CLI
821
- mcp-ticketer mcp gemini --scope project
820
+ # 2. Install Gemini CLI configuration
821
+ mcp-ticketer install gemini
822
822
 
823
823
  # 3. Both clients can now use the same adapter
824
824
  # No data migration required
@@ -831,8 +831,8 @@ mcp-ticketer mcp gemini --scope project
831
831
  cd /path/to/project
832
832
  mcp-ticketer init --adapter aitrackdown
833
833
 
834
- # 2. Configure new client
835
- mcp-ticketer mcp claude # or: mcp-ticketer mcp gemini
834
+ # 2. Install configuration for new client
835
+ mcp-ticketer install claude-code # or: mcp-ticketer install gemini
836
836
 
837
837
  # 3. Migrate tickets (optional)
838
838
  # Copy tickets from global storage to project storage
@@ -846,8 +846,8 @@ cp -r ~/.mcp-ticketer/.aitrackdown/* .aitrackdown/
846
846
  mkdir -p ~/.mcp-ticketer
847
847
  cp .mcp-ticketer/config.json ~/.mcp-ticketer/
848
848
 
849
- # 2. Configure global client
850
- mcp-ticketer mcp codex # or: mcp-ticketer mcp auggie
849
+ # 2. Install configuration for global client
850
+ mcp-ticketer install codex # or: mcp-ticketer install auggie
851
851
 
852
852
  # 3. Update paths in global config
853
853
  # Edit ~/.codex/config.toml or ~/.augment/settings.json
@@ -888,7 +888,8 @@ MCP_TICKETER_ADAPTER = "aitrackdown"
888
888
  **Conversion script:**
889
889
  ```bash
890
890
  # Use mcp-ticketer's built-in conversion
891
- mcp-ticketer mcp codex --force
891
+ mcp-ticketer remove codex
892
+ mcp-ticketer install codex
892
893
  ```
893
894
 
894
895
  ---