mcp-ticketer 0.4.9__py3-none-any.whl → 0.4.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.

@@ -1,6 +1,6 @@
1
1
  """Version information for mcp-ticketer package."""
2
2
 
3
- __version__ = "0.4.9"
3
+ __version__ = "0.4.11"
4
4
  __version_info__ = tuple(int(part) for part in __version__.split("."))
5
5
 
6
6
  # Package metadata
@@ -85,11 +85,9 @@ def create_auggie_server_config(
85
85
  Auggie MCP server configuration dict
86
86
 
87
87
  """
88
- # Get mcp-ticketer CLI command from same directory as Python
88
+ # Use Python module invocation pattern (works regardless of where package is installed)
89
89
  from pathlib import Path
90
90
 
91
- python_dir = Path(python_path).parent
92
- mcp_ticketer_cmd = str(python_dir / "mcp-ticketer")
93
91
  # Get adapter configuration
94
92
  adapter = project_config.get("default_adapter", "aitrackdown")
95
93
  adapters_config = project_config.get("adapters", {})
@@ -139,14 +137,14 @@ def create_auggie_server_config(
139
137
  if "project_key" in adapter_config:
140
138
  env_vars["JIRA_PROJECT_KEY"] = adapter_config["project_key"]
141
139
 
142
- # Use CLI command: mcp-ticketer mcp
143
- args = ["mcp"]
140
+ # Use Python module invocation pattern
141
+ args = ["-m", "mcp_ticketer.mcp.server"]
144
142
  if project_path:
145
143
  args.append(project_path)
146
144
 
147
145
  # Create server configuration (simpler than Gemini - no timeout/trust)
148
146
  config = {
149
- "command": mcp_ticketer_cmd,
147
+ "command": python_path,
150
148
  "args": args,
151
149
  "env": env_vars,
152
150
  }
@@ -303,7 +301,7 @@ def configure_auggie_mcp(force: bool = False) -> None:
303
301
  console.print(" Server name: mcp-ticketer")
304
302
  console.print(f" Adapter: {adapter}")
305
303
  console.print(f" Python: {python_path}")
306
- console.print(" Command: mcp-ticketer mcp")
304
+ console.print(" Command: python -m mcp_ticketer.mcp.server")
307
305
  console.print(" Scope: Global (affects all projects)")
308
306
  console.print(f" Project path: {project_path}")
309
307
  if "env" in server_config:
@@ -87,9 +87,7 @@ def create_codex_server_config(
87
87
  Codex MCP server configuration dict
88
88
 
89
89
  """
90
- # Get mcp-ticketer CLI command from same directory as Python
91
- python_dir = Path(python_path).parent
92
- mcp_ticketer_cmd = str(python_dir / "mcp-ticketer")
90
+ # Use Python module invocation pattern (works regardless of where package is installed)
93
91
 
94
92
  # Get adapter configuration
95
93
  adapter = project_config.get("default_adapter", "aitrackdown")
@@ -140,14 +138,14 @@ def create_codex_server_config(
140
138
  if "project_key" in adapter_config:
141
139
  env_vars["JIRA_PROJECT_KEY"] = adapter_config["project_key"]
142
140
 
143
- # Use CLI command: mcp-ticketer mcp
144
- args = ["mcp"]
141
+ # Use Python module invocation pattern
142
+ args = ["-m", "mcp_ticketer.mcp.server"]
145
143
  if project_path:
146
144
  args.append(project_path)
147
145
 
148
146
  # Create server configuration with Codex-specific structure
149
147
  config: dict[str, Any] = {
150
- "command": mcp_ticketer_cmd,
148
+ "command": python_path,
151
149
  "args": args,
152
150
  "env": env_vars,
153
151
  }
@@ -311,7 +309,7 @@ def configure_codex_mcp(force: bool = False) -> None:
311
309
  console.print(" Server name: mcp-ticketer")
312
310
  console.print(f" Adapter: {adapter}")
313
311
  console.print(f" Python: {python_path}")
314
- console.print(" Command: mcp-ticketer mcp")
312
+ console.print(" Command: python -m mcp_ticketer.mcp.server")
315
313
  console.print(" Scope: global (Codex only supports global config)")
316
314
  console.print(f" Project path: {project_path}")
317
315
  if "env" in server_config:
@@ -87,9 +87,7 @@ def create_gemini_server_config(
87
87
  Gemini MCP server configuration dict
88
88
 
89
89
  """
90
- # Get mcp-ticketer CLI command from same directory as Python
91
- python_dir = Path(python_path).parent
92
- mcp_ticketer_cmd = str(python_dir / "mcp-ticketer")
90
+ # Use Python module invocation pattern (works regardless of where package is installed)
93
91
 
94
92
  # Get adapter configuration
95
93
  adapter = project_config.get("default_adapter", "aitrackdown")
@@ -140,14 +138,14 @@ def create_gemini_server_config(
140
138
  if "project_key" in adapter_config:
141
139
  env_vars["JIRA_PROJECT_KEY"] = adapter_config["project_key"]
142
140
 
143
- # Use CLI command: mcp-ticketer mcp
144
- args = ["mcp"]
141
+ # Use Python module invocation pattern
142
+ args = ["-m", "mcp_ticketer.mcp.server"]
145
143
  if project_path:
146
144
  args.append(project_path)
147
145
 
148
146
  # Create server configuration with Gemini-specific options
149
147
  config = {
150
- "command": mcp_ticketer_cmd,
148
+ "command": python_path,
151
149
  "args": args,
152
150
  "env": env_vars,
153
151
  "timeout": 15000, # 15 seconds timeout
@@ -304,7 +302,7 @@ def configure_gemini_mcp(
304
302
  console.print(" Server name: mcp-ticketer")
305
303
  console.print(f" Adapter: {adapter}")
306
304
  console.print(f" Python: {python_path}")
307
- console.print(" Command: mcp-ticketer mcp")
305
+ console.print(" Command: python -m mcp_ticketer.mcp.server")
308
306
  console.print(f" Timeout: {server_config['timeout']}ms")
309
307
  console.print(f" Trust: {server_config['trust']}")
310
308
  if project_path:
@@ -107,28 +107,44 @@ def find_claude_mcp_config(global_config: bool = False) -> Path:
107
107
  Path.home() / ".config" / "Claude" / "claude_desktop_config.json"
108
108
  )
109
109
  else:
110
- # Project-level configuration for Claude Code
111
- config_path = Path.cwd() / ".claude" / "settings.local.json"
110
+ # Claude Code configuration (project-specific)
111
+ config_path = Path.home() / ".claude.json"
112
112
 
113
113
  return config_path
114
114
 
115
115
 
116
- def load_claude_mcp_config(config_path: Path) -> dict:
116
+ def load_claude_mcp_config(config_path: Path, is_claude_code: bool = False) -> dict:
117
117
  """Load existing Claude MCP configuration or return empty structure.
118
118
 
119
119
  Args:
120
120
  config_path: Path to MCP config file
121
+ is_claude_code: If True, return Claude Code structure with projects
121
122
 
122
123
  Returns:
123
124
  MCP configuration dict
124
125
 
125
126
  """
126
127
  if config_path.exists():
127
- with open(config_path) as f:
128
- return json.load(f)
128
+ try:
129
+ with open(config_path) as f:
130
+ content = f.read().strip()
131
+ if not content:
132
+ # Empty file, return default structure
133
+ return {"projects": {}} if is_claude_code else {"mcpServers": {}}
134
+ return json.loads(content)
135
+ except json.JSONDecodeError as e:
136
+ console.print(
137
+ f"[yellow]⚠ Warning: Invalid JSON in {config_path}, creating new config[/yellow]"
138
+ )
139
+ console.print(f"[dim]Error: {e}[/dim]")
140
+ # Return default structure on parse error
141
+ return {"projects": {}} if is_claude_code else {"mcpServers": {}}
129
142
 
130
- # Return empty structure (Claude Code uses mcpServers key)
131
- return {"mcpServers": {}}
143
+ # Return empty structure based on config type
144
+ if is_claude_code:
145
+ return {"projects": {}}
146
+ else:
147
+ return {"mcpServers": {}}
132
148
 
133
149
 
134
150
  def save_claude_mcp_config(config_path: Path, config: dict) -> None:
@@ -161,12 +177,8 @@ def create_mcp_server_config(
161
177
  MCP server configuration dict matching Claude Code stdio pattern
162
178
 
163
179
  """
164
- # Get mcp-ticketer CLI command from same directory as Python
165
- python_dir = Path(python_path).parent
166
- mcp_ticketer_cmd = str(python_dir / "mcp-ticketer")
167
-
168
- # Use CLI command: mcp-ticketer mcp
169
- args = ["mcp"]
180
+ # Use Python module invocation pattern (works regardless of where package is installed)
181
+ args = ["-m", "mcp_ticketer.mcp.server"]
170
182
 
171
183
  # Add project path if provided
172
184
  if project_path:
@@ -175,7 +187,7 @@ def create_mcp_server_config(
175
187
  # REQUIRED: Add "type": "stdio" for Claude Code compatibility
176
188
  config = {
177
189
  "type": "stdio",
178
- "command": mcp_ticketer_cmd,
190
+ "command": python_path,
179
191
  "args": args,
180
192
  }
181
193
 
@@ -246,11 +258,14 @@ def remove_claude_mcp(global_config: bool = False, dry_run: bool = False) -> Non
246
258
 
247
259
  """
248
260
  # Step 1: Find Claude MCP config location
249
- config_type = "Claude Desktop" if global_config else "project-level"
261
+ config_type = "Claude Desktop" if global_config else "Claude Code"
250
262
  console.print(f"[cyan]🔍 Removing {config_type} MCP configuration...[/cyan]")
251
263
 
252
264
  mcp_config_path = find_claude_mcp_config(global_config)
253
- console.print(f"[dim]Config location: {mcp_config_path}[/dim]")
265
+ console.print(f"[dim]Primary config: {mcp_config_path}[/dim]")
266
+
267
+ # Get absolute project path for Claude Code
268
+ absolute_project_path = str(Path.cwd().resolve()) if not global_config else None
254
269
 
255
270
  # Step 2: Check if config file exists
256
271
  if not mcp_config_path.exists():
@@ -259,10 +274,22 @@ def remove_claude_mcp(global_config: bool = False, dry_run: bool = False) -> Non
259
274
  return
260
275
 
261
276
  # Step 3: Load existing MCP configuration
262
- mcp_config = load_claude_mcp_config(mcp_config_path)
277
+ is_claude_code = not global_config
278
+ mcp_config = load_claude_mcp_config(mcp_config_path, is_claude_code=is_claude_code)
263
279
 
264
280
  # Step 4: Check if mcp-ticketer is configured
265
- if "mcp-ticketer" not in mcp_config.get("mcpServers", {}):
281
+ is_configured = False
282
+ if is_claude_code:
283
+ # Check Claude Code structure: .projects[path].mcpServers["mcp-ticketer"]
284
+ if absolute_project_path:
285
+ projects = mcp_config.get("projects", {})
286
+ project_config_entry = projects.get(absolute_project_path, {})
287
+ is_configured = "mcp-ticketer" in project_config_entry.get("mcpServers", {})
288
+ else:
289
+ # Check Claude Desktop structure: .mcpServers["mcp-ticketer"]
290
+ is_configured = "mcp-ticketer" in mcp_config.get("mcpServers", {})
291
+
292
+ if not is_configured:
266
293
  console.print("[yellow]⚠ mcp-ticketer is not configured[/yellow]")
267
294
  console.print(f"[dim]No mcp-ticketer entry found in {mcp_config_path}[/dim]")
268
295
  return
@@ -272,10 +299,37 @@ def remove_claude_mcp(global_config: bool = False, dry_run: bool = False) -> Non
272
299
  console.print("\n[cyan]DRY RUN - Would remove:[/cyan]")
273
300
  console.print(" Server name: mcp-ticketer")
274
301
  console.print(f" From: {mcp_config_path}")
302
+ if absolute_project_path:
303
+ console.print(f" Project: {absolute_project_path}")
275
304
  return
276
305
 
277
306
  # Step 6: Remove mcp-ticketer from configuration
278
- del mcp_config["mcpServers"]["mcp-ticketer"]
307
+ if is_claude_code and absolute_project_path:
308
+ # Remove from Claude Code structure
309
+ del mcp_config["projects"][absolute_project_path]["mcpServers"]["mcp-ticketer"]
310
+
311
+ # Clean up empty structures
312
+ if not mcp_config["projects"][absolute_project_path]["mcpServers"]:
313
+ del mcp_config["projects"][absolute_project_path]["mcpServers"]
314
+ if not mcp_config["projects"][absolute_project_path]:
315
+ del mcp_config["projects"][absolute_project_path]
316
+
317
+ # Also remove from legacy location if it exists
318
+ legacy_config_path = Path.cwd() / ".claude" / "mcp.local.json"
319
+ if legacy_config_path.exists():
320
+ try:
321
+ legacy_config = load_claude_mcp_config(
322
+ legacy_config_path, is_claude_code=False
323
+ )
324
+ if "mcp-ticketer" in legacy_config.get("mcpServers", {}):
325
+ del legacy_config["mcpServers"]["mcp-ticketer"]
326
+ save_claude_mcp_config(legacy_config_path, legacy_config)
327
+ console.print("[dim]✓ Removed from legacy config as well[/dim]")
328
+ except Exception as e:
329
+ console.print(f"[dim]⚠ Could not remove from legacy config: {e}[/dim]")
330
+ else:
331
+ # Remove from Claude Desktop structure
332
+ del mcp_config["mcpServers"]["mcp-ticketer"]
279
333
 
280
334
  # Step 7: Save updated configuration
281
335
  try:
@@ -342,17 +396,34 @@ def configure_claude_mcp(global_config: bool = False, force: bool = False) -> No
342
396
  raise
343
397
 
344
398
  # Step 3: Find Claude MCP config location
345
- config_type = "Claude Desktop" if global_config else "project-level"
399
+ config_type = "Claude Desktop" if global_config else "Claude Code"
346
400
  console.print(f"\n[cyan]🔧 Configuring {config_type} MCP...[/cyan]")
347
401
 
348
402
  mcp_config_path = find_claude_mcp_config(global_config)
349
- console.print(f"[dim]Config location: {mcp_config_path}[/dim]")
403
+ console.print(f"[dim]Primary config: {mcp_config_path}[/dim]")
404
+
405
+ # Get absolute project path for Claude Code
406
+ absolute_project_path = str(Path.cwd().resolve()) if not global_config else None
350
407
 
351
408
  # Step 4: Load existing MCP configuration
352
- mcp_config = load_claude_mcp_config(mcp_config_path)
409
+ is_claude_code = not global_config
410
+ mcp_config = load_claude_mcp_config(mcp_config_path, is_claude_code=is_claude_code)
353
411
 
354
412
  # Step 5: Check if mcp-ticketer already configured
355
- if "mcp-ticketer" in mcp_config.get("mcpServers", {}):
413
+ already_configured = False
414
+ if is_claude_code:
415
+ # Check Claude Code structure: .projects[path].mcpServers["mcp-ticketer"]
416
+ if absolute_project_path:
417
+ projects = mcp_config.get("projects", {})
418
+ project_config_entry = projects.get(absolute_project_path, {})
419
+ already_configured = "mcp-ticketer" in project_config_entry.get(
420
+ "mcpServers", {}
421
+ )
422
+ else:
423
+ # Check Claude Desktop structure: .mcpServers["mcp-ticketer"]
424
+ already_configured = "mcp-ticketer" in mcp_config.get("mcpServers", {})
425
+
426
+ if already_configured:
356
427
  if not force:
357
428
  console.print("[yellow]⚠ mcp-ticketer is already configured[/yellow]")
358
429
  console.print("[dim]Use --force to overwrite existing configuration[/dim]")
@@ -361,18 +432,55 @@ def configure_claude_mcp(global_config: bool = False, force: bool = False) -> No
361
432
  console.print("[yellow]⚠ Overwriting existing configuration[/yellow]")
362
433
 
363
434
  # Step 6: Create mcp-ticketer server config
364
- project_path = str(Path.cwd()) if not global_config else None
365
435
  server_config = create_mcp_server_config(
366
436
  python_path=python_path,
367
437
  project_config=project_config,
368
- project_path=project_path,
438
+ project_path=absolute_project_path,
369
439
  )
370
440
 
371
- # Step 7: Update MCP configuration
372
- if "mcpServers" not in mcp_config:
373
- mcp_config["mcpServers"] = {}
374
-
375
- mcp_config["mcpServers"]["mcp-ticketer"] = server_config
441
+ # Step 7: Update MCP configuration based on platform
442
+ if is_claude_code:
443
+ # Claude Code: Write to ~/.claude.json with project-specific path
444
+ if absolute_project_path:
445
+ # Ensure projects structure exists
446
+ if "projects" not in mcp_config:
447
+ mcp_config["projects"] = {}
448
+
449
+ # Ensure project entry exists
450
+ if absolute_project_path not in mcp_config["projects"]:
451
+ mcp_config["projects"][absolute_project_path] = {}
452
+
453
+ # Ensure mcpServers for this project exists
454
+ if "mcpServers" not in mcp_config["projects"][absolute_project_path]:
455
+ mcp_config["projects"][absolute_project_path]["mcpServers"] = {}
456
+
457
+ # Add mcp-ticketer configuration
458
+ mcp_config["projects"][absolute_project_path]["mcpServers"][
459
+ "mcp-ticketer"
460
+ ] = server_config
461
+
462
+ # Also write to backward-compatible location for older Claude Code versions
463
+ legacy_config_path = Path.cwd() / ".claude" / "mcp.local.json"
464
+ console.print(f"[dim]Legacy config: {legacy_config_path}[/dim]")
465
+
466
+ try:
467
+ legacy_config = load_claude_mcp_config(
468
+ legacy_config_path, is_claude_code=False
469
+ )
470
+ if "mcpServers" not in legacy_config:
471
+ legacy_config["mcpServers"] = {}
472
+ legacy_config["mcpServers"]["mcp-ticketer"] = server_config
473
+ save_claude_mcp_config(legacy_config_path, legacy_config)
474
+ console.print("[dim]✓ Backward-compatible config also written[/dim]")
475
+ except Exception as e:
476
+ console.print(
477
+ f"[dim]⚠ Could not write legacy config (non-fatal): {e}[/dim]"
478
+ )
479
+ else:
480
+ # Claude Desktop: Write to platform-specific config
481
+ if "mcpServers" not in mcp_config:
482
+ mcp_config["mcpServers"] = {}
483
+ mcp_config["mcpServers"]["mcp-ticketer"] = server_config
376
484
 
377
485
  # Step 8: Save configuration
378
486
  try:
@@ -385,9 +493,9 @@ def configure_claude_mcp(global_config: bool = False, force: bool = False) -> No
385
493
  console.print(" Server name: mcp-ticketer")
386
494
  console.print(f" Adapter: {adapter}")
387
495
  console.print(f" Python: {python_path}")
388
- console.print(" Command: mcp-ticketer mcp")
389
- if project_path:
390
- console.print(f" Project path: {project_path}")
496
+ console.print(" Command: python -m mcp_ticketer.mcp.server")
497
+ if absolute_project_path:
498
+ console.print(f" Project path: {absolute_project_path}")
391
499
  if "env" in server_config:
392
500
  console.print(
393
501
  f" Environment variables: {list(server_config['env'].keys())}"
@@ -7,9 +7,9 @@ operations via the Model Context Protocol (MCP).
7
7
  from typing import TYPE_CHECKING
8
8
 
9
9
  if TYPE_CHECKING:
10
- from .main import main
10
+ from .main import MCPTicketServer, main
11
11
 
12
- __all__ = ["main"]
12
+ __all__ = ["main", "MCPTicketServer"]
13
13
 
14
14
 
15
15
  def __getattr__(name: str):
@@ -18,4 +18,8 @@ def __getattr__(name: str):
18
18
  from .main import main
19
19
 
20
20
  return main
21
+ if name == "MCPTicketServer":
22
+ from .main import MCPTicketServer
23
+
24
+ return MCPTicketServer
21
25
  raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-ticketer
3
- Version: 0.4.9
3
+ Version: 0.4.11
4
4
  Summary: Universal ticket management interface for AI agents with MCP support
5
5
  Author-email: MCP Ticketer Team <support@mcp-ticketer.io>
6
6
  Maintainer-email: MCP Ticketer Team <support@mcp-ticketer.io>
@@ -1,5 +1,5 @@
1
1
  mcp_ticketer/__init__.py,sha256=Xx4WaprO5PXhVPbYi1L6tBmwmJMkYS-lMyG4ieN6QP0,717
2
- mcp_ticketer/__version__.py,sha256=TgErXAgObQmg6Q5ACy63d_W9qLAaFynoPaauS16SAi0,1117
2
+ mcp_ticketer/__version__.py,sha256=KA-4Y9WJae6VcyqiBHDWD4r6E0fsu6bMZii1en3rPLc,1118
3
3
  mcp_ticketer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  mcp_ticketer/adapters/__init__.py,sha256=B5DFllWn23hkhmrLykNO5uMMSdcFuuPHXyLw_jyFzuE,358
5
5
  mcp_ticketer/adapters/aitrackdown.py,sha256=cm8L7amB64ZCoGvWbnpH9zxZlXu6t-l8TWiYVSwDhlg,30320
@@ -17,15 +17,15 @@ mcp_ticketer/cache/__init__.py,sha256=Xcd-cKnt-Cx7jBzvfzUUUPaGkmyXFi5XUFWw3Z4b7d
17
17
  mcp_ticketer/cache/memory.py,sha256=rWphWZy7XTbHezC7HMRQN9ISUhYo0Pc2OTgLG30vHnI,5047
18
18
  mcp_ticketer/cli/__init__.py,sha256=l9Q8iKmfGkTu0cssHBVqNZTsL4eAtFzOB25AED_0G6g,89
19
19
  mcp_ticketer/cli/adapter_diagnostics.py,sha256=pQDdtDgBwSW04wdFEPVzwbul3KgfB9g6ZMS85qpYulY,14988
20
- mcp_ticketer/cli/auggie_configure.py,sha256=47Xay__bMDGmNPWR6u9zxk4IVsSlEB02xVI40v8dhkQ,11825
21
- mcp_ticketer/cli/codex_configure.py,sha256=EYgyEPoAWoc0-vLLiUSEEFkDMl0K-eOQx6p_R_iqhWI,12344
20
+ mcp_ticketer/cli/auggie_configure.py,sha256=B3tQc0RaVx3hZbMNuYhUELO6npnrFLTqfcVNhXDfgY4,11795
21
+ mcp_ticketer/cli/codex_configure.py,sha256=tP4YcOJ6kKSSV6LbLRnVJh3CObqCUjoAOb5YoOW7510,12314
22
22
  mcp_ticketer/cli/configure.py,sha256=T4LczvZIc2FZM-joqICL8NpjCeThAUknEhJkHsmpdc8,16158
23
23
  mcp_ticketer/cli/diagnostics.py,sha256=s7P4vDzPpthgiBJfAOXpunlhZ62buHg_BA5W7ghQBqg,29952
24
24
  mcp_ticketer/cli/discover.py,sha256=paG8zElIFEK6lgVD-tHWoFDTuWQ185LirFp0fVlYgB0,13148
25
- mcp_ticketer/cli/gemini_configure.py,sha256=6Czg-gJA_HrzMopKCvCLfRZeqkdR77OLV5W7W4ZG9hw,12739
25
+ mcp_ticketer/cli/gemini_configure.py,sha256=8Cz0qONLjd9oLZNhycgHz9zsdjA3B6PdQ1mlEK8z61M,12709
26
26
  mcp_ticketer/cli/linear_commands.py,sha256=YnmqRacAfTdF0CLr4BXOxFs3uwm_hVifbGdTe6t2CfA,17273
27
27
  mcp_ticketer/cli/main.py,sha256=W36hKxZZKoojjBUYl5U5MlXLaw-qX9i0nPrmvtsndtI,89926
28
- mcp_ticketer/cli/mcp_configure.py,sha256=SfjA97OJAkYUfi9Mn-wqEt6p0xsgz_QZlATwxM_vjTo,14089
28
+ mcp_ticketer/cli/mcp_configure.py,sha256=IcjU7ckP3qO5OJYtYCYTI4S2iNqJ0Khin4L-5DUG-GQ,19450
29
29
  mcp_ticketer/cli/migrate_config.py,sha256=MYsr_C5ZxsGg0P13etWTWNrJ_lc6ElRCkzfQADYr3DM,5956
30
30
  mcp_ticketer/cli/platform_commands.py,sha256=pTLRT2wot8dAmy1-roJWWOT0Cxu7j-06BlWDnZ9a4jY,3624
31
31
  mcp_ticketer/cli/python_detection.py,sha256=qmhi0CIDKH_AUVGkJ9jyY1zBpx1cwiQNv0vnEvMYDFQ,4272
@@ -46,7 +46,7 @@ mcp_ticketer/core/project_config.py,sha256=DmLekuMuOgNtzg-olOU4Utv00DdCH1-CXuooo
46
46
  mcp_ticketer/core/registry.py,sha256=gBeXcZ3grHl9gYFbyRp-C4IM7SD_KGTeXT_1jG8XrCc,3470
47
47
  mcp_ticketer/mcp/__init__.py,sha256=XscFBOFeIxBNgA_8yPLl6c75-YJCcIN2I9eoLEGsBdM,864
48
48
  mcp_ticketer/mcp/__main__.py,sha256=Fo_5KJOFako2gi1Z1kk5zEt2sGJW6BX6oXlYp7twYTs,1713
49
- mcp_ticketer/mcp/server/__init__.py,sha256=2ll9kLEEiKP_NtvJghHVz6TG2p7xwIUBRqlxZKWRCvU,509
49
+ mcp_ticketer/mcp/server/__init__.py,sha256=-mBqZiNloAlle9ds7jZXG2wJIRnEV0ALSQfdrMK-lVo,653
50
50
  mcp_ticketer/mcp/server/__main__.py,sha256=xE1n94M5n2tKyT6qFIOXaqRXX7L--SxmCglKUPcljG0,1711
51
51
  mcp_ticketer/mcp/server/constants.py,sha256=EBGsJtBPaTCvAm5rOMknckrXActrNIls7lRklnh1L4s,2072
52
52
  mcp_ticketer/mcp/server/dto.py,sha256=FR_OBtaxrno8AsHynPwUUW715iAoaBkrr7Ud8HZTQW8,7233
@@ -69,9 +69,9 @@ mcp_ticketer/queue/queue.py,sha256=q9HDXgnlwspamMJIeu9og7qONttXHmFZHPSaMtJDPlw,1
69
69
  mcp_ticketer/queue/run_worker.py,sha256=WhoeamL8LKZ66TM8W1PkMPwjF2w_EDFMP-mevs6C1TM,1019
70
70
  mcp_ticketer/queue/ticket_registry.py,sha256=xVg3i7Eb5rtQY-4bbw3zYY1h-C6jF1t1NZEGhObzD8g,15491
71
71
  mcp_ticketer/queue/worker.py,sha256=AJHtpJZEhGoPuCDPXSMsn9DeODelo5f__0C__3zoN08,20970
72
- mcp_ticketer-0.4.9.dist-info/licenses/LICENSE,sha256=KOVrunjtILSzY-2N8Lqa3-Q8dMaZIG4LrlLTr9UqL08,1073
73
- mcp_ticketer-0.4.9.dist-info/METADATA,sha256=_nIoXUxM3iodpZW31n9HYkeS_LTOd0GNKwZ36k88h3w,16020
74
- mcp_ticketer-0.4.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
75
- mcp_ticketer-0.4.9.dist-info/entry_points.txt,sha256=o1IxVhnHnBNG7FZzbFq-Whcs1Djbofs0qMjiUYBLx2s,60
76
- mcp_ticketer-0.4.9.dist-info/top_level.txt,sha256=WnAG4SOT1Vm9tIwl70AbGG_nA217YyV3aWFhxLH2rxw,13
77
- mcp_ticketer-0.4.9.dist-info/RECORD,,
72
+ mcp_ticketer-0.4.11.dist-info/licenses/LICENSE,sha256=KOVrunjtILSzY-2N8Lqa3-Q8dMaZIG4LrlLTr9UqL08,1073
73
+ mcp_ticketer-0.4.11.dist-info/METADATA,sha256=A6l9hu8WGCO-mItNuoc2Ql8Fq76X9p6Ln0hx5xZ7ABg,16021
74
+ mcp_ticketer-0.4.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
75
+ mcp_ticketer-0.4.11.dist-info/entry_points.txt,sha256=o1IxVhnHnBNG7FZzbFq-Whcs1Djbofs0qMjiUYBLx2s,60
76
+ mcp_ticketer-0.4.11.dist-info/top_level.txt,sha256=WnAG4SOT1Vm9tIwl70AbGG_nA217YyV3aWFhxLH2rxw,13
77
+ mcp_ticketer-0.4.11.dist-info/RECORD,,