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.
- mcp_ticketer/__version__.py +1 -1
- mcp_ticketer/cli/auggie_configure.py +5 -7
- mcp_ticketer/cli/codex_configure.py +5 -7
- mcp_ticketer/cli/gemini_configure.py +5 -7
- mcp_ticketer/cli/mcp_configure.py +141 -33
- mcp_ticketer/mcp/server/__init__.py +6 -2
- {mcp_ticketer-0.4.9.dist-info → mcp_ticketer-0.4.11.dist-info}/METADATA +1 -1
- {mcp_ticketer-0.4.9.dist-info → mcp_ticketer-0.4.11.dist-info}/RECORD +12 -12
- {mcp_ticketer-0.4.9.dist-info → mcp_ticketer-0.4.11.dist-info}/WHEEL +0 -0
- {mcp_ticketer-0.4.9.dist-info → mcp_ticketer-0.4.11.dist-info}/entry_points.txt +0 -0
- {mcp_ticketer-0.4.9.dist-info → mcp_ticketer-0.4.11.dist-info}/licenses/LICENSE +0 -0
- {mcp_ticketer-0.4.9.dist-info → mcp_ticketer-0.4.11.dist-info}/top_level.txt +0 -0
mcp_ticketer/__version__.py
CHANGED
|
@@ -85,11 +85,9 @@ def create_auggie_server_config(
|
|
|
85
85
|
Auggie MCP server configuration dict
|
|
86
86
|
|
|
87
87
|
"""
|
|
88
|
-
#
|
|
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
|
|
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":
|
|
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:
|
|
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
|
-
#
|
|
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
|
|
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":
|
|
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:
|
|
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
|
-
#
|
|
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
|
|
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":
|
|
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:
|
|
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
|
-
#
|
|
111
|
-
config_path = Path.
|
|
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
|
-
|
|
128
|
-
|
|
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
|
|
131
|
-
|
|
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
|
-
#
|
|
165
|
-
|
|
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":
|
|
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 "
|
|
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]
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 "
|
|
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]
|
|
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
|
-
|
|
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
|
-
|
|
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=
|
|
438
|
+
project_path=absolute_project_path,
|
|
369
439
|
)
|
|
370
440
|
|
|
371
|
-
# Step 7: Update MCP configuration
|
|
372
|
-
if
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
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:
|
|
389
|
-
if
|
|
390
|
-
console.print(f" 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.
|
|
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=
|
|
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=
|
|
21
|
-
mcp_ticketer/cli/codex_configure.py,sha256=
|
|
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=
|
|
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=
|
|
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
|
|
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.
|
|
73
|
-
mcp_ticketer-0.4.
|
|
74
|
-
mcp_ticketer-0.4.
|
|
75
|
-
mcp_ticketer-0.4.
|
|
76
|
-
mcp_ticketer-0.4.
|
|
77
|
-
mcp_ticketer-0.4.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|