mcp-ticketer 0.1.2__tar.gz → 0.1.3__tar.gz

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 (153) hide show
  1. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/CHANGELOG.md +16 -0
  2. {mcp_ticketer-0.1.2/src/mcp_ticketer.egg-info → mcp_ticketer-0.1.3}/PKG-INFO +1 -1
  3. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/__version__.py +1 -1
  4. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/cli/main.py +7 -3
  5. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/mcp/server.py +16 -4
  6. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3/src/mcp_ticketer.egg-info}/PKG-INFO +1 -1
  7. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/.dependency_cache +0 -0
  8. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/.mpm_deployment_state +0 -0
  9. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/agent-manager.md +0 -0
  10. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/agentic-coder-optimizer.md +0 -0
  11. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/api_qa.md +0 -0
  12. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/clerk-ops.md +0 -0
  13. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/code_analyzer.md +0 -0
  14. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/data_engineer.md +0 -0
  15. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/documentation.md +0 -0
  16. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/engineer.md +0 -0
  17. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/gcp_ops_agent.md +0 -0
  18. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/imagemagick.md +0 -0
  19. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/memory_manager.md +0 -0
  20. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/nextjs_engineer.md +0 -0
  21. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/ops.md +0 -0
  22. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/project_organizer.md +0 -0
  23. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/prompt-engineer.md +0 -0
  24. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/python_engineer.md +0 -0
  25. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/qa.md +0 -0
  26. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/react_engineer.md +0 -0
  27. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/refactoring_engineer.md +0 -0
  28. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/research.md +0 -0
  29. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/security.md +0 -0
  30. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/ticketing.md +0 -0
  31. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/vercel_ops_agent.md +0 -0
  32. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/version_control.md +0 -0
  33. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/web_qa.md +0 -0
  34. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude/agents/web_ui.md +0 -0
  35. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude-mpm/config/project.json +0 -0
  36. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude-mpm/memories/README.md +0 -0
  37. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude-mpm/memories/documentation_memories.md +0 -0
  38. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude-mpm/memories/engineer_memories.md +0 -0
  39. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude-mpm/memories/qa_memories.md +0 -0
  40. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.claude-mpm/memories/research_memories.md +0 -0
  41. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.coveragerc +0 -0
  42. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.env.example +0 -0
  43. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.github/workflows/docs.yml +0 -0
  44. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.github/workflows/publish.yml +0 -0
  45. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.github/workflows/test.yml +0 -0
  46. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.pre-commit-config.yaml +0 -0
  47. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.python-version +0 -0
  48. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/.readthedocs.yaml +0 -0
  49. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/CONTRIBUTING.md +0 -0
  50. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/JIRA_SETUP.md +0 -0
  51. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/LICENSE +0 -0
  52. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/LINEAR_SETUP.md +0 -0
  53. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/MANIFEST.in +0 -0
  54. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/OPTIMIZATION_SUMMARY.md +0 -0
  55. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/QUEUE_SYSTEM.md +0 -0
  56. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/README.md +0 -0
  57. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/RELEASING.md +0 -0
  58. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/TEST_REPORT.md +0 -0
  59. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/TEST_RESULTS_SUMMARY.md +0 -0
  60. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/debug_search.py +0 -0
  61. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/debug_test.py +0 -0
  62. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/ADAPTERS.md +0 -0
  63. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/API_REFERENCE.md +0 -0
  64. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/CONFIGURATION.md +0 -0
  65. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/DEVELOPER_GUIDE.md +0 -0
  66. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/MCP_INTEGRATION.md +0 -0
  67. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/MIGRATION_GUIDE.md +0 -0
  68. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/USER_GUIDE.md +0 -0
  69. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/ADAPTERS.md.txt +0 -0
  70. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/API_REFERENCE.md.txt +0 -0
  71. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/CONFIGURATION.md.txt +0 -0
  72. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/DEVELOPER_GUIDE.md.txt +0 -0
  73. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/MCP_INTEGRATION.md.txt +0 -0
  74. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/MIGRATION_GUIDE.md.txt +0 -0
  75. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/USER_GUIDE.md.txt +0 -0
  76. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/adapters/github.md.txt +0 -0
  77. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/adapters.rst.txt +0 -0
  78. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/api.rst.txt +0 -0
  79. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/cli.rst.txt +0 -0
  80. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/development.rst.txt +0 -0
  81. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/examples.rst.txt +0 -0
  82. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/index.rst.txt +0 -0
  83. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/installation.rst.txt +0 -0
  84. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/_build/_sources/prd/mcp-ticketer-prd.md.txt +0 -0
  85. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/adapters/github.md +0 -0
  86. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/adapters.rst +0 -0
  87. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/api.rst +0 -0
  88. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/cli.rst +0 -0
  89. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/conf.py +0 -0
  90. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/development.rst +0 -0
  91. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/examples.rst +0 -0
  92. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/index.rst +0 -0
  93. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/installation.rst +0 -0
  94. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/prd/mcp-ticketer-prd.md +0 -0
  95. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/docs/requirements.txt +0 -0
  96. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/install.sh +0 -0
  97. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/mcp-ticketer +0 -0
  98. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/mcp-ticketer-server +0 -0
  99. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/pyproject.toml +0 -0
  100. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/pytest.ini +0 -0
  101. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/requirements-dev.txt +0 -0
  102. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/requirements.txt +0 -0
  103. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/setup.cfg +0 -0
  104. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/setup.py +0 -0
  105. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/__init__.py +0 -0
  106. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/adapters/__init__.py +0 -0
  107. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/adapters/aitrackdown.py +0 -0
  108. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/adapters/github.py +0 -0
  109. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/adapters/jira.py +0 -0
  110. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/adapters/linear.py +0 -0
  111. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/cache/__init__.py +0 -0
  112. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/cache/memory.py +0 -0
  113. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/cli/__init__.py +0 -0
  114. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/cli/queue_commands.py +0 -0
  115. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/cli/utils.py +0 -0
  116. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/core/__init__.py +0 -0
  117. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/core/adapter.py +0 -0
  118. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/core/config.py +0 -0
  119. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/core/http_client.py +0 -0
  120. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/core/mappers.py +0 -0
  121. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/core/models.py +0 -0
  122. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/core/registry.py +0 -0
  123. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/mcp/__init__.py +0 -0
  124. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/py.typed +0 -0
  125. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/queue/__init__.py +0 -0
  126. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/queue/__main__.py +0 -0
  127. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/queue/manager.py +0 -0
  128. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/queue/queue.py +0 -0
  129. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/queue/run_worker.py +0 -0
  130. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer/queue/worker.py +0 -0
  131. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer.egg-info/SOURCES.txt +0 -0
  132. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer.egg-info/dependency_links.txt +0 -0
  133. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer.egg-info/entry_points.txt +0 -0
  134. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer.egg-info/not-zip-safe +0 -0
  135. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer.egg-info/requires.txt +0 -0
  136. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/src/mcp_ticketer.egg-info/top_level.txt +0 -0
  137. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test-tickets/tickets/task-20250924002724.json +0 -0
  138. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_all_adapters.py +0 -0
  139. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_api_usage.py +0 -0
  140. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_basic.py +0 -0
  141. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_comprehensive.py +0 -0
  142. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_error_handling.py +0 -0
  143. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_github.py +0 -0
  144. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_github_token.py +0 -0
  145. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_jira.py +0 -0
  146. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_linear.py +0 -0
  147. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_linear_native.py +0 -0
  148. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_linear_teams.py +0 -0
  149. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_optimizations.py +0 -0
  150. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_performance.py +0 -0
  151. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_queue_system.py +0 -0
  152. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/test_set_command.sh +0 -0
  153. {mcp_ticketer-0.1.2 → mcp_ticketer-0.1.3}/tox.ini +0 -0
@@ -15,6 +15,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
15
15
  - Analytics dashboard
16
16
  - Webhook notification support
17
17
 
18
+ ## [0.1.3] - 2025-09-24
19
+
20
+ ### Added
21
+ - Local development script `mcp_server.sh` for running from project directory
22
+ - Pipx installation support for system-wide deployment
23
+ - Claude Desktop configuration documentation
24
+
25
+ ### Fixed
26
+ - MCP server connection stability with improved error handling
27
+ - Better EOF and broken pipe handling in MCP server
28
+ - Proper stderr logging to avoid JSON-RPC interference
29
+
30
+ ### Changed
31
+ - Simplified MCP installation with single recommended pipx approach
32
+ - Improved MCP server robustness for Claude Desktop integration
33
+
18
34
  ## [0.1.2] - 2025-09-24
19
35
 
20
36
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-ticketer
3
- Version: 0.1.2
3
+ Version: 0.1.3
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,6 +1,6 @@
1
1
  """Version information for mcp-ticketer package."""
2
2
 
3
- __version__ = "0.1.2"
3
+ __version__ = "0.1.3"
4
4
  __version_info__ = tuple(int(part) for part in __version__.split("."))
5
5
 
6
6
  # Package metadata
@@ -848,15 +848,19 @@ def mcp(
848
848
  console.print("[dim]Server running on stdio. Send JSON-RPC requests via stdin.[/dim]")
849
849
 
850
850
  # Create and run server
851
- server = MCPTicketServer(adapter_type, adapter_config)
852
-
853
851
  try:
852
+ server = MCPTicketServer(adapter_type, adapter_config)
854
853
  asyncio.run(server.run())
855
854
  except KeyboardInterrupt:
856
855
  # Also send this to stderr
857
856
  if sys.stderr.isatty():
858
857
  console.print("\n[yellow]Server stopped by user[/yellow]")
859
- asyncio.run(server.stop())
858
+ if 'server' in locals():
859
+ asyncio.run(server.stop())
860
+ except Exception as e:
861
+ # Log error to stderr
862
+ sys.stderr.write(f"MCP server error: {e}\n")
863
+ sys.exit(1)
860
864
 
861
865
 
862
866
  def main():
@@ -309,7 +309,7 @@ class MCPTicketServer:
309
309
  "protocolVersion": "1.0.0",
310
310
  "serverInfo": {
311
311
  "name": "mcp-ticketer",
312
- "version": "0.1.2"
312
+ "version": "0.1.3"
313
313
  },
314
314
  "capabilities": {
315
315
  "tools": {
@@ -403,15 +403,22 @@ class MCPTicketServer:
403
403
  async def run(self) -> None:
404
404
  """Run the MCP server, reading from stdin and writing to stdout."""
405
405
  self.running = True
406
- reader = asyncio.StreamReader()
407
- protocol = asyncio.StreamReaderProtocol(reader)
408
- await asyncio.get_event_loop().connect_read_pipe(lambda: protocol, sys.stdin)
406
+
407
+ try:
408
+ reader = asyncio.StreamReader()
409
+ protocol = asyncio.StreamReaderProtocol(reader)
410
+ await asyncio.get_event_loop().connect_read_pipe(lambda: protocol, sys.stdin)
411
+ except Exception as e:
412
+ sys.stderr.write(f"Failed to connect to stdin: {str(e)}\n")
413
+ return
409
414
 
410
415
  # Main message loop
411
416
  while self.running:
412
417
  try:
413
418
  line = await reader.readline()
414
419
  if not line:
420
+ # EOF reached, exit gracefully
421
+ sys.stderr.write("EOF reached, shutting down server\n")
415
422
  break
416
423
 
417
424
  # Parse JSON-RPC request
@@ -434,6 +441,11 @@ class MCPTicketServer:
434
441
  sys.stdout.flush()
435
442
 
436
443
  except KeyboardInterrupt:
444
+ sys.stderr.write("Received interrupt signal\n")
445
+ break
446
+
447
+ except BrokenPipeError:
448
+ sys.stderr.write("Connection closed by client\n")
437
449
  break
438
450
 
439
451
  except Exception as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-ticketer
3
- Version: 0.1.2
3
+ Version: 0.1.3
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>
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes