mcp-code-indexer 4.2.3__tar.gz → 4.2.5__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.
Files changed (64) hide show
  1. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/PKG-INFO +3 -3
  2. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/README.md +2 -2
  3. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/pyproject.toml +1 -1
  4. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/daemon.py +24 -5
  5. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/LICENSE +0 -0
  6. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/__init__.py +0 -0
  7. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/__main__.py +0 -0
  8. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/ask_handler.py +0 -0
  9. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/claude_api_handler.py +0 -0
  10. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/cleanup_manager.py +0 -0
  11. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/commands/__init__.py +0 -0
  12. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/commands/makelocal.py +0 -0
  13. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/data/stop_words_english.txt +0 -0
  14. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/__init__.py +0 -0
  15. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/connection_health.py +0 -0
  16. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/database.py +0 -0
  17. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/database_factory.py +0 -0
  18. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/exceptions.py +0 -0
  19. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/models.py +0 -0
  20. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/path_resolver.py +0 -0
  21. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/retry_executor.py +0 -0
  22. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/deepask_handler.py +0 -0
  23. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/error_handler.py +0 -0
  24. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/file_scanner.py +0 -0
  25. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/git_hook_handler.py +0 -0
  26. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/logging_config.py +0 -0
  27. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/main.py +0 -0
  28. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/middleware/__init__.py +0 -0
  29. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/middleware/auth.py +0 -0
  30. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/middleware/error_middleware.py +0 -0
  31. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/middleware/logging.py +0 -0
  32. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/middleware/security.py +0 -0
  33. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/migrations/001_initial.sql +0 -0
  34. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/migrations/002_performance_indexes.sql +0 -0
  35. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/migrations/003_project_overviews.sql +0 -0
  36. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/migrations/004_remove_branch_dependency.sql +0 -0
  37. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/migrations/005_remove_git_remotes.sql +0 -0
  38. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/migrations/006_vector_mode.sql +0 -0
  39. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/query_preprocessor.py +0 -0
  40. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/server/__init__.py +0 -0
  41. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/server/mcp_server.py +0 -0
  42. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  43. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/token_counter.py +0 -0
  44. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/tools/__init__.py +0 -0
  45. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/transport/__init__.py +0 -0
  46. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/transport/base.py +0 -0
  47. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/transport/http_transport.py +0 -0
  48. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/transport/stdio_transport.py +0 -0
  49. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/__init__.py +0 -0
  50. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/chunking/__init__.py +0 -0
  51. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/chunking/ast_chunker.py +0 -0
  52. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/chunking/chunk_optimizer.py +0 -0
  53. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/chunking/language_handlers.py +0 -0
  54. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/config.py +0 -0
  55. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/monitoring/__init__.py +0 -0
  56. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/monitoring/change_detector.py +0 -0
  57. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/monitoring/file_watcher.py +0 -0
  58. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/monitoring/merkle_tree.py +0 -0
  59. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/providers/__init__.py +0 -0
  60. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/providers/turbopuffer_client.py +0 -0
  61. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/providers/voyage_client.py +0 -0
  62. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/security/__init__.py +0 -0
  63. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/security/patterns.py +0 -0
  64. {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/security/redactor.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mcp-code-indexer
3
- Version: 4.2.3
3
+ Version: 4.2.5
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?50)](https://badge.fury.io/py/mcp-code-indexer)
52
- [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?50)](https://pypi.org/project/mcp-code-indexer/)
51
+ [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?52)](https://badge.fury.io/py/mcp-code-indexer)
52
+ [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?52)](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.
@@ -1,7 +1,7 @@
1
1
  # MCP Code Indexer 🚀
2
2
 
3
- [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?50)](https://badge.fury.io/py/mcp-code-indexer)
4
- [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?50)](https://pypi.org/project/mcp-code-indexer/)
3
+ [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?52)](https://badge.fury.io/py/mcp-code-indexer)
4
+ [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?52)](https://pypi.org/project/mcp-code-indexer/)
5
5
  [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
6
6
 
7
7
  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.
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "mcp-code-indexer"
7
- version = "4.2.3"
7
+ version = "4.2.5"
8
8
  description = "MCP server that tracks file descriptions across codebases, enabling AI agents to efficiently navigate and understand code through searchable summaries and token-aware overviews."
9
9
  authors = ["MCP Code Indexer Contributors"]
10
10
  maintainers = ["MCP Code Indexer Contributors"]
@@ -44,6 +44,7 @@ class VectorDaemon:
44
44
  self.monitored_projects: Set[str] = set()
45
45
  self.processing_queue: asyncio.Queue = asyncio.Queue(maxsize=config.max_queue_size)
46
46
  self.workers: list[asyncio.Task] = []
47
+ self.monitor_tasks: list[asyncio.Task] = []
47
48
 
48
49
  # Statistics
49
50
  self.stats = {
@@ -101,6 +102,7 @@ class VectorDaemon:
101
102
  # Start monitoring tasks
102
103
  monitor_task = asyncio.create_task(self._monitor_projects())
103
104
  stats_task = asyncio.create_task(self._stats_reporter())
105
+ self.monitor_tasks.extend([monitor_task, stats_task])
104
106
 
105
107
  # Wait for shutdown signal
106
108
  await self._run_until_shutdown()
@@ -129,15 +131,21 @@ class VectorDaemon:
129
131
  projects = await self.db_manager.get_all_projects()
130
132
 
131
133
  for project in projects:
132
- if project.name not in self.monitored_projects:
134
+ if project.name not in self.monitored_projects and project.aliases:
133
135
  logger.info(f"Adding project to monitoring: {project.name}")
134
136
  self.monitored_projects.add(project.name)
135
137
 
138
+ # Use first alias as folder path
139
+ folder_path = project.aliases[0]
140
+
136
141
  # Queue initial indexing task
137
- await self._queue_project_scan(project.name, project.folder_path)
142
+ await self._queue_project_scan(project.name, folder_path)
138
143
 
139
144
  await asyncio.sleep(self.config.daemon_poll_interval)
140
145
 
146
+ except asyncio.CancelledError:
147
+ logger.info("Project monitoring cancelled")
148
+ break
141
149
  except Exception as e:
142
150
  logger.error(f"Error in project monitoring: {e}")
143
151
  self.stats["errors_count"] += 1
@@ -177,6 +185,9 @@ class VectorDaemon:
177
185
  await self._process_task(task, worker_id)
178
186
  self.stats["last_activity"] = time.time()
179
187
 
188
+ except asyncio.CancelledError:
189
+ logger.info(f"Worker {worker_id} cancelled")
190
+ break
180
191
  except Exception as e:
181
192
  logger.error(f"Worker {worker_id} error: {e}")
182
193
  self.stats["errors_count"] += 1
@@ -248,6 +259,9 @@ class VectorDaemon:
248
259
 
249
260
  await asyncio.sleep(60.0) # Report every minute
250
261
 
262
+ except asyncio.CancelledError:
263
+ logger.info("Stats reporting cancelled")
264
+ break
251
265
  except Exception as e:
252
266
  logger.error(f"Error in stats reporting: {e}")
253
267
  await asyncio.sleep(10.0)
@@ -261,9 +275,14 @@ class VectorDaemon:
261
275
  for worker in self.workers:
262
276
  worker.cancel()
263
277
 
264
- # Wait for workers to finish
265
- if self.workers:
266
- await asyncio.gather(*self.workers, return_exceptions=True)
278
+ # Cancel monitor tasks
279
+ for task in self.monitor_tasks:
280
+ task.cancel()
281
+
282
+ # Wait for all tasks to finish
283
+ all_tasks = self.workers + self.monitor_tasks
284
+ if all_tasks:
285
+ await asyncio.gather(*all_tasks, return_exceptions=True)
267
286
 
268
287
  logger.info("Vector daemon shutdown complete")
269
288