mcp-code-indexer 4.2.9__py3-none-any.whl → 4.2.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.
mcp_code_indexer/main.py CHANGED
@@ -1095,40 +1095,7 @@ async def main() -> None:
1095
1095
  if transport:
1096
1096
  transport.server = server
1097
1097
 
1098
- # Setup signal handling for graceful shutdown
1099
- shutdown_event = asyncio.Event()
1100
-
1101
- def signal_handler(signum):
1102
- logger.info(f"Received shutdown signal {signum}")
1103
- shutdown_event.set()
1104
-
1105
- # Register signal handlers
1106
- loop = asyncio.get_running_loop()
1107
- for sig in [signal.SIGTERM, signal.SIGINT]:
1108
- loop.add_signal_handler(sig, signal_handler, sig)
1109
-
1110
- # Run server and wait for shutdown signal
1111
- server_task = asyncio.create_task(server.run())
1112
- shutdown_task = asyncio.create_task(shutdown_event.wait())
1113
-
1114
- try:
1115
- # Wait for either server completion or shutdown signal
1116
- done, pending = await asyncio.wait(
1117
- [server_task, shutdown_task],
1118
- return_when=asyncio.FIRST_COMPLETED
1119
- )
1120
-
1121
- # Cancel remaining tasks
1122
- for task in pending:
1123
- task.cancel()
1124
- try:
1125
- await task
1126
- except asyncio.CancelledError:
1127
- pass
1128
-
1129
- except Exception as e:
1130
- error_handler.log_error(e, context={"phase": "runtime"})
1131
- raise
1098
+ await server.run()
1132
1099
 
1133
1100
  except Exception as e:
1134
1101
  error_handler.log_error(e, context={"phase": "startup"})
@@ -1145,6 +1112,14 @@ async def main() -> None:
1145
1112
  await vector_daemon_task
1146
1113
  except asyncio.CancelledError:
1147
1114
  logger.info("Vector daemon cancelled successfully")
1115
+
1116
+ # Clean up any remaining asyncio tasks to prevent hanging
1117
+ tasks = [task for task in asyncio.all_tasks() if not task.done()]
1118
+ if tasks:
1119
+ logger.info(f"Cancelling {len(tasks)} remaining tasks")
1120
+ for task in tasks:
1121
+ task.cancel()
1122
+ await asyncio.gather(*tasks, return_exceptions=True)
1148
1123
 
1149
1124
 
1150
1125
  def cli_main() -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mcp-code-indexer
3
- Version: 4.2.9
3
+ Version: 4.2.11
4
4
  Summary: MCP server that tracks file descriptions across codebases, enabling AI agents to efficiently navigate and understand code through searchable summaries and token-aware overviews.
5
5
  License: MIT
6
6
  Keywords: mcp,model-context-protocol,code-indexer,ai-tools,codebase-navigation,file-descriptions,llm-tools
@@ -48,8 +48,8 @@ Description-Content-Type: text/markdown
48
48
 
49
49
  # MCP Code Indexer 🚀
50
50
 
51
- [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?56)](https://badge.fury.io/py/mcp-code-indexer)
52
- [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?56)](https://pypi.org/project/mcp-code-indexer/)
51
+ [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?58)](https://badge.fury.io/py/mcp-code-indexer)
52
+ [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?58)](https://pypi.org/project/mcp-code-indexer/)
53
53
  [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
54
54
 
55
55
  A production-ready **Model Context Protocol (MCP) server** that revolutionizes how AI agents navigate and understand codebases. Built for high-concurrency environments with advanced database resilience, the server provides instant access to intelligent descriptions, semantic search, and context-aware recommendations while maintaining 800+ writes/sec throughput.
@@ -19,7 +19,7 @@ mcp_code_indexer/error_handler.py,sha256=ylciEM-cR7E8Gmd8cfh5olcllJm0FnaYBGH86ya
19
19
  mcp_code_indexer/file_scanner.py,sha256=7Ab34lRQGeh5GBCzcSP96p4YK6LDWFGUHLXqi499UZ4,11838
20
20
  mcp_code_indexer/git_hook_handler.py,sha256=sTtZV3-Yy1Evt06R5NZclELeepM4Ia9OQoR2O6BK3Hk,45517
21
21
  mcp_code_indexer/logging_config.py,sha256=M5eVZ5PwfTROib7ISTQ522n2hUSc4hJ_wUgsrJKsTTg,10030
22
- mcp_code_indexer/main.py,sha256=Gy986s-anJJEFaMNZRVZ8cCX-v_Q5W3Q9cNQGkwRG68,38835
22
+ mcp_code_indexer/main.py,sha256=6AUVoELYf1gvy_4f05UZpEJWt6n9WQNt6054HKS-caA,37981
23
23
  mcp_code_indexer/middleware/__init__.py,sha256=UCEPzOlZldlqFzYEfrXw1HvCDvY1jpLvyaDGUzVr2aw,368
24
24
  mcp_code_indexer/middleware/auth.py,sha256=4HkHMDZBNsyPA1VE8qF7pRNKbqG4xIDZjllENbgynxI,7258
25
25
  mcp_code_indexer/middleware/error_middleware.py,sha256=0RnKM5fK_n_7AITK2ueAqv30kLBdjU3vaWOTwWd2Xs0,11965
@@ -58,8 +58,8 @@ mcp_code_indexer/vector_mode/providers/voyage_client.py,sha256=pfm9BOx5Temf0LM-V
58
58
  mcp_code_indexer/vector_mode/security/__init__.py,sha256=itfeuysSqV-m9xuo-CMkAoucxexVfPgeOU-ieTLvdls,336
59
59
  mcp_code_indexer/vector_mode/security/patterns.py,sha256=0xaiMnZm7YXswq3hVe_DJYePE9MhWuvizApLnmXus9M,11572
60
60
  mcp_code_indexer/vector_mode/security/redactor.py,sha256=tsFzhCJ99bp4EFqQVjZ-4f8Uf3ux9X4ODVR09oJG01U,13380
61
- mcp_code_indexer-4.2.9.dist-info/LICENSE,sha256=JN9dyPPgYwH9C-UjYM7FLNZjQ6BF7kAzpF3_4PwY4rY,1086
62
- mcp_code_indexer-4.2.9.dist-info/METADATA,sha256=7598CIN95wLAeFhJH1cgg-9I1Jc8yrTPBQb3GoIOPTY,27483
63
- mcp_code_indexer-4.2.9.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
64
- mcp_code_indexer-4.2.9.dist-info/entry_points.txt,sha256=UABj7HZ0mC6rvF22gxaz2LLNLGQShTrFmp5u00iUtvo,67
65
- mcp_code_indexer-4.2.9.dist-info/RECORD,,
61
+ mcp_code_indexer-4.2.11.dist-info/LICENSE,sha256=JN9dyPPgYwH9C-UjYM7FLNZjQ6BF7kAzpF3_4PwY4rY,1086
62
+ mcp_code_indexer-4.2.11.dist-info/METADATA,sha256=Uk0MEunQNUSW7zN5OpC3JEjxa9OISSWzB5bNNiMs64k,27484
63
+ mcp_code_indexer-4.2.11.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
64
+ mcp_code_indexer-4.2.11.dist-info/entry_points.txt,sha256=UABj7HZ0mC6rvF22gxaz2LLNLGQShTrFmp5u00iUtvo,67
65
+ mcp_code_indexer-4.2.11.dist-info/RECORD,,