sourcesage
by sarathsp06
Verified
# SourceSage: Efficient Code Memory for LLMs
<a href="https://glama.ai/mcp/servers/@sarathsp06/sourcesage">
<img width="380" height="200" src="https://glama.ai/mcp/servers/@sarathsp06/sourcesage/badge" />
</a>
SourceSage is an MCP (Model Context Protocol) server that efficiently memorizes key aspects of a codebase—logic, style, and standards—while allowing dynamic updates and fast retrieval. It's designed to be language-agnostic, leveraging the LLM's understanding of code across multiple languages.
## Features
- **Language Agnostic**: Works with any programming language the LLM understands
- **Knowledge Graph Storage**: Efficiently stores code entities, relationships, patterns, and style conventions
- **LLM-Driven Analysis**: Relies on the LLM to analyze code and provide insights
- **Token-Efficient Storage**: Optimizes for minimal token usage while maximizing memory capacity
- **Incremental Updates**: Updates knowledge when code changes without redundant storage
- **Fast Retrieval**: Enables quick and accurate retrieval of relevant information
## How It Works
SourceSage uses a novel approach where:
1. The LLM analyzes code files (in any language)
2. The LLM uses MCP tools to register entities, relationships, patterns, and style conventions
3. SourceSage stores this knowledge in a token-efficient graph structure
4. The LLM can later query this knowledge when needed
This approach leverages the LLM's inherent language understanding while focusing the MCP server on efficient memory management.
## Installation
```bash
# Clone the repository
git clone https://github.com/yourusername/sourcesage.git
cd sourcesage
# Install the package
pip install -e .
```
## Usage
### Running the MCP Server
```bash
# Run the server
sourcesage
# Or run directly from the repository
python -m sourcesage.mcp_server
```
### Connecting to Claude for Desktop
1. Open Claude for Desktop
2. Go to Settings > Developer > Edit Config
3. Add the following to your `claude_desktop_config.json`:
If you've installed the package:
```json
{
"mcpServers": {
"sourcesage": {
"command": "sourcesage",
"args": []
}
}
}
```
If you're running from a local directory without installing:
```json
{
"sourcesage": {
"command": "uv",
"args": [
"--directory",
"/path/to/sourcesage",
"run",
"main.py"
]
},
}
```
4. Restart Claude for Desktop
### Available Tools
SourceSage provides the following MCP tools:
1. **register_entity**: Register a code entity in the knowledge graph
```
Input:
- name: Name of the entity (e.g., class name, function name)
- entity_type: Type of entity (class, function, module, etc.)
- summary: Brief description of the entity
- signature: Entity signature (optional)
- language: Programming language (optional)
- observations: List of observations about the entity (optional)
- metadata: Additional metadata (optional)
Output: Confirmation message with entity ID
```
2. **register_relationship**: Register a relationship between entities
```
Input:
- from_entity: Name of the source entity
- to_entity: Name of the target entity
- relationship_type: Type of relationship (calls, inherits, imports, etc.)
- metadata: Additional metadata (optional)
Output: Confirmation message with relationship ID
```
3. **register_pattern**: Register a code pattern
```
Input:
- name: Name of the pattern
- description: Description of the pattern
- language: Programming language (optional)
- example: Example code demonstrating the pattern (optional)
- metadata: Additional metadata (optional)
Output: Confirmation message with pattern ID
```
4. **register_style_convention**: Register a coding style convention
```
Input:
- name: Name of the convention
- description: Description of the convention
- language: Programming language (optional)
- examples: Example code snippets demonstrating the convention (optional)
- metadata: Additional metadata (optional)
Output: Confirmation message with convention ID
```
5. **add_entity_observation**: Add an observation to an entity
```
Input:
- entity_name: Name of the entity
- observation: Observation to add
Output: Confirmation message
```
6. **query_entities**: Query entities in the knowledge graph
```
Input:
- entity_type: Filter by entity type (optional)
- language: Filter by programming language (optional)
- name_pattern: Filter by name pattern (regex, optional)
- limit: Maximum number of results to return (optional)
Output: List of matching entities
```
7. **get_entity_details**: Get detailed information about an entity
```
Input:
- entity_name: Name of the entity
Output: Detailed information about the entity
```
8. **query_patterns**: Query code patterns in the knowledge graph
```
Input:
- language: Filter by programming language (optional)
- pattern_name: Filter by pattern name (optional)
Output: List of matching patterns
```
9. **query_style_conventions**: Query coding style conventions
```
Input:
- language: Filter by programming language (optional)
- convention_name: Filter by convention name (optional)
Output: List of matching style conventions
```
10. **get_knowledge_statistics**: Get statistics about the knowledge graph
```
Input: None
Output: Statistics about the knowledge graph
```
11. **clear_knowledge**: Clear all knowledge from the graph
```
Input: None
Output: Confirmation message
```
## Example Workflow with Claude
1. **Analyze Code**: Ask Claude to analyze your code files
```
"Please analyze this Python file and register the key entities and relationships."
```
2. **Register Entities**: Claude will use the register_entity tool to store code entities
```
"I'll register the main class in this file."
```
3. **Register Relationships**: Claude will use the register_relationship tool to store relationships
```
"I'll register the inheritance relationship between these classes."
```
4. **Query Knowledge**: Later, ask Claude about your codebase
```
"What classes are defined in my codebase?"
"Show me the details of the User class."
"What's the relationship between the User and Profile classes?"
```
5. **Get Coding Patterns**: Ask Claude about coding patterns
```
"What design patterns are used in my codebase?"
"Show me examples of the Factory pattern in my code."
```
## How It's Different
Unlike traditional code analysis tools, SourceSage:
1. **Leverages LLM Understanding**: Uses the LLM's ability to understand code semantics across languages
2. **Stores Semantic Knowledge**: Focuses on meaning and relationships, not just syntax
3. **Is Language Agnostic**: Works with any programming language the LLM understands
4. **Optimizes for Token Efficiency**: Stores knowledge in a way that minimizes token usage
5. **Evolves with LLM Capabilities**: As LLMs improve, so does code understanding
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
This project is licensed under the MIT License - see the LICENSE file for details.