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.
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/PKG-INFO +3 -3
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/README.md +2 -2
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/pyproject.toml +1 -1
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/daemon.py +24 -5
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/LICENSE +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/__init__.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/__main__.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/ask_handler.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/claude_api_handler.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/cleanup_manager.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/commands/__init__.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/commands/makelocal.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/data/stop_words_english.txt +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/__init__.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/connection_health.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/database.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/database_factory.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/exceptions.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/models.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/path_resolver.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/retry_executor.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/deepask_handler.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/error_handler.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/file_scanner.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/git_hook_handler.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/logging_config.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/main.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/middleware/__init__.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/middleware/auth.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/middleware/error_middleware.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/middleware/logging.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/middleware/security.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/migrations/001_initial.sql +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/migrations/002_performance_indexes.sql +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/migrations/003_project_overviews.sql +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/migrations/004_remove_branch_dependency.sql +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/migrations/005_remove_git_remotes.sql +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/migrations/006_vector_mode.sql +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/query_preprocessor.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/server/__init__.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/server/mcp_server.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/token_counter.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/tools/__init__.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/transport/__init__.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/transport/base.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/transport/http_transport.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/transport/stdio_transport.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/__init__.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/chunking/__init__.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/chunking/ast_chunker.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/chunking/chunk_optimizer.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/chunking/language_handlers.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/config.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/monitoring/__init__.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/monitoring/change_detector.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/monitoring/file_watcher.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/monitoring/merkle_tree.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/providers/__init__.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/providers/turbopuffer_client.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/providers/voyage_client.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/security/__init__.py +0 -0
- {mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/security/patterns.py +0 -0
- {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
|
+
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
|
-
[](https://badge.fury.io/py/mcp-code-indexer)
|
|
52
|
+
[](https://pypi.org/project/mcp-code-indexer/)
|
|
53
53
|
[](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
|
-
[](https://badge.fury.io/py/mcp-code-indexer)
|
|
4
|
+
[](https://pypi.org/project/mcp-code-indexer/)
|
|
5
5
|
[](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.
|
|
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"]
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/daemon.py
RENAMED
|
@@ -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,
|
|
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
|
-
#
|
|
265
|
-
|
|
266
|
-
|
|
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
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/claude_api_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/commands/makelocal.py
RENAMED
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/data/stop_words_english.txt
RENAMED
|
File without changes
|
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/connection_health.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/database_factory.py
RENAMED
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/path_resolver.py
RENAMED
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/database/retry_executor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/middleware/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/middleware/logging.py
RENAMED
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/middleware/security.py
RENAMED
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/migrations/001_initial.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/query_preprocessor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/transport/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/transport/http_transport.py
RENAMED
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/transport/stdio_transport.py
RENAMED
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_code_indexer-4.2.3 → mcp_code_indexer-4.2.5}/src/mcp_code_indexer/vector_mode/config.py
RENAMED
|
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
|