GraphSense MCP Server
by faraazahmad
README.md
# GraphSense Code Graph RAG
A code analysis and retrieval system that combines graph databases, vector search, and LLMs to understand and query codebases through natural language.
---
It indexes JavaScript/TypeScript codebases into both a Neo4j graph database and a PostgreSQL vector database, enabling sophisticated queries about code structure, dependencies, and semantic relationships.
## Features
- **Multi-Modal Code Analysis**: Combines graph-based structural analysis with semantic vector search.
- **Natural Language Queries**: Ask questions about your codebase in plain English.
- **Function Discovery**: Find functions based on semantic similarity and structural relationships.
- **Dependency Tracking**: Understand import relationships and function call hierarchies.
- **AI-Powered Summaries**: Automatically generates summaries for functions using LLMs.
- **Real-time Analysis**: Processes codebases incrementally with file watching.
- **MCP Integration**: Integrates with your text editor or AI agent via MCP.
## Quick Start
```bash
# Navigate to your git repository
$ cd ~/path/to/repo
# Run GraphSense from within the repository
$ npx graphsense
```
Note: You will need environment variables declared in `~/.graphsense/.env`:
### Environment Variables
Required variables (must be set):
- `ANTHROPIC_API_KEY` - Claude API key
- `PINECONE_API_KEY` - Pinecone API key
### Prerequisites
- Node.js 16+
- Docker
- Must be run from within a git repository (GraphSense will exit if not)
- API Keys for:
- Anthropic (Claude) - [Get API Key](https://console.anthropic.com/)
- Pinecone - [Get API Key](https://app.pinecone.io/)
## Model Context Protocol (MCP) Integration
GraphSense provides an MCP server to integrate with AI assistants like Claude Desktop, enabling natural language queries about your codebase.
### MCP Configuration
The MCP server uses stdio transport and is automatically started when you run the main application.
#### Starting GraphSense MCP
```bash
# Navigate to your git repository
$ cd ~/path/to/repo
# Run GraphSense from within the repository
$ npx graphsense
```
#### Claude Desktop Configuration
Add this to your Claude Desktop configuration file:
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"graphsense": {
"command": "npx",
"args": ["graphsense"],
"env": {}
}
}
}
```
> Note: Your preferred AI coding editor/agent will have similar configuration options.
### Available MCP Tools
- **`similar_functions`** - Find functions based on semantic description
- Parameters: `function_description` (string), `topK` (number, optional)
- Returns: Array of similar functions with similarity scores
- **`function_callers`** - Find functions that call a specific function
- Parameters: `functionId` (string) - The element ID of the target function
- Returns: Array of caller functions with their IDs and names
- **`function_callees`** - Find functions called by a specific function
- Parameters: `functionId` (string) - The element ID of the source function
- Returns: Array of called functions with their IDs and names
- **`function_details`** - Get detailed information about a specific function
- Parameters: `functionId` (string) - The element ID of the function
- Returns: Function details including name, code, and summary
### MCP Usage Examples
Once configured, you can use natural language queries in your AI assistant:
#### Example Queries
**Natural Language Queries:**
- "Find all functions that handle user authentication"
- "Which functions have more than 5 callers?"
- "Show me functions related to database operations"
- "What files import the authentication module?"
**Structural Queries:**
- Functions with high coupling (many callers/callees)
- Import dependency chains
- Orphaned functions (no callers)
- Cross-module function calls
### MCP Troubleshooting
#### Connection Issues
1. **Database Connection Errors**
```bash
# Check if PostgreSQL is running
docker ps | grep postgres
# Check if Neo4j is running
docker ps | grep neo4j
# Test database connections
psql -h localhost -p 5432 -U postgres -d graphsense
```
2. **Port Conflicts**
- Default PostgreSQL port: 5432
- Default Neo4j port: 7687
- Check `docker ps` output for actual ports if different
3. **Environment Variables**
Verify required environment variables are set in `~/.graphsense/.env`.
If not:
```bash
# Create a dedicated config directory
mkdir -p ~/.graphsense
# Store environment variables securely
cat > ~/.graphsense/.env << EOF
ANTHROPIC_API_KEY=your-key-here
PINECONE_API_KEY=your-key-here
EOF
# Set proper permissions
chmod 600 ~/.graphsense/.env
```
#### Common Issues
- **"No functions found"**: Ensure your repository has been indexed first
- **"Connection refused"**: Check if database containers are running
- **"Permission denied"**: Verify file paths and permissions in MCP config
- **"API key invalid"**: Confirm your Anthropic and Pinecone API keys are correct
#### Debugging MCP Server
```bash
# Run with debug output
DEBUG=* node build/mcp.js
# Check server logs
tail -f ~/.graphsense/logs/mcp.log
```
## Architecture
The system uses a hybrid approach combining:
1. **Neo4j Graph Database**: Stores structural relationships between files and functions
- File nodes with path properties
- Function nodes with name and path properties
- IMPORTS_FROM relationships between files
- CALLS relationships between functions
2. **PostgreSQL with pgvector**: Stores function embeddings for semantic search
- Function metadata and code summaries
- Vector embeddings for similarity search
- Hybrid dense/sparse search with reranking
3. **Pinecone Vector Databases**: Dual-index setup for enhanced search
- Dense embeddings index
- Sparse embeddings index
- Pinecone similarity-based ranking for result optimization
### Database Configuration
The system uses two databases:
- **PostgreSQL with pgvector**: Stores function embeddings and metadata
- **Neo4j**: Stores code structure and relationships
Both databases are automatically started via docker, for each repository path there will be a
separate set of these 2 databases.
See [ENVIRONMENT.md](ENVIRONMENT.md) for complete configuration guide.
## AI Models
The system uses 2 AI providers:
- **Claude 3.5 Sonnet**: Backup model and natural language processing
- **Pinecone**: Vector embeddings and similarity ranking
### Vector Search
Hybrid search approach:
1. Dense vector search (semantic similarity)
2. Sparse vector search (keyword matching)
3. Result merging and deduplication
4. Pinecone similarity ranking for optimal results
## Development
### Project Structure
```
src/
├── db.ts # Database setup and connections
├── env.ts # Environment configuration
├── index.ts # Main indexing logic
├── mcp.ts # Model Context Protocol HTTP server
├── parse.ts # Code parsing and AI processing
├── watcher.ts # File watcher for real-time analysis
└── entrypoint.ts # Entrypoint for the package
```
### Building
```bash
# Compile TypeScript
npx tsc
# Watch mode for development
npx tsc --watch
```
## License
Licensed under GPL v3.0
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues