Enterprise Code Search MCP Server
Allows indexing and semantic search of Git repositories, enabling AI-powered code discovery across version-controlled codebases
Provides local, private AI embeddings for semantic code search, supporting models like nomic-embed-text and all-minilm for enterprise code analysis without external API calls
Enables semantic code search using OpenAI's embedding models (text-embedding-3-small, text-embedding-3-large) for generating vector representations of code
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Enterprise Code Search MCP Serversearch for authentication logic in all indexed projects"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Enterprise Code Search MCP Server
A powerful Model Context Protocol (MCP) server for semantic code search with shared vector database. Supports both OpenAI and Ollama for embeddings, and can index local projects or Git repositories.
š Features
Semantic code search using AI embeddings
Dual provider support: OpenAI or Ollama (local, private)
Flexible indexing: Local projects or Git repositories
Shared vector database with ChromaDB
Multi-project management: Handle multiple projects simultaneously
Automatic project structure analysis
Similar code search based on code snippets
Enterprise-ready: Private, secure, self-hosted
Related MCP server: MCP Codebase Index
š Requirements
Node.js 18+
Docker and Docker Compose
Git (for repository indexing)
š ļø Quick Start
1. Clone the repository
git clone https://github.com/your-username/semantic-context-mcp.git
cd semantic-context-mcp2. Install dependencies
npm install3. Configure environment
cp .env.example .env
# Edit .env with your configuration4. Start services
# Start ChromaDB and Ollama
docker-compose up -d
# Wait for Ollama to download models
docker-compose logs -f ollama-setup5. Build and run
npm run build
npm startāļø Configuration
Using Ollama (Recommended for Enterprise)
# .env
EMBEDDING_PROVIDER=ollama
OLLAMA_HOST=http://localhost:11434
OLLAMA_MODEL=nomic-embed-text
CHROMA_HOST=localhost
CHROMA_PORT=8000Using OpenAI
# .env
EMBEDDING_PROVIDER=openai
OPENAI_API_KEY=your-api-key
OPENAI_MODEL=text-embedding-3-smallš§ Claude Desktop Integration
To use this MCP server with Claude Desktop, add to your claude_desktop_config.json:
{
"mcpServers": {
"enterprise-code-search": {
"command": "node",
"args": ["/path/to/semantic-context-mcp/dist/index.js"],
"env": {
"EMBEDDING_PROVIDER": "ollama",
"OLLAMA_HOST": "http://localhost:11434",
"OLLAMA_MODEL": "nomic-embed-text",
"CHROMA_HOST": "localhost",
"CHROMA_PORT": "8000",
"COMPANY_NAME": "YourCompany"
}
}
}
}šÆ Usage Examples
1. Index a local project
Index my local project at /home/user/my-app with the name "frontend-app"2. Search in code
Search for "main application function" in all indexed projects3. Find similar code
Find code similar to:
```python
def authenticate_user(username, password):
return check_credentials(username, password)4. Analyze project structure
Analyze the structure of project "frontend-app"š ļø Available Tools
Tool | Description |
| Index a local directory |
| Semantic search in code |
| List all indexed projects |
| Get embedding provider information |
š Example Queries
Functional searches
"Where is the authentication logic?"
"Functions that handle database operations"
"Environment variable configuration"
"Unit tests for the API"
Code analysis
"What design patterns are used?"
"Most complex functions in the project"
"Error handling in the code"
Technology-specific search
"Code using React hooks"
"PostgreSQL queries"
"Docker configuration"
š§ Advanced Configuration
Recommended Ollama Models
# For code embeddings
ollama pull nomic-embed-text # Best for code (384 dims)
ollama pull all-minilm # Lightweight alternative (384 dims)
ollama pull mxbai-embed-large # Higher precision (1024 dims)File Patterns
The server supports extensive file type recognition including:
Programming Languages: Python, JavaScript/TypeScript, Java, C/C++, Go, Rust, PHP, Ruby, Swift, Kotlin, Scala, and more
Web Technologies: HTML, CSS, SCSS, Vue, Svelte
Configuration: JSON, YAML, TOML, Docker, Terraform
Documentation: Markdown, reStructuredText, AsciiDoc
Database: SQL files
Performance Tuning
# Maximum chunk size (characters)
MAX_CHUNK_SIZE=1500
# Maximum file size (KB)
MAX_FILE_SIZE=500
# Batch size for indexing
BATCH_SIZE=100š¢ Enterprise Deployment
Option 1: Dedicated Server
# On enterprise server
docker-compose up -dOption 2: Network Deployment
# Configure for network access
CHROMA_HOST=192.168.1.100
OLLAMA_HOST=http://192.168.1.100:11434š Security Considerations
Key Benefits
Private Data: Ollama keeps everything local
No External APIs: When using Ollama, no data leaves your network
Self-hosted: Full control over your code and embeddings
Isolated Environment: Docker containers provide isolation
Security Best Practices
# Restrict ChromaDB access
CHROMA_SERVER_HOST=127.0.0.1 # Localhost only
# Use HTTPS for production
OLLAMA_HOST=https://ollama.company.comš Monitoring & Troubleshooting
Useful Logs
# View indexing logs
docker-compose logs -f enterprise-mcp-server
# ChromaDB performance
docker-compose logs -f chromadb
# Monitor Ollama
curl http://localhost:11434/api/tagsCommon Issues
Ollama not responding:
curl http://localhost:11434/api/tags
# If it fails: docker-compose restart ollamaChromaDB slow:
# Check disk space
docker system df
# Clean if necessary
docker system prunePoor embedding quality:
Try different model:
all-minilmvsnomic-embed-textAdjust chunk size
Verify source file quality
š¤ Collaborative Workflow
Typical Enterprise Workflow
DevOps indexes main projects
Developers search code using Claude
Automatic updates via CI/CD
Code analysis for code reviews
Best Practices
Index after important merges
Use descriptive project names
Maintain project-specific search filters
Document naming conventions
š ļø Development
Project Structure
src/
āāā index.ts # Main MCP server
āāā http-server.ts # HTTP server variant
scripts/ # Setup and utility scripts
docker-compose.yml # Service orchestration
package.json # Dependencies and scriptsAvailable Scripts
npm run build # Compile TypeScript
npm run dev # Development mode
npm run start # Production mode
npm run clean # Clean build directoryš API Reference
The MCP server implements the standard Model Context Protocol with these specific tools:
index_local_project: Index local directories with configurable file patterns
search_codebase: Semantic search with project filtering and similarity scoring
list_indexed_projects: Enumerate all indexed projects with metadata
get_embedding_provider_info: Get current provider status and configuration
Each tool includes detailed JSON schema with examples and validation.
š¤ Recommended AI Models
For embeddings (Ollama)
nomic-embed-text: Optimized for codeall-minilm: Balanced, fastmxbai-embed-large: High precision
For embeddings (OpenAI)
text-embedding-3-small: Cost-effectivetext-embedding-3-large: Higher precision
š³ Docker Support
The project includes a complete Docker setup:
ChromaDB: Vector database for embeddings
Ollama: Local embedding generation
PostgreSQL: Optional metadata storage
All services are orchestrated with Docker Compose for easy deployment.
ā Support
If this project helps you with your development workflow, consider supporting it:

š License
MIT License - see LICENSE file for details.
š¤ Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Fork the project
Create your feature branch (
git checkout -b feature/AmazingFeature)Commit your changes (
git commit -m 'Add some AmazingFeature')Push to the branch (
git push origin feature/AmazingFeature)Open a Pull Request
š Support & Issues
š§ Issues: GitHub Issues
š¬ Discussions: GitHub Discussions
ā Support: Buy Me a Coffee
Available Tools
4 toolsget_embedding_provider_infoB
Get information about the current embedding provider
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states what the tool does without revealing any traits like whether it's read-only, if it requires authentication, what data it returns (e.g., provider name, configuration details), or potential errors. This leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that directly states the tool's purpose without any unnecessary words or fluff. It's front-loaded with the key action ('Get information'), making it easy to parse quickly. Every word earns its place, resulting in an efficient and well-structured description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a tool that retrieves provider information, the description is incomplete. With no annotations and no output schema, it fails to explain what information is returned (e.g., provider type, settings, status) or any behavioral aspects like error handling. This makes it inadequate for users to fully understand the tool's functionality and output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and the schema description coverage is 100%, so there are no parameters to document. The description doesn't need to add parameter semantics, and it appropriately avoids mentioning any. This meets the baseline for tools with no parameters, as it doesn't mislead or omit necessary information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('information about the current embedding provider'), making it easy to understand what it does. However, it doesn't differentiate from sibling tools like 'list_indexed_projects' or 'search_codebase', which are unrelated to embedding providers, so it doesn't fully distinguish itself in context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any prerequisites, such as needing an embedding provider to be configured, or specify use cases like checking provider settings before performing operations. Without this context, users might struggle to determine its appropriate application.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_local_projectC
Index a local project directory into the vector database
| Name | Required | Description | Default |
|---|---|---|---|
| exclude_patterns | No | File patterns to exclude (optional) | |
| include_patterns | No | File patterns to include (optional) | |
| project_name | Yes | Name for the project (used as identifier) | |
| project_path | Yes | Absolute path to the local project directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the action ('index') but lacks critical behavioral details: it doesn't specify if this is a one-time or incremental operation, what happens if the project already exists (overwrite? error?), permission requirements, or any side effects like data persistence or performance impact. This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action and target, making it easy to understand at a glance. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of indexing a directory (a mutation operation with potential side effects), no annotations, and no output schema, the description is incomplete. It fails to address key contextual aspects like what 'indexing' entails (e.g., file parsing, embedding generation), error handling, or what the tool returns upon success/failure. This leaves significant gaps for an AI agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters thoroughly. The description adds no additional meaning beyond what's in the schemaāit doesn't explain parameter interactions, default behaviors, or usage examples. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('index') and target ('a local project directory into the vector database'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'list_indexed_projects' or 'search_codebase', which are related but serve different purposes (listing vs. indexing vs. searching).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing directory), exclusions (e.g., when not to index), or how it relates to siblings like 'list_indexed_projects' for checking existing indexes or 'search_codebase' for querying after indexing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_indexed_projectsB
List all projects currently indexed
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states it's a list operation, implying read-only behavior, but doesn't specify details like pagination, rate limits, or what 'indexed' means in practice. This leaves gaps in understanding how the tool behaves beyond basic listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words, making it highly concise and front-loaded. It efficiently conveys the core purpose without unnecessary elaboration, which is ideal for this simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no annotations, and no output schema, the description is minimally adequate by stating what it does. However, it lacks context on behavior (e.g., return format, limitations) and usage relative to siblings, making it incomplete for optimal agent guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate, earning a high score as it doesn't introduce confusion or redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('projects currently indexed'), making the purpose specific and understandable. However, it doesn't differentiate from sibling tools like 'search_codebase', which might also list projects in some context, so it doesn't reach the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as 'search_codebase' for filtered searches or 'index_local_project' for adding projects. There's no mention of prerequisites, exclusions, or context for usage, leaving the agent without clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_codebaseC
Search the indexed codebase using semantic search
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results | |
| project_filter | No | Filter by specific project name | |
| query | Yes | Search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool performs a 'semantic search' but doesn't explain what that entails (e.g., natural language understanding, relevance scoring), nor does it cover aspects like rate limits, authentication needs, or whether it's read-only (implied but not explicit). This leaves significant gaps for an agent to understand operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It is appropriately sized and front-loaded, making it easy for an agent to quickly grasp the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (semantic search with multiple parameters) and the lack of annotations and output schema, the description is insufficient. It doesn't explain what the search returns (e.g., code snippets, file paths), how results are ranked, or any limitations (e.g., indexing requirements). This leaves critical context gaps for effective tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with clear documentation for 'query', 'limit', and 'project_filter'. The description adds no additional parameter semantics beyond what's in the schema, such as query format examples or filter usage details. This meets the baseline of 3, as the schema adequately handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('search') and resource ('indexed codebase'), and it specifies the search method ('semantic search'). However, it doesn't explicitly differentiate from sibling tools like 'list_indexed_projects' or 'get_embedding_provider_info', which reduces its score from a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to prefer 'search_codebase' over 'list_indexed_projects' for browsing projects or 'get_embedding_provider_info' for understanding search capabilities, nor does it specify prerequisites like needing an indexed codebase first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose with no overlap: get_embedding_provider_info retrieves configuration details, index_local_project handles indexing, list_indexed_projects enumerates existing projects, and search_codebase performs semantic queries. The descriptions clearly differentiate between setup, management, and query operations.
All tools follow a consistent verb_noun naming pattern (e.g., get_embedding_provider_info, index_local_project, list_indexed_projects, search_codebase). The verbs (get, index, list, search) are appropriately descriptive and maintain a uniform snake_case style throughout.
With 4 tools, this server is well-scoped for enterprise code search, covering essential operations: provider info retrieval, indexing, project listing, and semantic search. Each tool earns its place without redundancy, making the set manageable and focused on core functionality.
The toolset covers the primary workflows for code search: setup (get provider info), ingestion (index projects), management (list projects), and querying (search). A minor gap exists in update/delete operations for indexed projects (e.g., reindexing or removal), but agents can likely work around this with the provided tools.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Code intelligence for LLMs. Analyze, search, and retrieve code from any public git repository.
Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Project memory, semantic code search, and grounded agent context.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides semantic code search capabilities that run 100% locally using EmbeddingGemma embeddings. Enables finding code by meaning across 15 file extensions and 9+ programming languages without API costs or sending code to the cloud.236
- AlicenseNot gradedqualityDmaintenanceEnables semantic search across your codebase using Google's Gemini embeddings and Qdrant Cloud vector storage. Supports 15+ programming languages with smart code chunking and real-time file change monitoring.2819MIT
- AlicenseAqualityFmaintenanceProvides intelligent semantic code search using local AI embeddings, enabling natural language queries to find relevant code by meaning rather than exact keywords. Indexes codebases in the background with smart project detection and privacy-first local processing.639199MIT
- AlicenseAqualityDmaintenanceProvides semantic code search over codebases using local embeddings with natural language queries. Supports hybrid search, file watching, and respects .gitignore.115MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/damian-pramparo/semantic-context-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server