mcp-ticketer 0.1.30__py3-none-any.whl → 1.2.11__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mcp-ticketer might be problematic. Click here for more details.

Files changed (109) hide show
  1. mcp_ticketer/__init__.py +10 -10
  2. mcp_ticketer/__version__.py +3 -3
  3. mcp_ticketer/adapters/__init__.py +2 -0
  4. mcp_ticketer/adapters/aitrackdown.py +796 -46
  5. mcp_ticketer/adapters/asana/__init__.py +15 -0
  6. mcp_ticketer/adapters/asana/adapter.py +1416 -0
  7. mcp_ticketer/adapters/asana/client.py +292 -0
  8. mcp_ticketer/adapters/asana/mappers.py +348 -0
  9. mcp_ticketer/adapters/asana/types.py +146 -0
  10. mcp_ticketer/adapters/github.py +879 -129
  11. mcp_ticketer/adapters/hybrid.py +11 -11
  12. mcp_ticketer/adapters/jira.py +973 -73
  13. mcp_ticketer/adapters/linear/__init__.py +24 -0
  14. mcp_ticketer/adapters/linear/adapter.py +2732 -0
  15. mcp_ticketer/adapters/linear/client.py +344 -0
  16. mcp_ticketer/adapters/linear/mappers.py +420 -0
  17. mcp_ticketer/adapters/linear/queries.py +479 -0
  18. mcp_ticketer/adapters/linear/types.py +360 -0
  19. mcp_ticketer/adapters/linear.py +10 -2315
  20. mcp_ticketer/analysis/__init__.py +23 -0
  21. mcp_ticketer/analysis/orphaned.py +218 -0
  22. mcp_ticketer/analysis/similarity.py +224 -0
  23. mcp_ticketer/analysis/staleness.py +266 -0
  24. mcp_ticketer/cache/memory.py +9 -8
  25. mcp_ticketer/cli/adapter_diagnostics.py +421 -0
  26. mcp_ticketer/cli/auggie_configure.py +116 -15
  27. mcp_ticketer/cli/codex_configure.py +274 -82
  28. mcp_ticketer/cli/configure.py +888 -151
  29. mcp_ticketer/cli/diagnostics.py +400 -157
  30. mcp_ticketer/cli/discover.py +297 -26
  31. mcp_ticketer/cli/gemini_configure.py +119 -26
  32. mcp_ticketer/cli/init_command.py +880 -0
  33. mcp_ticketer/cli/instruction_commands.py +435 -0
  34. mcp_ticketer/cli/linear_commands.py +616 -0
  35. mcp_ticketer/cli/main.py +203 -1165
  36. mcp_ticketer/cli/mcp_configure.py +474 -90
  37. mcp_ticketer/cli/mcp_server_commands.py +415 -0
  38. mcp_ticketer/cli/migrate_config.py +12 -8
  39. mcp_ticketer/cli/platform_commands.py +123 -0
  40. mcp_ticketer/cli/platform_detection.py +418 -0
  41. mcp_ticketer/cli/platform_installer.py +513 -0
  42. mcp_ticketer/cli/python_detection.py +126 -0
  43. mcp_ticketer/cli/queue_commands.py +15 -15
  44. mcp_ticketer/cli/setup_command.py +639 -0
  45. mcp_ticketer/cli/simple_health.py +90 -65
  46. mcp_ticketer/cli/ticket_commands.py +1013 -0
  47. mcp_ticketer/cli/update_checker.py +313 -0
  48. mcp_ticketer/cli/utils.py +114 -66
  49. mcp_ticketer/core/__init__.py +24 -1
  50. mcp_ticketer/core/adapter.py +250 -16
  51. mcp_ticketer/core/config.py +145 -37
  52. mcp_ticketer/core/env_discovery.py +101 -22
  53. mcp_ticketer/core/env_loader.py +349 -0
  54. mcp_ticketer/core/exceptions.py +160 -0
  55. mcp_ticketer/core/http_client.py +26 -26
  56. mcp_ticketer/core/instructions.py +405 -0
  57. mcp_ticketer/core/label_manager.py +732 -0
  58. mcp_ticketer/core/mappers.py +42 -30
  59. mcp_ticketer/core/models.py +280 -28
  60. mcp_ticketer/core/onepassword_secrets.py +379 -0
  61. mcp_ticketer/core/project_config.py +183 -49
  62. mcp_ticketer/core/registry.py +3 -3
  63. mcp_ticketer/core/session_state.py +171 -0
  64. mcp_ticketer/core/state_matcher.py +592 -0
  65. mcp_ticketer/core/url_parser.py +425 -0
  66. mcp_ticketer/core/validators.py +69 -0
  67. mcp_ticketer/defaults/ticket_instructions.md +644 -0
  68. mcp_ticketer/mcp/__init__.py +29 -1
  69. mcp_ticketer/mcp/__main__.py +60 -0
  70. mcp_ticketer/mcp/server/__init__.py +25 -0
  71. mcp_ticketer/mcp/server/__main__.py +60 -0
  72. mcp_ticketer/mcp/server/constants.py +58 -0
  73. mcp_ticketer/mcp/server/diagnostic_helper.py +175 -0
  74. mcp_ticketer/mcp/server/dto.py +195 -0
  75. mcp_ticketer/mcp/server/main.py +1343 -0
  76. mcp_ticketer/mcp/server/response_builder.py +206 -0
  77. mcp_ticketer/mcp/server/routing.py +655 -0
  78. mcp_ticketer/mcp/server/server_sdk.py +151 -0
  79. mcp_ticketer/mcp/server/tools/__init__.py +56 -0
  80. mcp_ticketer/mcp/server/tools/analysis_tools.py +495 -0
  81. mcp_ticketer/mcp/server/tools/attachment_tools.py +226 -0
  82. mcp_ticketer/mcp/server/tools/bulk_tools.py +273 -0
  83. mcp_ticketer/mcp/server/tools/comment_tools.py +152 -0
  84. mcp_ticketer/mcp/server/tools/config_tools.py +1439 -0
  85. mcp_ticketer/mcp/server/tools/diagnostic_tools.py +211 -0
  86. mcp_ticketer/mcp/server/tools/hierarchy_tools.py +921 -0
  87. mcp_ticketer/mcp/server/tools/instruction_tools.py +300 -0
  88. mcp_ticketer/mcp/server/tools/label_tools.py +948 -0
  89. mcp_ticketer/mcp/server/tools/pr_tools.py +152 -0
  90. mcp_ticketer/mcp/server/tools/search_tools.py +215 -0
  91. mcp_ticketer/mcp/server/tools/session_tools.py +170 -0
  92. mcp_ticketer/mcp/server/tools/ticket_tools.py +1268 -0
  93. mcp_ticketer/mcp/server/tools/user_ticket_tools.py +547 -0
  94. mcp_ticketer/queue/__init__.py +1 -0
  95. mcp_ticketer/queue/health_monitor.py +168 -136
  96. mcp_ticketer/queue/manager.py +95 -25
  97. mcp_ticketer/queue/queue.py +40 -21
  98. mcp_ticketer/queue/run_worker.py +6 -1
  99. mcp_ticketer/queue/ticket_registry.py +213 -155
  100. mcp_ticketer/queue/worker.py +109 -49
  101. mcp_ticketer-1.2.11.dist-info/METADATA +792 -0
  102. mcp_ticketer-1.2.11.dist-info/RECORD +110 -0
  103. mcp_ticketer/mcp/server.py +0 -1895
  104. mcp_ticketer-0.1.30.dist-info/METADATA +0 -413
  105. mcp_ticketer-0.1.30.dist-info/RECORD +0 -49
  106. {mcp_ticketer-0.1.30.dist-info → mcp_ticketer-1.2.11.dist-info}/WHEEL +0 -0
  107. {mcp_ticketer-0.1.30.dist-info → mcp_ticketer-1.2.11.dist-info}/entry_points.txt +0 -0
  108. {mcp_ticketer-0.1.30.dist-info → mcp_ticketer-1.2.11.dist-info}/licenses/LICENSE +0 -0
  109. {mcp_ticketer-0.1.30.dist-info → mcp_ticketer-1.2.11.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,792 @@
1
+ Metadata-Version: 2.4
2
+ Name: mcp-ticketer
3
+ Version: 1.2.11
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: 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: License :: OSI Approved :: MIT License
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: 3.13
25
+ Classifier: Programming Language :: Python :: Implementation :: CPython
26
+ Classifier: Topic :: Software Development :: Libraries
27
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
28
+ Classifier: Topic :: Software Development :: Bug Tracking
29
+ Classifier: Topic :: System :: Monitoring
30
+ Classifier: Topic :: Internet :: WWW/HTTP
31
+ Classifier: Typing :: Typed
32
+ Requires-Python: >=3.10
33
+ Description-Content-Type: text/markdown
34
+ License-File: LICENSE
35
+ Requires-Dist: gql[httpx]>=3.0.0
36
+ Requires-Dist: httpx>=0.25.0
37
+ Requires-Dist: mcp>=1.2.0
38
+ Requires-Dist: psutil>=5.9.0
39
+ Requires-Dist: pydantic>=2.0
40
+ Requires-Dist: python-dotenv>=1.0.0
41
+ Requires-Dist: pyyaml>=6.0.0
42
+ Requires-Dist: rich>=13.0.0
43
+ Requires-Dist: tomli>=2.0.0; python_version < "3.11"
44
+ Requires-Dist: tomli-w>=1.0.0
45
+ Requires-Dist: typer>=0.9.0
46
+ Requires-Dist: typing-extensions>=4.8.0
47
+ Provides-Extra: all
48
+ Requires-Dist: mcp-ticketer[analysis,github,jira,linear,mcp]; extra == "all"
49
+ Provides-Extra: dev
50
+ Requires-Dist: pytest>=7.4.0; extra == "dev"
51
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
52
+ Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
53
+ Requires-Dist: pytest-timeout>=2.2.0; extra == "dev"
54
+ Requires-Dist: pytest-mock>=3.12.0; extra == "dev"
55
+ Requires-Dist: pytest-xdist>=3.0.0; extra == "dev"
56
+ Requires-Dist: black>=23.0.0; extra == "dev"
57
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
58
+ Requires-Dist: mypy>=1.5.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
+ Provides-Extra: docs
63
+ Requires-Dist: sphinx>=7.2.0; extra == "docs"
64
+ Requires-Dist: sphinx-rtd-theme>=2.0.0; extra == "docs"
65
+ Requires-Dist: sphinx-autodoc-typehints>=1.25.0; extra == "docs"
66
+ Requires-Dist: sphinx-click>=5.1.0; extra == "docs"
67
+ Requires-Dist: myst-parser>=2.0.0; extra == "docs"
68
+ Provides-Extra: mcp
69
+ Requires-Dist: mcp>=1.2.0; extra == "mcp"
70
+ Provides-Extra: jira
71
+ Requires-Dist: jira>=3.5.0; extra == "jira"
72
+ Requires-Dist: ai-trackdown-pytools>=1.5.0; extra == "jira"
73
+ Provides-Extra: linear
74
+ Requires-Dist: gql[httpx]>=3.0.0; extra == "linear"
75
+ Provides-Extra: github
76
+ Requires-Dist: PyGithub>=2.1.0; extra == "github"
77
+ Provides-Extra: analysis
78
+ Requires-Dist: scikit-learn>=1.3.0; extra == "analysis"
79
+ Requires-Dist: rapidfuzz>=3.0.0; extra == "analysis"
80
+ Requires-Dist: numpy>=1.24.0; extra == "analysis"
81
+ Provides-Extra: test
82
+ Requires-Dist: pytest>=7.4.0; extra == "test"
83
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
84
+ Requires-Dist: pytest-cov>=4.1.0; extra == "test"
85
+ Requires-Dist: pytest-timeout>=2.2.0; extra == "test"
86
+ Requires-Dist: pytest-mock>=3.12.0; extra == "test"
87
+ Requires-Dist: pytest-xdist>=3.0.0; extra == "test"
88
+ Requires-Dist: responses>=0.24.0; extra == "test"
89
+ Dynamic: license-file
90
+
91
+ # MCP Ticketer
92
+
93
+ [![PyPI - Version](https://img.shields.io/pypi/v/mcp-ticketer.svg)](https://pypi.org/project/mcp-ticketer)
94
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/mcp-ticketer.svg)](https://pypi.org/project/mcp-ticketer)
95
+ [![Documentation Status](https://readthedocs.org/projects/mcp-ticketer/badge/?version=latest)](https://mcp-ticketer.readthedocs.io/en/latest/?badge=latest)
96
+ [![Tests](https://github.com/mcp-ticketer/mcp-ticketer/workflows/Tests/badge.svg)](https://github.com/mcp-ticketer/mcp-ticketer/actions)
97
+ [![Coverage Status](https://codecov.io/gh/mcp-ticketer/mcp-ticketer/branch/main/graph/badge.svg)](https://codecov.io/gh/mcp-ticketer/mcp-ticketer)
98
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
99
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
100
+
101
+ Universal ticket management interface for AI agents with MCP (Model Context Protocol) support.
102
+
103
+ ## 🚀 Features
104
+
105
+ - **🎯 Universal Ticket Model**: Simplified to Epic, Task, and Comment types
106
+ - **🔌 Multiple Adapters**: Support for JIRA, Linear, GitHub Issues, and AI-Trackdown
107
+ - **🤖 MCP Integration**: Native support for AI agent interactions
108
+ - **⚡ High Performance**: Smart caching and async operations
109
+ - **🎨 Rich CLI**: Beautiful terminal interface with colors and tables
110
+ - **📊 State Machine**: Built-in state transitions with validation
111
+ - **🔍 Advanced Search**: Full-text search with multiple filters
112
+ - **🔗 Hierarchy Navigation**: Parent issue lookup and filtered sub-issue retrieval
113
+ - **👤 Smart Assignment**: Dedicated assignment tool with URL support and audit trails
114
+ - **🏷️ Label Management**: Intelligent label organization, deduplication, and cleanup with fuzzy matching
115
+ - **📎 File Attachments**: Upload, list, and manage ticket attachments (AITrackdown adapter)
116
+ - **📝 Custom Instructions**: Customize ticket writing guidelines for your team
117
+ - **🔬 PM Monitoring Tools**: Detect duplicate tickets, identify stale work, and find orphaned tickets
118
+ - **📦 Easy Installation**: Available on PyPI with simple pip install
119
+ - **🚀 Auto-Dependency Install**: Automatic adapter dependency detection and installation
120
+ - **💾 Compact Mode**: 70% token reduction for AI agent ticket list queries (v0.15.0+)
121
+
122
+ ## 📦 Installation
123
+
124
+ ### From PyPI (Recommended)
125
+
126
+ ```bash
127
+ pip install mcp-ticketer
128
+
129
+ # Install with specific adapters
130
+ pip install mcp-ticketer[jira] # JIRA support
131
+ pip install mcp-ticketer[linear] # Linear support
132
+ pip install mcp-ticketer[github] # GitHub Issues support
133
+ pip install mcp-ticketer[analysis] # PM monitoring tools
134
+ pip install mcp-ticketer[all] # All adapters and features
135
+ ```
136
+
137
+ **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.
138
+
139
+ ### From Source
140
+
141
+ ```bash
142
+ git clone https://github.com/mcp-ticketer/mcp-ticketer.git
143
+ cd mcp-ticketer
144
+ pip install -e .
145
+ ```
146
+
147
+ ### Requirements
148
+
149
+ - Python 3.9+
150
+ - Virtual environment (recommended)
151
+
152
+ ## 🤖 Supported AI Clients
153
+
154
+ MCP Ticketer integrates with multiple AI clients via the Model Context Protocol (MCP):
155
+
156
+ | AI Client | Support | Config Type | Project-Level | Setup Command |
157
+ |-----------|---------|-------------|---------------|---------------|
158
+ | **Claude Code** | ✅ Native | JSON | ✅ Yes | `mcp-ticketer install claude-code` |
159
+ | **Claude Desktop** | ✅ Full | JSON | ❌ Global only | `mcp-ticketer install claude-desktop` |
160
+ | **Gemini CLI** | ✅ Full | JSON | ✅ Yes | `mcp-ticketer install gemini` |
161
+ | **Codex CLI** | ✅ Full | TOML | ❌ Global only | `mcp-ticketer install codex` |
162
+ | **Auggie** | ✅ Full | JSON | ❌ Global only | `mcp-ticketer install auggie` |
163
+
164
+ ### Quick MCP Setup
165
+
166
+ ```bash
167
+ # Initialize adapter first (required)
168
+ mcp-ticketer init --adapter aitrackdown
169
+
170
+ # Auto-detection (Recommended) - Interactive platform selection
171
+ mcp-ticketer install # Auto-detect and prompt for platform
172
+
173
+ # See all detected platforms
174
+ mcp-ticketer install --auto-detect # Show what's installed on your system
175
+
176
+ # Install for all detected platforms at once
177
+ mcp-ticketer install --all # Configure all detected AI clients
178
+
179
+ # Or install for specific platform
180
+ mcp-ticketer install claude-code # Claude Code (project-level)
181
+ mcp-ticketer install claude-desktop # Claude Desktop (global)
182
+ mcp-ticketer install gemini # Gemini CLI
183
+ mcp-ticketer install codex # Codex CLI
184
+ mcp-ticketer install auggie # Auggie
185
+ ```
186
+
187
+ **See [AI Client Integration Guide](docs/integrations/AI_CLIENT_INTEGRATION.md) for detailed setup instructions.**
188
+
189
+ ## 🚀 Quick Start
190
+
191
+ ### 1. Initialize Configuration
192
+
193
+ ```bash
194
+ # For AI-Trackdown (local file-based)
195
+ mcp-ticketer init --adapter aitrackdown
196
+
197
+ # For Linear (requires API key)
198
+ # Option 1: Using team URL (easiest - paste your Linear team issues URL)
199
+ mcp-ticketer init --adapter linear --team-url https://linear.app/your-org/team/ENG/active
200
+
201
+ # Option 2: Using team key
202
+ mcp-ticketer init --adapter linear --team-key ENG
203
+
204
+ # Option 3: Using team ID
205
+ mcp-ticketer init --adapter linear --team-id YOUR_TEAM_ID
206
+
207
+ # For JIRA (requires server and credentials)
208
+ mcp-ticketer init --adapter jira \
209
+ --jira-server https://company.atlassian.net \
210
+ --jira-email your.email@company.com
211
+
212
+ # For GitHub Issues
213
+ mcp-ticketer init --adapter github --repo owner/repo
214
+ ```
215
+
216
+ **Note:** The following commands are synonymous and can be used interchangeably:
217
+ - `mcp-ticketer init` - Initialize configuration
218
+ - `mcp-ticketer install` - Install and configure (same as init)
219
+ - `mcp-ticketer setup` - Setup (same as init)
220
+
221
+ #### Automatic Validation
222
+
223
+ The init command now automatically validates your configuration after setup:
224
+ - Valid credentials → Setup completes immediately
225
+ - Invalid credentials → You'll be prompted to:
226
+ 1. Re-enter configuration (up to 3 retries)
227
+ 2. Continue anyway (skip validation)
228
+ 3. Exit and fix manually
229
+
230
+ You can always re-validate later with: `mcp-ticketer doctor`
231
+
232
+ ### 2. Create Your First Ticket
233
+
234
+ ```bash
235
+ mcp-ticketer create "Fix login bug" \
236
+ --description "Users cannot login with OAuth" \
237
+ --priority high \
238
+ --assignee "john.doe"
239
+ ```
240
+
241
+ ### 3. Manage Tickets
242
+
243
+ ```bash
244
+ # List open tickets
245
+ mcp-ticketer list --state open
246
+
247
+ # Show ticket details
248
+ mcp-ticketer show TICKET-123 --comments
249
+
250
+ # Update ticket
251
+ mcp-ticketer update TICKET-123 --priority critical
252
+
253
+ # Transition state
254
+ mcp-ticketer transition TICKET-123 in_progress
255
+
256
+ # Search tickets
257
+ mcp-ticketer search "login bug" --state open
258
+ ```
259
+
260
+ ### 4. Working with Attachments (AITrackdown)
261
+
262
+ ```bash
263
+ # Working with attachments through MCP
264
+ # (Requires MCP server running - see MCP Server Integration section)
265
+
266
+ # Attachments are managed through your AI client when using MCP
267
+ # Ask your AI assistant: "Add the document.pdf as an attachment to task-123"
268
+ ```
269
+
270
+ For programmatic access, see the [Attachments Guide](docs/integrations/ATTACHMENTS.md).
271
+
272
+ ### 5. Customize Ticket Writing Instructions
273
+
274
+ Customize ticket guidelines to match your team's conventions:
275
+
276
+ ```bash
277
+ # View current instructions
278
+ mcp-ticketer instructions show
279
+
280
+ # Add custom instructions from file
281
+ mcp-ticketer instructions add team_guidelines.md
282
+
283
+ # Edit instructions interactively
284
+ mcp-ticketer instructions edit
285
+
286
+ # Reset to defaults
287
+ mcp-ticketer instructions delete --yes
288
+ ```
289
+
290
+ **Example custom instructions:**
291
+ ```markdown
292
+ # Our Team's Ticket Guidelines
293
+
294
+ ## Title Format
295
+ [TEAM-ID] [Type] Brief description
296
+
297
+ ## Required Sections
298
+ 1. Problem Statement
299
+ 2. Acceptance Criteria (minimum 3)
300
+ 3. Testing Notes
301
+ ```
302
+
303
+ For details, see the [Ticket Instructions Guide](docs/user-docs/features/ticket_instructions.md).
304
+
305
+ ### 6. PM Monitoring Tools
306
+
307
+ Maintain ticket health with automated analysis and cleanup tools:
308
+
309
+ ```bash
310
+ # Install analysis dependencies first
311
+ pip install "mcp-ticketer[analysis]"
312
+
313
+ # Find duplicate or similar tickets
314
+ mcp-ticketer analyze similar --threshold 0.8
315
+
316
+ # Identify stale tickets that may need closing
317
+ mcp-ticketer analyze stale --age-days 90 --inactive-days 30
318
+
319
+ # Find orphaned tickets without parent epic/project
320
+ mcp-ticketer analyze orphaned
321
+
322
+ # Generate comprehensive cleanup report
323
+ mcp-ticketer analyze cleanup --format markdown
324
+ ```
325
+
326
+ **Available MCP tools:**
327
+ - `ticket_find_similar` - Detect duplicate tickets using TF-IDF and cosine similarity
328
+ - `ticket_find_stale` - Identify inactive tickets that may need closing
329
+ - `ticket_find_orphaned` - Find tickets without proper hierarchy
330
+ - `ticket_cleanup_report` - Generate comprehensive analysis report
331
+
332
+ **Key features:**
333
+ - **Similarity Detection**: TF-IDF vectorization with fuzzy matching and tag overlap
334
+ - **Staleness Scoring**: Multi-factor analysis (age, inactivity, priority, state)
335
+ - **Orphan Detection**: Identify tickets missing parent epics or projects
336
+ - **Actionable Insights**: Automated suggestions for merge, link, close, or assign actions
337
+
338
+ For complete documentation, see the [PM Monitoring Tools Guide](docs/PM_MONITORING_TOOLS.md).
339
+
340
+ ## 🤖 MCP Server Integration
341
+
342
+ MCP Ticketer provides seamless integration with AI clients through automatic configuration and platform detection:
343
+
344
+ ```bash
345
+ # Auto-detection (Recommended)
346
+ mcp-ticketer install # Interactive: detect and prompt for platform
347
+ mcp-ticketer install --auto-detect # Show all detected AI platforms
348
+ mcp-ticketer install --all # Install for all detected platforms
349
+ mcp-ticketer install --all --dry-run # Preview what would be installed
350
+
351
+ # Platform-specific installation
352
+ mcp-ticketer install claude-code # For Claude Code (project-level)
353
+ mcp-ticketer install claude-desktop # For Claude Desktop (global)
354
+ mcp-ticketer install gemini # For Gemini CLI
355
+ mcp-ticketer install codex # For Codex CLI
356
+ mcp-ticketer install auggie # For Auggie
357
+
358
+ # Manual MCP server control (advanced)
359
+ mcp-ticketer mcp # Start MCP server in current directory
360
+ mcp-ticketer mcp --path /path/to/project # Start in specific directory
361
+
362
+ # Remove MCP configuration when needed
363
+ mcp-ticketer remove claude-code # Remove from Claude Code
364
+ mcp-ticketer uninstall auggie # Alias for remove
365
+ ```
366
+
367
+ **Configuration is automatic** - the commands above will:
368
+ 1. Detect your mcp-ticketer installation
369
+ 2. Read your adapter configuration
370
+ 3. Generate the appropriate MCP server config
371
+ 4. Save it to the correct location for your AI client
372
+
373
+ **Manual Configuration Example** (Claude Code):
374
+
375
+ Claude Code supports two configuration file locations with automatic detection:
376
+
377
+ **Option 1: Global Configuration** (`~/.config/claude/mcp.json`) - **Recommended**
378
+
379
+ ```json
380
+ {
381
+ "mcpServers": {
382
+ "mcp-ticketer": {
383
+ "command": "/path/to/venv/bin/python",
384
+ "args": ["-m", "mcp_ticketer.mcp.server"],
385
+ "env": {
386
+ "MCP_TICKETER_ADAPTER": "linear",
387
+ "LINEAR_API_KEY": "your_key_here"
388
+ }
389
+ }
390
+ }
391
+ }
392
+ ```
393
+
394
+ **Option 2: Project-Specific Configuration** (`~/.claude.json`)
395
+
396
+ ```json
397
+ {
398
+ "projects": {
399
+ "/absolute/path/to/project": {
400
+ "mcpServers": {
401
+ "mcp-ticketer": {
402
+ "command": "/path/to/venv/bin/python",
403
+ "args": ["-m", "mcp_ticketer.mcp.server", "/absolute/path/to/project"],
404
+ "env": {
405
+ "PYTHONPATH": "/absolute/path/to/project",
406
+ "MCP_TICKETER_ADAPTER": "aitrackdown"
407
+ }
408
+ }
409
+ }
410
+ }
411
+ }
412
+ }
413
+ ```
414
+
415
+ **Configuration Priority:**
416
+ - New location (`~/.config/claude/mcp.json`) checked first
417
+ - Falls back to old location (`~/.claude.json`) if new location not found
418
+ - Maintains full backward compatibility with existing configurations
419
+ - Both locations fully supported
420
+
421
+ **Why this pattern?**
422
+ - **More Reliable**: Uses venv Python directly instead of binary wrapper
423
+ - **Consistent**: Matches proven mcp-vector-search pattern
424
+ - **Universal**: Works across pipx, pip, and uv installations
425
+ - **Better Errors**: Python module invocation provides clearer error messages
426
+
427
+ **Automatic Detection**: The `mcp-ticketer install` commands automatically detect your venv Python, configuration location, and generate the correct configuration format.
428
+
429
+ **See [AI Client Integration Guide](docs/integrations/AI_CLIENT_INTEGRATION.md) for client-specific details.**
430
+
431
+ ## 💾 Compact Mode for AI Agents (v0.15.0+)
432
+
433
+ The `ticket_list` MCP tool now supports compact mode, reducing token usage by **70%** when listing tickets - perfect for AI agents working with large ticket sets.
434
+
435
+ ### Token Usage Comparison
436
+
437
+ | Mode | Tokens (100 tickets) | Use Case |
438
+ |------|---------------------|----------|
439
+ | **Standard** | ~18,500 tokens | Detailed ticket views, individual ticket processing |
440
+ | **Compact** | ~5,500 tokens | Dashboards, bulk operations, filtering |
441
+ | **Savings** | **70% reduction** | Query 3x more tickets in same context window |
442
+
443
+ ### Usage in AI Clients
444
+
445
+ When using MCP tools through Claude Code, Claude Desktop, or other AI clients:
446
+
447
+ ```python
448
+ # Standard mode (default) - Full ticket details
449
+ result = await ticket_list(limit=100)
450
+ # Returns: ~18,500 tokens
451
+
452
+ # Compact mode - Essential fields only
453
+ result = await ticket_list(limit=100, compact=True)
454
+ # Returns: ~5,500 tokens (70% reduction)
455
+
456
+ # With filters + compact mode
457
+ result = await ticket_list(
458
+ state="in_progress",
459
+ priority="high",
460
+ limit=50,
461
+ compact=True # Saves ~7,500 tokens
462
+ )
463
+ ```
464
+
465
+ ### When to Use Compact Mode
466
+
467
+ **Use `compact=True` when:**
468
+ - ✅ Listing many tickets (>10)
469
+ - ✅ Building ticket dashboards/overviews
470
+ - ✅ Filtering/searching across large ticket sets
471
+ - ✅ Optimizing token usage in AI workflows
472
+ - ✅ Working within token-limited contexts
473
+
474
+ **Use `compact=False` (default) when:**
475
+ - ✅ Need full ticket details (descriptions, metadata, timestamps)
476
+ - ✅ Processing individual tickets
477
+ - ✅ Displaying ticket content to users
478
+ - ✅ Listing < 10 tickets
479
+
480
+ ### Fields Returned
481
+
482
+ **Compact Mode (7 fields):**
483
+ - `id`, `title`, `state`, `priority`, `assignee`, `tags`, `parent_epic`
484
+
485
+ **Standard Mode (16 fields):**
486
+ - All compact fields plus: `description`, `created_at`, `updated_at`, `metadata`, `ticket_type`, `estimated_hours`, `actual_hours`, `children`, `parent_issue`
487
+
488
+ For complete details, see [Compact Mode Summary](COMPACT_MODE_SUMMARY.md).
489
+
490
+ ## ⚙️ Configuration
491
+
492
+ ### Quick Setup with MCP Tools (New in v1.x)
493
+
494
+ **Simplified Configuration**: New MCP tools reduce adapter setup time from 15-30 minutes to < 3 minutes.
495
+
496
+ ```python
497
+ # 1. List available adapters with configuration status
498
+ result = await config_list_adapters()
499
+ # Shows: linear, github, jira, aitrackdown - which are configured
500
+
501
+ # 2. Get requirements for your adapter
502
+ requirements = await config_get_adapter_requirements("linear")
503
+ # Shows: api_key (required), team_id (optional)
504
+
505
+ # 3. Configure adapter with one-call setup wizard
506
+ result = await config_setup_wizard(
507
+ adapter_type="linear",
508
+ credentials={
509
+ "api_key": "lin_api_...",
510
+ "team_id": "ENG" # or team UUID
511
+ }
512
+ )
513
+ # Validates, tests connection, and saves configuration
514
+ ```
515
+
516
+ **Benefits:**
517
+ - ✅ Automatic validation and connection testing
518
+ - ✅ Clear error messages with actionable guidance
519
+ - ✅ One-call setup (no chaining multiple commands)
520
+ - ✅ < 3 minutes total setup time
521
+
522
+ For complete documentation, see [Configuration Guide](docs/user-docs/getting-started/CONFIGURATION.md#quick-setup-with-mcp-tools).
523
+
524
+ ### Linear Configuration
525
+
526
+ Configure Linear using a team **URL** (easiest), team **key**, or team **ID**:
527
+
528
+ **Option 1: Team URL** (Easiest)
529
+ ```bash
530
+ # Paste your Linear team issues URL during setup
531
+ mcp-ticketer init --adapter linear --team-url https://linear.app/your-org/team/ENG/active
532
+
533
+ # The system automatically extracts the team key and resolves it to the team ID
534
+ ```
535
+
536
+ **Option 2: Team Key**
537
+ ```bash
538
+ # In .env or environment
539
+ LINEAR_API_KEY=lin_api_...
540
+ LINEAR_TEAM_KEY=ENG
541
+ ```
542
+
543
+ **Option 3: Team ID**
544
+ ```bash
545
+ # In .env or environment
546
+ LINEAR_API_KEY=lin_api_...
547
+ LINEAR_TEAM_ID=02d15669-7351-4451-9719-807576c16049
548
+ ```
549
+
550
+ **Supported URL formats:**
551
+ - `https://linear.app/your-org/team/ABC/active` (full issues page)
552
+ - `https://linear.app/your-org/team/ABC/` (team page)
553
+ - `https://linear.app/your-org/team/ABC` (short form)
554
+
555
+ **Finding your team information:**
556
+ 1. **Easiest**: Copy the URL from your Linear team's issues page
557
+ 2. **Alternative**: Go to Linear Settings → Teams → Your Team → "Key" field (e.g., "ENG", "DESIGN", "PRODUCT")
558
+
559
+ ### Environment Variables
560
+
561
+ See [.env.example](.env.example) for a complete list of supported environment variables for all adapters.
562
+
563
+ ## 📚 Documentation
564
+
565
+ Full documentation is available at [https://mcp-ticketer.readthedocs.io](https://mcp-ticketer.readthedocs.io)
566
+
567
+ - [Getting Started Guide](https://mcp-ticketer.readthedocs.io/en/latest/getting-started/)
568
+ - [API Reference](https://mcp-ticketer.readthedocs.io/en/latest/api/)
569
+ - [Adapter Development](https://mcp-ticketer.readthedocs.io/en/latest/adapters/)
570
+ - [MCP Integration](https://mcp-ticketer.readthedocs.io/en/latest/mcp/)
571
+
572
+ ## 🏗️ Architecture
573
+
574
+ ```
575
+ mcp-ticketer/
576
+ ├── adapters/ # Ticket system adapters
577
+ │ ├── jira/ # JIRA integration
578
+ │ ├── linear/ # Linear integration
579
+ │ ├── github/ # GitHub Issues
580
+ │ └── aitrackdown/ # Local file storage
581
+ ├── core/ # Core models and interfaces
582
+ ├── cli/ # Command-line interface
583
+ ├── mcp/ # MCP server implementation
584
+ ├── cache/ # Caching layer
585
+ └── queue/ # Queue system for async operations
586
+ ```
587
+
588
+ ### State Machine
589
+
590
+ ```mermaid
591
+ graph LR
592
+ OPEN --> IN_PROGRESS
593
+ IN_PROGRESS --> READY
594
+ IN_PROGRESS --> WAITING
595
+ IN_PROGRESS --> BLOCKED
596
+ WAITING --> IN_PROGRESS
597
+ BLOCKED --> IN_PROGRESS
598
+ READY --> TESTED
599
+ TESTED --> DONE
600
+ DONE --> CLOSED
601
+ ```
602
+
603
+ ## 🧪 Development
604
+
605
+ ### Setup Development Environment
606
+
607
+ ```bash
608
+ # Clone repository
609
+ git clone https://github.com/mcp-ticketer/mcp-ticketer.git
610
+ cd mcp-ticketer
611
+
612
+ # Activate existing virtual environment
613
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
614
+
615
+ # Install in development mode with all dependencies
616
+ pip install -e ".[dev,test,docs]"
617
+
618
+ # Install pre-commit hooks
619
+ pre-commit install
620
+ ```
621
+
622
+ **Note**: The project includes a pre-configured `.venv` with all dependencies. Just activate it to get started.
623
+
624
+ **Troubleshooting pytest issues?** See [Development Environment Guide](docs/DEVELOPMENT_ENVIRONMENT.md) for detailed setup instructions and common issue resolution.
625
+
626
+ ### Modular Build System
627
+
628
+ 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.
629
+
630
+ **Quick Start**:
631
+ ```bash
632
+ # Show all available commands
633
+ make help
634
+
635
+ # Complete development setup
636
+ make setup
637
+
638
+ # Run tests in parallel (3-4x faster)
639
+ make test-parallel
640
+
641
+ # Run all quality checks
642
+ make quality
643
+
644
+ # View project information
645
+ make info
646
+ ```
647
+
648
+ **Key Features**:
649
+ - ⚡ **Parallel Testing**: 3-4x faster with `make test-parallel`
650
+ - 📊 **Enhanced Help**: Categorized targets with descriptions
651
+ - 🎯 **70+ Targets**: Organized by module (testing, quality, release, docs, MCP)
652
+ - 🔧 **Build Metadata**: Generate build information with `make build-metadata`
653
+ - 📋 **Module Introspection**: View loaded modules with `make modules`
654
+
655
+ **Common Commands**:
656
+ ```bash
657
+ # Testing
658
+ make test # Run all tests (serial)
659
+ make test-parallel # Run tests in parallel (3-4x faster)
660
+ make test-fast # Parallel tests with fail-fast
661
+ make test-coverage # Tests with HTML coverage report
662
+
663
+ # Code Quality
664
+ make lint # Run linters (Ruff + MyPy)
665
+ make lint-fix # Auto-fix linting issues
666
+ make format # Format code (Black + isort)
667
+ make typecheck # Run MyPy type checking
668
+ make quality # Run all quality checks
669
+
670
+ # Release
671
+ make check-release # Validate release readiness
672
+ make release-patch # Bump patch version and publish
673
+ make release-minor # Bump minor version and publish
674
+
675
+ # Documentation
676
+ make docs # Build documentation
677
+ make docs-serve # Serve docs at localhost:8000
678
+ make docs-open # Build and open in browser
679
+ ```
680
+
681
+ **Build System Details**:
682
+ - See [.makefiles/README.md](.makefiles/README.md) for complete module documentation
683
+ - See [.makefiles/QUICK_REFERENCE.md](.makefiles/QUICK_REFERENCE.md) for quick command reference
684
+ - See [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for comprehensive development guide
685
+
686
+ ### Running Tests
687
+
688
+ ```bash
689
+ # Quick testing (recommended for development)
690
+ make test-parallel # Parallel execution (3-4x faster)
691
+ make test-fast # Parallel with fail-fast
692
+
693
+ # Standard pytest commands (still supported)
694
+ pytest # Run all tests
695
+ pytest --cov=mcp_ticketer --cov-report=html # With coverage
696
+ pytest tests/test_adapters.py # Specific test file
697
+ pytest -n auto # Manual parallel execution
698
+ ```
699
+
700
+ **Performance Comparison**:
701
+ - Serial execution: ~30-60 seconds
702
+ - Parallel (4 cores): ~8-15 seconds (**3-4x faster**)
703
+
704
+ ### Code Quality
705
+
706
+ ```bash
707
+ # Using Makefile (recommended)
708
+ make lint # Run Ruff and MyPy
709
+ make lint-fix # Auto-fix issues
710
+ make format # Format with Black and isort
711
+ make typecheck # Type checking with MyPy
712
+ make quality # All quality checks
713
+
714
+ # Direct commands (still supported)
715
+ black src tests # Format code
716
+ ruff check src tests # Lint code
717
+ mypy src # Type checking
718
+ tox # Run all checks
719
+ ```
720
+
721
+ ### Building Documentation
722
+
723
+ ```bash
724
+ # Using Makefile (recommended)
725
+ make docs # Build documentation
726
+ make docs-serve # Serve at localhost:8000
727
+ make docs-open # Build and open in browser
728
+
729
+ # Direct command (still supported)
730
+ cd docs && make html # View at docs/_build/html/index.html
731
+ ```
732
+
733
+ ## 📋 Roadmap
734
+
735
+ ### ✅ v0.1.0 (Current)
736
+ - Core ticket model and state machine
737
+ - JIRA, Linear, GitHub, AITrackdown adapters
738
+ - Rich CLI interface
739
+ - MCP server for AI integration
740
+ - Smart caching system
741
+ - Comprehensive test suite
742
+
743
+ ### 🚧 v0.2.0 (In Development)
744
+ - [ ] Web UI Dashboard
745
+ - [ ] Webhook Support
746
+ - [ ] Advanced Search
747
+ - [ ] Team Collaboration
748
+ - [ ] Bulk Operations
749
+ - [ ] API Rate Limiting
750
+
751
+ ### 🔮 v0.3.0+ (Future)
752
+ - [ ] GitLab Issues Adapter
753
+ - [ ] Slack/Teams Integration
754
+ - [ ] Custom Adapters SDK
755
+ - [ ] Analytics Dashboard
756
+ - [ ] Mobile Applications
757
+ - [ ] Enterprise SSO
758
+
759
+ ## 🤝 Contributing
760
+
761
+ We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
762
+
763
+ 1. Fork the repository
764
+ 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
765
+ 3. Commit your changes (`git commit -m 'Add amazing feature'`)
766
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
767
+ 5. Open a Pull Request
768
+
769
+ ## 📄 License
770
+
771
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
772
+
773
+ ## 🙏 Acknowledgments
774
+
775
+ - Built with [Pydantic](https://pydantic-docs.helpmanual.io/) for data validation
776
+ - CLI powered by [Typer](https://typer.tiangolo.com/) and [Rich](https://rich.readthedocs.io/)
777
+ - MCP integration using the [Model Context Protocol](https://github.com/anthropics/model-context-protocol)
778
+
779
+ ## 📞 Support
780
+
781
+ - 📧 Email: support@mcp-ticketer.io
782
+ - 💬 Discord: [Join our community](https://discord.gg/mcp-ticketer)
783
+ - 🐛 Issues: [GitHub Issues](https://github.com/mcp-ticketer/mcp-ticketer/issues)
784
+ - 📖 Docs: [Read the Docs](https://mcp-ticketer.readthedocs.io)
785
+
786
+ ## ⭐ Star History
787
+
788
+ [![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)
789
+
790
+ ---
791
+
792
+ Made with ❤️ by the MCP Ticketer Team