mcp-ticketer 0.2.0__py3-none-any.whl → 2.2.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. mcp_ticketer/__init__.py +10 -10
  2. mcp_ticketer/__version__.py +3 -3
  3. mcp_ticketer/_version_scm.py +1 -0
  4. mcp_ticketer/adapters/__init__.py +2 -0
  5. mcp_ticketer/adapters/aitrackdown.py +930 -52
  6. mcp_ticketer/adapters/asana/__init__.py +15 -0
  7. mcp_ticketer/adapters/asana/adapter.py +1537 -0
  8. mcp_ticketer/adapters/asana/client.py +292 -0
  9. mcp_ticketer/adapters/asana/mappers.py +348 -0
  10. mcp_ticketer/adapters/asana/types.py +146 -0
  11. mcp_ticketer/adapters/github/__init__.py +26 -0
  12. mcp_ticketer/adapters/github/adapter.py +3229 -0
  13. mcp_ticketer/adapters/github/client.py +335 -0
  14. mcp_ticketer/adapters/github/mappers.py +797 -0
  15. mcp_ticketer/adapters/github/queries.py +692 -0
  16. mcp_ticketer/adapters/github/types.py +460 -0
  17. mcp_ticketer/adapters/hybrid.py +58 -16
  18. mcp_ticketer/adapters/jira/__init__.py +35 -0
  19. mcp_ticketer/adapters/jira/adapter.py +1351 -0
  20. mcp_ticketer/adapters/jira/client.py +271 -0
  21. mcp_ticketer/adapters/jira/mappers.py +246 -0
  22. mcp_ticketer/adapters/jira/queries.py +216 -0
  23. mcp_ticketer/adapters/jira/types.py +304 -0
  24. mcp_ticketer/adapters/linear/__init__.py +1 -1
  25. mcp_ticketer/adapters/linear/adapter.py +3810 -462
  26. mcp_ticketer/adapters/linear/client.py +312 -69
  27. mcp_ticketer/adapters/linear/mappers.py +305 -85
  28. mcp_ticketer/adapters/linear/queries.py +317 -17
  29. mcp_ticketer/adapters/linear/types.py +187 -64
  30. mcp_ticketer/adapters/linear.py +2 -2
  31. mcp_ticketer/analysis/__init__.py +56 -0
  32. mcp_ticketer/analysis/dependency_graph.py +255 -0
  33. mcp_ticketer/analysis/health_assessment.py +304 -0
  34. mcp_ticketer/analysis/orphaned.py +218 -0
  35. mcp_ticketer/analysis/project_status.py +594 -0
  36. mcp_ticketer/analysis/similarity.py +224 -0
  37. mcp_ticketer/analysis/staleness.py +266 -0
  38. mcp_ticketer/automation/__init__.py +11 -0
  39. mcp_ticketer/automation/project_updates.py +378 -0
  40. mcp_ticketer/cache/memory.py +9 -8
  41. mcp_ticketer/cli/adapter_diagnostics.py +421 -0
  42. mcp_ticketer/cli/auggie_configure.py +116 -15
  43. mcp_ticketer/cli/codex_configure.py +274 -82
  44. mcp_ticketer/cli/configure.py +1323 -151
  45. mcp_ticketer/cli/cursor_configure.py +314 -0
  46. mcp_ticketer/cli/diagnostics.py +209 -114
  47. mcp_ticketer/cli/discover.py +297 -26
  48. mcp_ticketer/cli/gemini_configure.py +119 -26
  49. mcp_ticketer/cli/init_command.py +880 -0
  50. mcp_ticketer/cli/install_mcp_server.py +418 -0
  51. mcp_ticketer/cli/instruction_commands.py +435 -0
  52. mcp_ticketer/cli/linear_commands.py +256 -130
  53. mcp_ticketer/cli/main.py +140 -1284
  54. mcp_ticketer/cli/mcp_configure.py +1013 -100
  55. mcp_ticketer/cli/mcp_server_commands.py +415 -0
  56. mcp_ticketer/cli/migrate_config.py +12 -8
  57. mcp_ticketer/cli/platform_commands.py +123 -0
  58. mcp_ticketer/cli/platform_detection.py +477 -0
  59. mcp_ticketer/cli/platform_installer.py +545 -0
  60. mcp_ticketer/cli/project_update_commands.py +350 -0
  61. mcp_ticketer/cli/python_detection.py +126 -0
  62. mcp_ticketer/cli/queue_commands.py +15 -15
  63. mcp_ticketer/cli/setup_command.py +794 -0
  64. mcp_ticketer/cli/simple_health.py +84 -59
  65. mcp_ticketer/cli/ticket_commands.py +1375 -0
  66. mcp_ticketer/cli/update_checker.py +313 -0
  67. mcp_ticketer/cli/utils.py +195 -72
  68. mcp_ticketer/core/__init__.py +64 -1
  69. mcp_ticketer/core/adapter.py +618 -18
  70. mcp_ticketer/core/config.py +77 -68
  71. mcp_ticketer/core/env_discovery.py +75 -16
  72. mcp_ticketer/core/env_loader.py +121 -97
  73. mcp_ticketer/core/exceptions.py +32 -24
  74. mcp_ticketer/core/http_client.py +26 -26
  75. mcp_ticketer/core/instructions.py +405 -0
  76. mcp_ticketer/core/label_manager.py +732 -0
  77. mcp_ticketer/core/mappers.py +42 -30
  78. mcp_ticketer/core/milestone_manager.py +252 -0
  79. mcp_ticketer/core/models.py +566 -19
  80. mcp_ticketer/core/onepassword_secrets.py +379 -0
  81. mcp_ticketer/core/priority_matcher.py +463 -0
  82. mcp_ticketer/core/project_config.py +189 -49
  83. mcp_ticketer/core/project_utils.py +281 -0
  84. mcp_ticketer/core/project_validator.py +376 -0
  85. mcp_ticketer/core/registry.py +3 -3
  86. mcp_ticketer/core/session_state.py +176 -0
  87. mcp_ticketer/core/state_matcher.py +592 -0
  88. mcp_ticketer/core/url_parser.py +425 -0
  89. mcp_ticketer/core/validators.py +69 -0
  90. mcp_ticketer/defaults/ticket_instructions.md +644 -0
  91. mcp_ticketer/mcp/__init__.py +29 -1
  92. mcp_ticketer/mcp/__main__.py +60 -0
  93. mcp_ticketer/mcp/server/__init__.py +25 -0
  94. mcp_ticketer/mcp/server/__main__.py +60 -0
  95. mcp_ticketer/mcp/server/constants.py +58 -0
  96. mcp_ticketer/mcp/server/diagnostic_helper.py +175 -0
  97. mcp_ticketer/mcp/server/dto.py +195 -0
  98. mcp_ticketer/mcp/server/main.py +1343 -0
  99. mcp_ticketer/mcp/server/response_builder.py +206 -0
  100. mcp_ticketer/mcp/server/routing.py +723 -0
  101. mcp_ticketer/mcp/server/server_sdk.py +151 -0
  102. mcp_ticketer/mcp/server/tools/__init__.py +69 -0
  103. mcp_ticketer/mcp/server/tools/analysis_tools.py +854 -0
  104. mcp_ticketer/mcp/server/tools/attachment_tools.py +224 -0
  105. mcp_ticketer/mcp/server/tools/bulk_tools.py +330 -0
  106. mcp_ticketer/mcp/server/tools/comment_tools.py +152 -0
  107. mcp_ticketer/mcp/server/tools/config_tools.py +1564 -0
  108. mcp_ticketer/mcp/server/tools/diagnostic_tools.py +211 -0
  109. mcp_ticketer/mcp/server/tools/hierarchy_tools.py +942 -0
  110. mcp_ticketer/mcp/server/tools/instruction_tools.py +295 -0
  111. mcp_ticketer/mcp/server/tools/label_tools.py +942 -0
  112. mcp_ticketer/mcp/server/tools/milestone_tools.py +338 -0
  113. mcp_ticketer/mcp/server/tools/pr_tools.py +150 -0
  114. mcp_ticketer/mcp/server/tools/project_status_tools.py +158 -0
  115. mcp_ticketer/mcp/server/tools/project_update_tools.py +473 -0
  116. mcp_ticketer/mcp/server/tools/search_tools.py +318 -0
  117. mcp_ticketer/mcp/server/tools/session_tools.py +308 -0
  118. mcp_ticketer/mcp/server/tools/ticket_tools.py +1413 -0
  119. mcp_ticketer/mcp/server/tools/user_ticket_tools.py +364 -0
  120. mcp_ticketer/queue/__init__.py +1 -0
  121. mcp_ticketer/queue/health_monitor.py +168 -136
  122. mcp_ticketer/queue/manager.py +78 -63
  123. mcp_ticketer/queue/queue.py +108 -21
  124. mcp_ticketer/queue/run_worker.py +2 -2
  125. mcp_ticketer/queue/ticket_registry.py +213 -155
  126. mcp_ticketer/queue/worker.py +96 -58
  127. mcp_ticketer/utils/__init__.py +5 -0
  128. mcp_ticketer/utils/token_utils.py +246 -0
  129. mcp_ticketer-2.2.9.dist-info/METADATA +1396 -0
  130. mcp_ticketer-2.2.9.dist-info/RECORD +158 -0
  131. mcp_ticketer-2.2.9.dist-info/top_level.txt +2 -0
  132. py_mcp_installer/examples/phase3_demo.py +178 -0
  133. py_mcp_installer/scripts/manage_version.py +54 -0
  134. py_mcp_installer/setup.py +6 -0
  135. py_mcp_installer/src/py_mcp_installer/__init__.py +153 -0
  136. py_mcp_installer/src/py_mcp_installer/command_builder.py +445 -0
  137. py_mcp_installer/src/py_mcp_installer/config_manager.py +541 -0
  138. py_mcp_installer/src/py_mcp_installer/exceptions.py +243 -0
  139. py_mcp_installer/src/py_mcp_installer/installation_strategy.py +617 -0
  140. py_mcp_installer/src/py_mcp_installer/installer.py +656 -0
  141. py_mcp_installer/src/py_mcp_installer/mcp_inspector.py +750 -0
  142. py_mcp_installer/src/py_mcp_installer/platform_detector.py +451 -0
  143. py_mcp_installer/src/py_mcp_installer/platforms/__init__.py +26 -0
  144. py_mcp_installer/src/py_mcp_installer/platforms/claude_code.py +225 -0
  145. py_mcp_installer/src/py_mcp_installer/platforms/codex.py +181 -0
  146. py_mcp_installer/src/py_mcp_installer/platforms/cursor.py +191 -0
  147. py_mcp_installer/src/py_mcp_installer/types.py +222 -0
  148. py_mcp_installer/src/py_mcp_installer/utils.py +463 -0
  149. py_mcp_installer/tests/__init__.py +0 -0
  150. py_mcp_installer/tests/platforms/__init__.py +0 -0
  151. py_mcp_installer/tests/test_platform_detector.py +17 -0
  152. mcp_ticketer/adapters/github.py +0 -1354
  153. mcp_ticketer/adapters/jira.py +0 -1011
  154. mcp_ticketer/mcp/server.py +0 -1895
  155. mcp_ticketer-0.2.0.dist-info/METADATA +0 -414
  156. mcp_ticketer-0.2.0.dist-info/RECORD +0 -58
  157. mcp_ticketer-0.2.0.dist-info/top_level.txt +0 -1
  158. {mcp_ticketer-0.2.0.dist-info → mcp_ticketer-2.2.9.dist-info}/WHEEL +0 -0
  159. {mcp_ticketer-0.2.0.dist-info → mcp_ticketer-2.2.9.dist-info}/entry_points.txt +0 -0
  160. {mcp_ticketer-0.2.0.dist-info → mcp_ticketer-2.2.9.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1396 @@
1
+ Metadata-Version: 2.4
2
+ Name: mcp-ticketer
3
+ Version: 2.2.9
4
+ Summary: Universal ticket management interface for AI agents with MCP support
5
+ Author-email: MCP Ticketer Team <support@mcp-ticketer.io>
6
+ Maintainer-email: MCP Ticketer Team <support@mcp-ticketer.io>
7
+ License-Expression: MIT
8
+ Project-URL: Homepage, https://github.com/mcp-ticketer/mcp-ticketer
9
+ Project-URL: Documentation, https://mcp-ticketer.readthedocs.io
10
+ Project-URL: Repository, https://github.com/mcp-ticketer/mcp-ticketer
11
+ Project-URL: Issues, https://github.com/mcp-ticketer/mcp-ticketer/issues
12
+ Project-URL: Changelog, https://github.com/mcp-ticketer/mcp-ticketer/blob/main/CHANGELOG.md
13
+ Keywords: mcp,tickets,jira,linear,github,issue-tracking,project-management,ai,automation,agent,ticketing
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Intended Audience :: System Administrators
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Programming Language :: Python :: Implementation :: CPython
25
+ Classifier: Topic :: Software Development :: Libraries
26
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
27
+ Classifier: Topic :: Software Development :: Bug Tracking
28
+ Classifier: Topic :: System :: Monitoring
29
+ Classifier: Topic :: Internet :: WWW/HTTP
30
+ Classifier: Typing :: Typed
31
+ Requires-Python: >=3.10
32
+ Description-Content-Type: text/markdown
33
+ License-File: LICENSE
34
+ Requires-Dist: gql[httpx]>=3.0.0
35
+ Requires-Dist: httpx>=0.25.0
36
+ Requires-Dist: mcp>=1.2.0
37
+ Requires-Dist: psutil>=5.9.0
38
+ Requires-Dist: pydantic>=2.0
39
+ Requires-Dist: python-dotenv>=1.0.0
40
+ Requires-Dist: pyyaml>=6.0.0
41
+ Requires-Dist: rich>=13.0.0
42
+ Requires-Dist: tomli>=2.0.0; python_version < "3.11"
43
+ Requires-Dist: tomli-w>=1.0.0
44
+ Requires-Dist: typer>=0.9.0
45
+ Requires-Dist: typing-extensions>=4.8.0
46
+ Provides-Extra: all
47
+ Requires-Dist: mcp-ticketer[analysis,github,jira,linear,mcp]; extra == "all"
48
+ Provides-Extra: dev
49
+ Requires-Dist: pytest>=7.4.0; extra == "dev"
50
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
51
+ Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
52
+ Requires-Dist: pytest-timeout>=2.2.0; extra == "dev"
53
+ Requires-Dist: pytest-mock>=3.12.0; extra == "dev"
54
+ Requires-Dist: pytest-xdist>=3.0.0; extra == "dev"
55
+ Requires-Dist: black>=23.0.0; extra == "dev"
56
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
57
+ Requires-Dist: mypy>=1.5.0; extra == "dev"
58
+ Requires-Dist: types-PyYAML>=6.0.0; extra == "dev"
59
+ Requires-Dist: tox>=4.11.0; extra == "dev"
60
+ Requires-Dist: pre-commit>=3.5.0; extra == "dev"
61
+ Requires-Dist: bump2version>=1.0.1; extra == "dev"
62
+ Requires-Dist: build>=1.0.0; extra == "dev"
63
+ Requires-Dist: twine>=5.0.0; extra == "dev"
64
+ Provides-Extra: docs
65
+ Requires-Dist: sphinx>=7.2.0; extra == "docs"
66
+ Requires-Dist: sphinx-rtd-theme>=2.0.0; extra == "docs"
67
+ Requires-Dist: sphinx-autodoc-typehints>=1.25.0; extra == "docs"
68
+ Requires-Dist: sphinx-click>=5.1.0; extra == "docs"
69
+ Requires-Dist: myst-parser>=2.0.0; extra == "docs"
70
+ Provides-Extra: mcp
71
+ Requires-Dist: mcp>=1.2.0; extra == "mcp"
72
+ Provides-Extra: jira
73
+ Requires-Dist: jira>=3.5.0; extra == "jira"
74
+ Requires-Dist: ai-trackdown-pytools>=1.5.0; extra == "jira"
75
+ Provides-Extra: linear
76
+ Requires-Dist: gql[httpx]>=3.0.0; extra == "linear"
77
+ Provides-Extra: github
78
+ Requires-Dist: PyGithub>=2.1.0; extra == "github"
79
+ Provides-Extra: analysis
80
+ Requires-Dist: scikit-learn>=1.3.0; extra == "analysis"
81
+ Requires-Dist: rapidfuzz>=3.0.0; extra == "analysis"
82
+ Requires-Dist: numpy>=1.24.0; extra == "analysis"
83
+ Provides-Extra: test
84
+ Requires-Dist: pytest>=7.4.0; extra == "test"
85
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
86
+ Requires-Dist: pytest-cov>=4.1.0; extra == "test"
87
+ Requires-Dist: pytest-timeout>=2.2.0; extra == "test"
88
+ Requires-Dist: pytest-mock>=3.12.0; extra == "test"
89
+ Requires-Dist: pytest-xdist>=3.0.0; extra == "test"
90
+ Requires-Dist: responses>=0.24.0; extra == "test"
91
+ Dynamic: license-file
92
+
93
+ # MCP Ticketer
94
+
95
+ [![PyPI - Version](https://img.shields.io/pypi/v/mcp-ticketer.svg)](https://pypi.org/project/mcp-ticketer)
96
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/mcp-ticketer.svg)](https://pypi.org/project/mcp-ticketer)
97
+ [![Documentation Status](https://readthedocs.org/projects/mcp-ticketer/badge/?version=latest)](https://mcp-ticketer.readthedocs.io/en/latest/?badge=latest)
98
+ [![Tests](https://github.com/mcp-ticketer/mcp-ticketer/workflows/Tests/badge.svg)](https://github.com/mcp-ticketer/mcp-ticketer/actions)
99
+ [![Coverage Status](https://codecov.io/gh/mcp-ticketer/mcp-ticketer/branch/main/graph/badge.svg)](https://codecov.io/gh/mcp-ticketer/mcp-ticketer)
100
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
101
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
102
+
103
+ Universal ticket management interface for AI agents with MCP (Model Context Protocol) support.
104
+
105
+ ## 🚀 Features
106
+
107
+ - **🎯 Universal Ticket Model**: Simplified to Epic, Task, and Comment types
108
+ - **🔌 Multiple Adapters**: Support for JIRA, Linear, GitHub Issues, and AI-Trackdown
109
+ - **🤖 MCP Integration**: Native support for AI agent interactions
110
+ - **⚡ High Performance**: Smart caching and async operations
111
+ - **🎨 Rich CLI**: Beautiful terminal interface with colors and tables
112
+ - **📊 State Machine**: Built-in state transitions with validation
113
+ - **🔍 Advanced Search**: Full-text search with multiple filters
114
+ - **🔗 Hierarchy Navigation**: Parent issue lookup and filtered sub-issue retrieval
115
+ - **👤 Smart Assignment**: Dedicated assignment tool with URL support and audit trails
116
+ - **🏷️ Label Management**: Intelligent label organization, deduplication, and cleanup with fuzzy matching
117
+ - **📎 File Attachments**: Upload, list, and manage ticket attachments (AITrackdown adapter)
118
+ - **📝 Custom Instructions**: Customize ticket writing guidelines for your team
119
+ - **🔬 PM Monitoring Tools**: Detect duplicate tickets, identify stale work, and find orphaned tickets
120
+ - **📦 Easy Installation**: Available on PyPI with simple pip install
121
+ - **🚀 Auto-Dependency Install**: Automatic adapter dependency detection and installation
122
+ - **💾 Compact Mode**: 70% token reduction for AI agent ticket list queries (v0.15.0+)
123
+
124
+ ## ⚡ Token Efficiency
125
+
126
+ MCP Ticketer is optimized for AI agent usage with built-in token management:
127
+
128
+ - **20k Token Limit**: All tool responses stay under 20,000 tokens
129
+ - **Automatic Pagination**: Tools that could exceed limits support pagination
130
+ - **Compact Mode**: Minimal responses (15 tokens vs 185 per ticket)
131
+ - **Progressive Disclosure**: Summary first, details on demand
132
+
133
+ See [📄 Token Pagination](#-token-pagination-v131) section below for quick start, or [docs/user-docs/features/TOKEN_PAGINATION.md](docs/user-docs/features/TOKEN_PAGINATION.md) for detailed technical guide.
134
+
135
+ ## 📦 Installation
136
+
137
+ ### From PyPI (Recommended)
138
+
139
+ ```bash
140
+ pip install mcp-ticketer
141
+
142
+ # Install with specific adapters
143
+ pip install mcp-ticketer[jira] # JIRA support
144
+ pip install mcp-ticketer[linear] # Linear support
145
+ pip install mcp-ticketer[github] # GitHub Issues support
146
+ pip install mcp-ticketer[analysis] # PM monitoring tools
147
+ pip install mcp-ticketer[all] # All adapters and features
148
+ ```
149
+
150
+ **Note (v0.15.0+)**: The `setup` command now automatically detects and installs adapter dependencies! When you run `mcp-ticketer setup`, it will prompt you to install any missing adapter-specific dependencies, eliminating the need for manual `pip install mcp-ticketer[adapter]` after setup.
151
+
152
+ ### From Source
153
+
154
+ ```bash
155
+ git clone https://github.com/mcp-ticketer/mcp-ticketer.git
156
+ cd mcp-ticketer
157
+ pip install -e .
158
+ ```
159
+
160
+ ### Requirements
161
+
162
+ - Python 3.9+
163
+ - Virtual environment (recommended)
164
+
165
+ ### PATH Configuration (Optional but Recommended)
166
+
167
+ For optimal Claude Desktop MCP integration, ensure `mcp-ticketer` is in your PATH:
168
+
169
+ **pipx users**:
170
+ ```bash
171
+ export PATH="$HOME/.local/bin:$PATH"
172
+ # Add to ~/.bashrc or ~/.zshrc to make permanent
173
+ ```
174
+
175
+ **uv users**:
176
+ ```bash
177
+ export PATH="$HOME/.local/bin:$PATH" # Linux/macOS
178
+ # Add to ~/.bashrc or ~/.zshrc to make permanent
179
+ ```
180
+
181
+ **Why configure PATH?**
182
+ - ✅ **With PATH**: Native Claude CLI integration for better UX
183
+ - ⚠️ **Without PATH**: mcp-ticketer still works using full paths (legacy mode)
184
+
185
+ **Verify PATH configuration**:
186
+ ```bash
187
+ which mcp-ticketer
188
+ # Should show: /Users/username/.local/bin/mcp-ticketer (or similar)
189
+ ```
190
+
191
+ **Note (v2.0.2+)**: The installer automatically detects if `mcp-ticketer` is in PATH and configures Claude Desktop appropriately. See [1M-579](https://linear.app/1m-hyperdev/issue/1M-579) for technical details.
192
+
193
+ ## 🤖 Supported AI Clients
194
+
195
+ MCP Ticketer integrates with multiple AI clients via the Model Context Protocol (MCP):
196
+
197
+ | AI Client | Support | Config Type | Project-Level | Setup Command |
198
+ |-----------|---------|-------------|---------------|---------------|
199
+ | **Claude Code** | ✅ Native | JSON | ✅ Yes | `mcp-ticketer install claude-code` |
200
+ | **Claude Desktop** | ✅ Full | JSON | ❌ Global only | `mcp-ticketer install claude-desktop` |
201
+ | **Gemini CLI** | ✅ Full | JSON | ✅ Yes | `mcp-ticketer install gemini` |
202
+ | **Codex CLI** | ✅ Full | TOML | ❌ Global only | `mcp-ticketer install codex` |
203
+ | **Auggie** | ✅ Full | JSON | ❌ Global only | `mcp-ticketer install auggie` |
204
+
205
+ ### Quick MCP Setup
206
+
207
+ ```bash
208
+ # Initialize adapter first (required)
209
+ mcp-ticketer init --adapter aitrackdown
210
+
211
+ # Auto-detection (Recommended) - Interactive platform selection
212
+ mcp-ticketer install # Auto-detect and prompt for platform
213
+
214
+ # See all detected platforms
215
+ mcp-ticketer install --auto-detect # Show what's installed on your system
216
+
217
+ # Install for all detected platforms at once
218
+ mcp-ticketer install --all # Configure all detected code editors
219
+
220
+ # Or install for specific platform
221
+ mcp-ticketer install claude-code # Claude Code (project-level)
222
+ mcp-ticketer install claude-desktop # Claude Desktop (global)
223
+ mcp-ticketer install gemini # Gemini CLI
224
+ mcp-ticketer install codex # Codex CLI
225
+ mcp-ticketer install auggie # Auggie
226
+ ```
227
+
228
+ #### Installation Scope (v1.4+)
229
+
230
+ By default, `mcp-ticketer install` focuses on **code editors only**:
231
+ - ✅ Claude Code
232
+ - ✅ Cursor
233
+ - ✅ Auggie
234
+ - ✅ Codex
235
+ - ✅ Gemini
236
+
237
+ **Why code editors only?** Code editors are project-scoped tools designed for working with codebases. Claude Desktop is a general-purpose AI assistant. This separation ensures mcp-ticketer is configured where it provides the most value.
238
+
239
+ **Including Claude Desktop**:
240
+
241
+ To also install for Claude Desktop (AI assistant), use the `--include-desktop` flag:
242
+
243
+ ```bash
244
+ # Install for all platforms including Claude Desktop
245
+ mcp-ticketer install --all --include-desktop
246
+
247
+ # Auto-detect including Claude Desktop
248
+ mcp-ticketer install --auto-detect --include-desktop
249
+
250
+ # Install ONLY Claude Desktop
251
+ mcp-ticketer install claude-desktop
252
+ ```
253
+
254
+ **See [AI Client Integration Guide](docs/integrations/AI_CLIENT_INTEGRATION.md) for detailed setup instructions.**
255
+
256
+ ## 🚀 Quick Start
257
+
258
+ ### 1. Initialize Configuration
259
+
260
+ ```bash
261
+ # For AI-Trackdown (local file-based)
262
+ mcp-ticketer init --adapter aitrackdown
263
+
264
+ # For Linear (requires API key)
265
+ # Option 1: Using team URL (easiest - paste your Linear team issues URL)
266
+ mcp-ticketer init --adapter linear --team-url https://linear.app/your-org/team/ENG/active
267
+
268
+ # Option 2: Using team key
269
+ mcp-ticketer init --adapter linear --team-key ENG
270
+
271
+ # Option 3: Using team ID
272
+ mcp-ticketer init --adapter linear --team-id YOUR_TEAM_ID
273
+
274
+ # For JIRA (requires server and credentials)
275
+ mcp-ticketer init --adapter jira \
276
+ --jira-server https://company.atlassian.net \
277
+ --jira-email your.email@company.com
278
+
279
+ # For GitHub Issues
280
+ mcp-ticketer init --adapter github --repo owner/repo
281
+ ```
282
+
283
+ **Note:** The following commands are synonymous and can be used interchangeably:
284
+ - `mcp-ticketer init` - Initialize configuration
285
+ - `mcp-ticketer install` - Install and configure (same as init)
286
+ - `mcp-ticketer setup` - Setup (same as init)
287
+
288
+ #### Automatic Validation
289
+
290
+ The init command now automatically validates your configuration after setup:
291
+ - Valid credentials → Setup completes immediately
292
+ - Invalid credentials → You'll be prompted to:
293
+ 1. Re-enter configuration (up to 3 retries)
294
+ 2. Continue anyway (skip validation)
295
+ 3. Exit and fix manually
296
+
297
+ You can always re-validate later with: `mcp-ticketer doctor`
298
+
299
+ ### 2. Create Your First Ticket
300
+
301
+ ```bash
302
+ mcp-ticketer create "Fix login bug" \
303
+ --description "Users cannot login with OAuth" \
304
+ --priority high \
305
+ --assignee "john.doe"
306
+ ```
307
+
308
+ ### 3. Manage Tickets
309
+
310
+ ```bash
311
+ # List open tickets
312
+ mcp-ticketer list --state open
313
+
314
+ # Show ticket details
315
+ mcp-ticketer show TICKET-123 --comments
316
+
317
+ # Update ticket
318
+ mcp-ticketer update TICKET-123 --priority critical
319
+
320
+ # Transition state
321
+ mcp-ticketer transition TICKET-123 in_progress
322
+
323
+ # Search tickets
324
+ mcp-ticketer search "login bug" --state open
325
+ ```
326
+
327
+ ### 4. Working with Attachments (AITrackdown)
328
+
329
+ ```bash
330
+ # Working with attachments through MCP
331
+ # (Requires MCP server running - see MCP Server Integration section)
332
+
333
+ # Attachments are managed through your AI client when using MCP
334
+ # Ask your AI assistant: "Add the document.pdf as an attachment to task-123"
335
+ ```
336
+
337
+ For programmatic access, see the [Attachments Guide](docs/integrations/ATTACHMENTS.md).
338
+
339
+ ### 5. Customize Ticket Writing Instructions
340
+
341
+ Customize ticket guidelines to match your team's conventions:
342
+
343
+ ```bash
344
+ # View current instructions
345
+ mcp-ticketer instructions show
346
+
347
+ # Add custom instructions from file
348
+ mcp-ticketer instructions add team_guidelines.md
349
+
350
+ # Edit instructions interactively
351
+ mcp-ticketer instructions edit
352
+
353
+ # Reset to defaults
354
+ mcp-ticketer instructions delete --yes
355
+ ```
356
+
357
+ **Example custom instructions:**
358
+ ```markdown
359
+ # Our Team's Ticket Guidelines
360
+
361
+ ## Title Format
362
+ [TEAM-ID] [Type] Brief description
363
+
364
+ ## Required Sections
365
+ 1. Problem Statement
366
+ 2. Acceptance Criteria (minimum 3)
367
+ 3. Testing Notes
368
+ ```
369
+
370
+ For details, see the [Ticket Instructions Guide](docs/user-docs/features/ticket_instructions.md).
371
+
372
+ ### 6. PM Monitoring Tools
373
+
374
+ Maintain ticket health with automated analysis and cleanup tools:
375
+
376
+ ```bash
377
+ # Install analysis dependencies first
378
+ pip install "mcp-ticketer[analysis]"
379
+
380
+ # Find duplicate or similar tickets
381
+ mcp-ticketer analyze similar --threshold 0.8
382
+
383
+ # Identify stale tickets that may need closing
384
+ mcp-ticketer analyze stale --age-days 90 --inactive-days 30
385
+
386
+ # Find orphaned tickets without parent epic/project
387
+ mcp-ticketer analyze orphaned
388
+
389
+ # Generate comprehensive cleanup report
390
+ mcp-ticketer analyze cleanup --format markdown
391
+ ```
392
+
393
+ **Available MCP tools:**
394
+ - `ticket_find_similar` - Detect duplicate tickets using TF-IDF and cosine similarity
395
+ - `ticket_find_stale` - Identify inactive tickets that may need closing
396
+ - `ticket_find_orphaned` - Find tickets without proper hierarchy
397
+ - `ticket_cleanup_report` - Generate comprehensive analysis report
398
+
399
+ **Key features:**
400
+ - **Similarity Detection**: TF-IDF vectorization with fuzzy matching and tag overlap
401
+ - **Staleness Scoring**: Multi-factor analysis (age, inactivity, priority, state)
402
+ - **Orphan Detection**: Identify tickets missing parent epics or projects
403
+ - **Actionable Insights**: Automated suggestions for merge, link, close, or assign actions
404
+
405
+ For complete documentation, see the [PM Monitoring Tools Guide](docs/PM_MONITORING_TOOLS.md).
406
+
407
+ ### 7. Linear Practical Workflow CLI
408
+
409
+ Streamline your daily Linear workflow with command-line shortcuts for common operations:
410
+
411
+ ```bash
412
+ # Quick ticket creation with auto-tagging
413
+ ./ops/scripts/linear/practical-workflow.sh create-bug "Login fails" "Error 500" --priority high
414
+ ./ops/scripts/linear/practical-workflow.sh create-feature "Dark mode" "Add theme toggle"
415
+ ./ops/scripts/linear/practical-workflow.sh create-task "Update docs" "Refresh API docs"
416
+
417
+ # Workflow shortcuts
418
+ ./ops/scripts/linear/practical-workflow.sh start-work BTA-123
419
+ ./ops/scripts/linear/practical-workflow.sh ready-review BTA-123
420
+ ./ops/scripts/linear/practical-workflow.sh deployed BTA-123
421
+
422
+ # Comments
423
+ ./ops/scripts/linear/practical-workflow.sh add-comment BTA-123 "Working on this now"
424
+ ./ops/scripts/linear/practical-workflow.sh list-comments BTA-123
425
+ ```
426
+
427
+ **Key features:**
428
+ - **Auto-Tagging**: Automatically applies `bug`, `feature`, or `task` labels
429
+ - **Quick Commands**: Common workflow actions as single commands
430
+ - **Comment Tracking**: Add and list comments directly from CLI
431
+ - **Environment Validation**: Built-in configuration checks
432
+
433
+ **Setup:**
434
+ ```bash
435
+ # Copy configuration template
436
+ cp ops/scripts/linear/.env.example .env
437
+
438
+ # Edit with your Linear API key and team key
439
+ # LINEAR_API_KEY=lin_api_...
440
+ # LINEAR_TEAM_KEY=BTA
441
+
442
+ # Test configuration
443
+ ./ops/scripts/linear/practical-workflow.sh --help
444
+ ```
445
+
446
+ For complete documentation, see [Linear Workflow CLI Guide](ops/scripts/linear/README.md).
447
+
448
+ ### 8. Project Status Updates
449
+
450
+ Track project progress with status updates across Linear, GitHub V2, and Asana:
451
+
452
+ ```bash
453
+ # Create update with health indicator
454
+ mcp-ticketer project-update create "mcp-ticketer-eac28953c267" \
455
+ "Completed MCP tools implementation. CLI commands in progress." \
456
+ --health on_track
457
+
458
+ # Create update using full URL
459
+ mcp-ticketer project-update create \
460
+ "https://linear.app/1m-hyperdev/project/mcp-ticketer-eac28953c267/updates" \
461
+ "Sprint review completed successfully" \
462
+ --health on_track
463
+
464
+ # List recent updates
465
+ mcp-ticketer project-update list "mcp-ticketer-eac28953c267" --limit 10
466
+
467
+ # Get detailed update
468
+ mcp-ticketer project-update get "update-uuid-here"
469
+ ```
470
+
471
+ **Key features:**
472
+ - **Health Indicators**: 5 status levels (on_track, at_risk, off_track, complete, inactive)
473
+ - **Flexible Project ID**: Supports UUID, slug ID, short ID, or full URLs
474
+ - **Rich Formatting**: Color-coded health indicators and formatted tables
475
+ - **MCP Tools**: Programmatic access via `project_update_create`, `project_update_list`, `project_update_get`
476
+ - **Cross-Platform**: Linear (native), GitHub V2, Asana, Jira (workaround)
477
+
478
+ For complete documentation, see [Linear Setup Guide](docs/integrations/setup/LINEAR_SETUP.md#project-status-updates).
479
+
480
+ ## 📄 Token Pagination (v1.3.1)
481
+
482
+ ### Overview
483
+
484
+ mcp-ticketer implements intelligent token pagination to prevent context overflow when working with large datasets. The MCP server automatically paginates responses that exceed 20,000 tokens, ensuring Claude conversations remain responsive and efficient.
485
+
486
+ ### Why Pagination Matters
487
+
488
+ Working with large ticket systems can quickly consume your AI context window:
489
+
490
+ - **Context Protection**: Large ticket lists can consume 50k+ tokens, leaving little room for conversation
491
+ - **Performance**: Prevents timeout errors when fetching 100+ tickets
492
+ - **Reliability**: Guarantees predictable response sizes regardless of dataset size
493
+ - **Efficiency**: Enables working with projects containing 500+ tickets without context overflow
494
+
495
+ ### Quick Start
496
+
497
+ Pagination is **automatic** - you don't need to configure anything. Tools intelligently paginate when responses approach 20k tokens:
498
+
499
+ ```python
500
+ # Compact mode (default) - Minimal token usage
501
+ tickets = await ticket_list(limit=20, compact=True) # ~300 tokens
502
+
503
+ # Full mode - When you need all details
504
+ tickets = await ticket_list(limit=20, compact=False) # ~3,700 tokens
505
+
506
+ # Large datasets - Automatic pagination kicks in
507
+ labels = await label_list(limit=100) # ~1,500 tokens (safe)
508
+ ```
509
+
510
+ ### Paginated MCP Tools
511
+
512
+ The following tools support automatic token pagination with intelligent limits:
513
+
514
+ | Tool | Description | Default Limit | Max Safe Limit | Token Estimate |
515
+ |------|-------------|---------------|----------------|----------------|
516
+ | `ticket_list` | List tickets with filters | 20 tickets | 100 (compact) | 15-185 tokens/ticket |
517
+ | `ticket_search` | Search tickets by query | 10 tickets | 50 | 200-500 tokens/result |
518
+ | `label_list` | List all labels | 100 labels | 500 | 10-15 tokens/label |
519
+ | `ticket_find_similar` | Find duplicate tickets | 10 results | 50 results | 200-500 tokens/result |
520
+ | `ticket_cleanup_report` | Generate cleanup report | Summary mode | Full report | 1k-8k tokens |
521
+
522
+ **Note**: All tools stay under the 20,000 token limit per response.
523
+
524
+ ### Usage Examples
525
+
526
+ #### Example 1: Basic Ticket Listing (Optimal)
527
+
528
+ ```python
529
+ # Default settings optimized for AI agents
530
+ result = await ticket_list() # Uses limit=20, compact=True
531
+ # Returns ~300 tokens - perfect for conversations
532
+
533
+ # Response includes:
534
+ {
535
+ "items": [...], # Tickets with id, title, state, priority, assignee
536
+ "count": 20, # Items in this response
537
+ "total": 150, # Total tickets available
538
+ "has_more": True, # More pages exist
539
+ "estimated_tokens": 300 # Approximate token usage
540
+ }
541
+ ```
542
+
543
+ #### Example 2: Fetching More Data (Continuation)
544
+
545
+ ```python
546
+ # Get first page
547
+ page1 = await ticket_list(limit=50, offset=0, compact=True)
548
+ print(f"Showing {page1['count']} of {page1['total']} tickets")
549
+ # ~750 tokens (safe)
550
+
551
+ # Check if more pages exist
552
+ if page1['has_more']:
553
+ # Get next page
554
+ page2 = await ticket_list(limit=50, offset=50, compact=True)
555
+ # Continue paginating as needed...
556
+ ```
557
+
558
+ #### Example 3: Handling Large Projects (500+ Tickets)
559
+
560
+ ```python
561
+ # Progressive disclosure pattern for large projects
562
+ # 1. Start with summary (minimal tokens)
563
+ summary = await ticket_cleanup_report(summary_only=True) # ~1k tokens
564
+ print(f"Project has {summary['total_issues']} potential issues")
565
+
566
+ # 2. Get compact list to filter
567
+ tickets = await ticket_list(
568
+ state="in_progress",
569
+ priority="high",
570
+ limit=20,
571
+ compact=True # Only 300 tokens
572
+ )
573
+
574
+ # 3. Fetch full details only for selected tickets
575
+ for ticket_summary in tickets['items'][:5]: # Top 5 only
576
+ full_ticket = await ticket_read(ticket_summary['id']) # ~200 tokens each
577
+ # Process full ticket details...
578
+ ```
579
+
580
+ #### Example 4: Search with Pagination
581
+
582
+ ```python
583
+ # Search returns paginated results automatically
584
+ results = await ticket_search(
585
+ query="authentication bug",
586
+ state="open",
587
+ limit=10 # Safe limit for search results
588
+ )
589
+ # ~3k-5k tokens (includes relevance scoring)
590
+
591
+ # Access results
592
+ for ticket in results['items']:
593
+ print(f"{ticket['id']}: {ticket['title']} (score: {ticket['relevance_score']})")
594
+ ```
595
+
596
+ ### Token Optimization Tips
597
+
598
+ **Use compact mode by default** (70% token reduction):
599
+ ```python
600
+ # ✅ Good: Compact mode for browsing
601
+ tickets = await ticket_list(limit=50, compact=True) # ~750 tokens
602
+
603
+ # ❌ Avoid: Full mode with large limits
604
+ tickets = await ticket_list(limit=100, compact=False) # ~18,500 tokens (too close to limit!)
605
+ ```
606
+
607
+ **Progressive disclosure** (fetch details on demand):
608
+ ```python
609
+ # ✅ Good: Summary first, details on demand
610
+ summary = await ticket_list(limit=50, compact=True)
611
+ # Then fetch full details only for tickets you need
612
+ for ticket in important_tickets:
613
+ details = await ticket_read(ticket['id'])
614
+ ```
615
+
616
+ **Paginate large datasets**:
617
+ ```python
618
+ # ✅ Good: Process in batches
619
+ all_labels = []
620
+ offset = 0
621
+ while True:
622
+ batch = await label_list(limit=100, offset=offset)
623
+ all_labels.extend(batch['labels'])
624
+ if not batch['has_more']:
625
+ break
626
+ offset += 100
627
+ ```
628
+
629
+ ### Configuration
630
+
631
+ Pagination is automatic and requires no configuration. However, you can control response size through parameters:
632
+
633
+ ```python
634
+ # Adjust limit per tool (within safe maximums)
635
+ tickets = await ticket_list(limit=50) # Increase from default 20
636
+
637
+ # Use compact mode to maximize items per response
638
+ tickets = await ticket_list(limit=100, compact=True) # Safe with compact mode
639
+
640
+ # Use summary_only for analysis tools
641
+ report = await ticket_cleanup_report(summary_only=True) # Minimal tokens
642
+ ```
643
+
644
+ ### Response Fields
645
+
646
+ All paginated tools return these metadata fields:
647
+
648
+ ```python
649
+ {
650
+ "status": "completed",
651
+ "items": [...], # Results (tickets, labels, etc.)
652
+ "count": 20, # Items in this response
653
+ "total": 150, # Total items available (if known)
654
+ "offset": 0, # Offset used for this page
655
+ "limit": 20, # Limit used for this page
656
+ "has_more": true, # Whether more pages exist
657
+ "truncated_by_tokens": false, # Whether token limit was hit before item limit
658
+ "estimated_tokens": 2500 # Approximate tokens in response
659
+ }
660
+ ```
661
+
662
+ ### Learn More
663
+
664
+ - **Comprehensive Guide**: [docs/user-docs/features/TOKEN_PAGINATION.md](docs/user-docs/features/TOKEN_PAGINATION.md) - Detailed technical documentation
665
+ - Token estimation algorithms
666
+ - Per-tool optimization strategies
667
+ - Advanced pagination patterns
668
+ - Troubleshooting guide
669
+ - **Code Examples**: [examples/token_pagination_examples.py](examples/token_pagination_examples.py) - Runnable examples
670
+ - **Migration from v1.2.x**: No breaking changes - existing code works with automatic pagination
671
+
672
+ ---
673
+
674
+ ## 🎯 Project Status Analysis (NEW in v1.3.0)
675
+
676
+ Get intelligent project health assessments and actionable work plans with automated dependency analysis, blocker detection, and smart recommendations.
677
+
678
+ ### Overview
679
+
680
+ The Project Status Analysis feature provides PM agents with comprehensive project insights:
681
+
682
+ - **Health Assessment**: Automated scoring (on_track, at_risk, off_track)
683
+ - **Dependency Analysis**: Critical path detection and blocker identification
684
+ - **Smart Recommendations**: Top 3 tickets to start next with reasoning
685
+ - **Work Distribution**: Team workload analysis and balance checking
686
+ - **Progress Tracking**: Completion rates and timeline risk assessment
687
+
688
+ ### Quick Start
689
+
690
+ ```python
691
+ # Get project status analysis (uses default_project from config)
692
+ result = await project_status()
693
+
694
+ # Analyze specific project
695
+ result = await project_status(project_id="eac28953c267")
696
+ ```
697
+
698
+ **Example response:**
699
+ ```json
700
+ {
701
+ "status": "success",
702
+ "project_id": "eac28953c267",
703
+ "project_name": "MCP Ticketer",
704
+ "health": "at_risk",
705
+ "summary": {
706
+ "total": 12,
707
+ "open": 5,
708
+ "in_progress": 4,
709
+ "done": 3
710
+ },
711
+ "recommended_next": [
712
+ {
713
+ "ticket_id": "1M-317",
714
+ "title": "Fix critical bug",
715
+ "priority": "critical",
716
+ "reason": "Critical priority, Unblocks 2 tickets",
717
+ "blocks": ["1M-315", "1M-316"]
718
+ }
719
+ ],
720
+ "recommendations": [
721
+ "🔓 Resolve 1M-317 first (critical) - Unblocks 2 tickets",
722
+ "⚡ Project is AT RISK - Monitor closely"
723
+ ]
724
+ }
725
+ ```
726
+
727
+ ### Features
728
+
729
+ #### 🏥 Health Assessment
730
+ Automated project health scoring based on:
731
+ - **Completion Rate**: % of tickets done
732
+ - **Progress Rate**: % of tickets actively worked
733
+ - **Blocker Rate**: % of tickets blocked (negative factor)
734
+ - **Priority Balance**: Critical/high priority completion
735
+
736
+ **Health Levels:**
737
+ - `on_track`: Project progressing well (health score ≥ 0.7)
738
+ - `at_risk`: Some concerns, needs monitoring (0.4-0.7)
739
+ - `off_track`: Serious issues, intervention needed (< 0.4)
740
+
741
+ #### 🔗 Dependency Analysis
742
+ Automatic dependency graph construction from ticket descriptions:
743
+
744
+ **Supported patterns:**
745
+ - "Depends on TICKET-123"
746
+ - "Blocks #456"
747
+ - "Related to PROJ-789"
748
+ - "1M-316: Feature name" (inline references)
749
+
750
+ **Insights:**
751
+ - **Critical Path**: Longest dependency chain
752
+ - **High-Impact Tickets**: Tickets blocking the most work
753
+ - **Blockers**: Active blockers preventing progress
754
+
755
+ #### 🎯 Smart Recommendations
756
+ Intelligent ticket prioritization based on:
757
+ 1. **Priority** (critical > high > medium > low)
758
+ 2. **Impact** (tickets blocking others score higher)
759
+ 3. **Critical Path** (tickets on longest chain prioritized)
760
+ 4. **Blockers** (unblocked tickets preferred)
761
+ 5. **State** (open/ready tickets ranked higher)
762
+
763
+ Returns top 3 tickets to start next with clear reasoning.
764
+
765
+ #### 👥 Work Distribution Analysis
766
+ Team workload analysis showing:
767
+ - Tickets per assignee
768
+ - State breakdown per assignee
769
+ - Workload imbalance detection
770
+
771
+ ### Usage Examples
772
+
773
+ #### Basic Project Health Check
774
+ ```python
775
+ # Get health of default project
776
+ status = await project_status()
777
+
778
+ print(f"Health: {status['health']}")
779
+ print(f"Total tickets: {status['summary']['total']}")
780
+ print(f"Completion: {status['health_metrics']['completion_rate']:.1%}")
781
+ ```
782
+
783
+ #### Analyze Specific Project
784
+ ```python
785
+ # Analyze by project ID
786
+ status = await project_status(project_id="eac28953c267")
787
+
788
+ # Check for critical issues
789
+ if status['health'] == 'off_track':
790
+ print("⚠️ Project needs immediate attention!")
791
+ for rec in status['recommendations']:
792
+ print(f" • {rec}")
793
+ ```
794
+
795
+ #### Get Next Actions
796
+ ```python
797
+ # Get recommended tickets to work on
798
+ status = await project_status()
799
+
800
+ print("Top priorities:")
801
+ for ticket in status['recommended_next']:
802
+ print(f" {ticket['ticket_id']}: {ticket['title']}")
803
+ print(f" Priority: {ticket['priority']}")
804
+ print(f" Reason: {ticket['reason']}")
805
+ if ticket['blocks']:
806
+ print(f" Unblocks: {', '.join(ticket['blocks'])}")
807
+ ```
808
+
809
+ #### Identify Blockers
810
+ ```python
811
+ # Find what's blocking progress
812
+ status = await project_status()
813
+
814
+ if status['blockers']:
815
+ print("🚧 Active blockers:")
816
+ for blocker in status['blockers']:
817
+ print(f" {blocker['ticket_id']}: {blocker['title']}")
818
+ print(f" Blocking {blocker['blocks_count']} tickets")
819
+ print(f" State: {blocker['state']}, Priority: {blocker['priority']}")
820
+ ```
821
+
822
+ #### PM Daily Standup Workflow
823
+ ```python
824
+ # Complete PM workflow for daily standup
825
+ async def daily_standup():
826
+ status = await project_status()
827
+
828
+ # 1. Overall health
829
+ print(f"📊 Project Health: {status['health'].upper()}")
830
+ print(f" Completion: {status['health_metrics']['completion_rate']:.0%}")
831
+ print(f" In Progress: {status['summary'].get('in_progress', 0)} tickets")
832
+
833
+ # 2. Blockers
834
+ if status['blockers']:
835
+ print(f"\n🚧 {len(status['blockers'])} Active Blockers:")
836
+ for blocker in status['blockers'][:3]:
837
+ print(f" • {blocker['ticket_id']}: {blocker['title']}")
838
+
839
+ # 3. Next actions
840
+ print(f"\n🎯 Top Priorities:")
841
+ for ticket in status['recommended_next']:
842
+ print(f" • {ticket['ticket_id']}: {ticket['reason']}")
843
+
844
+ # 4. Recommendations
845
+ print(f"\n💡 Recommendations:")
846
+ for rec in status['recommendations']:
847
+ print(f" • {rec}")
848
+ ```
849
+
850
+ ### Configuration
851
+
852
+ Set default project for automatic analysis:
853
+
854
+ ```bash
855
+ # Via CLI
856
+ mcp-ticketer config set-project eac28953c267
857
+
858
+ # Via MCP tool
859
+ result = await config_set_default_project(project_id="eac28953c267")
860
+ ```
861
+
862
+ ### Advanced Usage
863
+
864
+ #### Health Metrics Deep Dive
865
+ ```python
866
+ status = await project_status()
867
+ metrics = status['health_metrics']
868
+
869
+ print(f"Health Score: {metrics['health_score']:.2f}/1.00")
870
+ print(f"Completion Rate: {metrics['completion_rate']:.1%}")
871
+ print(f"Progress Rate: {metrics['progress_rate']:.1%}")
872
+ print(f"Blocked Rate: {metrics['blocked_rate']:.1%}")
873
+ print(f"Critical Tickets: {metrics['critical_count']}")
874
+ print(f"High Priority: {metrics['high_count']}")
875
+ ```
876
+
877
+ #### Critical Path Analysis
878
+ ```python
879
+ status = await project_status()
880
+
881
+ if status['critical_path']:
882
+ print("🛣️ Critical Path (longest dependency chain):")
883
+ for ticket_id in status['critical_path']:
884
+ print(f" → {ticket_id}")
885
+ print(f"\nLength: {len(status['critical_path'])} tickets")
886
+ ```
887
+
888
+ #### Work Distribution
889
+ ```python
890
+ status = await project_status()
891
+
892
+ print("👥 Work Distribution:")
893
+ for assignee, workload in status['work_distribution'].items():
894
+ print(f"\n{assignee}:")
895
+ print(f" Total: {workload['total']}")
896
+ for state, count in workload.items():
897
+ if state != 'total':
898
+ print(f" {state}: {count}")
899
+ ```
900
+
901
+ ### Integration with Other Features
902
+
903
+ #### Combine with Project Updates
904
+ ```python
905
+ # 1. Analyze project status
906
+ status = await project_status(project_id="proj-123")
907
+
908
+ # 2. Create status update with health indicator
909
+ update = await project_update_create(
910
+ project_id="proj-123",
911
+ body=f"Sprint review: {status['summary']['done']} tickets completed",
912
+ health=status['health'] # Use analyzed health
913
+ )
914
+ ```
915
+
916
+ #### Combine with Ticket Management
917
+ ```python
918
+ # 1. Get recommendations
919
+ status = await project_status()
920
+
921
+ # 2. Auto-assign top priority ticket
922
+ if status['recommended_next']:
923
+ top_ticket = status['recommended_next'][0]
924
+ await ticket_assign(
925
+ ticket_id=top_ticket['ticket_id'],
926
+ assignee="john.doe@example.com",
927
+ comment=f"Priority: {top_ticket['reason']}"
928
+ )
929
+ ```
930
+
931
+ ### Learn More
932
+
933
+ - **Comprehensive Guide**: [docs/meta/PROJECT_STATUS.md](docs/meta/PROJECT_STATUS.md) - Full documentation
934
+ - **Runnable Examples**: [examples/project_status_examples.py](examples/project_status_examples.py) - Copy-paste code
935
+ - **PM Monitoring Tools**: [docs/PM_MONITORING_TOOLS.md](docs/PM_MONITORING_TOOLS.md) - Ticket cleanup features
936
+ - **Linear Setup**: [docs/integrations/setup/LINEAR_SETUP.md](docs/integrations/setup/LINEAR_SETUP.md) - Platform-specific guides
937
+
938
+ ## 🤖 MCP Server Integration
939
+
940
+ MCP Ticketer provides seamless integration with AI clients through automatic configuration and platform detection:
941
+
942
+ ```bash
943
+ # Auto-detection (Recommended)
944
+ mcp-ticketer install # Interactive: detect and prompt for platform
945
+ mcp-ticketer install --auto-detect # Show all detected AI platforms
946
+ mcp-ticketer install --all # Install for all detected platforms
947
+ mcp-ticketer install --all --dry-run # Preview what would be installed
948
+
949
+ # Platform-specific installation
950
+ mcp-ticketer install claude-code # For Claude Code (project-level)
951
+ mcp-ticketer install claude-desktop # For Claude Desktop (global)
952
+ mcp-ticketer install gemini # For Gemini CLI
953
+ mcp-ticketer install codex # For Codex CLI
954
+ mcp-ticketer install auggie # For Auggie
955
+
956
+ # Manual MCP server control (advanced)
957
+ mcp-ticketer mcp # Start MCP server in current directory
958
+ mcp-ticketer mcp --path /path/to/project # Start in specific directory
959
+
960
+ # Remove MCP configuration when needed
961
+ mcp-ticketer remove claude-code # Remove from Claude Code
962
+ mcp-ticketer uninstall auggie # Alias for remove
963
+ ```
964
+
965
+ **Configuration is automatic** - the commands above will:
966
+ 1. Detect your mcp-ticketer installation
967
+ 2. Read your adapter configuration
968
+ 3. Generate the appropriate MCP server config
969
+ 4. Save it to the correct location for your AI client
970
+
971
+ #### Claude Code Installation
972
+
973
+ **Automatic (Recommended)**:
974
+ ```bash
975
+ mcp-ticketer install --platform claude-code
976
+ ```
977
+
978
+ The installer automatically detects if you have Claude CLI installed:
979
+ - **With Claude CLI**: Uses native `claude mcp add` command (recommended)
980
+ - **Without Claude CLI**: Falls back to JSON configuration
981
+
982
+ **Manual Installation** (if needed):
983
+ ```bash
984
+ # If you have Claude CLI installed
985
+ claude mcp add --scope local --transport stdio mcp-ticketer \
986
+ -- mcp-ticketer mcp --path $(pwd)
987
+
988
+ # Or configure manually via JSON (legacy method)
989
+ # See manual configuration example below for details
990
+ ```
991
+
992
+ **Note**: Claude CLI provides better validation and error handling.
993
+ Install it from: https://docs.claude.ai/cli
994
+
995
+ For comprehensive details on native CLI support, see [Claude Code Native CLI Feature Documentation](docs/features/claude-code-native-cli.md).
996
+
997
+ **Manual Configuration Example** (Claude Code):
998
+
999
+ Claude Code supports two configuration file locations with automatic detection:
1000
+
1001
+ **Option 1: Global Configuration** (`~/.config/claude/mcp.json`) - **Recommended**
1002
+
1003
+ ```json
1004
+ {
1005
+ "mcpServers": {
1006
+ "mcp-ticketer": {
1007
+ "command": "/path/to/venv/bin/python",
1008
+ "args": ["-m", "mcp_ticketer.mcp.server"],
1009
+ "env": {
1010
+ "MCP_TICKETER_ADAPTER": "linear",
1011
+ "LINEAR_API_KEY": "your_key_here"
1012
+ }
1013
+ }
1014
+ }
1015
+ }
1016
+ ```
1017
+
1018
+ **Option 2: Project-Specific Configuration** (`~/.claude.json`)
1019
+
1020
+ ```json
1021
+ {
1022
+ "projects": {
1023
+ "/absolute/path/to/project": {
1024
+ "mcpServers": {
1025
+ "mcp-ticketer": {
1026
+ "command": "/path/to/venv/bin/python",
1027
+ "args": ["-m", "mcp_ticketer.mcp.server", "/absolute/path/to/project"],
1028
+ "env": {
1029
+ "PYTHONPATH": "/absolute/path/to/project",
1030
+ "MCP_TICKETER_ADAPTER": "aitrackdown"
1031
+ }
1032
+ }
1033
+ }
1034
+ }
1035
+ }
1036
+ }
1037
+ ```
1038
+
1039
+ **Configuration Priority:**
1040
+ - New location (`~/.config/claude/mcp.json`) checked first
1041
+ - Falls back to old location (`~/.claude.json`) if new location not found
1042
+ - Maintains full backward compatibility with existing configurations
1043
+ - Both locations fully supported
1044
+
1045
+ **Why this pattern?**
1046
+ - **More Reliable**: Uses venv Python directly instead of binary wrapper
1047
+ - **Consistent**: Matches proven mcp-vector-search pattern
1048
+ - **Universal**: Works across pipx, pip, and uv installations
1049
+ - **Better Errors**: Python module invocation provides clearer error messages
1050
+
1051
+ **Automatic Detection**: The `mcp-ticketer install` commands automatically detect your venv Python, configuration location, and generate the correct configuration format.
1052
+
1053
+ **See [AI Client Integration Guide](docs/integrations/AI_CLIENT_INTEGRATION.md) for client-specific details.**
1054
+
1055
+ ## 💾 Compact Mode for AI Agents (v0.15.0+)
1056
+
1057
+ The `ticket_list` MCP tool supports compact mode, reducing token usage by **70%** when listing tickets - perfect for AI agents working with large ticket sets. Compact mode is part of the broader [Token Pagination](#-token-pagination-v131) system introduced in v1.3.1.
1058
+
1059
+ ### Quick Reference
1060
+
1061
+ | Mode | Tokens (100 tickets) | Use Case |
1062
+ |------|---------------------|----------|
1063
+ | **Standard** | ~18,500 tokens | Detailed ticket views, individual ticket processing |
1064
+ | **Compact** | ~5,500 tokens | Dashboards, bulk operations, filtering |
1065
+ | **Savings** | **70% reduction** | Query 3x more tickets in same context window |
1066
+
1067
+ ### Basic Usage
1068
+
1069
+ ```python
1070
+ # Compact mode (recommended default)
1071
+ result = await ticket_list(limit=100, compact=True) # ~5,500 tokens
1072
+
1073
+ # Full mode (when you need all details)
1074
+ result = await ticket_list(limit=20, compact=False) # ~3,700 tokens
1075
+ ```
1076
+
1077
+ ### Fields Returned
1078
+
1079
+ **Compact Mode (7 fields):**
1080
+ - `id`, `title`, `state`, `priority`, `assignee`, `tags`, `parent_epic`
1081
+
1082
+ **Standard Mode (16 fields):**
1083
+ - All compact fields plus: `description`, `created_at`, `updated_at`, `metadata`, `ticket_type`, `estimated_hours`, `actual_hours`, `children`, `parent_issue`
1084
+
1085
+ ### Learn More
1086
+
1087
+ - **Token Pagination**: See [📄 Token Pagination](#-token-pagination-v131) section for comprehensive guide on pagination, token optimization, and best practices
1088
+ - **Technical Details**: [docs/user-docs/features/TOKEN_PAGINATION.md](docs/user-docs/features/TOKEN_PAGINATION.md) - Per-tool token estimates and optimization strategies
1089
+ - **Quick Summary**: [COMPACT_MODE_SUMMARY.md](COMPACT_MODE_SUMMARY.md) - Compact mode reference
1090
+
1091
+ ## ⚙️ Configuration
1092
+
1093
+ ### Quick Setup with MCP Tools (New in v1.x)
1094
+
1095
+ **Simplified Configuration**: New MCP tools reduce adapter setup time from 15-30 minutes to < 3 minutes.
1096
+
1097
+ ```python
1098
+ # 1. List available adapters with configuration status
1099
+ result = await config_list_adapters()
1100
+ # Shows: linear, github, jira, aitrackdown - which are configured
1101
+
1102
+ # 2. Get requirements for your adapter
1103
+ requirements = await config_get_adapter_requirements("linear")
1104
+ # Shows: api_key (required), team_id (optional)
1105
+
1106
+ # 3. Configure adapter with one-call setup wizard
1107
+ result = await config_setup_wizard(
1108
+ adapter_type="linear",
1109
+ credentials={
1110
+ "api_key": "lin_api_...",
1111
+ "team_id": "ENG" # or team UUID
1112
+ }
1113
+ )
1114
+ # Validates, tests connection, and saves configuration
1115
+ ```
1116
+
1117
+ **Benefits:**
1118
+ - ✅ Automatic validation and connection testing
1119
+ - ✅ Clear error messages with actionable guidance
1120
+ - ✅ One-call setup (no chaining multiple commands)
1121
+ - ✅ < 3 minutes total setup time
1122
+
1123
+ For complete documentation, see [Configuration Guide](docs/user-docs/getting-started/CONFIGURATION.md#quick-setup-with-mcp-tools).
1124
+
1125
+ ### Linear Configuration
1126
+
1127
+ Configure Linear using a team **URL** (easiest), team **key**, or team **ID**:
1128
+
1129
+ **Option 1: Team URL** (Easiest)
1130
+ ```bash
1131
+ # Paste your Linear team issues URL during setup
1132
+ mcp-ticketer init --adapter linear --team-url https://linear.app/your-org/team/ENG/active
1133
+
1134
+ # The system automatically extracts the team key and resolves it to the team ID
1135
+ ```
1136
+
1137
+ **Option 2: Team Key**
1138
+ ```bash
1139
+ # In .env or environment
1140
+ LINEAR_API_KEY=lin_api_...
1141
+ LINEAR_TEAM_KEY=ENG
1142
+ ```
1143
+
1144
+ **Option 3: Team ID**
1145
+ ```bash
1146
+ # In .env or environment
1147
+ LINEAR_API_KEY=lin_api_...
1148
+ LINEAR_TEAM_ID=02d15669-7351-4451-9719-807576c16049
1149
+ ```
1150
+
1151
+ **Supported URL formats:**
1152
+ - `https://linear.app/your-org/team/ABC/active` (full issues page)
1153
+ - `https://linear.app/your-org/team/ABC/` (team page)
1154
+ - `https://linear.app/your-org/team/ABC` (short form)
1155
+
1156
+ **Understanding Linear URLs:**
1157
+ Linear project and issue URLs work with any path suffix (`/issues`, `/overview`, `/updates`). The adapter automatically extracts the identifier and uses Linear's GraphQL API. See [Linear URL Handling Guide](docs/developer-docs/adapters/LINEAR_URL_HANDLING.md) for details.
1158
+
1159
+ **Finding your team information:**
1160
+ 1. **Easiest**: Copy the URL from your Linear team's issues page
1161
+ 2. **Alternative**: Go to Linear Settings → Teams → Your Team → "Key" field (e.g., "ENG", "DESIGN", "PRODUCT")
1162
+
1163
+ ### Environment Variables
1164
+
1165
+ See [.env.example](.env.example) for a complete list of supported environment variables for all adapters.
1166
+
1167
+ ## 📚 Documentation
1168
+
1169
+ Full documentation is available at [https://mcp-ticketer.readthedocs.io](https://mcp-ticketer.readthedocs.io)
1170
+
1171
+ - [Getting Started Guide](https://mcp-ticketer.readthedocs.io/en/latest/getting-started/)
1172
+ - [API Reference](https://mcp-ticketer.readthedocs.io/en/latest/api/)
1173
+ - [Adapter Development](https://mcp-ticketer.readthedocs.io/en/latest/adapters/)
1174
+ - [MCP Integration](https://mcp-ticketer.readthedocs.io/en/latest/mcp/)
1175
+
1176
+ ## 🏗️ Architecture
1177
+
1178
+ ```
1179
+ mcp-ticketer/
1180
+ ├── adapters/ # Ticket system adapters
1181
+ │ ├── jira/ # JIRA integration
1182
+ │ ├── linear/ # Linear integration
1183
+ │ ├── github/ # GitHub Issues
1184
+ │ └── aitrackdown/ # Local file storage
1185
+ ├── core/ # Core models and interfaces
1186
+ ├── cli/ # Command-line interface
1187
+ ├── mcp/ # MCP server implementation
1188
+ ├── cache/ # Caching layer
1189
+ └── queue/ # Queue system for async operations
1190
+ ```
1191
+
1192
+ ### State Machine
1193
+
1194
+ ```mermaid
1195
+ graph LR
1196
+ OPEN --> IN_PROGRESS
1197
+ IN_PROGRESS --> READY
1198
+ IN_PROGRESS --> WAITING
1199
+ IN_PROGRESS --> BLOCKED
1200
+ WAITING --> IN_PROGRESS
1201
+ BLOCKED --> IN_PROGRESS
1202
+ READY --> TESTED
1203
+ TESTED --> DONE
1204
+ DONE --> CLOSED
1205
+ ```
1206
+
1207
+ ## 🧪 Development
1208
+
1209
+ ### Setup Development Environment
1210
+
1211
+ ```bash
1212
+ # Clone repository
1213
+ git clone https://github.com/mcp-ticketer/mcp-ticketer.git
1214
+ cd mcp-ticketer
1215
+
1216
+ # Activate existing virtual environment
1217
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
1218
+
1219
+ # Install in development mode with all dependencies
1220
+ pip install -e ".[dev,test,docs]"
1221
+
1222
+ # Install pre-commit hooks
1223
+ pre-commit install
1224
+ ```
1225
+
1226
+ **Note**: The project includes a pre-configured `.venv` with all dependencies. Just activate it to get started.
1227
+
1228
+ **Troubleshooting pytest issues?** See [Development Environment Guide](docs/DEVELOPMENT_ENVIRONMENT.md) for detailed setup instructions and common issue resolution.
1229
+
1230
+ ### Modular Build System
1231
+
1232
+ mcp-ticketer uses a **modular Makefile architecture** for streamlined development workflows. The build system is organized into specialized modules for quality, testing, releases, documentation, and MCP-specific operations.
1233
+
1234
+ **Quick Start**:
1235
+ ```bash
1236
+ # Show all available commands
1237
+ make help
1238
+
1239
+ # Complete development setup
1240
+ make setup
1241
+
1242
+ # Run tests in parallel (3-4x faster)
1243
+ make test-parallel
1244
+
1245
+ # Run all quality checks
1246
+ make quality
1247
+
1248
+ # View project information
1249
+ make info
1250
+ ```
1251
+
1252
+ **Key Features**:
1253
+ - ⚡ **Parallel Testing**: 3-4x faster with `make test-parallel`
1254
+ - 📊 **Enhanced Help**: Categorized targets with descriptions
1255
+ - 🎯 **70+ Targets**: Organized by module (testing, quality, release, docs, MCP)
1256
+ - 🔧 **Build Metadata**: Generate build information with `make build-metadata`
1257
+ - 📋 **Module Introspection**: View loaded modules with `make modules`
1258
+
1259
+ **Common Commands**:
1260
+ ```bash
1261
+ # Testing
1262
+ make test # Run all tests (serial)
1263
+ make test-parallel # Run tests in parallel (3-4x faster)
1264
+ make test-fast # Parallel tests with fail-fast
1265
+ make test-coverage # Tests with HTML coverage report
1266
+
1267
+ # Code Quality
1268
+ make lint # Run linters (Ruff + MyPy)
1269
+ make lint-fix # Auto-fix linting issues
1270
+ make format # Format code (Black + isort)
1271
+ make typecheck # Run MyPy type checking
1272
+ make quality # Run all quality checks
1273
+
1274
+ # Release
1275
+ make check-release # Validate release readiness
1276
+ make release-patch # Bump patch version and publish
1277
+ make release-minor # Bump minor version and publish
1278
+
1279
+ # Documentation
1280
+ make docs # Build documentation
1281
+ make docs-serve # Serve docs at localhost:8000
1282
+ make docs-open # Build and open in browser
1283
+ ```
1284
+
1285
+ **Build System Details**:
1286
+ - See [.makefiles/README.md](.makefiles/README.md) for complete module documentation
1287
+ - See [.makefiles/QUICK_REFERENCE.md](.makefiles/QUICK_REFERENCE.md) for quick command reference
1288
+ - See [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for comprehensive development guide
1289
+
1290
+ ### Running Tests
1291
+
1292
+ ```bash
1293
+ # Quick testing (recommended for development)
1294
+ make test-parallel # Parallel execution (3-4x faster)
1295
+ make test-fast # Parallel with fail-fast
1296
+
1297
+ # Standard pytest commands (still supported)
1298
+ pytest # Run all tests
1299
+ pytest --cov=mcp_ticketer --cov-report=html # With coverage
1300
+ pytest tests/test_adapters.py # Specific test file
1301
+ pytest -n auto # Manual parallel execution
1302
+ ```
1303
+
1304
+ **Performance Comparison**:
1305
+ - Serial execution: ~30-60 seconds
1306
+ - Parallel (4 cores): ~8-15 seconds (**3-4x faster**)
1307
+
1308
+ ### Code Quality
1309
+
1310
+ ```bash
1311
+ # Using Makefile (recommended)
1312
+ make lint # Run Ruff and MyPy
1313
+ make lint-fix # Auto-fix issues
1314
+ make format # Format with Black and isort
1315
+ make typecheck # Type checking with MyPy
1316
+ make quality # All quality checks
1317
+
1318
+ # Direct commands (still supported)
1319
+ black src tests # Format code
1320
+ ruff check src tests # Lint code
1321
+ mypy src # Type checking
1322
+ tox # Run all checks
1323
+ ```
1324
+
1325
+ ### Building Documentation
1326
+
1327
+ ```bash
1328
+ # Using Makefile (recommended)
1329
+ make docs # Build documentation
1330
+ make docs-serve # Serve at localhost:8000
1331
+ make docs-open # Build and open in browser
1332
+
1333
+ # Direct command (still supported)
1334
+ cd docs && make html # View at docs/_build/html/index.html
1335
+ ```
1336
+
1337
+ ## 📋 Roadmap
1338
+
1339
+ ### ✅ v0.1.0 (Current)
1340
+ - Core ticket model and state machine
1341
+ - JIRA, Linear, GitHub, AITrackdown adapters
1342
+ - Rich CLI interface
1343
+ - MCP server for AI integration
1344
+ - Smart caching system
1345
+ - Comprehensive test suite
1346
+
1347
+ ### 🚧 v0.2.0 (In Development)
1348
+ - [ ] Web UI Dashboard
1349
+ - [ ] Webhook Support
1350
+ - [ ] Advanced Search
1351
+ - [ ] Team Collaboration
1352
+ - [ ] Bulk Operations
1353
+ - [ ] API Rate Limiting
1354
+
1355
+ ### 🔮 v0.3.0+ (Future)
1356
+ - [ ] GitLab Issues Adapter
1357
+ - [ ] Slack/Teams Integration
1358
+ - [ ] Custom Adapters SDK
1359
+ - [ ] Analytics Dashboard
1360
+ - [ ] Mobile Applications
1361
+ - [ ] Enterprise SSO
1362
+
1363
+ ## 🤝 Contributing
1364
+
1365
+ We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
1366
+
1367
+ 1. Fork the repository
1368
+ 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
1369
+ 3. Commit your changes (`git commit -m 'Add amazing feature'`)
1370
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
1371
+ 5. Open a Pull Request
1372
+
1373
+ ## 📄 License
1374
+
1375
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
1376
+
1377
+ ## 🙏 Acknowledgments
1378
+
1379
+ - Built with [Pydantic](https://pydantic-docs.helpmanual.io/) for data validation
1380
+ - CLI powered by [Typer](https://typer.tiangolo.com/) and [Rich](https://rich.readthedocs.io/)
1381
+ - MCP integration using the [Model Context Protocol](https://github.com/anthropics/model-context-protocol)
1382
+
1383
+ ## 📞 Support
1384
+
1385
+ - 📧 Email: support@mcp-ticketer.io
1386
+ - 💬 Discord: [Join our community](https://discord.gg/mcp-ticketer)
1387
+ - 🐛 Issues: [GitHub Issues](https://github.com/mcp-ticketer/mcp-ticketer/issues)
1388
+ - 📖 Docs: [Read the Docs](https://mcp-ticketer.readthedocs.io)
1389
+
1390
+ ## ⭐ Star History
1391
+
1392
+ [![Star History Chart](https://api.star-history.com/svg?repos=mcp-ticketer/mcp-ticketer&type=Date)](https://star-history.com/#mcp-ticketer/mcp-ticketer&Date)
1393
+
1394
+ ---
1395
+
1396
+ Made with ❤️ by the MCP Ticketer Team