mcp-code-indexer 1.0.1__py3-none-any.whl → 1.0.3__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/__init__.py +1 -1
- mcp_code_indexer/main.py +8 -3
- mcp_code_indexer/server/mcp_server.py +41 -5
- {mcp_code_indexer-1.0.1.dist-info → mcp_code_indexer-1.0.3.dist-info}/METADATA +3 -2
- {mcp_code_indexer-1.0.1.dist-info → mcp_code_indexer-1.0.3.dist-info}/RECORD +9 -9
- {mcp_code_indexer-1.0.1.dist-info → mcp_code_indexer-1.0.3.dist-info}/WHEEL +0 -0
- {mcp_code_indexer-1.0.1.dist-info → mcp_code_indexer-1.0.3.dist-info}/entry_points.txt +0 -0
- {mcp_code_indexer-1.0.1.dist-info → mcp_code_indexer-1.0.3.dist-info}/licenses/LICENSE +0 -0
- {mcp_code_indexer-1.0.1.dist-info → mcp_code_indexer-1.0.3.dist-info}/top_level.txt +0 -0
mcp_code_indexer/__init__.py
CHANGED
@@ -6,7 +6,7 @@ intelligent codebase navigation through searchable file descriptions,
|
|
6
6
|
token-aware overviews, and advanced merge capabilities.
|
7
7
|
"""
|
8
8
|
|
9
|
-
__version__ = "1.0.
|
9
|
+
__version__ = "1.0.3"
|
10
10
|
__author__ = "MCP Code Indexer Contributors"
|
11
11
|
__email__ = ""
|
12
12
|
__license__ = "MIT"
|
mcp_code_indexer/main.py
CHANGED
@@ -84,7 +84,7 @@ async def main() -> None:
|
|
84
84
|
db_path.parent.mkdir(parents=True, exist_ok=True)
|
85
85
|
cache_dir.mkdir(parents=True, exist_ok=True)
|
86
86
|
|
87
|
-
# Log startup information
|
87
|
+
# Log startup information to stderr (stdout reserved for MCP JSON-RPC)
|
88
88
|
logger.info("Starting MCP Code Index Server", extra={
|
89
89
|
"structured_data": {
|
90
90
|
"startup": {
|
@@ -119,9 +119,14 @@ def cli_main():
|
|
119
119
|
try:
|
120
120
|
asyncio.run(main())
|
121
121
|
except KeyboardInterrupt:
|
122
|
-
|
122
|
+
# For MCP servers, we should avoid stdout completely
|
123
|
+
# The server will log shutdown through stderr
|
124
|
+
pass
|
123
125
|
except Exception as e:
|
124
|
-
|
126
|
+
# Log critical errors to stderr, not stdout
|
127
|
+
import traceback
|
128
|
+
print(f"Server failed to start: {e}", file=sys.stderr)
|
129
|
+
print(f"Traceback: {traceback.format_exc()}", file=sys.stderr)
|
125
130
|
sys.exit(1)
|
126
131
|
|
127
132
|
|
@@ -75,6 +75,9 @@ class MCPCodeIndexServer:
|
|
75
75
|
# Register handlers
|
76
76
|
self._register_handlers()
|
77
77
|
|
78
|
+
# Add debug logging for server events
|
79
|
+
self.logger.debug("MCP server instance created and handlers registered")
|
80
|
+
|
78
81
|
self.logger.info(
|
79
82
|
"MCP Code Index Server initialized",
|
80
83
|
extra={"structured_data": {"initialization": {"token_limit": token_limit}}}
|
@@ -650,16 +653,49 @@ class MCPCodeIndexServer:
|
|
650
653
|
|
651
654
|
async def run(self) -> None:
|
652
655
|
"""Run the MCP server."""
|
656
|
+
logger.info("Starting server initialization...")
|
653
657
|
await self.initialize()
|
658
|
+
logger.info("Server initialization completed, starting MCP protocol...")
|
654
659
|
|
655
660
|
try:
|
656
661
|
async with stdio_server() as (read_stream, write_stream):
|
662
|
+
logger.info("stdio_server context established")
|
657
663
|
initialization_options = self.server.create_initialization_options()
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
664
|
+
logger.debug(f"Initialization options: {initialization_options}")
|
665
|
+
|
666
|
+
try:
|
667
|
+
logger.info("Starting MCP server protocol session...")
|
668
|
+
await self.server.run(
|
669
|
+
read_stream,
|
670
|
+
write_stream,
|
671
|
+
initialization_options
|
672
|
+
)
|
673
|
+
logger.info("MCP server session completed normally")
|
674
|
+
except Exception as e:
|
675
|
+
# Log the error with full traceback for debugging
|
676
|
+
import traceback
|
677
|
+
logger.error(f"MCP server session error: {e}", extra={
|
678
|
+
"structured_data": {
|
679
|
+
"error_type": type(e).__name__,
|
680
|
+
"error_message": str(e),
|
681
|
+
"traceback": traceback.format_exc()
|
682
|
+
}
|
683
|
+
})
|
684
|
+
# Re-raise to let the MCP framework handle protocol-level errors
|
685
|
+
raise
|
686
|
+
|
687
|
+
except KeyboardInterrupt:
|
688
|
+
logger.info("Server stopped by user interrupt")
|
689
|
+
except Exception as e:
|
690
|
+
import traceback
|
691
|
+
logger.error(f"Fatal server error: {e}", extra={
|
692
|
+
"structured_data": {
|
693
|
+
"error_type": type(e).__name__,
|
694
|
+
"error_message": str(e),
|
695
|
+
"traceback": traceback.format_exc()
|
696
|
+
}
|
697
|
+
})
|
698
|
+
raise
|
663
699
|
finally:
|
664
700
|
# Clean shutdown
|
665
701
|
await self.shutdown()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: mcp-code-indexer
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.3
|
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
|
Author: MCP Code Indexer Contributors
|
6
6
|
Maintainer: MCP Code Indexer Contributors
|
@@ -30,7 +30,7 @@ Requires-Python: >=3.9
|
|
30
30
|
Description-Content-Type: text/markdown
|
31
31
|
License-File: LICENSE
|
32
32
|
Requires-Dist: tiktoken>=0.9.0
|
33
|
-
Requires-Dist: mcp
|
33
|
+
Requires-Dist: mcp>=1.9.0
|
34
34
|
Requires-Dist: gitignore_parser==0.1.11
|
35
35
|
Requires-Dist: pydantic>=2.8.0
|
36
36
|
Requires-Dist: aiofiles==23.2.0
|
@@ -187,6 +187,7 @@ The server provides **8 powerful MCP tools** for intelligent codebase management
|
|
187
187
|
### Production Ready
|
188
188
|
- **Comprehensive error handling** with structured JSON logging
|
189
189
|
- **Async-first design** with proper resource cleanup
|
190
|
+
- **MCP protocol compliant** with clean stdio streams
|
190
191
|
- **Upstream inheritance** for fork workflows
|
191
192
|
- **Git integration** with .gitignore support
|
192
193
|
|
@@ -1,8 +1,8 @@
|
|
1
|
-
mcp_code_indexer/__init__.py,sha256=
|
1
|
+
mcp_code_indexer/__init__.py,sha256=ofXDjKUt-BX9vnnbzqbW-ocPaO9dDlkSb55Atk7uzA0,473
|
2
2
|
mcp_code_indexer/error_handler.py,sha256=cNSUFFrGBMLDv4qa78c7495L1wSl_dXCRbzCJOidx-Q,11590
|
3
3
|
mcp_code_indexer/file_scanner.py,sha256=1Z6wq7H14V1OMAHIF4v9G7SY8hC1puDmU5IXsCKH4kU,11442
|
4
4
|
mcp_code_indexer/logging_config.py,sha256=5L1cYIG8IAX91yCjc5pzkbO_KPt0bvm_ABHB53LBZjI,5184
|
5
|
-
mcp_code_indexer/main.py,sha256=
|
5
|
+
mcp_code_indexer/main.py,sha256=Rou-mAN9-12PPP8jC7dIs2_UNambJuC2F8BF--j-0m8,3715
|
6
6
|
mcp_code_indexer/merge_handler.py,sha256=lJR8eVq2qSrF6MW9mR3Fy8UzrNAaQ7RsI2FMNXne3vQ,14692
|
7
7
|
mcp_code_indexer/token_counter.py,sha256=WrifOkbF99nWWHlRlhCHAB2KN7qr83GOHl7apE-hJcE,8460
|
8
8
|
mcp_code_indexer/database/__init__.py,sha256=aPq_aaRp0aSwOBIq9GkuMNjmLxA411zg2vhdrAuHm-w,38
|
@@ -11,12 +11,12 @@ mcp_code_indexer/database/models.py,sha256=3wOxHKb6j3zKPWFSwB5g1TLpI507vLNZcqsxZ
|
|
11
11
|
mcp_code_indexer/middleware/__init__.py,sha256=p-mP0pMsfiU2yajCPvokCUxUEkh_lu4XJP1LyyMW2ug,220
|
12
12
|
mcp_code_indexer/middleware/error_middleware.py,sha256=v6jaHmPxf3qerYdb85X1tHIXLxgcbybpitKVakFLQTA,10109
|
13
13
|
mcp_code_indexer/server/__init__.py,sha256=16xMcuriUOBlawRqWNBk6niwrvtv_JD5xvI36X1Vsmk,41
|
14
|
-
mcp_code_indexer/server/mcp_server.py,sha256=
|
14
|
+
mcp_code_indexer/server/mcp_server.py,sha256=tdBORkihjnWrAXXQVidwq9JNB9hrvR3brym0qfdNgvQ,35132
|
15
15
|
mcp_code_indexer/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
|
16
16
|
mcp_code_indexer/tools/__init__.py,sha256=m01mxML2UdD7y5rih_XNhNSCMzQTz7WQ_T1TeOcYlnE,49
|
17
|
-
mcp_code_indexer-1.0.
|
18
|
-
mcp_code_indexer-1.0.
|
19
|
-
mcp_code_indexer-1.0.
|
20
|
-
mcp_code_indexer-1.0.
|
21
|
-
mcp_code_indexer-1.0.
|
22
|
-
mcp_code_indexer-1.0.
|
17
|
+
mcp_code_indexer-1.0.3.dist-info/licenses/LICENSE,sha256=JN9dyPPgYwH9C-UjYM7FLNZjQ6BF7kAzpF3_4PwY4rY,1086
|
18
|
+
mcp_code_indexer-1.0.3.dist-info/METADATA,sha256=yASw5zg4MI23XClkWmle327l1Sm6M_L2QDfGS5Km7M8,11930
|
19
|
+
mcp_code_indexer-1.0.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
20
|
+
mcp_code_indexer-1.0.3.dist-info/entry_points.txt,sha256=8HqWOw1Is7jOP1bvIgaSwouvT9z_Boe-9hd4NzyJOhY,68
|
21
|
+
mcp_code_indexer-1.0.3.dist-info/top_level.txt,sha256=yKYCM-gMGt-cnupGfAhnZaoEsROLB6DQ1KFUuyKx4rw,17
|
22
|
+
mcp_code_indexer-1.0.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|