mcp-code-indexer 1.2.1__tar.gz → 1.2.3__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 (39) hide show
  1. {mcp_code_indexer-1.2.1/src/mcp_code_indexer.egg-info → mcp_code_indexer-1.2.3}/PKG-INFO +3 -3
  2. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/README.md +2 -2
  3. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/pyproject.toml +1 -1
  4. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/setup.py +1 -1
  5. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/__init__.py +1 -1
  6. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/database/database.py +1 -1
  7. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/server/mcp_server.py +32 -17
  8. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3/src/mcp_code_indexer.egg-info}/PKG-INFO +3 -3
  9. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/LICENSE +0 -0
  10. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/MANIFEST.in +0 -0
  11. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/docs/api-reference.md +0 -0
  12. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/docs/architecture.md +0 -0
  13. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/docs/configuration.md +0 -0
  14. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/docs/contributing.md +0 -0
  15. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/migrations/001_initial.sql +0 -0
  16. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/migrations/002_performance_indexes.sql +0 -0
  17. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/migrations/003_project_overviews.sql +0 -0
  18. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/requirements.txt +0 -0
  19. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/setup.cfg +0 -0
  20. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/__main__.py +0 -0
  21. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/data/stop_words_english.txt +0 -0
  22. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/database/__init__.py +0 -0
  23. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/database/models.py +0 -0
  24. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/error_handler.py +0 -0
  25. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/file_scanner.py +0 -0
  26. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/logging_config.py +0 -0
  27. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/main.py +0 -0
  28. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/merge_handler.py +0 -0
  29. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/middleware/__init__.py +0 -0
  30. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/middleware/error_middleware.py +0 -0
  31. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/server/__init__.py +0 -0
  32. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  33. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/token_counter.py +0 -0
  34. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer/tools/__init__.py +0 -0
  35. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer.egg-info/SOURCES.txt +0 -0
  36. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer.egg-info/dependency_links.txt +0 -0
  37. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer.egg-info/entry_points.txt +0 -0
  38. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/src/mcp_code_indexer.egg-info/requires.txt +0 -0
  39. {mcp_code_indexer-1.2.1 → mcp_code_indexer-1.2.3}/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.2.1
3
+ Version: 1.2.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
@@ -55,8 +55,8 @@ Dynamic: requires-python
55
55
 
56
56
  # MCP Code Indexer 🚀
57
57
 
58
- [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg)](https://badge.fury.io/py/mcp-code-indexer)
59
- [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg)](https://pypi.org/project/mcp-code-indexer/)
58
+ [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?1)](https://badge.fury.io/py/mcp-code-indexer)
59
+ [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?1)](https://pypi.org/project/mcp-code-indexer/)
60
60
  [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
61
61
 
62
62
  A production-ready **Model Context Protocol (MCP) server** that provides intelligent codebase navigation for AI agents through searchable file descriptions, token-aware overviews, and advanced merge capabilities.
@@ -1,7 +1,7 @@
1
1
  # MCP Code Indexer 🚀
2
2
 
3
- [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg)](https://badge.fury.io/py/mcp-code-indexer)
4
- [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg)](https://pypi.org/project/mcp-code-indexer/)
3
+ [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?1)](https://badge.fury.io/py/mcp-code-indexer)
4
+ [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?1)](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 provides intelligent codebase navigation for AI agents through searchable file descriptions, token-aware overviews, and advanced merge capabilities.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mcp-code-indexer"
7
- version = "1.2.1"
7
+ version = "1.2.3"
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"}
@@ -21,7 +21,7 @@ def get_version():
21
21
  return data["project"]["version"]
22
22
  except Exception:
23
23
  # Fallback version if reading fails
24
- return "1.2.1"
24
+ return "1.2.3"
25
25
 
26
26
  setup(
27
27
  name="mcp-code-indexer",
@@ -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.5"
9
+ __version__ = "1.2.3"
10
10
  __author__ = "MCP Code Indexer Contributors"
11
11
  __email__ = ""
12
12
  __license__ = "MIT"
@@ -49,7 +49,7 @@ class DatabaseManager:
49
49
  self.db_path.parent.mkdir(parents=True, exist_ok=True)
50
50
 
51
51
  # Apply migrations in order
52
- migrations_dir = Path(__file__).parent.parent.parent / "migrations"
52
+ migrations_dir = Path(__file__).parent.parent.parent.parent / "migrations"
53
53
  migration_files = sorted(migrations_dir.glob("*.sql"))
54
54
 
55
55
  async with aiosqlite.connect(self.db_path) as db:
@@ -227,7 +227,8 @@ class MCPCodeIndexServer:
227
227
  "description": "Relative path to the file from project root"
228
228
  }
229
229
  },
230
- "required": ["projectName", "folderPath", "branch", "filePath"]
230
+ "required": ["projectName", "folderPath", "branch", "filePath"],
231
+ "additionalProperties": False
231
232
  }
232
233
  ),
233
234
  types.Tool(
@@ -245,7 +246,8 @@ class MCPCodeIndexServer:
245
246
  "description": {"type": "string", "description": "Detailed description of the file's contents"},
246
247
  "fileHash": {"type": "string", "description": "SHA-256 hash of the file contents (optional)"}
247
248
  },
248
- "required": ["projectName", "folderPath", "branch", "filePath", "description"]
249
+ "required": ["projectName", "folderPath", "branch", "filePath", "description"],
250
+ "additionalProperties": False
249
251
  }
250
252
  ),
251
253
  types.Tool(
@@ -261,7 +263,8 @@ class MCPCodeIndexServer:
261
263
  "upstreamOrigin": {"type": "string", "description": "Upstream repository URL if this is a fork"},
262
264
  "tokenLimit": {"type": "integer", "description": "Optional token limit override (defaults to server configuration)"}
263
265
  },
264
- "required": ["projectName", "folderPath", "branch"]
266
+ "required": ["projectName", "folderPath", "branch"],
267
+ "additionalProperties": False
265
268
  }
266
269
  ),
267
270
  types.Tool(
@@ -277,7 +280,8 @@ class MCPCodeIndexServer:
277
280
  "upstreamOrigin": {"type": "string", "description": "Upstream repository URL if this is a fork"},
278
281
  "limit": {"type": "integer", "description": "Maximum number of missing files to return (optional)"}
279
282
  },
280
- "required": ["projectName", "folderPath", "branch"]
283
+ "required": ["projectName", "folderPath", "branch"],
284
+ "additionalProperties": False
281
285
  }
282
286
  ),
283
287
  types.Tool(
@@ -294,7 +298,8 @@ class MCPCodeIndexServer:
294
298
  "query": {"type": "string", "description": "Search query (e.g., 'authentication middleware', 'database models')"},
295
299
  "maxResults": {"type": "integer", "default": 20, "description": "Maximum number of results to return"}
296
300
  },
297
- "required": ["projectName", "folderPath", "branch", "query"]
301
+ "required": ["projectName", "folderPath", "branch", "query"],
302
+ "additionalProperties": False
298
303
  }
299
304
  ),
300
305
  types.Tool(
@@ -309,7 +314,8 @@ class MCPCodeIndexServer:
309
314
  "remoteOrigin": {"type": "string", "description": "Git remote origin URL if available"},
310
315
  "upstreamOrigin": {"type": "string", "description": "Upstream repository URL if this is a fork"}
311
316
  },
312
- "required": ["projectName", "folderPath", "branch"]
317
+ "required": ["projectName", "folderPath", "branch"],
318
+ "additionalProperties": False
313
319
  }
314
320
  ),
315
321
  types.Tool(
@@ -333,11 +339,13 @@ class MCPCodeIndexServer:
333
339
  "conflictId": {"type": "string", "description": "ID of the conflict to resolve"},
334
340
  "resolvedDescription": {"type": "string", "description": "Final description to use after merge"}
335
341
  },
336
- "required": ["conflictId", "resolvedDescription"]
342
+ "required": ["conflictId", "resolvedDescription"],
343
+ "additionalProperties": False
337
344
  }
338
345
  }
339
346
  },
340
- "required": ["projectName", "folderPath", "sourceBranch", "targetBranch"]
347
+ "required": ["projectName", "folderPath", "sourceBranch", "targetBranch"],
348
+ "additionalProperties": False
341
349
  }
342
350
  ),
343
351
  types.Tool(
@@ -352,7 +360,8 @@ class MCPCodeIndexServer:
352
360
  "remoteOrigin": {"type": "string", "description": "Git remote origin URL if available"},
353
361
  "upstreamOrigin": {"type": "string", "description": "Upstream repository URL if this is a fork"}
354
362
  },
355
- "required": ["projectName", "folderPath", "branch"]
363
+ "required": ["projectName", "folderPath", "branch"],
364
+ "additionalProperties": False
356
365
  }
357
366
  ),
358
367
  types.Tool(
@@ -402,7 +411,8 @@ src/
402
411
  "upstreamOrigin": {"type": "string", "description": "Upstream repository URL if this is a fork"},
403
412
  "overview": {"type": "string", "description": "Comprehensive narrative overview of the codebase (10-30k tokens recommended)"}
404
413
  },
405
- "required": ["projectName", "folderPath", "branch", "overview"]
414
+ "required": ["projectName", "folderPath", "branch", "overview"],
415
+ "additionalProperties": False
406
416
  }
407
417
  ),
408
418
  types.Tool(
@@ -418,7 +428,8 @@ src/
418
428
  "upstreamOrigin": {"type": "string", "description": "Upstream repository URL if this is a fork"},
419
429
  "limit": {"type": "integer", "default": 200, "description": "Number of top terms to return"}
420
430
  },
421
- "required": ["projectName", "folderPath", "branch"]
431
+ "required": ["projectName", "folderPath", "branch"],
432
+ "additionalProperties": False
422
433
  }
423
434
  )
424
435
  ]
@@ -898,7 +909,7 @@ src/
898
909
 
899
910
  def _build_folder_structure(self, file_descriptions: List[FileDescription]) -> Dict[str, Any]:
900
911
  """Build hierarchical folder structure from file descriptions."""
901
- root = {"name": "", "path": "", "files": [], "folders": {}}
912
+ root = {"path": "", "files": [], "folders": {}}
902
913
 
903
914
  for file_desc in file_descriptions:
904
915
  path_parts = Path(file_desc.file_path).parts
@@ -909,7 +920,6 @@ src/
909
920
  folder_path = "/".join(path_parts[:i+1])
910
921
  if part not in current["folders"]:
911
922
  current["folders"][part] = {
912
- "name": part,
913
923
  "path": folder_path,
914
924
  "files": [],
915
925
  "folders": {}
@@ -919,18 +929,23 @@ src/
919
929
  # Add file to current folder
920
930
  if path_parts: # Handle empty paths
921
931
  current["files"].append({
922
- "name": path_parts[-1],
923
932
  "path": file_desc.file_path,
924
933
  "description": file_desc.description
925
934
  })
926
935
 
927
- # Convert nested dict structure to list format
936
+ # Convert nested dict structure to list format, skipping empty folders
928
937
  def convert_structure(node):
938
+ folders = []
939
+ for folder in node["folders"].values():
940
+ converted_folder = convert_structure(folder)
941
+ # Only include folders that have files or non-empty subfolders
942
+ if converted_folder["files"] or converted_folder["folders"]:
943
+ folders.append(converted_folder)
944
+
929
945
  return {
930
- "name": node["name"],
931
946
  "path": node["path"],
932
947
  "files": node["files"],
933
- "folders": [convert_structure(folder) for folder in node["folders"].values()]
948
+ "folders": folders
934
949
  }
935
950
 
936
951
  return convert_structure(root)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-code-indexer
3
- Version: 1.2.1
3
+ Version: 1.2.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
@@ -55,8 +55,8 @@ Dynamic: requires-python
55
55
 
56
56
  # MCP Code Indexer 🚀
57
57
 
58
- [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg)](https://badge.fury.io/py/mcp-code-indexer)
59
- [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg)](https://pypi.org/project/mcp-code-indexer/)
58
+ [![PyPI version](https://badge.fury.io/py/mcp-code-indexer.svg?1)](https://badge.fury.io/py/mcp-code-indexer)
59
+ [![Python](https://img.shields.io/pypi/pyversions/mcp-code-indexer.svg?1)](https://pypi.org/project/mcp-code-indexer/)
60
60
  [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
61
61
 
62
62
  A production-ready **Model Context Protocol (MCP) server** that provides intelligent codebase navigation for AI agents through searchable file descriptions, token-aware overviews, and advanced merge capabilities.