mcp-code-indexer 1.2.0__tar.gz → 1.2.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 (39) hide show
  1. {mcp_code_indexer-1.2.0/src/mcp_code_indexer.egg-info → mcp_code_indexer-1.2.2}/PKG-INFO +3 -3
  2. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/README.md +2 -2
  3. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/pyproject.toml +1 -1
  4. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/setup.py +1 -1
  5. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/server/mcp_server.py +67 -18
  6. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2/src/mcp_code_indexer.egg-info}/PKG-INFO +3 -3
  7. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/LICENSE +0 -0
  8. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/MANIFEST.in +0 -0
  9. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/docs/api-reference.md +0 -0
  10. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/docs/architecture.md +0 -0
  11. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/docs/configuration.md +0 -0
  12. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/docs/contributing.md +0 -0
  13. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/migrations/001_initial.sql +0 -0
  14. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/migrations/002_performance_indexes.sql +0 -0
  15. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/migrations/003_project_overviews.sql +0 -0
  16. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/requirements.txt +0 -0
  17. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/setup.cfg +0 -0
  18. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/__init__.py +0 -0
  19. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/__main__.py +0 -0
  20. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/data/stop_words_english.txt +0 -0
  21. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/database/__init__.py +0 -0
  22. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/database/database.py +0 -0
  23. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/database/models.py +0 -0
  24. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/error_handler.py +0 -0
  25. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/file_scanner.py +0 -0
  26. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/logging_config.py +0 -0
  27. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/main.py +0 -0
  28. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/merge_handler.py +0 -0
  29. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/middleware/__init__.py +0 -0
  30. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/middleware/error_middleware.py +0 -0
  31. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/server/__init__.py +0 -0
  32. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  33. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/token_counter.py +0 -0
  34. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer/tools/__init__.py +0 -0
  35. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer.egg-info/SOURCES.txt +0 -0
  36. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer.egg-info/dependency_links.txt +0 -0
  37. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer.egg-info/entry_points.txt +0 -0
  38. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/src/mcp_code_indexer.egg-info/requires.txt +0 -0
  39. {mcp_code_indexer-1.2.0 → mcp_code_indexer-1.2.2}/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.0
3
+ Version: 1.2.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
  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.0"
7
+ version = "1.2.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
  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.0"
24
+ return "1.2.2"
25
25
 
26
26
  setup(
27
27
  name="mcp-code-indexer",
@@ -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,12 +360,47 @@ 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(
359
368
  name="update_codebase_overview",
360
- description="Updates the condensed codebase overview. Create a comprehensive narrative that would help a new developer understand this codebase. Include: (1) A visual directory tree showing the main folders and their purposes, (2) Overall architecture - how components fit together, (3) Core business logic and main workflows, (4) Key technical patterns and conventions used, (5) Important dependencies and integrations, (6) Database schema overview if applicable, (7) API structure if applicable, (8) Testing approach, (9) Build and deployment notes. Write in a clear, structured format with headers and sections. Be thorough but organized - imagine writing a technical onboarding document. The overview should be substantial (think 10-20 pages of text) but well-structured so specific sections can be found easily.",
369
+ description="""Updates the condensed codebase overview. Create a comprehensive narrative that would help a new developer understand this codebase. Include: (1) A visual directory tree showing the main folders and their purposes, (2) Overall architecture - how components fit together, (3) Core business logic and main workflows, (4) Key technical patterns and conventions used, (5) Important dependencies and integrations, (6) Database schema overview if applicable, (7) API structure if applicable, (8) Testing approach, (9) Build and deployment notes. Write in a clear, structured format with headers and sections. Be thorough but organized - imagine writing a technical onboarding document. The overview should be substantial (think 10-20 pages of text) but well-structured so specific sections can be found easily.
370
+
371
+ Example Structure:
372
+
373
+ ````
374
+ ## Directory Structure
375
+ ```
376
+ src/
377
+ ├── api/ # REST API endpoints and middleware
378
+ ├── models/ # Database models and business logic
379
+ ├── services/ # External service integrations
380
+ ├── utils/ # Shared utilities and helpers
381
+ └── tests/ # Test suites
382
+ ```
383
+
384
+ ## Architecture Overview
385
+ [Describe how components interact, data flow, key design decisions]
386
+
387
+ ## Core Components
388
+ ### API Layer
389
+ [Details about API structure, authentication, routing]
390
+
391
+ ### Data Model
392
+ [Key entities, relationships, database design]
393
+
394
+ ## Key Workflows
395
+ 1. User Authentication Flow
396
+ [Step-by-step description]
397
+ 2. Data Processing Pipeline
398
+ [How data moves through the system]
399
+
400
+ [Continue with other sections...]"
401
+ ````
402
+
403
+ """,
361
404
  inputSchema={
362
405
  "type": "object",
363
406
  "properties": {
@@ -368,7 +411,8 @@ class MCPCodeIndexServer:
368
411
  "upstreamOrigin": {"type": "string", "description": "Upstream repository URL if this is a fork"},
369
412
  "overview": {"type": "string", "description": "Comprehensive narrative overview of the codebase (10-30k tokens recommended)"}
370
413
  },
371
- "required": ["projectName", "folderPath", "branch", "overview"]
414
+ "required": ["projectName", "folderPath", "branch", "overview"],
415
+ "additionalProperties": False
372
416
  }
373
417
  ),
374
418
  types.Tool(
@@ -384,7 +428,8 @@ class MCPCodeIndexServer:
384
428
  "upstreamOrigin": {"type": "string", "description": "Upstream repository URL if this is a fork"},
385
429
  "limit": {"type": "integer", "default": 200, "description": "Number of top terms to return"}
386
430
  },
387
- "required": ["projectName", "folderPath", "branch"]
431
+ "required": ["projectName", "folderPath", "branch"],
432
+ "additionalProperties": False
388
433
  }
389
434
  )
390
435
  ]
@@ -864,7 +909,7 @@ class MCPCodeIndexServer:
864
909
 
865
910
  def _build_folder_structure(self, file_descriptions: List[FileDescription]) -> Dict[str, Any]:
866
911
  """Build hierarchical folder structure from file descriptions."""
867
- root = {"name": "", "path": "", "files": [], "folders": {}}
912
+ root = {"path": "", "files": [], "folders": {}}
868
913
 
869
914
  for file_desc in file_descriptions:
870
915
  path_parts = Path(file_desc.file_path).parts
@@ -875,7 +920,6 @@ class MCPCodeIndexServer:
875
920
  folder_path = "/".join(path_parts[:i+1])
876
921
  if part not in current["folders"]:
877
922
  current["folders"][part] = {
878
- "name": part,
879
923
  "path": folder_path,
880
924
  "files": [],
881
925
  "folders": {}
@@ -885,18 +929,23 @@ class MCPCodeIndexServer:
885
929
  # Add file to current folder
886
930
  if path_parts: # Handle empty paths
887
931
  current["files"].append({
888
- "name": path_parts[-1],
889
932
  "path": file_desc.file_path,
890
933
  "description": file_desc.description
891
934
  })
892
935
 
893
- # Convert nested dict structure to list format
936
+ # Convert nested dict structure to list format, skipping empty folders
894
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
+
895
945
  return {
896
- "name": node["name"],
897
946
  "path": node["path"],
898
947
  "files": node["files"],
899
- "folders": [convert_structure(folder) for folder in node["folders"].values()]
948
+ "folders": folders
900
949
  }
901
950
 
902
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.0
3
+ Version: 1.2.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
  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.