mcp-code-indexer 4.2.12__py3-none-any.whl → 4.2.14__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/database/database.py +25 -1
- mcp_code_indexer/database/models.py +1 -0
- mcp_code_indexer/main.py +26 -0
- mcp_code_indexer/vector_mode/daemon.py +5 -3
- {mcp_code_indexer-4.2.12.dist-info → mcp_code_indexer-4.2.14.dist-info}/METADATA +3 -3
- {mcp_code_indexer-4.2.12.dist-info → mcp_code_indexer-4.2.14.dist-info}/RECORD +9 -9
- {mcp_code_indexer-4.2.12.dist-info → mcp_code_indexer-4.2.14.dist-info}/LICENSE +0 -0
- {mcp_code_indexer-4.2.12.dist-info → mcp_code_indexer-4.2.14.dist-info}/WHEEL +0 -0
- {mcp_code_indexer-4.2.12.dist-info → mcp_code_indexer-4.2.14.dist-info}/entry_points.txt +0 -0
|
@@ -744,7 +744,7 @@ class DatabaseManager:
|
|
|
744
744
|
"""Get all projects in the database."""
|
|
745
745
|
async with self.get_connection() as db:
|
|
746
746
|
cursor = await db.execute(
|
|
747
|
-
"SELECT id, name, aliases, created, last_accessed FROM projects"
|
|
747
|
+
"SELECT id, name, aliases, created, last_accessed, COALESCE(vector_mode, 0) FROM projects"
|
|
748
748
|
)
|
|
749
749
|
rows = await cursor.fetchall()
|
|
750
750
|
|
|
@@ -757,6 +757,30 @@ class DatabaseManager:
|
|
|
757
757
|
aliases=aliases,
|
|
758
758
|
created=row[3],
|
|
759
759
|
last_accessed=row[4],
|
|
760
|
+
vector_mode=bool(row[5]),
|
|
761
|
+
)
|
|
762
|
+
projects.append(project)
|
|
763
|
+
|
|
764
|
+
return projects
|
|
765
|
+
|
|
766
|
+
async def get_vector_enabled_projects(self) -> List[Project]:
|
|
767
|
+
"""Get projects that have vector mode enabled."""
|
|
768
|
+
async with self.get_connection() as db:
|
|
769
|
+
cursor = await db.execute(
|
|
770
|
+
"SELECT id, name, aliases, created, last_accessed, vector_mode FROM projects WHERE vector_mode = 1"
|
|
771
|
+
)
|
|
772
|
+
rows = await cursor.fetchall()
|
|
773
|
+
|
|
774
|
+
projects = []
|
|
775
|
+
for row in rows:
|
|
776
|
+
aliases = json.loads(row[2]) if row[2] else []
|
|
777
|
+
project = Project(
|
|
778
|
+
id=row[0],
|
|
779
|
+
name=row[1],
|
|
780
|
+
aliases=aliases,
|
|
781
|
+
created=row[3],
|
|
782
|
+
last_accessed=row[4],
|
|
783
|
+
vector_mode=bool(row[5]),
|
|
760
784
|
)
|
|
761
785
|
projects.append(project)
|
|
762
786
|
|
|
@@ -32,6 +32,7 @@ class Project(BaseModel):
|
|
|
32
32
|
last_accessed: datetime = Field(
|
|
33
33
|
default_factory=datetime.utcnow, description="Last access timestamp"
|
|
34
34
|
)
|
|
35
|
+
vector_mode: bool = Field(default=False, description="Enable vector search for this project")
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
class FileDescription(BaseModel):
|
mcp_code_indexer/main.py
CHANGED
|
@@ -1129,6 +1129,19 @@ async def main() -> None:
|
|
|
1129
1129
|
)
|
|
1130
1130
|
except asyncio.TimeoutError:
|
|
1131
1131
|
logger.warning("Some tasks did not cancel within timeout")
|
|
1132
|
+
|
|
1133
|
+
# Force close any remaining connections and cleanup resources
|
|
1134
|
+
try:
|
|
1135
|
+
# Give a moment for final cleanup
|
|
1136
|
+
await asyncio.sleep(0.1)
|
|
1137
|
+
|
|
1138
|
+
# Shutdown the event loop executor to stop any background threads
|
|
1139
|
+
loop = asyncio.get_running_loop()
|
|
1140
|
+
if hasattr(loop, '_default_executor') and loop._default_executor:
|
|
1141
|
+
loop._default_executor.shutdown(wait=False)
|
|
1142
|
+
|
|
1143
|
+
except Exception as e:
|
|
1144
|
+
logger.warning(f"Error during final cleanup: {e}")
|
|
1132
1145
|
|
|
1133
1146
|
|
|
1134
1147
|
def cli_main() -> None:
|
|
@@ -1146,6 +1159,19 @@ def cli_main() -> None:
|
|
|
1146
1159
|
print(f"Server failed to start: {e}", file=sys.stderr)
|
|
1147
1160
|
print(f"Traceback: {traceback.format_exc()}", file=sys.stderr)
|
|
1148
1161
|
sys.exit(1)
|
|
1162
|
+
finally:
|
|
1163
|
+
# Force cleanup of any remaining resources to prevent hanging
|
|
1164
|
+
import threading
|
|
1165
|
+
import time
|
|
1166
|
+
|
|
1167
|
+
# Give main threads a moment to finish
|
|
1168
|
+
time.sleep(0.1)
|
|
1169
|
+
|
|
1170
|
+
# Force exit if daemon threads are preventing shutdown
|
|
1171
|
+
active_threads = threading.active_count()
|
|
1172
|
+
if active_threads > 1: # More than just the main thread
|
|
1173
|
+
import os
|
|
1174
|
+
os._exit(0)
|
|
1149
1175
|
|
|
1150
1176
|
|
|
1151
1177
|
if __name__ == "__main__":
|
|
@@ -113,11 +113,13 @@ class VectorDaemon:
|
|
|
113
113
|
|
|
114
114
|
while self.is_running:
|
|
115
115
|
try:
|
|
116
|
-
# Get
|
|
117
|
-
projects = await self.db_manager.
|
|
116
|
+
# Get projects that have vector mode enabled
|
|
117
|
+
projects = await self.db_manager.get_vector_enabled_projects()
|
|
118
118
|
|
|
119
119
|
for project in projects:
|
|
120
|
-
if project.name not in self.monitored_projects and
|
|
120
|
+
if (project.name not in self.monitored_projects and
|
|
121
|
+
project.aliases and
|
|
122
|
+
project.vector_mode):
|
|
121
123
|
logger.info(f"Adding project to monitoring: {project.name}")
|
|
122
124
|
self.monitored_projects.add(project.name)
|
|
123
125
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: mcp-code-indexer
|
|
3
|
-
Version: 4.2.
|
|
3
|
+
Version: 4.2.14
|
|
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.
|
|
@@ -8,10 +8,10 @@ mcp_code_indexer/commands/makelocal.py,sha256=T_44so96jcs1FNlft9E3nAq0LlOzQLhjLd
|
|
|
8
8
|
mcp_code_indexer/data/stop_words_english.txt,sha256=feRGP8WG5hQPo-wZN5ralJiSv1CGw4h3010NBJnJ0Z8,6344
|
|
9
9
|
mcp_code_indexer/database/__init__.py,sha256=aPq_aaRp0aSwOBIq9GkuMNjmLxA411zg2vhdrAuHm-w,38
|
|
10
10
|
mcp_code_indexer/database/connection_health.py,sha256=jZr3tCbfjUJujdXe_uxtm1N4c31dMV4euiSY4ulamOE,25497
|
|
11
|
-
mcp_code_indexer/database/database.py,sha256=
|
|
11
|
+
mcp_code_indexer/database/database.py,sha256=CrFkUJKyKV7mJsI64EoIwfoiEj_3JMN_QV-BGOeFLHA,48245
|
|
12
12
|
mcp_code_indexer/database/database_factory.py,sha256=zm942m72mqCYTGh1GFyVw-hBsbZcZnx3znJ2ZQPwISM,4316
|
|
13
13
|
mcp_code_indexer/database/exceptions.py,sha256=bamoC-ssw_TMRA5-6lzX6d_1DlcXXrcmiCMBdUEQ9dI,10479
|
|
14
|
-
mcp_code_indexer/database/models.py,sha256=
|
|
14
|
+
mcp_code_indexer/database/models.py,sha256=ggiyjkkC2C5hmntgNcLX4wJMllDH1oh6VuuHUNgY9EY,13279
|
|
15
15
|
mcp_code_indexer/database/path_resolver.py,sha256=1Ubx6Ly5F2dnvhbdN3tqyowBHslABXpoA6wgL4BQYGo,3461
|
|
16
16
|
mcp_code_indexer/database/retry_executor.py,sha256=6Hb0BM2BO6fl7sTIHtHFcwgV93W22eOrFvexYtFpa0k,13966
|
|
17
17
|
mcp_code_indexer/deepask_handler.py,sha256=qI9h_Me5WQAbt3hzzDG8XDBMZlnvx-I9R7OsmO_o8aA,18497
|
|
@@ -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=
|
|
22
|
+
mcp_code_indexer/main.py,sha256=em_SUw4rv9ZtA6AJRy-q4zjOETcmPizZCgHKzksLQP8,39389
|
|
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
|
|
@@ -47,7 +47,7 @@ mcp_code_indexer/vector_mode/chunking/ast_chunker.py,sha256=GTl_6U0nSgDRRzKS07tJ
|
|
|
47
47
|
mcp_code_indexer/vector_mode/chunking/chunk_optimizer.py,sha256=xD0zEibjt6FLBFaKHNc63-iKTtCgnOlLL_9Hc8mCrzE,19752
|
|
48
48
|
mcp_code_indexer/vector_mode/chunking/language_handlers.py,sha256=YEpTVjzyJH445OjniGV05apexsfG5KVR4lwBEl4mGJc,18189
|
|
49
49
|
mcp_code_indexer/vector_mode/config.py,sha256=g5p9Q4EAR20DfLv4RxaQnk3_UdysuvWS8rcsjs1vgwI,6680
|
|
50
|
-
mcp_code_indexer/vector_mode/daemon.py,sha256=
|
|
50
|
+
mcp_code_indexer/vector_mode/daemon.py,sha256=MRXp7eycnPzO80k_NqJl9s0paVqcWnJ865frBK0tC-E,12341
|
|
51
51
|
mcp_code_indexer/vector_mode/monitoring/__init__.py,sha256=9rNWCvHxRMvYumdIrPjb5K9fpOwe1Aem24hdh8gXoDM,439
|
|
52
52
|
mcp_code_indexer/vector_mode/monitoring/change_detector.py,sha256=X82e_sKbJJFPhqZFJubLQb8Rs-srRtS7sh0nUOsPCPw,10338
|
|
53
53
|
mcp_code_indexer/vector_mode/monitoring/file_watcher.py,sha256=AQ6YHSKXPubtprLZngeLb0othJOCNQZ7wwXUvqwphT4,15299
|
|
@@ -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.
|
|
62
|
-
mcp_code_indexer-4.2.
|
|
63
|
-
mcp_code_indexer-4.2.
|
|
64
|
-
mcp_code_indexer-4.2.
|
|
65
|
-
mcp_code_indexer-4.2.
|
|
61
|
+
mcp_code_indexer-4.2.14.dist-info/LICENSE,sha256=JN9dyPPgYwH9C-UjYM7FLNZjQ6BF7kAzpF3_4PwY4rY,1086
|
|
62
|
+
mcp_code_indexer-4.2.14.dist-info/METADATA,sha256=cXF4ienXMSV8S_3vP9aZlfMEoclygyLCoOdNFAcg0Lw,27484
|
|
63
|
+
mcp_code_indexer-4.2.14.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
64
|
+
mcp_code_indexer-4.2.14.dist-info/entry_points.txt,sha256=UABj7HZ0mC6rvF22gxaz2LLNLGQShTrFmp5u00iUtvo,67
|
|
65
|
+
mcp_code_indexer-4.2.14.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|