mcp-code-indexer 3.4.1__tar.gz → 3.4.2__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 (35) hide show
  1. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/PKG-INFO +9 -3
  2. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/README.md +8 -2
  3. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/pyproject.toml +1 -1
  4. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/main.py +15 -40
  5. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/LICENSE +0 -0
  6. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/__init__.py +0 -0
  7. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/__main__.py +0 -0
  8. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/ask_handler.py +0 -0
  9. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/claude_api_handler.py +0 -0
  10. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/cleanup_manager.py +0 -0
  11. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/data/stop_words_english.txt +0 -0
  12. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/database/__init__.py +0 -0
  13. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/database/connection_health.py +0 -0
  14. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/database/database.py +0 -0
  15. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/database/exceptions.py +0 -0
  16. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/database/models.py +0 -0
  17. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/database/retry_executor.py +0 -0
  18. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/deepask_handler.py +0 -0
  19. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/error_handler.py +0 -0
  20. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/file_scanner.py +0 -0
  21. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/git_hook_handler.py +0 -0
  22. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/logging_config.py +0 -0
  23. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/middleware/__init__.py +0 -0
  24. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/middleware/error_middleware.py +0 -0
  25. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/migrations/001_initial.sql +0 -0
  26. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/migrations/002_performance_indexes.sql +0 -0
  27. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/migrations/003_project_overviews.sql +0 -0
  28. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/migrations/004_remove_branch_dependency.sql +0 -0
  29. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/migrations/005_remove_git_remotes.sql +0 -0
  30. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/query_preprocessor.py +0 -0
  31. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/server/__init__.py +0 -0
  32. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/server/mcp_server.py +0 -0
  33. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  34. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/token_counter.py +0 -0
  35. {mcp_code_indexer-3.4.1 → mcp_code_indexer-3.4.2}/src/mcp_code_indexer/tools/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mcp-code-indexer
3
- Version: 3.4.1
3
+ Version: 3.4.2
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
@@ -40,8 +40,8 @@ Description-Content-Type: text/markdown
40
40
 
41
41
  # MCP Code Indexer 🚀
42
42
 
43
- [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?32)](https://badge.fury.io/py/mcp-code-indexer)
44
- [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?32)](https://pypi.org/project/mcp-code-indexer/)
43
+ [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?33)](https://badge.fury.io/py/mcp-code-indexer)
44
+ [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?33)](https://pypi.org/project/mcp-code-indexer/)
45
45
  [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
46
46
 
47
47
  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.
@@ -245,8 +245,14 @@ mcp-code-indexer --githook
245
245
  # Analyze a specific commit
246
246
  mcp-code-indexer --githook abc123def
247
247
 
248
+ # Analyze using HEAD syntax
249
+ mcp-code-indexer --githook HEAD
250
+ mcp-code-indexer --githook HEAD~1
251
+ mcp-code-indexer --githook HEAD~3
252
+
248
253
  # Analyze a commit range (perfect for rebases)
249
254
  mcp-code-indexer --githook abc123 def456
255
+ mcp-code-indexer --githook HEAD~5 HEAD
250
256
  ```
251
257
 
252
258
  **🎯 Perfect for**:
@@ -1,7 +1,7 @@
1
1
  # MCP Code Indexer 🚀
2
2
 
3
- [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?32)](https://badge.fury.io/py/mcp-code-indexer)
4
- [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?32)](https://pypi.org/project/mcp-code-indexer/)
3
+ [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?33)](https://badge.fury.io/py/mcp-code-indexer)
4
+ [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?33)](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.
@@ -205,8 +205,14 @@ mcp-code-indexer --githook
205
205
  # Analyze a specific commit
206
206
  mcp-code-indexer --githook abc123def
207
207
 
208
+ # Analyze using HEAD syntax
209
+ mcp-code-indexer --githook HEAD
210
+ mcp-code-indexer --githook HEAD~1
211
+ mcp-code-indexer --githook HEAD~3
212
+
208
213
  # Analyze a commit range (perfect for rebases)
209
214
  mcp-code-indexer --githook abc123 def456
215
+ mcp-code-indexer --githook HEAD~5 HEAD
210
216
  ```
211
217
 
212
218
  **🎯 Perfect for**:
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "mcp-code-indexer"
7
- version = "3.4.1"
7
+ version = "3.4.2"
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"]
@@ -63,7 +63,7 @@ def parse_arguments() -> argparse.Namespace:
63
63
  parser.add_argument(
64
64
  "--getprojects",
65
65
  action="store_true",
66
- help="List all projects with IDs, branches, and description counts",
66
+ help="List all projects with IDs and file description counts",
67
67
  )
68
68
 
69
69
  parser.add_argument(
@@ -75,10 +75,10 @@ def parse_arguments() -> argparse.Namespace:
75
75
  parser.add_argument(
76
76
  "--dumpdescriptions",
77
77
  nargs="+",
78
- metavar=("PROJECT_ID", "BRANCH"),
78
+ metavar="PROJECT_ID",
79
79
  help=(
80
80
  "Export descriptions for a project. Usage: "
81
- "--dumpdescriptions PROJECT_ID [BRANCH]"
81
+ "--dumpdescriptions PROJECT_ID"
82
82
  ),
83
83
  )
84
84
 
@@ -89,8 +89,8 @@ def parse_arguments() -> argparse.Namespace:
89
89
  help=(
90
90
  "Git hook mode: auto-update descriptions based on git diff using "
91
91
  "OpenRouter API. Usage: --githook (current changes), --githook HASH "
92
- "(specific commit), --githook HASH1 HASH2 (commit range from "
93
- "HASH1 to HASH2)"
92
+ "(specific commit), --githook HASH1 HASH2 (commit range). "
93
+ "Supports: commit hashes, HEAD, HEAD~1, HEAD~3, branch names, tags."
94
94
  ),
95
95
  )
96
96
 
@@ -138,17 +138,12 @@ async def handle_getprojects(args: argparse.Namespace) -> None:
138
138
  print(f"ID: {project.id}")
139
139
  print(f"Name: {project.name}")
140
140
 
141
- # Get branch information
141
+ # Get file description count
142
142
  try:
143
- branch_counts = await db_manager.get_branch_file_counts(project.id)
144
- if branch_counts:
145
- print("Branches:")
146
- for branch, count in branch_counts.items():
147
- print(f" - {branch}: {count} descriptions")
148
- else:
149
- print("Branches: No descriptions found")
143
+ file_count = await db_manager.get_file_count(project.id)
144
+ print(f"Files: {file_count} descriptions")
150
145
  except Exception as e:
151
- print(f"Branches: Error loading branch info - {e}")
146
+ print(f"Files: Error loading file count - {e}")
152
147
 
153
148
  print("-" * 80)
154
149
 
@@ -288,11 +283,6 @@ async def handle_runcommand(args: argparse.Namespace) -> None:
288
283
  tool_arguments = json_data
289
284
  logger.info("Auto-detected tool: update_file_description")
290
285
  print("Auto-detected tool: update_file_description", file=sys.stderr)
291
- elif "branch" in json_data:
292
- tool_name = "check_codebase_size"
293
- tool_arguments = json_data
294
- logger.info("Auto-detected tool: check_codebase_size")
295
- print("Auto-detected tool: check_codebase_size", file=sys.stderr)
296
286
  else:
297
287
  logger.error(
298
288
  "Could not auto-detect tool from arguments",
@@ -449,7 +439,6 @@ async def handle_dumpdescriptions(args: argparse.Namespace) -> None:
449
439
  sys.exit(1)
450
440
 
451
441
  project_id = args.dumpdescriptions[0]
452
- branch = args.dumpdescriptions[1] if len(args.dumpdescriptions) > 1 else None
453
442
 
454
443
  db_manager = None
455
444
  try:
@@ -461,16 +450,10 @@ async def handle_dumpdescriptions(args: argparse.Namespace) -> None:
461
450
  token_counter = TokenCounter(args.token_limit)
462
451
 
463
452
  # Get file descriptions
464
- if branch:
465
- file_descriptions = await db_manager.get_all_file_descriptions(
466
- project_id=project_id, branch=branch
467
- )
468
- print(f"File descriptions for project {project_id}, branch {branch}:")
469
- else:
470
- file_descriptions = await db_manager.get_all_file_descriptions(
471
- project_id=project_id
472
- )
473
- print(f"File descriptions for project {project_id} (all branches):")
453
+ file_descriptions = await db_manager.get_all_file_descriptions(
454
+ project_id=project_id
455
+ )
456
+ print(f"File descriptions for project {project_id}:")
474
457
 
475
458
  print("=" * 80)
476
459
 
@@ -481,8 +464,6 @@ async def handle_dumpdescriptions(args: argparse.Namespace) -> None:
481
464
  total_tokens = 0
482
465
  for desc in file_descriptions:
483
466
  print(f"File: {desc.file_path}")
484
- if branch is None:
485
- print(f"Branch: {desc.branch}")
486
467
  print(f"Description: {desc.description}")
487
468
  print("-" * 40)
488
469
 
@@ -714,7 +695,6 @@ async def handle_map(args: argparse.Namespace) -> None:
714
695
  sys.exit(1)
715
696
 
716
697
  project = project_data["project"]
717
- branch = project_data["branch"]
718
698
  overview = project_data["overview"]
719
699
  files = project_data["files"]
720
700
 
@@ -723,7 +703,6 @@ async def handle_map(args: argparse.Namespace) -> None:
723
703
  extra={
724
704
  "structured_data": {
725
705
  "project_name": project.name,
726
- "branch": branch,
727
706
  "file_count": len(files),
728
707
  "has_overview": overview is not None,
729
708
  }
@@ -732,7 +711,7 @@ async def handle_map(args: argparse.Namespace) -> None:
732
711
 
733
712
  # Generate markdown
734
713
  markdown_content = generate_project_markdown(
735
- project, branch, overview, files, logger
714
+ project, overview, files, logger
736
715
  )
737
716
 
738
717
  # Output the markdown
@@ -766,7 +745,7 @@ async def handle_map(args: argparse.Namespace) -> None:
766
745
  logger.removeHandler(handler)
767
746
 
768
747
 
769
- def generate_project_markdown(project, branch, overview, files, logger):
748
+ def generate_project_markdown(project, overview, files, logger):
770
749
  """Generate the markdown content for the project map."""
771
750
  import re
772
751
  from collections import defaultdict
@@ -779,10 +758,6 @@ def generate_project_markdown(project, branch, overview, files, logger):
779
758
  markdown_lines.append(f"# {project_name}")
780
759
  markdown_lines.append("")
781
760
 
782
- # Project metadata
783
- markdown_lines.append(f"**Branch:** {branch}")
784
- markdown_lines.append("")
785
-
786
761
  # Project overview (with header demotion if needed)
787
762
  if overview and overview.overview:
788
763
  markdown_lines.append("## Project Overview")