# @doclea/mcp
Local MCP server for Doclea - persistent memory for AI coding assistants.
## Installation
### Prerequisites
- [Bun](https://bun.sh) v1.0+ (`curl -fsSL https://bun.sh/install | bash`)
- [Docker](https://docs.docker.com/get-docker/) & Docker Compose
- Git
### Step 1: Clone and Build
```bash
git clone https://github.com/your-org/doclea.git
cd doclea/packages/doclea-mcp
# Install dependencies
bun install
# Download embedding model (first time only, ~130MB)
./scripts/setup-models.sh
# Build
bun run build
```
### Step 2: Start Services
```bash
# Start Qdrant + Embeddings
bun run docker:up
# Verify services
curl http://localhost:6333/readyz # Should return "ok"
curl http://localhost:8080/health # Should return "ok"
```
### Step 3: Add to Claude Code
**Option A: Claude Code CLI** (`~/.claude.json` or project `.claude.json`):
```json
{
"mcpServers": {
"doclea": {
"command": "bun",
"args": ["run", "/absolute/path/to/doclea/packages/doclea-mcp/dist/index.js"]
}
}
}
```
**Option B: Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
```json
{
"mcpServers": {
"doclea": {
"command": "bun",
"args": ["run", "/absolute/path/to/doclea/packages/doclea-mcp/dist/index.js"]
}
}
}
```
**Option C: For development** (uses source directly):
```json
{
"mcpServers": {
"doclea": {
"command": "bun",
"args": ["run", "/absolute/path/to/doclea/packages/doclea-mcp/src/index.ts"]
}
}
}
```
### Step 4: Restart Claude Code
After updating config, restart Claude Code to load the MCP server.
### Step 5: Initialize Your Project
In Claude Code, navigate to your project and ask:
```
Initialize doclea for this project
```
This scans your codebase, git history, and documentation to bootstrap memories.
## Usage
Once installed, Claude Code automatically has access to these tools:
### Store a Decision
```
Store this as a decision: We're using PostgreSQL because we need ACID
compliance for financial transactions. Tag it with "database" and "infrastructure".
```
### Search for Context
```
Search memories for authentication patterns
```
### Generate Commit Message
```
Generate a commit message for my staged changes
```
### Generate PR Description
```
Create a PR description for this branch
```
### Find Code Experts
```
Who should review changes to src/auth/?
```
### Generate Changelog
```
Generate a changelog from v1.0.0 to HEAD for users
```
## Configuration
Create `.doclea/config.json` in your project root (optional - uses defaults):
```json
{
"embedding": {
"provider": "local",
"endpoint": "http://localhost:8080"
},
"qdrant": {
"url": "http://localhost:6333",
"collectionName": "doclea_memories"
},
"storage": {
"dbPath": ".doclea/local.db"
}
}
```
### Embedding Providers
| Provider | Config |
|----------|--------|
| **local** (default) | `{ "provider": "local", "endpoint": "http://localhost:8080" }` |
| **openai** | `{ "provider": "openai", "apiKey": "sk-...", "model": "text-embedding-3-small" }` |
| **nomic** | `{ "provider": "nomic", "apiKey": "...", "model": "nomic-embed-text-v1.5" }` |
| **voyage** | `{ "provider": "voyage", "apiKey": "...", "model": "voyage-3" }` |
| **ollama** | `{ "provider": "ollama", "endpoint": "http://localhost:11434", "model": "nomic-embed-text" }` |
## MCP Tools Reference
### Memory Tools
| Tool | Description |
|------|-------------|
| `doclea_store` | Store a memory (decision, solution, pattern, architecture, note) |
| `doclea_search` | Semantic search across memories |
| `doclea_get` | Get memory by ID |
| `doclea_update` | Update existing memory |
| `doclea_delete` | Delete memory |
### Git Tools
| Tool | Description |
|------|-------------|
| `doclea_commit_message` | Generate conventional commit from staged changes |
| `doclea_pr_description` | Generate PR description with context |
| `doclea_changelog` | Generate changelog between refs (markdown/json, developers/users) |
### Expertise Tools
| Tool | Description |
|------|-------------|
| `doclea_expertise` | Map codebase expertise, identify bus factor risks |
| `doclea_suggest_reviewers` | Suggest PR reviewers based on file ownership |
### Bootstrap Tools
| Tool | Description |
|------|-------------|
| `doclea_init` | Initialize project, scan git history, docs, and code |
| `doclea_import` | Import from markdown files or ADRs |
## Memory Types
- **decision** - Architectural decisions, technology choices
- **solution** - Bug fixes, problem resolutions
- **pattern** - Code patterns, conventions
- **architecture** - System design notes
- **note** - General documentation
## Troubleshooting
### Docker services not starting
```bash
# Check logs
docker compose -f docker-compose.test.yml logs
# Restart
bun run docker:down
bun run docker:up
```
### First startup is slow
The embeddings service downloads the model (~130MB) on first run. After that, it's cached.
### Port conflicts
Default ports: Qdrant (6333), Embeddings (8080). Edit `docker-compose.test.yml` to change.
### MCP server not appearing in Claude
1. Verify the path in config is absolute
2. Check that `bun run build` completed successfully
3. Restart Claude Code completely
## Development
```bash
# Run in development mode (hot reload)
bun run dev
# Run all tests
bun test
# Run unit tests only
bun run test:unit
# Run integration tests (requires Docker services)
bun run test:integration
# Type check
bun run typecheck
# Build for production
bun run build
```
## Architecture
```
┌─────────────────────────────────────────────────────────┐
│ Claude Code │
│ ↓ MCP │
├─────────────────────────────────────────────────────────┤
│ Doclea MCP Server │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ ┌───────────┐ │
│ │ Memory │ │ Git │ │Expertise │ │ Bootstrap │ │
│ │ Tools │ │ Tools │ │ Tools │ │ Tools │ │
│ └────┬────┘ └────┬────┘ └────┬─────┘ └─────┬─────┘ │
│ └───────────┴───────────┴─────────────┘ │
│ ↓ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ SQLite │ │ Qdrant │ │ Embeddings │ │
│ │ (metadata) │ │ (vectors) │ │ (local/API) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
```
## License
MIT