mcp-code-indexer 1.6.5__tar.gz → 1.7.0__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 (41) hide show
  1. {mcp_code_indexer-1.6.5/src/mcp_code_indexer.egg-info → mcp_code_indexer-1.7.0}/PKG-INFO +3 -3
  2. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/README.md +2 -2
  3. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/pyproject.toml +1 -1
  4. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/git_hook_handler.py +3 -2
  5. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/logging_config.py +53 -0
  6. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/main.py +1 -1
  7. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0/src/mcp_code_indexer.egg-info}/PKG-INFO +3 -3
  8. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/LICENSE +0 -0
  9. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/MANIFEST.in +0 -0
  10. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/docs/api-reference.md +0 -0
  11. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/docs/architecture.md +0 -0
  12. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/docs/configuration.md +0 -0
  13. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/docs/contributing.md +0 -0
  14. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/docs/git-hook-setup.md +0 -0
  15. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/migrations/001_initial.sql +0 -0
  16. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/migrations/002_performance_indexes.sql +0 -0
  17. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/migrations/003_project_overviews.sql +0 -0
  18. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/requirements.txt +0 -0
  19. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/setup.cfg +0 -0
  20. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/setup.py +0 -0
  21. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/__init__.py +0 -0
  22. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/__main__.py +0 -0
  23. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/data/stop_words_english.txt +0 -0
  24. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/database/__init__.py +0 -0
  25. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/database/database.py +0 -0
  26. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/database/models.py +0 -0
  27. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/error_handler.py +0 -0
  28. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/file_scanner.py +0 -0
  29. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/merge_handler.py +0 -0
  30. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/middleware/__init__.py +0 -0
  31. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/middleware/error_middleware.py +0 -0
  32. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/server/__init__.py +0 -0
  33. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/server/mcp_server.py +0 -0
  34. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  35. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/token_counter.py +0 -0
  36. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer/tools/__init__.py +0 -0
  37. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer.egg-info/SOURCES.txt +0 -0
  38. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer.egg-info/dependency_links.txt +0 -0
  39. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer.egg-info/entry_points.txt +0 -0
  40. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer.egg-info/requires.txt +0 -0
  41. {mcp_code_indexer-1.6.5 → mcp_code_indexer-1.7.0}/src/mcp_code_indexer.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-code-indexer
3
- Version: 1.6.5
3
+ Version: 1.7.0
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
@@ -59,8 +59,8 @@ Dynamic: requires-python
59
59
 
60
60
  # MCP Code Indexer 🚀
61
61
 
62
- [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?8)](https://badge.fury.io/py/mcp-code-indexer)
63
- [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?8)](https://pypi.org/project/mcp-code-indexer/)
62
+ [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?9)](https://badge.fury.io/py/mcp-code-indexer)
63
+ [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?9)](https://pypi.org/project/mcp-code-indexer/)
64
64
  [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
65
65
 
66
66
  A production-ready **Model Context Protocol (MCP) server** that revolutionizes how AI agents navigate and understand codebases. Instead of repeatedly scanning files, agents get instant access to intelligent descriptions, semantic search, and context-aware recommendations.
@@ -1,7 +1,7 @@
1
1
  # MCP Code Indexer 🚀
2
2
 
3
- [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?8)](https://badge.fury.io/py/mcp-code-indexer)
4
- [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?8)](https://pypi.org/project/mcp-code-indexer/)
3
+ [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?9)](https://badge.fury.io/py/mcp-code-indexer)
4
+ [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?9)](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. Instead of repeatedly scanning files, agents get instant access to intelligent descriptions, semantic search, and context-aware recommendations.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mcp-code-indexer"
7
- version = "1.6.5"
7
+ version = "1.7.0"
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
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -49,17 +49,18 @@ class GitHookHandler:
49
49
  OPENROUTER_API_URL = "https://openrouter.ai/api/v1/chat/completions"
50
50
  OPENROUTER_MODEL = "anthropic/claude-sonnet-4"
51
51
 
52
- def __init__(self, db_manager: DatabaseManager, cache_dir: Path):
52
+ def __init__(self, db_manager: DatabaseManager, cache_dir: Path, logger: Optional[logging.Logger] = None):
53
53
  """
54
54
  Initialize GitHookHandler.
55
55
 
56
56
  Args:
57
57
  db_manager: Database manager instance
58
58
  cache_dir: Cache directory for temporary files
59
+ logger: Logger instance to use (optional, creates default if not provided)
59
60
  """
60
61
  self.db_manager = db_manager
61
62
  self.cache_dir = cache_dir
62
- self.logger = logging.getLogger(__name__)
63
+ self.logger = logger if logger is not None else logging.getLogger(__name__)
63
64
  self.token_counter = TokenCounter()
64
65
 
65
66
  # Git hook specific settings
@@ -163,6 +163,9 @@ def setup_command_logger(
163
163
 
164
164
  logger.addHandler(file_handler)
165
165
 
166
+ # Set up component loggers to also log to this command's log file
167
+ _setup_component_loggers_for_command(command_name, file_handler, structured_formatter)
168
+
166
169
  logger.info(f"=== {command_name.upper()} SESSION STARTED ===")
167
170
 
168
171
  except (OSError, PermissionError) as e:
@@ -175,6 +178,56 @@ def setup_command_logger(
175
178
  return logger
176
179
 
177
180
 
181
+ def _setup_component_loggers_for_command(
182
+ command_name: str,
183
+ file_handler: logging.Handler,
184
+ formatter: logging.Formatter
185
+ ) -> None:
186
+ """
187
+ Set up component loggers to also send logs to the command's log file.
188
+
189
+ Args:
190
+ command_name: Name of the command
191
+ file_handler: File handler to add to component loggers
192
+ formatter: Formatter to use for the handler
193
+ """
194
+ # List of component logger names that should also log to command files
195
+ component_loggers = [
196
+ "mcp_code_indexer.database.database",
197
+ "mcp_code_indexer.server.mcp_server",
198
+ "mcp_code_indexer.token_counter",
199
+ "mcp_code_indexer.file_scanner",
200
+ "mcp_code_indexer.error_handler",
201
+ "mcp_code_indexer.merge_handler"
202
+ ]
203
+
204
+ for component_logger_name in component_loggers:
205
+ component_logger = logging.getLogger(component_logger_name)
206
+
207
+ # Create a separate handler for this command to avoid interference
208
+ command_handler = logging.handlers.RotatingFileHandler(
209
+ file_handler.baseFilename,
210
+ maxBytes=file_handler.maxBytes,
211
+ backupCount=file_handler.backupCount,
212
+ encoding='utf-8'
213
+ )
214
+ command_handler.setLevel(logging.DEBUG)
215
+ command_handler.setFormatter(formatter)
216
+
217
+ # Add a marker to identify which command this handler belongs to
218
+ command_handler._command_name = command_name
219
+
220
+ # Remove any existing handlers for this command (in case of multiple calls)
221
+ existing_handlers = [h for h in component_logger.handlers if hasattr(h, '_command_name') and h._command_name == command_name]
222
+ for handler in existing_handlers:
223
+ component_logger.removeHandler(handler)
224
+ handler.close()
225
+
226
+ # Add the new handler
227
+ component_logger.addHandler(command_handler)
228
+ component_logger.setLevel(logging.DEBUG) # Ensure component loggers capture all levels
229
+
230
+
178
231
  def log_performance_metrics(
179
232
  logger: logging.Logger,
180
233
  operation: str,
@@ -499,7 +499,7 @@ async def handle_githook(args: argparse.Namespace) -> None:
499
499
  logger.debug("Database initialized successfully")
500
500
 
501
501
  # Initialize git hook handler
502
- git_handler = GitHookHandler(db_manager, cache_dir)
502
+ git_handler = GitHookHandler(db_manager, cache_dir, logger)
503
503
  logger.debug("Git hook handler initialized")
504
504
 
505
505
  # Run git hook analysis
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-code-indexer
3
- Version: 1.6.5
3
+ Version: 1.7.0
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
@@ -59,8 +59,8 @@ Dynamic: requires-python
59
59
 
60
60
  # MCP Code Indexer 🚀
61
61
 
62
- [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?8)](https://badge.fury.io/py/mcp-code-indexer)
63
- [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?8)](https://pypi.org/project/mcp-code-indexer/)
62
+ [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?9)](https://badge.fury.io/py/mcp-code-indexer)
63
+ [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?9)](https://pypi.org/project/mcp-code-indexer/)
64
64
  [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
65
65
 
66
66
  A production-ready **Model Context Protocol (MCP) server** that revolutionizes how AI agents navigate and understand codebases. Instead of repeatedly scanning files, agents get instant access to intelligent descriptions, semantic search, and context-aware recommendations.