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.
- mcp_ticketer/__init__.py +10 -10
- mcp_ticketer/__version__.py +3 -3
- mcp_ticketer/_version_scm.py +1 -0
- mcp_ticketer/adapters/__init__.py +2 -0
- mcp_ticketer/adapters/aitrackdown.py +930 -52
- mcp_ticketer/adapters/asana/__init__.py +15 -0
- mcp_ticketer/adapters/asana/adapter.py +1537 -0
- mcp_ticketer/adapters/asana/client.py +292 -0
- mcp_ticketer/adapters/asana/mappers.py +348 -0
- mcp_ticketer/adapters/asana/types.py +146 -0
- mcp_ticketer/adapters/github/__init__.py +26 -0
- mcp_ticketer/adapters/github/adapter.py +3229 -0
- mcp_ticketer/adapters/github/client.py +335 -0
- mcp_ticketer/adapters/github/mappers.py +797 -0
- mcp_ticketer/adapters/github/queries.py +692 -0
- mcp_ticketer/adapters/github/types.py +460 -0
- mcp_ticketer/adapters/hybrid.py +58 -16
- mcp_ticketer/adapters/jira/__init__.py +35 -0
- mcp_ticketer/adapters/jira/adapter.py +1351 -0
- mcp_ticketer/adapters/jira/client.py +271 -0
- mcp_ticketer/adapters/jira/mappers.py +246 -0
- mcp_ticketer/adapters/jira/queries.py +216 -0
- mcp_ticketer/adapters/jira/types.py +304 -0
- mcp_ticketer/adapters/linear/__init__.py +1 -1
- mcp_ticketer/adapters/linear/adapter.py +3810 -462
- mcp_ticketer/adapters/linear/client.py +312 -69
- mcp_ticketer/adapters/linear/mappers.py +305 -85
- mcp_ticketer/adapters/linear/queries.py +317 -17
- mcp_ticketer/adapters/linear/types.py +187 -64
- mcp_ticketer/adapters/linear.py +2 -2
- mcp_ticketer/analysis/__init__.py +56 -0
- mcp_ticketer/analysis/dependency_graph.py +255 -0
- mcp_ticketer/analysis/health_assessment.py +304 -0
- mcp_ticketer/analysis/orphaned.py +218 -0
- mcp_ticketer/analysis/project_status.py +594 -0
- mcp_ticketer/analysis/similarity.py +224 -0
- mcp_ticketer/analysis/staleness.py +266 -0
- mcp_ticketer/automation/__init__.py +11 -0
- mcp_ticketer/automation/project_updates.py +378 -0
- mcp_ticketer/cache/memory.py +9 -8
- mcp_ticketer/cli/adapter_diagnostics.py +421 -0
- mcp_ticketer/cli/auggie_configure.py +116 -15
- mcp_ticketer/cli/codex_configure.py +274 -82
- mcp_ticketer/cli/configure.py +1323 -151
- mcp_ticketer/cli/cursor_configure.py +314 -0
- mcp_ticketer/cli/diagnostics.py +209 -114
- mcp_ticketer/cli/discover.py +297 -26
- mcp_ticketer/cli/gemini_configure.py +119 -26
- mcp_ticketer/cli/init_command.py +880 -0
- mcp_ticketer/cli/install_mcp_server.py +418 -0
- mcp_ticketer/cli/instruction_commands.py +435 -0
- mcp_ticketer/cli/linear_commands.py +256 -130
- mcp_ticketer/cli/main.py +140 -1284
- mcp_ticketer/cli/mcp_configure.py +1013 -100
- mcp_ticketer/cli/mcp_server_commands.py +415 -0
- mcp_ticketer/cli/migrate_config.py +12 -8
- mcp_ticketer/cli/platform_commands.py +123 -0
- mcp_ticketer/cli/platform_detection.py +477 -0
- mcp_ticketer/cli/platform_installer.py +545 -0
- mcp_ticketer/cli/project_update_commands.py +350 -0
- mcp_ticketer/cli/python_detection.py +126 -0
- mcp_ticketer/cli/queue_commands.py +15 -15
- mcp_ticketer/cli/setup_command.py +794 -0
- mcp_ticketer/cli/simple_health.py +84 -59
- mcp_ticketer/cli/ticket_commands.py +1375 -0
- mcp_ticketer/cli/update_checker.py +313 -0
- mcp_ticketer/cli/utils.py +195 -72
- mcp_ticketer/core/__init__.py +64 -1
- mcp_ticketer/core/adapter.py +618 -18
- mcp_ticketer/core/config.py +77 -68
- mcp_ticketer/core/env_discovery.py +75 -16
- mcp_ticketer/core/env_loader.py +121 -97
- mcp_ticketer/core/exceptions.py +32 -24
- mcp_ticketer/core/http_client.py +26 -26
- mcp_ticketer/core/instructions.py +405 -0
- mcp_ticketer/core/label_manager.py +732 -0
- mcp_ticketer/core/mappers.py +42 -30
- mcp_ticketer/core/milestone_manager.py +252 -0
- mcp_ticketer/core/models.py +566 -19
- mcp_ticketer/core/onepassword_secrets.py +379 -0
- mcp_ticketer/core/priority_matcher.py +463 -0
- mcp_ticketer/core/project_config.py +189 -49
- mcp_ticketer/core/project_utils.py +281 -0
- mcp_ticketer/core/project_validator.py +376 -0
- mcp_ticketer/core/registry.py +3 -3
- mcp_ticketer/core/session_state.py +176 -0
- mcp_ticketer/core/state_matcher.py +592 -0
- mcp_ticketer/core/url_parser.py +425 -0
- mcp_ticketer/core/validators.py +69 -0
- mcp_ticketer/defaults/ticket_instructions.md +644 -0
- mcp_ticketer/mcp/__init__.py +29 -1
- mcp_ticketer/mcp/__main__.py +60 -0
- mcp_ticketer/mcp/server/__init__.py +25 -0
- mcp_ticketer/mcp/server/__main__.py +60 -0
- mcp_ticketer/mcp/server/constants.py +58 -0
- mcp_ticketer/mcp/server/diagnostic_helper.py +175 -0
- mcp_ticketer/mcp/server/dto.py +195 -0
- mcp_ticketer/mcp/server/main.py +1343 -0
- mcp_ticketer/mcp/server/response_builder.py +206 -0
- mcp_ticketer/mcp/server/routing.py +723 -0
- mcp_ticketer/mcp/server/server_sdk.py +151 -0
- mcp_ticketer/mcp/server/tools/__init__.py +69 -0
- mcp_ticketer/mcp/server/tools/analysis_tools.py +854 -0
- mcp_ticketer/mcp/server/tools/attachment_tools.py +224 -0
- mcp_ticketer/mcp/server/tools/bulk_tools.py +330 -0
- mcp_ticketer/mcp/server/tools/comment_tools.py +152 -0
- mcp_ticketer/mcp/server/tools/config_tools.py +1564 -0
- mcp_ticketer/mcp/server/tools/diagnostic_tools.py +211 -0
- mcp_ticketer/mcp/server/tools/hierarchy_tools.py +942 -0
- mcp_ticketer/mcp/server/tools/instruction_tools.py +295 -0
- mcp_ticketer/mcp/server/tools/label_tools.py +942 -0
- mcp_ticketer/mcp/server/tools/milestone_tools.py +338 -0
- mcp_ticketer/mcp/server/tools/pr_tools.py +150 -0
- mcp_ticketer/mcp/server/tools/project_status_tools.py +158 -0
- mcp_ticketer/mcp/server/tools/project_update_tools.py +473 -0
- mcp_ticketer/mcp/server/tools/search_tools.py +318 -0
- mcp_ticketer/mcp/server/tools/session_tools.py +308 -0
- mcp_ticketer/mcp/server/tools/ticket_tools.py +1413 -0
- mcp_ticketer/mcp/server/tools/user_ticket_tools.py +364 -0
- mcp_ticketer/queue/__init__.py +1 -0
- mcp_ticketer/queue/health_monitor.py +168 -136
- mcp_ticketer/queue/manager.py +78 -63
- mcp_ticketer/queue/queue.py +108 -21
- mcp_ticketer/queue/run_worker.py +2 -2
- mcp_ticketer/queue/ticket_registry.py +213 -155
- mcp_ticketer/queue/worker.py +96 -58
- mcp_ticketer/utils/__init__.py +5 -0
- mcp_ticketer/utils/token_utils.py +246 -0
- mcp_ticketer-2.2.9.dist-info/METADATA +1396 -0
- mcp_ticketer-2.2.9.dist-info/RECORD +158 -0
- mcp_ticketer-2.2.9.dist-info/top_level.txt +2 -0
- py_mcp_installer/examples/phase3_demo.py +178 -0
- py_mcp_installer/scripts/manage_version.py +54 -0
- py_mcp_installer/setup.py +6 -0
- py_mcp_installer/src/py_mcp_installer/__init__.py +153 -0
- py_mcp_installer/src/py_mcp_installer/command_builder.py +445 -0
- py_mcp_installer/src/py_mcp_installer/config_manager.py +541 -0
- py_mcp_installer/src/py_mcp_installer/exceptions.py +243 -0
- py_mcp_installer/src/py_mcp_installer/installation_strategy.py +617 -0
- py_mcp_installer/src/py_mcp_installer/installer.py +656 -0
- py_mcp_installer/src/py_mcp_installer/mcp_inspector.py +750 -0
- py_mcp_installer/src/py_mcp_installer/platform_detector.py +451 -0
- py_mcp_installer/src/py_mcp_installer/platforms/__init__.py +26 -0
- py_mcp_installer/src/py_mcp_installer/platforms/claude_code.py +225 -0
- py_mcp_installer/src/py_mcp_installer/platforms/codex.py +181 -0
- py_mcp_installer/src/py_mcp_installer/platforms/cursor.py +191 -0
- py_mcp_installer/src/py_mcp_installer/types.py +222 -0
- py_mcp_installer/src/py_mcp_installer/utils.py +463 -0
- py_mcp_installer/tests/__init__.py +0 -0
- py_mcp_installer/tests/platforms/__init__.py +0 -0
- py_mcp_installer/tests/test_platform_detector.py +17 -0
- mcp_ticketer/adapters/github.py +0 -1354
- mcp_ticketer/adapters/jira.py +0 -1011
- mcp_ticketer/mcp/server.py +0 -1895
- mcp_ticketer-0.2.0.dist-info/METADATA +0 -414
- mcp_ticketer-0.2.0.dist-info/RECORD +0 -58
- mcp_ticketer-0.2.0.dist-info/top_level.txt +0 -1
- {mcp_ticketer-0.2.0.dist-info → mcp_ticketer-2.2.9.dist-info}/WHEEL +0 -0
- {mcp_ticketer-0.2.0.dist-info → mcp_ticketer-2.2.9.dist-info}/entry_points.txt +0 -0
- {mcp_ticketer-0.2.0.dist-info → mcp_ticketer-2.2.9.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"""FastMCP-based MCP server implementation.
|
|
2
|
+
|
|
3
|
+
This module implements the MCP server using the official FastMCP SDK,
|
|
4
|
+
replacing the custom JSON-RPC implementation. It provides a cleaner,
|
|
5
|
+
more maintainable approach with automatic schema generation and
|
|
6
|
+
better error handling.
|
|
7
|
+
|
|
8
|
+
The server manages a global adapter instance that is configured at
|
|
9
|
+
startup and used by all tool implementations.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import logging
|
|
13
|
+
from typing import Any
|
|
14
|
+
|
|
15
|
+
from mcp.server.fastmcp import FastMCP
|
|
16
|
+
|
|
17
|
+
from ...core.adapter import BaseAdapter
|
|
18
|
+
from ...core.registry import AdapterRegistry
|
|
19
|
+
|
|
20
|
+
# Initialize FastMCP server
|
|
21
|
+
mcp = FastMCP("mcp-ticketer")
|
|
22
|
+
|
|
23
|
+
# Global adapter instance
|
|
24
|
+
_adapter: BaseAdapter | None = None
|
|
25
|
+
|
|
26
|
+
# Global router instance (optional, for multi-platform support)
|
|
27
|
+
_router: Any | None = None
|
|
28
|
+
|
|
29
|
+
# Configure logging
|
|
30
|
+
logger = logging.getLogger(__name__)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def configure_adapter(adapter_type: str, config: dict[str, Any]) -> None:
|
|
34
|
+
"""Configure the global adapter instance.
|
|
35
|
+
|
|
36
|
+
This must be called before starting the server to initialize the
|
|
37
|
+
adapter that will handle all ticket operations.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
adapter_type: Type of adapter to create (e.g., "linear", "jira", "github")
|
|
41
|
+
config: Configuration dictionary for the adapter
|
|
42
|
+
|
|
43
|
+
Raises:
|
|
44
|
+
ValueError: If adapter type is not registered
|
|
45
|
+
RuntimeError: If adapter configuration fails
|
|
46
|
+
|
|
47
|
+
"""
|
|
48
|
+
global _adapter
|
|
49
|
+
|
|
50
|
+
try:
|
|
51
|
+
# Get adapter from registry
|
|
52
|
+
_adapter = AdapterRegistry.get_adapter(adapter_type, config)
|
|
53
|
+
logger.info(f"Configured {adapter_type} adapter for MCP server")
|
|
54
|
+
except Exception as e:
|
|
55
|
+
logger.error(f"Failed to configure adapter: {e}")
|
|
56
|
+
raise RuntimeError(f"Adapter configuration failed: {e}") from e
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def get_adapter() -> BaseAdapter:
|
|
60
|
+
"""Get the configured adapter instance.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
The global adapter instance
|
|
64
|
+
|
|
65
|
+
Raises:
|
|
66
|
+
RuntimeError: If adapter has not been configured
|
|
67
|
+
|
|
68
|
+
"""
|
|
69
|
+
if _adapter is None:
|
|
70
|
+
raise RuntimeError(
|
|
71
|
+
"Adapter not configured. Call configure_adapter() before starting server."
|
|
72
|
+
)
|
|
73
|
+
return _adapter
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def configure_router(
|
|
77
|
+
default_adapter: str, adapter_configs: dict[str, dict[str, Any]]
|
|
78
|
+
) -> None:
|
|
79
|
+
"""Configure multi-platform routing support (optional).
|
|
80
|
+
|
|
81
|
+
This enables URL-based ticket access across multiple platforms in a
|
|
82
|
+
single MCP session. When configured, tools will use the router to
|
|
83
|
+
automatically detect the platform from URLs.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
default_adapter: Default adapter for plain IDs (e.g., "linear")
|
|
87
|
+
adapter_configs: Configuration for each adapter
|
|
88
|
+
Example: {
|
|
89
|
+
"linear": {"api_key": "...", "team_id": "..."},
|
|
90
|
+
"github": {"token": "...", "owner": "...", "repo": "..."}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
Raises:
|
|
94
|
+
RuntimeError: If router configuration fails
|
|
95
|
+
|
|
96
|
+
"""
|
|
97
|
+
global _router
|
|
98
|
+
|
|
99
|
+
try:
|
|
100
|
+
from .routing import TicketRouter
|
|
101
|
+
|
|
102
|
+
_router = TicketRouter(
|
|
103
|
+
default_adapter=default_adapter, adapter_configs=adapter_configs
|
|
104
|
+
)
|
|
105
|
+
logger.info(f"Configured multi-platform router with default: {default_adapter}")
|
|
106
|
+
except Exception as e:
|
|
107
|
+
logger.error(f"Failed to configure router: {e}")
|
|
108
|
+
raise RuntimeError(f"Router configuration failed: {e}") from e
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def get_router() -> Any:
|
|
112
|
+
"""Get the configured router instance (if available).
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
The global router instance, or None if not configured
|
|
116
|
+
|
|
117
|
+
"""
|
|
118
|
+
return _router
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def has_router() -> bool:
|
|
122
|
+
"""Check if multi-platform router is configured.
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
True if router is available, False otherwise
|
|
126
|
+
|
|
127
|
+
"""
|
|
128
|
+
return _router is not None
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
# Import all tool modules to register them with FastMCP
|
|
132
|
+
# These imports must come after mcp is initialized but before main()
|
|
133
|
+
from . import tools # noqa: E402, F401
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def main() -> None:
|
|
137
|
+
"""Run the FastMCP server.
|
|
138
|
+
|
|
139
|
+
This function starts the server using stdio transport for
|
|
140
|
+
JSON-RPC communication with Claude Desktop/Code.
|
|
141
|
+
|
|
142
|
+
The adapter must be configured via configure_adapter() before
|
|
143
|
+
calling this function.
|
|
144
|
+
|
|
145
|
+
"""
|
|
146
|
+
# Run the server with stdio transport
|
|
147
|
+
mcp.run(transport="stdio")
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
if __name__ == "__main__":
|
|
151
|
+
main()
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""MCP tool modules for ticket operations.
|
|
2
|
+
|
|
3
|
+
This package contains all FastMCP tool implementations organized by
|
|
4
|
+
functional area. Tools are automatically registered with the FastMCP
|
|
5
|
+
server when imported.
|
|
6
|
+
|
|
7
|
+
Modules:
|
|
8
|
+
ticket_tools: Basic CRUD operations for tickets
|
|
9
|
+
hierarchy_tools: Epic/Issue/Task hierarchy management
|
|
10
|
+
search_tools: Search and query operations
|
|
11
|
+
bulk_tools: Bulk create and update operations
|
|
12
|
+
comment_tools: Comment management
|
|
13
|
+
config_tools: Configuration management (adapter, project, user settings)
|
|
14
|
+
session_tools: Session tracking and ticket association management
|
|
15
|
+
user_ticket_tools: User-specific ticket operations (my tickets, transitions)
|
|
16
|
+
analysis_tools: Ticket analysis and cleanup tools (similar, stale, orphaned)
|
|
17
|
+
label_tools: Label management, normalization, deduplication, and cleanup
|
|
18
|
+
project_update_tools: Project status update management (1M-238)
|
|
19
|
+
project_status_tools: Project status analysis and work planning (1M-316)
|
|
20
|
+
milestone_tools: Milestone management and progress tracking (1M-607)
|
|
21
|
+
|
|
22
|
+
Note:
|
|
23
|
+
instruction_tools: Removed from MCP server (CLI-only as of Phase 2 Sprint 2.3)
|
|
24
|
+
pr_tools: Removed from MCP server (CLI-only as of Phase 2 Sprint 1.3)
|
|
25
|
+
attachment_tools: Removed from MCP server (CLI-only as of Phase 2 Sprint 1.3)
|
|
26
|
+
These tools are available via CLI commands but not exposed through MCP interface.
|
|
27
|
+
Use filesystem MCP for file operations and GitHub MCP for PR management.
|
|
28
|
+
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
# Import all tool modules to register them with FastMCP
|
|
32
|
+
# Order matters - import core functionality first
|
|
33
|
+
from . import (
|
|
34
|
+
analysis_tools, # noqa: F401
|
|
35
|
+
# attachment_tools removed - CLI-only (Phase 2 Sprint 1.3 - use filesystem MCP)
|
|
36
|
+
bulk_tools, # noqa: F401
|
|
37
|
+
comment_tools, # noqa: F401
|
|
38
|
+
config_tools, # noqa: F401
|
|
39
|
+
hierarchy_tools, # noqa: F401
|
|
40
|
+
# instruction_tools removed - CLI-only (Phase 2 Sprint 2.3)
|
|
41
|
+
label_tools, # noqa: F401
|
|
42
|
+
milestone_tools, # noqa: F401
|
|
43
|
+
# pr_tools removed - CLI-only (Phase 2 Sprint 1.3 - use GitHub MCP)
|
|
44
|
+
project_status_tools, # noqa: F401
|
|
45
|
+
project_update_tools, # noqa: F401
|
|
46
|
+
search_tools, # noqa: F401
|
|
47
|
+
session_tools, # noqa: F401
|
|
48
|
+
ticket_tools, # noqa: F401
|
|
49
|
+
user_ticket_tools, # noqa: F401
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
__all__ = [
|
|
53
|
+
"analysis_tools",
|
|
54
|
+
# "attachment_tools" removed - CLI-only (Phase 2 Sprint 1.3)
|
|
55
|
+
"bulk_tools",
|
|
56
|
+
"comment_tools",
|
|
57
|
+
"config_tools",
|
|
58
|
+
"hierarchy_tools",
|
|
59
|
+
# "instruction_tools" removed - CLI-only (Phase 2 Sprint 2.3)
|
|
60
|
+
"label_tools",
|
|
61
|
+
"milestone_tools",
|
|
62
|
+
# "pr_tools" removed - CLI-only (Phase 2 Sprint 1.3)
|
|
63
|
+
"project_status_tools",
|
|
64
|
+
"project_update_tools",
|
|
65
|
+
"search_tools",
|
|
66
|
+
"session_tools",
|
|
67
|
+
"ticket_tools",
|
|
68
|
+
"user_ticket_tools",
|
|
69
|
+
]
|