mcp-vector-search 0.12.6__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.
Files changed (65) hide show
  1. mcp_vector_search/__init__.py +2 -2
  2. mcp_vector_search/analysis/__init__.py +64 -0
  3. mcp_vector_search/analysis/collectors/__init__.py +39 -0
  4. mcp_vector_search/analysis/collectors/base.py +164 -0
  5. mcp_vector_search/analysis/collectors/complexity.py +743 -0
  6. mcp_vector_search/analysis/metrics.py +341 -0
  7. mcp_vector_search/analysis/reporters/__init__.py +5 -0
  8. mcp_vector_search/analysis/reporters/console.py +222 -0
  9. mcp_vector_search/cli/commands/analyze.py +408 -0
  10. mcp_vector_search/cli/commands/chat.py +1262 -0
  11. mcp_vector_search/cli/commands/index.py +21 -3
  12. mcp_vector_search/cli/commands/init.py +13 -0
  13. mcp_vector_search/cli/commands/install.py +597 -335
  14. mcp_vector_search/cli/commands/install_old.py +8 -4
  15. mcp_vector_search/cli/commands/mcp.py +78 -6
  16. mcp_vector_search/cli/commands/reset.py +68 -26
  17. mcp_vector_search/cli/commands/search.py +30 -7
  18. mcp_vector_search/cli/commands/setup.py +1133 -0
  19. mcp_vector_search/cli/commands/status.py +37 -2
  20. mcp_vector_search/cli/commands/uninstall.py +276 -357
  21. mcp_vector_search/cli/commands/visualize/__init__.py +39 -0
  22. mcp_vector_search/cli/commands/visualize/cli.py +276 -0
  23. mcp_vector_search/cli/commands/visualize/exporters/__init__.py +12 -0
  24. mcp_vector_search/cli/commands/visualize/exporters/html_exporter.py +33 -0
  25. mcp_vector_search/cli/commands/visualize/exporters/json_exporter.py +29 -0
  26. mcp_vector_search/cli/commands/visualize/graph_builder.py +714 -0
  27. mcp_vector_search/cli/commands/visualize/layout_engine.py +469 -0
  28. mcp_vector_search/cli/commands/visualize/server.py +311 -0
  29. mcp_vector_search/cli/commands/visualize/state_manager.py +428 -0
  30. mcp_vector_search/cli/commands/visualize/templates/__init__.py +16 -0
  31. mcp_vector_search/cli/commands/visualize/templates/base.py +180 -0
  32. mcp_vector_search/cli/commands/visualize/templates/scripts.py +2507 -0
  33. mcp_vector_search/cli/commands/visualize/templates/styles.py +1313 -0
  34. mcp_vector_search/cli/commands/visualize.py.original +2536 -0
  35. mcp_vector_search/cli/didyoumean.py +22 -2
  36. mcp_vector_search/cli/main.py +115 -159
  37. mcp_vector_search/cli/output.py +24 -8
  38. mcp_vector_search/config/__init__.py +4 -0
  39. mcp_vector_search/config/default_thresholds.yaml +52 -0
  40. mcp_vector_search/config/settings.py +12 -0
  41. mcp_vector_search/config/thresholds.py +185 -0
  42. mcp_vector_search/core/auto_indexer.py +3 -3
  43. mcp_vector_search/core/boilerplate.py +186 -0
  44. mcp_vector_search/core/config_utils.py +394 -0
  45. mcp_vector_search/core/database.py +369 -94
  46. mcp_vector_search/core/exceptions.py +11 -0
  47. mcp_vector_search/core/git_hooks.py +4 -4
  48. mcp_vector_search/core/indexer.py +221 -4
  49. mcp_vector_search/core/llm_client.py +751 -0
  50. mcp_vector_search/core/models.py +3 -0
  51. mcp_vector_search/core/project.py +17 -0
  52. mcp_vector_search/core/scheduler.py +11 -11
  53. mcp_vector_search/core/search.py +179 -29
  54. mcp_vector_search/mcp/server.py +24 -5
  55. mcp_vector_search/utils/__init__.py +2 -0
  56. mcp_vector_search/utils/gitignore_updater.py +212 -0
  57. mcp_vector_search/utils/monorepo.py +66 -4
  58. mcp_vector_search/utils/timing.py +10 -6
  59. {mcp_vector_search-0.12.6.dist-info → mcp_vector_search-1.0.3.dist-info}/METADATA +182 -52
  60. mcp_vector_search-1.0.3.dist-info/RECORD +97 -0
  61. {mcp_vector_search-0.12.6.dist-info → mcp_vector_search-1.0.3.dist-info}/WHEEL +1 -1
  62. {mcp_vector_search-0.12.6.dist-info → mcp_vector_search-1.0.3.dist-info}/entry_points.txt +1 -0
  63. mcp_vector_search/cli/commands/visualize.py +0 -1467
  64. mcp_vector_search-0.12.6.dist-info/RECORD +0 -68
  65. {mcp_vector_search-0.12.6.dist-info → mcp_vector_search-1.0.3.dist-info}/licenses/LICENSE +0 -0
@@ -6,6 +6,34 @@ from typing import NamedTuple
6
6
 
7
7
  from loguru import logger
8
8
 
9
+ # Directories to exclude from subproject detection
10
+ # These are typically test/example/docs directories, not actual subprojects
11
+ EXCLUDED_SUBPROJECT_DIRS = {
12
+ "tests",
13
+ "test",
14
+ "examples",
15
+ "example",
16
+ "docs",
17
+ "doc",
18
+ "scripts",
19
+ "tools",
20
+ "benchmarks",
21
+ "benchmark",
22
+ "node_modules",
23
+ ".git",
24
+ ".github",
25
+ ".gitlab",
26
+ "build",
27
+ "dist",
28
+ "__pycache__",
29
+ ".pytest_cache",
30
+ ".mypy_cache",
31
+ ".ruff_cache",
32
+ "coverage",
33
+ ".coverage",
34
+ "htmlcov",
35
+ }
36
+
9
37
 
10
38
  class Subproject(NamedTuple):
11
39
  """Represents a subproject in a monorepo."""
@@ -27,6 +55,23 @@ class MonorepoDetector:
27
55
  self.project_root = project_root
28
56
  self._subprojects: list[Subproject] | None = None
29
57
 
58
+ def _is_excluded_path(self, path: Path) -> bool:
59
+ """Check if a path should be excluded from subproject detection.
60
+
61
+ Args:
62
+ path: Path to check (relative to project root)
63
+
64
+ Returns:
65
+ True if path should be excluded from subproject detection
66
+ """
67
+ try:
68
+ relative_path = path.relative_to(self.project_root)
69
+ # Check if any part of the path is in the excluded set
70
+ return any(part in EXCLUDED_SUBPROJECT_DIRS for part in relative_path.parts)
71
+ except ValueError:
72
+ # Path is not relative to project root
73
+ return True
74
+
30
75
  def is_monorepo(self) -> bool:
31
76
  """Check if project is a monorepo.
32
77
 
@@ -162,6 +207,13 @@ class MonorepoDetector:
162
207
  if base_path.exists():
163
208
  for subdir in base_path.iterdir():
164
209
  if subdir.is_dir() and not subdir.name.startswith("."):
210
+ # Skip excluded directories
211
+ if self._is_excluded_path(subdir):
212
+ logger.debug(
213
+ f"Skipping excluded nx workspace path: {subdir.relative_to(self.project_root)}"
214
+ )
215
+ continue
216
+
165
217
  package_json = subdir / "package.json"
166
218
  name = self._get_package_name(package_json) or subdir.name
167
219
  relative = str(subdir.relative_to(self.project_root))
@@ -179,14 +231,17 @@ class MonorepoDetector:
179
231
 
180
232
  # Only search up to 3 levels deep
181
233
  for package_json in self.project_root.rglob("package.json"):
182
- # Skip node_modules
183
- if "node_modules" in package_json.parts:
184
- continue
185
-
186
234
  # Skip root package.json
187
235
  if package_json.parent == self.project_root:
188
236
  continue
189
237
 
238
+ # Skip excluded directories (tests, examples, docs, etc.)
239
+ if self._is_excluded_path(package_json.parent):
240
+ logger.debug(
241
+ f"Skipping excluded path: {package_json.relative_to(self.project_root)}"
242
+ )
243
+ continue
244
+
190
245
  # Check depth
191
246
  relative_parts = package_json.relative_to(self.project_root).parts
192
247
  if len(relative_parts) > 4: # Too deep
@@ -223,6 +278,13 @@ class MonorepoDetector:
223
278
  if path.name.startswith("."):
224
279
  continue
225
280
 
281
+ # Skip excluded directories (tests, examples, docs, etc.)
282
+ if self._is_excluded_path(path):
283
+ logger.debug(
284
+ f"Skipping excluded workspace path: {path.relative_to(self.project_root)}"
285
+ )
286
+ continue
287
+
226
288
  # Try to get name from package.json
227
289
  package_json = path / "package.json"
228
290
  name = self._get_package_name(package_json) or path.name
@@ -142,12 +142,16 @@ class PerformanceProfiler:
142
142
  "min": min(durations),
143
143
  "max": max(durations),
144
144
  "std_dev": statistics.stdev(durations) if len(durations) > 1 else 0.0,
145
- "p95": statistics.quantiles(durations, n=20)[18]
146
- if len(durations) >= 20
147
- else max(durations),
148
- "p99": statistics.quantiles(durations, n=100)[98]
149
- if len(durations) >= 100
150
- else max(durations),
145
+ "p95": (
146
+ statistics.quantiles(durations, n=20)[18]
147
+ if len(durations) >= 20
148
+ else max(durations)
149
+ ),
150
+ "p99": (
151
+ statistics.quantiles(durations, n=100)[98]
152
+ if len(durations) >= 100
153
+ else max(durations)
154
+ ),
151
155
  }
152
156
 
153
157
  def get_operation_breakdown(self) -> dict[str, dict[str, Any]]:
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-vector-search
3
- Version: 0.12.6
4
- Summary: CLI-first semantic code search with MCP integration
3
+ Version: 1.0.3
4
+ Summary: CLI-first semantic code search with MCP integration and interactive D3.js visualization for exploring code relationships
5
5
  Project-URL: Homepage, https://github.com/bobmatnyc/mcp-vector-search
6
6
  Project-URL: Documentation, https://mcp-vector-search.readthedocs.io
7
7
  Project-URL: Repository, https://github.com/bobmatnyc/mcp-vector-search
@@ -29,30 +29,36 @@ License: MIT License
29
29
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
30
  SOFTWARE.
31
31
  License-File: LICENSE
32
- Keywords: code-search,mcp,semantic-search,vector-database
32
+ Keywords: code-graph,code-search,d3js,force-layout,interactive-graph,mcp,semantic-search,vector-database,visualization
33
33
  Classifier: Development Status :: 3 - Alpha
34
34
  Classifier: Intended Audience :: Developers
35
35
  Classifier: License :: OSI Approved :: MIT License
36
36
  Classifier: Programming Language :: Python :: 3.11
37
37
  Classifier: Programming Language :: Python :: 3.12
38
+ Classifier: Topic :: Scientific/Engineering :: Visualization
38
39
  Classifier: Topic :: Software Development :: Code Generators
39
40
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
41
+ Classifier: Topic :: Software Development :: Quality Assurance
40
42
  Requires-Python: >=3.11
41
43
  Requires-Dist: aiofiles>=23.0.0
42
44
  Requires-Dist: authlib>=1.6.4
43
45
  Requires-Dist: chromadb>=0.5.0
44
46
  Requires-Dist: click-didyoumean>=0.3.0
47
+ Requires-Dist: fastapi>=0.104.0
45
48
  Requires-Dist: httpx>=0.25.0
46
49
  Requires-Dist: loguru>=0.7.0
47
50
  Requires-Dist: mcp>=1.12.4
48
51
  Requires-Dist: packaging>=23.0
52
+ Requires-Dist: py-mcp-installer>=0.1.4
49
53
  Requires-Dist: pydantic-settings>=2.1.0
50
54
  Requires-Dist: pydantic>=2.5.0
51
55
  Requires-Dist: rich>=13.0.0
52
56
  Requires-Dist: sentence-transformers>=2.2.2
57
+ Requires-Dist: starlette>=0.49.1
53
58
  Requires-Dist: tree-sitter-language-pack>=0.9.0
54
59
  Requires-Dist: tree-sitter>=0.20.1
55
60
  Requires-Dist: typer>=0.9.0
61
+ Requires-Dist: uvicorn>=0.24.0
56
62
  Requires-Dist: watchdog>=3.0.0
57
63
  Description-Content-Type: text/markdown
58
64
 
@@ -64,7 +70,7 @@ Description-Content-Type: text/markdown
64
70
  [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
65
71
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
66
72
 
67
- > ⚠️ **Alpha Release (v0.7.1)**: This is an early-stage project under active development. Expect breaking changes and rough edges. Feedback and contributions are welcome!
73
+ > ⚠️ **Alpha Release (v0.12.7)**: This is an early-stage project under active development. Expect breaking changes and rough edges. Feedback and contributions are welcome!
68
74
 
69
75
  A modern, fast, and intelligent code search tool that understands your codebase through semantic analysis and AST parsing. Built with Python, powered by ChromaDB, and designed for developer productivity.
70
76
 
@@ -99,11 +105,11 @@ A modern, fast, and intelligent code search tool that understands your codebase
99
105
  ### Installation
100
106
 
101
107
  ```bash
102
- # Install from PyPI
108
+ # Install from PyPI (recommended)
103
109
  pip install mcp-vector-search
104
110
 
105
- # Or with UV (recommended)
106
- uv add mcp-vector-search
111
+ # Or with UV (faster)
112
+ uv pip install mcp-vector-search
107
113
 
108
114
  # Or install from source
109
115
  git clone https://github.com/bobmatnyc/mcp-vector-search.git
@@ -111,20 +117,77 @@ cd mcp-vector-search
111
117
  uv sync && uv pip install -e .
112
118
  ```
113
119
 
114
- ### Complete Setup (One Command)
120
+ **Verify Installation:**
121
+ ```bash
122
+ # Check that all dependencies are installed correctly
123
+ mcp-vector-search doctor
124
+
125
+ # Should show all ✓ marks
126
+ # If you see missing dependencies, try:
127
+ pip install --upgrade mcp-vector-search
128
+ ```
129
+
130
+ ### Zero-Config Setup (Recommended)
115
131
 
116
- The **hierarchical install command** (v0.13.0) provides complete project setup and MCP integration management:
132
+ The fastest way to get started - **completely hands-off, just one command**:
117
133
 
118
134
  ```bash
119
- # Quick setup (recommended)
120
- mcp-vector-search install
135
+ # Smart zero-config setup (recommended)
136
+ mcp-vector-search setup
137
+ ```
138
+
139
+ **What `setup` does automatically:**
140
+ - ✅ Detects your project's languages and file types
141
+ - ✅ Initializes semantic search with optimal settings
142
+ - ✅ Indexes your entire codebase
143
+ - ✅ Configures ALL installed MCP platforms (Claude Code, Cursor, etc.)
144
+ - ✅ **Uses native Claude CLI integration** (`claude mcp add`) when available
145
+ - ✅ **Falls back to `.mcp.json`** if Claude CLI not available
146
+ - ✅ Sets up file watching for auto-reindex
147
+ - ✅ **Zero user input required!**
148
+
149
+ **Behind the scenes:**
150
+ - **Server name**: `mcp` (for consistency with other MCP projects)
151
+ - **Command**: `uv run python -m mcp_vector_search.mcp.server {PROJECT_ROOT}`
152
+ - **File watching**: Enabled via `MCP_ENABLE_FILE_WATCHING=true`
153
+ - **Integration method**: Native `claude mcp add` (or `.mcp.json` fallback)
154
+
155
+ **Example output:**
156
+ ```
157
+ 🚀 Smart Setup for mcp-vector-search
158
+ 🔍 Detecting project...
159
+ ✅ Found 3 language(s): Python, JavaScript, TypeScript
160
+ ✅ Detected 8 file type(s)
161
+ ✅ Found 2 platform(s): claude-code, cursor
162
+ ⚙️ Configuring...
163
+ ✅ Embedding model: sentence-transformers/all-MiniLM-L6-v2
164
+ 🚀 Initializing...
165
+ ✅ Vector database created
166
+ ✅ Configuration saved
167
+ 🔍 Indexing codebase...
168
+ ✅ Indexing completed in 12.3s
169
+ 🔗 Configuring MCP integrations...
170
+ ✅ Using Claude CLI for automatic setup
171
+ ✅ Registered with Claude CLI
172
+ ✅ Configured 2 platform(s)
173
+ 🎉 Setup Complete!
174
+ ```
175
+
176
+ **Options:**
177
+ ```bash
178
+ # Force re-setup
179
+ mcp-vector-search setup --force
180
+
181
+ # Verbose output for debugging (shows Claude CLI commands)
182
+ mcp-vector-search setup --verbose
183
+ ```
184
+
185
+ ### Advanced Setup Options
121
186
 
122
- # This will:
123
- # 1. Initialize your project configuration
124
- # 2. Automatically index your codebase
125
- # 3. Provide next-step hints for MCP integration
187
+ For more control over the installation process:
126
188
 
127
- # Install with all MCP integrations at once
189
+ ```bash
190
+ # Manual setup with MCP integration
128
191
  mcp-vector-search install --with-mcp
129
192
 
130
193
  # Custom file extensions
@@ -132,10 +195,20 @@ mcp-vector-search install --extensions .py,.js,.ts,.dart
132
195
 
133
196
  # Skip automatic indexing
134
197
  mcp-vector-search install --no-auto-index
198
+
199
+ # Just initialize (no indexing or MCP)
200
+ mcp-vector-search init
135
201
  ```
136
202
 
137
203
  ### Add MCP Integration for AI Tools
138
204
 
205
+ **Automatic (Recommended):**
206
+ ```bash
207
+ # One command sets up all detected platforms
208
+ mcp-vector-search setup
209
+ ```
210
+
211
+ **Manual Platform Installation:**
139
212
  ```bash
140
213
  # Add Claude Code integration (project-scoped)
141
214
  mcp-vector-search install claude-code
@@ -143,13 +216,12 @@ mcp-vector-search install claude-code
143
216
  # Add Cursor IDE integration (global)
144
217
  mcp-vector-search install cursor
145
218
 
146
- # Add Claude Desktop integration (global)
147
- mcp-vector-search install claude-desktop
148
-
149
219
  # See all available platforms
150
220
  mcp-vector-search install list
151
221
  ```
152
222
 
223
+ **Note**: The `setup` command uses native `claude mcp add` when Claude CLI is available, providing better integration than manual `.mcp.json` creation.
224
+
153
225
  ### Remove MCP Integrations
154
226
 
155
227
  ```bash
@@ -171,7 +243,7 @@ mcp-vector-search search "authentication logic"
171
243
  mcp-vector-search search "database connection setup"
172
244
  mcp-vector-search search "error handling patterns"
173
245
 
174
- # Index your codebase (if not done during install)
246
+ # Index your codebase (if not done during setup)
175
247
  mcp-vector-search index
176
248
 
177
249
  # Check project status
@@ -194,7 +266,7 @@ $ mcp-vector-search indx
194
266
  No such command 'indx'. Did you mean 'index'?
195
267
  ```
196
268
 
197
- See [docs/CLI_FEATURES.md](docs/CLI_FEATURES.md) for more details.
269
+ See [docs/guides/cli-usage.md](docs/guides/cli-usage.md) for more details.
198
270
 
199
271
  ## Versioning & Releasing
200
272
 
@@ -205,15 +277,49 @@ This project uses semantic versioning with an automated release workflow.
205
277
  - `make release-patch` - Create patch release
206
278
  - `make publish` - Publish to PyPI
207
279
 
208
- See [docs/VERSIONING_WORKFLOW.md](docs/VERSIONING_WORKFLOW.md) for complete documentation.
280
+ See [docs/development/versioning.md](docs/development/versioning.md) for complete documentation.
209
281
 
210
282
  ## 📖 Documentation
211
283
 
212
284
  ### Commands
213
285
 
214
- #### `install` - Install Project and MCP Integrations (v0.13.0)
286
+ #### `setup` - Zero-Config Smart Setup (Recommended)
215
287
  ```bash
216
- # Quick setup (recommended)
288
+ # One command to do everything (recommended)
289
+ mcp-vector-search setup
290
+
291
+ # What it does automatically:
292
+ # - Detects project languages and file types
293
+ # - Initializes semantic search
294
+ # - Indexes entire codebase
295
+ # - Configures all detected MCP platforms
296
+ # - Sets up file watching
297
+ # - Zero configuration needed!
298
+
299
+ # Force re-setup
300
+ mcp-vector-search setup --force
301
+
302
+ # Verbose output for debugging
303
+ mcp-vector-search setup --verbose
304
+ ```
305
+
306
+ **Key Features:**
307
+ - **Zero Configuration**: No user input required
308
+ - **Smart Detection**: Automatically discovers languages and platforms
309
+ - **Comprehensive**: Handles init + index + MCP setup in one command
310
+ - **Idempotent**: Safe to run multiple times
311
+ - **Fast**: Timeout-protected scanning (won't hang on large projects)
312
+ - **Team-Friendly**: Commit `.mcp.json` to share configuration
313
+
314
+ **When to use:**
315
+ - ✅ First-time project setup
316
+ - ✅ Team onboarding
317
+ - ✅ Quick testing in new codebases
318
+ - ✅ Setting up multiple MCP platforms at once
319
+
320
+ #### `install` - Install Project and MCP Integrations (Advanced)
321
+ ```bash
322
+ # Manual setup with more control
217
323
  mcp-vector-search install
218
324
 
219
325
  # Install with all MCP integrations
@@ -227,7 +333,6 @@ mcp-vector-search install --no-auto-index
227
333
 
228
334
  # Platform-specific MCP integration
229
335
  mcp-vector-search install claude-code # Project-scoped
230
- mcp-vector-search install claude-desktop # Global
231
336
  mcp-vector-search install cursor # Global
232
337
  mcp-vector-search install windsurf # Global
233
338
  mcp-vector-search install vscode # Global
@@ -236,7 +341,11 @@ mcp-vector-search install vscode # Global
236
341
  mcp-vector-search install list
237
342
  ```
238
343
 
239
- #### `uninstall` - Remove MCP Integrations (v0.13.0)
344
+ **When to use:**
345
+ - Use `install` when you need fine-grained control over extensions, models, or MCP platforms
346
+ - Use `setup` for quick, zero-config onboarding (recommended)
347
+
348
+ #### `uninstall` - Remove MCP Integrations
240
349
  ```bash
241
350
  # Remove specific platform
242
351
  mcp-vector-search uninstall claude-code
@@ -256,7 +365,7 @@ mcp-vector-search remove claude-code
256
365
 
257
366
  #### `init` - Initialize Project (Simple)
258
367
  ```bash
259
- # Basic initialization
368
+ # Basic initialization (no indexing or MCP)
260
369
  mcp-vector-search init
261
370
 
262
371
  # Custom configuration
@@ -266,6 +375,8 @@ mcp-vector-search init --extensions .py,.js,.ts --embedding-model sentence-trans
266
375
  mcp-vector-search init --force
267
376
  ```
268
377
 
378
+ **Note**: For most users, use `setup` instead of `init`. The `init` command is for advanced users who want manual control.
379
+
269
380
  #### `index` - Index Codebase
270
381
  ```bash
271
382
  # Index all files
@@ -541,22 +652,20 @@ We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) f
541
652
  git clone https://github.com/bobmatnyc/mcp-vector-search.git
542
653
  cd mcp-vector-search
543
654
 
544
- # Install dependencies with UV
545
- uv sync
546
-
547
- # Install in development mode
548
- uv pip install -e .
655
+ # Install development environment (includes dependencies + editable install)
656
+ make dev
549
657
 
550
658
  # Test CLI from source (recommended during development)
551
659
  ./dev-mcp version # Shows [DEV] indicator
552
660
  ./dev-mcp search "test" # No reinstall needed after code changes
553
661
 
554
- # Run tests
555
- uv run pytest
662
+ # Run tests and quality checks
663
+ make test-unit # Run unit tests
664
+ make quality # Run linting and type checking
665
+ make fix # Auto-fix formatting issues
556
666
 
557
- # Run linting
558
- uv run ruff check
559
- uv run mypy src/
667
+ # View all available targets
668
+ make help
560
669
  ```
561
670
 
562
671
  For detailed development workflow and `dev-mcp` usage, see the [Development](#-development) section below.
@@ -628,16 +737,19 @@ Please [open an issue](https://github.com/bobmatnyc/mcp-vector-search/issues) or
628
737
  **Stage A: Local Development & Testing**
629
738
  ```bash
630
739
  # Setup development environment
631
- uv sync && uv pip install -e .
740
+ make dev
632
741
 
633
742
  # Run development tests
634
- ./scripts/dev-test.sh
743
+ make test-unit
635
744
 
636
745
  # Run CLI from source (recommended during development)
637
746
  ./dev-mcp version # Visual [DEV] indicator
638
747
  ./dev-mcp status # Any command works
639
748
  ./dev-mcp search "auth" # Immediate feedback on changes
640
749
 
750
+ # Run quality checks
751
+ make quality
752
+
641
753
  # Alternative: use uv run directly
642
754
  uv run mcp-vector-search version
643
755
  ```
@@ -719,19 +831,37 @@ See [DEVELOPMENT.md](DEVELOPMENT.md) for detailed development instructions.
719
831
 
720
832
  ## 📚 Documentation
721
833
 
722
- For comprehensive documentation, see **[CLAUDE.md](CLAUDE.md)** - the main documentation index.
723
-
724
- ### Quick Links
725
- - **[Configuration Guide](docs/CONFIGURATION.md)** - Comprehensive configuration reference
726
- - **[Installation & Deployment](docs/DEPLOY.md)** - Setup and deployment guide
727
- - **[CLI Features](docs/CLI_FEATURES.md)** - Advanced CLI features and usage
728
- - **[Project Structure](docs/STRUCTURE.md)** - Architecture and file organization
729
- - **[Contributing Guidelines](docs/developer/CONTRIBUTING.md)** - How to contribute
730
- - **[API Reference](docs/developer/API.md)** - Internal API documentation
731
- - **[Testing Guide](docs/developer/TESTING.md)** - Testing strategies
732
- - **[Code Quality](docs/developer/LINTING.md)** - Linting and formatting
733
- - **[Versioning](docs/VERSIONING.md)** - Version management
734
- - **[Releases](docs/RELEASES.md)** - Release process
834
+ For comprehensive documentation, see **[docs/index.md](docs/index.md)** - the complete documentation hub.
835
+
836
+ ### Getting Started
837
+ - **[Installation Guide](docs/getting-started/installation.md)** - Complete installation instructions
838
+ - **[First Steps](docs/getting-started/first-steps.md)** - Quick start tutorial
839
+ - **[Configuration](docs/getting-started/configuration.md)** - Basic configuration
840
+
841
+ ### User Guides
842
+ - **[Searching Guide](docs/guides/searching.md)** - Master semantic code search
843
+ - **[Indexing Guide](docs/guides/indexing.md)** - Indexing strategies and optimization
844
+ - **[CLI Usage](docs/guides/cli-usage.md)** - Advanced CLI features
845
+ - **[MCP Integration](docs/guides/mcp-integration.md)** - AI tool integration
846
+ - **[File Watching](docs/guides/file-watching.md)** - Real-time index updates
847
+
848
+ ### Reference
849
+ - **[CLI Commands](docs/reference/cli-commands.md)** - Complete command reference
850
+ - **[Configuration Options](docs/reference/configuration-options.md)** - All configuration settings
851
+ - **[Features](docs/reference/features.md)** - Feature overview
852
+ - **[Architecture](docs/reference/architecture.md)** - System architecture
853
+
854
+ ### Development
855
+ - **[Contributing](docs/development/contributing.md)** - How to contribute
856
+ - **[Testing](docs/development/testing.md)** - Testing guide
857
+ - **[Code Quality](docs/development/code-quality.md)** - Linting and formatting
858
+ - **[API Reference](docs/development/api.md)** - Internal API docs
859
+ - **[Deployment](docs/deployment/README.md)** - Release and deployment guide
860
+
861
+ ### Advanced
862
+ - **[Troubleshooting](docs/advanced/troubleshooting.md)** - Common issues and solutions
863
+ - **[Performance](docs/architecture/performance.md)** - Performance optimization
864
+ - **[Extending](docs/advanced/extending.md)** - Adding new features
735
865
 
736
866
  ## 🤝 Contributing
737
867
 
@@ -0,0 +1,97 @@
1
+ mcp_vector_search/__init__.py,sha256=GaPg51gwGr2wWy4xng5lWqBKZY_Rn0DMmEZ7LvLBz2w,299
2
+ mcp_vector_search/py.typed,sha256=lCKeV9Qcn9sGtbRsgg-LJO2ZwWRuknnnlmomq3bJFH0,43
3
+ mcp_vector_search/analysis/__init__.py,sha256=cdCheFL4eL50J2EkDD6Z6zObujwnYXNShFbP-G05MWo,1861
4
+ mcp_vector_search/analysis/metrics.py,sha256=0XR4g3vVpRba8GJLXtfpypxYKY5n2Ipi5ACfQu2reIA,11904
5
+ mcp_vector_search/analysis/collectors/__init__.py,sha256=Ot6Paw3fDDvbXNdlevtuIThed_1S8iGK1gjJVp3XVSc,1041
6
+ mcp_vector_search/analysis/collectors/base.py,sha256=Eda8z8rmgFqMlmXl-cfgilG_YElV0vqlRb56YK7bJeI,5465
7
+ mcp_vector_search/analysis/collectors/complexity.py,sha256=sEPy9v91KtOERc46jN7hGFoyj_5KrZxYVG63qS9ue20,25332
8
+ mcp_vector_search/analysis/reporters/__init__.py,sha256=EOZymd-DqqdQ4mY4i_Hg9A_ryZ225htzID6-wUBs7Bo,137
9
+ mcp_vector_search/analysis/reporters/console.py,sha256=zqrK7A4Q3Zf84B7wYaBefsvTE6tDTY5_JVv02ObpNPY,7899
10
+ mcp_vector_search/cli/__init__.py,sha256=TNB7CaOASz8u3yHWLbNmo8-GtHF0qwUjVKWAuNphKgo,40
11
+ mcp_vector_search/cli/didyoumean.py,sha256=wEpiFbieH-aBsfEtFW7gtRsTBP17zC2xRzDpKGrD7Kg,16921
12
+ mcp_vector_search/cli/export.py,sha256=iluxuRT2KELdKlQeDAlVkteiel4GGrng153UAw9H0as,10804
13
+ mcp_vector_search/cli/history.py,sha256=6wRrSfxpUe9hJXuaEeVxOVkFlcpqkIiGfwzDgd5N6c8,9323
14
+ mcp_vector_search/cli/interactive.py,sha256=T7P4dAdvbglznzQYgiePv5YNyOx9FeE57Y3OKYnnbYE,12744
15
+ mcp_vector_search/cli/main.py,sha256=D30OqWeYEvJOLcRJaBmLp3ajRXQ-Gvqhk-VP9bLSbb0,15741
16
+ mcp_vector_search/cli/output.py,sha256=0U6tV8CLAmX8IkTe9mUGGEsniFGmHR2v25iJ3SW_wNA,13235
17
+ mcp_vector_search/cli/suggestions.py,sha256=h-UaxoLcHmFbhZSm0WG7nKJXAIRIqhv7aGsXijp7vA8,13273
18
+ mcp_vector_search/cli/commands/__init__.py,sha256=vQls-YKZ54YEwmf7g1dL0T2SS9D4pdQljXzsUChG_V4,42
19
+ mcp_vector_search/cli/commands/analyze.py,sha256=4eItZ9U52iN3L1RriVfc-BumKIqqucDkhSZULw7RGA4,12698
20
+ mcp_vector_search/cli/commands/auto_index.py,sha256=imVVbxWRlA128NPdK9BetNNl3ELrsdq-hqcsLqyAmoM,12712
21
+ mcp_vector_search/cli/commands/chat.py,sha256=jgcCsrh1dHd7HVczjd-jDc9WCbMA30P8d6q2SnaImlI,44042
22
+ mcp_vector_search/cli/commands/config.py,sha256=y2rCX6108cJj8osISeroGRukkyWZdoSz0Hhdz8ehK4E,12862
23
+ mcp_vector_search/cli/commands/demo.py,sha256=MVfEkYmA2abRFwAbk-lpa6P14_SLJBHZAuHb9d6d02U,10630
24
+ mcp_vector_search/cli/commands/index.py,sha256=e5o6C4QfAxP5KZX9ujqGViyVyjUCNfTWousIVSjsJbw,25001
25
+ mcp_vector_search/cli/commands/init.py,sha256=VLGX1BXy9U0aFOjUR5Ao_nsRGIA6t5hGvM6zHvTLjtY,23809
26
+ mcp_vector_search/cli/commands/install.py,sha256=dd0LqL-yE6ZIxJ0HIwwZ7nGto_43jhYKbnLbt-IOgHc,32535
27
+ mcp_vector_search/cli/commands/install_old.py,sha256=K3Yo8L2Bti6EYaRvojz5Y-RdT4ABlN9-4--EKOs1YxI,24669
28
+ mcp_vector_search/cli/commands/mcp.py,sha256=mAC-8pP0PQxnmUuhStndgZBS444JmjunFHhhRlUwLMc,41240
29
+ mcp_vector_search/cli/commands/reset.py,sha256=Ab0u6G1g_cvSJ4mltVrUPooKJbRqEa4uX57-CNa9IZM,15229
30
+ mcp_vector_search/cli/commands/search.py,sha256=GH2BAMknFZ5SO5KwcBRMW_PbxkYb1pSxUbSITr4P-Vw,25927
31
+ mcp_vector_search/cli/commands/setup.py,sha256=ENiaE25bPafwIw1hSmob79nv4eIumoQNsxO41gn2Gfs,40546
32
+ mcp_vector_search/cli/commands/status.py,sha256=vSk1X7vOwKmhrPaMOSiZ-EIf62WXAKy7LQV4K82m_nU,21235
33
+ mcp_vector_search/cli/commands/uninstall.py,sha256=SjfViJYm0N4N955Ya3xGdu7eFfK7CWuJcw0AwZqwpRQ,13265
34
+ mcp_vector_search/cli/commands/visualize.py.original,sha256=oq_yG1UqwqSxUTWzUp5hBJIvoQleA-GCaPGAMroUAtM,99016
35
+ mcp_vector_search/cli/commands/watch.py,sha256=bwR9Xaa7TaLMCcwRDA3WzbsInI2UYCp0eVg3TnCiyaQ,8902
36
+ mcp_vector_search/cli/commands/visualize/__init__.py,sha256=eh2s2nQwptY__dy5P5oX4HznrGzLHI2wvk0WJrRyzgI,1107
37
+ mcp_vector_search/cli/commands/visualize/cli.py,sha256=piXTkGizEDyyQ2zm5HKP0gtT6hXIn-y8ibkNBzn8Kfw,9217
38
+ mcp_vector_search/cli/commands/visualize/graph_builder.py,sha256=kZnXq7usBE3wCHsYOj-W-eZ1djWSablj8LlIdFVADW8,26152
39
+ mcp_vector_search/cli/commands/visualize/layout_engine.py,sha256=jTQnZNI42DrJfiLr1MXC3Dq0eMgInz0U1xOLBa4maWA,15973
40
+ mcp_vector_search/cli/commands/visualize/server.py,sha256=yOucZ_gZUSVb5jJn-qfZ9RAvpp3otdnpmq7Bfg_ugoY,10413
41
+ mcp_vector_search/cli/commands/visualize/state_manager.py,sha256=f91cmdXigh0f8POdGYfBpeUfN0aRsdRRZwNxaZAr3y4,15069
42
+ mcp_vector_search/cli/commands/visualize/exporters/__init__.py,sha256=0bFmy9SRV7xlYZRtRY_VyYcoxR-0a94N9Qspd47xXFc,278
43
+ mcp_vector_search/cli/commands/visualize/exporters/html_exporter.py,sha256=wa4TufaTCGqFJFghXds1wXXLbgEF3vdAzfJbKfRFCBA,799
44
+ mcp_vector_search/cli/commands/visualize/exporters/json_exporter.py,sha256=jmjFe64It860loSk_wPezFHJxq6v_aQsSwhDUHVt-LA,773
45
+ mcp_vector_search/cli/commands/visualize/templates/__init__.py,sha256=yZqjGO77JlcMVdbnO0t5Sli84Mp5xfJPw9SS_4JcO_8,389
46
+ mcp_vector_search/cli/commands/visualize/templates/base.py,sha256=LQWF4VKKwd-TWhhBNvoae53JpNJXU9haDvgTmqfqiz4,7367
47
+ mcp_vector_search/cli/commands/visualize/templates/scripts.py,sha256=sx6mNpDclb4WM1XQyAI3ChsVFlkMVMMQjcNb-vvq344,97338
48
+ mcp_vector_search/cli/commands/visualize/templates/styles.py,sha256=2FVPBubWzGIJqu1m-_7S0IojGe48jLQU_s88xaeMEfk,32999
49
+ mcp_vector_search/config/__init__.py,sha256=GWmUIAIf2yVmUSqPqzTA47mlMeWCXmYwmyECSa8Lq14,208
50
+ mcp_vector_search/config/constants.py,sha256=afXR6SvLLd8QYY4MG4s1vq-hCJiQsE5PhnE-XG9lvb4,1092
51
+ mcp_vector_search/config/default_thresholds.yaml,sha256=sF9BVm1JvooqBS_MaL2HMxSqpJYqjwDqXjQAedxKx-M,1439
52
+ mcp_vector_search/config/defaults.py,sha256=SkPWFpU6BIYbGjyW9WtZ-tsBy9KSGZKkti-EJc2O-8E,5325
53
+ mcp_vector_search/config/settings.py,sha256=D1KMwpBOc-lbuUDy4Q-dvPHp63YAHGqAWipiCVb4xMA,5112
54
+ mcp_vector_search/config/thresholds.py,sha256=HKpOlfHbtGu6F2k7TVGE5JwEcs_FmWCdb1vhMtk3InY,5959
55
+ mcp_vector_search/core/__init__.py,sha256=bWKtKmmaFs7gG5XPCbrx77UYIVeO1FF8wIJxpj1dLNw,48
56
+ mcp_vector_search/core/auto_indexer.py,sha256=E6_6gOcczG6AIpm9TwpZv_rUR4Eif_zIkhEvD5VFm4Y,10315
57
+ mcp_vector_search/core/boilerplate.py,sha256=kyA1Cf79aXgCGWPaxeqoE6cKI1m7-Q4ousmZBMvOTW8,5395
58
+ mcp_vector_search/core/config_utils.py,sha256=qWUvv-a7MNiSQvPqt6WMfeZQv_agsaLIyVVVWZCNbpQ,12056
59
+ mcp_vector_search/core/connection_pool.py,sha256=Ls6zenjS6lGNiQvaPtpVEB4g7J-Yt2b_bM89FiS_io4,12668
60
+ mcp_vector_search/core/database.py,sha256=X6wXHSm4pNWCUTnWygCZJWcJ2-vtDM8a9TYmk94hRFs,59125
61
+ mcp_vector_search/core/directory_index.py,sha256=kCHyltX0b3ZgAm21BSBU_NI_DlyIJ9xq7TrnkFmCmb4,11207
62
+ mcp_vector_search/core/embeddings.py,sha256=wSMUNxZcuGPMxxQ1AbKqA1a3-0c6AiOqmuuI7OqTyaQ,10578
63
+ mcp_vector_search/core/exceptions.py,sha256=1PSbuJcsZXupSYbC7piG8zmHzqAeJstvZVTelxONK2k,1891
64
+ mcp_vector_search/core/factory.py,sha256=0ZfjBUq2XvnU2lhFdNzAk1r25f7V0Y28qDmvD0jTjj8,10359
65
+ mcp_vector_search/core/git_hooks.py,sha256=BUfTU1hky6zdDgtofa1djFwa7g-S1_bxekO4OvPaY8s,10906
66
+ mcp_vector_search/core/indexer.py,sha256=kpw9BzuOGSzbSJW9eyUIw5SR2tNLaJTNJFvksTo-FgE,45312
67
+ mcp_vector_search/core/llm_client.py,sha256=ImhKlK8DFef7LmtU_ikaaO9ota1GBlhQYSEG8zfbsXc,26864
68
+ mcp_vector_search/core/models.py,sha256=svIZ_le_9MZfOgpSPxiP2-VGxrT-0rSnobeckDuPgWE,11737
69
+ mcp_vector_search/core/project.py,sha256=87Cgxm8P3Q2ocqJDJwgJaqrdbzj-6LvM5pKQJTvXfqk,11601
70
+ mcp_vector_search/core/scheduler.py,sha256=msDatz1nFJLg4An99TX6yfWEHtXtl0FiWE1m-RBWTYY,11859
71
+ mcp_vector_search/core/search.py,sha256=kxdH038EUAnTs_IvKxXnnk2muRUxmW-N6MvzycaexWA,39236
72
+ mcp_vector_search/core/watcher.py,sha256=-DFRCnuUfcqcTrkZPQqfJSvxKAxnpt-axgEj1V-B0O4,10862
73
+ mcp_vector_search/mcp/__init__.py,sha256=gfKR0QV7Jqvj5y0LMBe9gSghd5_rPsvm_rml0ryQtoY,158
74
+ mcp_vector_search/mcp/__main__.py,sha256=KgwB59HM5pRLe2Aj-fvDFcTp95lyT0wfmS3ENcx9gPc,571
75
+ mcp_vector_search/mcp/server.py,sha256=R4cRvakhG8UhS-qPXJl97MT5cUOFZw0rPkr-EKPvNTY,29194
76
+ mcp_vector_search/parsers/__init__.py,sha256=jr0Yqz1xMok4lnG7_aXnkZThGuefrlAj8PWVbfeT3QQ,228
77
+ mcp_vector_search/parsers/base.py,sha256=dtezuhVgs9dAWlRYT23GGONyckWzTqkEj7Vcwor8C1k,9341
78
+ mcp_vector_search/parsers/dart.py,sha256=li2JP0vwpSsZnMNq0PweZCD_o-y1jUwubHlSA8nm8KQ,21816
79
+ mcp_vector_search/parsers/html.py,sha256=nzEVDV4oCBp3wpL8vp6WWx5eqiB39agu9E048JkuRJQ,13010
80
+ mcp_vector_search/parsers/javascript.py,sha256=uJMLTbY5NGDSf0817bZ6dQQuQMXLUfIEZzyPuxLxoBY,24337
81
+ mcp_vector_search/parsers/php.py,sha256=1QjnE8SAQF86VQ7pNfn1Pmpg5Dni4M7KCLU7212DkXM,24774
82
+ mcp_vector_search/parsers/python.py,sha256=SiiFySPqZuSMgoctElZCMm18XEA3p1x1qdm1uvYlj_4,19322
83
+ mcp_vector_search/parsers/registry.py,sha256=_a5TwQ19xRb8bQUJhybL04PdmIEXhZ0-6687QvZvE_M,6556
84
+ mcp_vector_search/parsers/ruby.py,sha256=xNn_z8txAWL7E1ULcFMiqn5idFhf5GQn8N3x1yE-c2k,23818
85
+ mcp_vector_search/parsers/text.py,sha256=jvMdFspbmrrOR1GSGzf2gvBDCXz1cPN_xemoDK4fUvM,6084
86
+ mcp_vector_search/parsers/utils.py,sha256=10vT-GJSeDUoGSIslz8zq4RyavFiMtizCmcnn9cbQqE,8103
87
+ mcp_vector_search/utils/__init__.py,sha256=A1UUiZnwYZLw3FnYfwEE9ejGWFxfPFq4fur-tQO26oo,971
88
+ mcp_vector_search/utils/gitignore.py,sha256=hJHt5YsfEvLIfweaa968tGTavcbxqh3X5nSaeWOS_FA,8690
89
+ mcp_vector_search/utils/gitignore_updater.py,sha256=JNi307O0gS0tlc1dSqFfWkIrEqkUKx051-TE7E_Gf70,8454
90
+ mcp_vector_search/utils/monorepo.py,sha256=mlew8cjuIUvtXFAlAJtWZhav5LCLHL2uIef5LEH8aMc,10634
91
+ mcp_vector_search/utils/timing.py,sha256=GuHebwsn6xhEzyR7Mthf1o-dPd_nQhXCsDhsveiRXDE,11365
92
+ mcp_vector_search/utils/version.py,sha256=d7fS-CLemxb8UzZ9j18zH0Y0Ud097ljKKYYOPulnGPE,1138
93
+ mcp_vector_search-1.0.3.dist-info/METADATA,sha256=XaLKHHKlKxJVvz_xnz-KhUVUbGr1cCv6gbA0ZAUh2Io,29787
94
+ mcp_vector_search-1.0.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
95
+ mcp_vector_search-1.0.3.dist-info/entry_points.txt,sha256=H3Ku3CLmadh89aN8fZ3rxr3w19JQWm_TsYyPErlftB8,146
96
+ mcp_vector_search-1.0.3.dist-info/licenses/LICENSE,sha256=FqZUgGJH_tZKZLQsMCpXaLawRyLmyFKRVfMwYyEcyTs,1072
97
+ mcp_vector_search-1.0.3.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,2 +1,3 @@
1
1
  [console_scripts]
2
2
  mcp-vector-search = mcp_vector_search.cli.main:cli_with_suggestions
3
+ mcp-vector-search-mcp = mcp_vector_search.mcp.__main__:main