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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. mcp_ticketer/__init__.py +10 -10
  2. mcp_ticketer/__version__.py +3 -3
  3. mcp_ticketer/_version_scm.py +1 -0
  4. mcp_ticketer/adapters/__init__.py +2 -0
  5. mcp_ticketer/adapters/aitrackdown.py +930 -52
  6. mcp_ticketer/adapters/asana/__init__.py +15 -0
  7. mcp_ticketer/adapters/asana/adapter.py +1537 -0
  8. mcp_ticketer/adapters/asana/client.py +292 -0
  9. mcp_ticketer/adapters/asana/mappers.py +348 -0
  10. mcp_ticketer/adapters/asana/types.py +146 -0
  11. mcp_ticketer/adapters/github/__init__.py +26 -0
  12. mcp_ticketer/adapters/github/adapter.py +3229 -0
  13. mcp_ticketer/adapters/github/client.py +335 -0
  14. mcp_ticketer/adapters/github/mappers.py +797 -0
  15. mcp_ticketer/adapters/github/queries.py +692 -0
  16. mcp_ticketer/adapters/github/types.py +460 -0
  17. mcp_ticketer/adapters/hybrid.py +58 -16
  18. mcp_ticketer/adapters/jira/__init__.py +35 -0
  19. mcp_ticketer/adapters/jira/adapter.py +1351 -0
  20. mcp_ticketer/adapters/jira/client.py +271 -0
  21. mcp_ticketer/adapters/jira/mappers.py +246 -0
  22. mcp_ticketer/adapters/jira/queries.py +216 -0
  23. mcp_ticketer/adapters/jira/types.py +304 -0
  24. mcp_ticketer/adapters/linear/__init__.py +1 -1
  25. mcp_ticketer/adapters/linear/adapter.py +3810 -462
  26. mcp_ticketer/adapters/linear/client.py +312 -69
  27. mcp_ticketer/adapters/linear/mappers.py +305 -85
  28. mcp_ticketer/adapters/linear/queries.py +317 -17
  29. mcp_ticketer/adapters/linear/types.py +187 -64
  30. mcp_ticketer/adapters/linear.py +2 -2
  31. mcp_ticketer/analysis/__init__.py +56 -0
  32. mcp_ticketer/analysis/dependency_graph.py +255 -0
  33. mcp_ticketer/analysis/health_assessment.py +304 -0
  34. mcp_ticketer/analysis/orphaned.py +218 -0
  35. mcp_ticketer/analysis/project_status.py +594 -0
  36. mcp_ticketer/analysis/similarity.py +224 -0
  37. mcp_ticketer/analysis/staleness.py +266 -0
  38. mcp_ticketer/automation/__init__.py +11 -0
  39. mcp_ticketer/automation/project_updates.py +378 -0
  40. mcp_ticketer/cache/memory.py +9 -8
  41. mcp_ticketer/cli/adapter_diagnostics.py +91 -54
  42. mcp_ticketer/cli/auggie_configure.py +116 -15
  43. mcp_ticketer/cli/codex_configure.py +274 -82
  44. mcp_ticketer/cli/configure.py +1323 -151
  45. mcp_ticketer/cli/cursor_configure.py +314 -0
  46. mcp_ticketer/cli/diagnostics.py +209 -114
  47. mcp_ticketer/cli/discover.py +297 -26
  48. mcp_ticketer/cli/gemini_configure.py +119 -26
  49. mcp_ticketer/cli/init_command.py +880 -0
  50. mcp_ticketer/cli/install_mcp_server.py +418 -0
  51. mcp_ticketer/cli/instruction_commands.py +435 -0
  52. mcp_ticketer/cli/linear_commands.py +256 -130
  53. mcp_ticketer/cli/main.py +140 -1544
  54. mcp_ticketer/cli/mcp_configure.py +1013 -100
  55. mcp_ticketer/cli/mcp_server_commands.py +415 -0
  56. mcp_ticketer/cli/migrate_config.py +12 -8
  57. mcp_ticketer/cli/platform_commands.py +123 -0
  58. mcp_ticketer/cli/platform_detection.py +477 -0
  59. mcp_ticketer/cli/platform_installer.py +545 -0
  60. mcp_ticketer/cli/project_update_commands.py +350 -0
  61. mcp_ticketer/cli/python_detection.py +126 -0
  62. mcp_ticketer/cli/queue_commands.py +15 -15
  63. mcp_ticketer/cli/setup_command.py +794 -0
  64. mcp_ticketer/cli/simple_health.py +84 -59
  65. mcp_ticketer/cli/ticket_commands.py +1375 -0
  66. mcp_ticketer/cli/update_checker.py +313 -0
  67. mcp_ticketer/cli/utils.py +195 -72
  68. mcp_ticketer/core/__init__.py +64 -1
  69. mcp_ticketer/core/adapter.py +618 -18
  70. mcp_ticketer/core/config.py +77 -68
  71. mcp_ticketer/core/env_discovery.py +75 -16
  72. mcp_ticketer/core/env_loader.py +121 -97
  73. mcp_ticketer/core/exceptions.py +32 -24
  74. mcp_ticketer/core/http_client.py +26 -26
  75. mcp_ticketer/core/instructions.py +405 -0
  76. mcp_ticketer/core/label_manager.py +732 -0
  77. mcp_ticketer/core/mappers.py +42 -30
  78. mcp_ticketer/core/milestone_manager.py +252 -0
  79. mcp_ticketer/core/models.py +566 -19
  80. mcp_ticketer/core/onepassword_secrets.py +379 -0
  81. mcp_ticketer/core/priority_matcher.py +463 -0
  82. mcp_ticketer/core/project_config.py +189 -49
  83. mcp_ticketer/core/project_utils.py +281 -0
  84. mcp_ticketer/core/project_validator.py +376 -0
  85. mcp_ticketer/core/registry.py +3 -3
  86. mcp_ticketer/core/session_state.py +176 -0
  87. mcp_ticketer/core/state_matcher.py +592 -0
  88. mcp_ticketer/core/url_parser.py +425 -0
  89. mcp_ticketer/core/validators.py +69 -0
  90. mcp_ticketer/defaults/ticket_instructions.md +644 -0
  91. mcp_ticketer/mcp/__init__.py +29 -1
  92. mcp_ticketer/mcp/__main__.py +60 -0
  93. mcp_ticketer/mcp/server/__init__.py +25 -0
  94. mcp_ticketer/mcp/server/__main__.py +60 -0
  95. mcp_ticketer/mcp/server/constants.py +58 -0
  96. mcp_ticketer/mcp/server/diagnostic_helper.py +175 -0
  97. mcp_ticketer/mcp/server/dto.py +195 -0
  98. mcp_ticketer/mcp/server/main.py +1343 -0
  99. mcp_ticketer/mcp/server/response_builder.py +206 -0
  100. mcp_ticketer/mcp/server/routing.py +723 -0
  101. mcp_ticketer/mcp/server/server_sdk.py +151 -0
  102. mcp_ticketer/mcp/server/tools/__init__.py +69 -0
  103. mcp_ticketer/mcp/server/tools/analysis_tools.py +854 -0
  104. mcp_ticketer/mcp/server/tools/attachment_tools.py +224 -0
  105. mcp_ticketer/mcp/server/tools/bulk_tools.py +330 -0
  106. mcp_ticketer/mcp/server/tools/comment_tools.py +152 -0
  107. mcp_ticketer/mcp/server/tools/config_tools.py +1564 -0
  108. mcp_ticketer/mcp/server/tools/diagnostic_tools.py +211 -0
  109. mcp_ticketer/mcp/server/tools/hierarchy_tools.py +942 -0
  110. mcp_ticketer/mcp/server/tools/instruction_tools.py +295 -0
  111. mcp_ticketer/mcp/server/tools/label_tools.py +942 -0
  112. mcp_ticketer/mcp/server/tools/milestone_tools.py +338 -0
  113. mcp_ticketer/mcp/server/tools/pr_tools.py +150 -0
  114. mcp_ticketer/mcp/server/tools/project_status_tools.py +158 -0
  115. mcp_ticketer/mcp/server/tools/project_update_tools.py +473 -0
  116. mcp_ticketer/mcp/server/tools/search_tools.py +318 -0
  117. mcp_ticketer/mcp/server/tools/session_tools.py +308 -0
  118. mcp_ticketer/mcp/server/tools/ticket_tools.py +1413 -0
  119. mcp_ticketer/mcp/server/tools/user_ticket_tools.py +364 -0
  120. mcp_ticketer/queue/__init__.py +1 -0
  121. mcp_ticketer/queue/health_monitor.py +168 -136
  122. mcp_ticketer/queue/manager.py +78 -63
  123. mcp_ticketer/queue/queue.py +108 -21
  124. mcp_ticketer/queue/run_worker.py +2 -2
  125. mcp_ticketer/queue/ticket_registry.py +213 -155
  126. mcp_ticketer/queue/worker.py +96 -58
  127. mcp_ticketer/utils/__init__.py +5 -0
  128. mcp_ticketer/utils/token_utils.py +246 -0
  129. mcp_ticketer-2.2.9.dist-info/METADATA +1396 -0
  130. mcp_ticketer-2.2.9.dist-info/RECORD +158 -0
  131. mcp_ticketer-2.2.9.dist-info/top_level.txt +2 -0
  132. py_mcp_installer/examples/phase3_demo.py +178 -0
  133. py_mcp_installer/scripts/manage_version.py +54 -0
  134. py_mcp_installer/setup.py +6 -0
  135. py_mcp_installer/src/py_mcp_installer/__init__.py +153 -0
  136. py_mcp_installer/src/py_mcp_installer/command_builder.py +445 -0
  137. py_mcp_installer/src/py_mcp_installer/config_manager.py +541 -0
  138. py_mcp_installer/src/py_mcp_installer/exceptions.py +243 -0
  139. py_mcp_installer/src/py_mcp_installer/installation_strategy.py +617 -0
  140. py_mcp_installer/src/py_mcp_installer/installer.py +656 -0
  141. py_mcp_installer/src/py_mcp_installer/mcp_inspector.py +750 -0
  142. py_mcp_installer/src/py_mcp_installer/platform_detector.py +451 -0
  143. py_mcp_installer/src/py_mcp_installer/platforms/__init__.py +26 -0
  144. py_mcp_installer/src/py_mcp_installer/platforms/claude_code.py +225 -0
  145. py_mcp_installer/src/py_mcp_installer/platforms/codex.py +181 -0
  146. py_mcp_installer/src/py_mcp_installer/platforms/cursor.py +191 -0
  147. py_mcp_installer/src/py_mcp_installer/types.py +222 -0
  148. py_mcp_installer/src/py_mcp_installer/utils.py +463 -0
  149. py_mcp_installer/tests/__init__.py +0 -0
  150. py_mcp_installer/tests/platforms/__init__.py +0 -0
  151. py_mcp_installer/tests/test_platform_detector.py +17 -0
  152. mcp_ticketer/adapters/github.py +0 -1354
  153. mcp_ticketer/adapters/jira.py +0 -1011
  154. mcp_ticketer/mcp/server.py +0 -2030
  155. mcp_ticketer-0.3.0.dist-info/METADATA +0 -414
  156. mcp_ticketer-0.3.0.dist-info/RECORD +0 -59
  157. mcp_ticketer-0.3.0.dist-info/top_level.txt +0 -1
  158. {mcp_ticketer-0.3.0.dist-info → mcp_ticketer-2.2.9.dist-info}/WHEEL +0 -0
  159. {mcp_ticketer-0.3.0.dist-info → mcp_ticketer-2.2.9.dist-info}/entry_points.txt +0 -0
  160. {mcp_ticketer-0.3.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
+ ]