brain-mcp
Integrates with Git to manage code-linked knowledge, enabling the server to detect stale thoughts by comparing stored metadata against the current state of repositories, files, and symbols.
Utilizes PostgreSQL with the pgvector extension to provide a persistent semantic memory store, allowing for semantic search and organization of thoughts, dimensions, and Architecture Decision Records (ADRs).
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
brain-mcp
An MCP (Model Context Protocol) server that provides persistent semantic memory backed by PostgreSQL + pgvector. Store "thoughts" with vector embeddings and organize them via a flexible dimensional model.
Two Servers
This repo provides two MCP servers with a shared codebase:
brain-mcp (
dist/index.js) — General-purpose knowledge store with ADR support. Use this for non-code contexts.brain-code-mcp (
dist/code.js) — Superset of brain-mcp with code-aware tools. Use this for software projects.
You only need to configure one — brain-code-mcp includes all brain-mcp tools.
Related MCP server: persistent-memory
Features
Semantic search — find thoughts by meaning using cosine similarity over vector embeddings
Dimensional organization — tag thoughts with typed dimensions (person, project, topic, tag, file, symbol, etc.)
Thought temporality — thoughts have types (
fact,decision,observation,question) and can be superseded while preserving historyMulti-brain support — isolated knowledge spaces via the
BRAIN_NAMEenvironment variableConflict detection — automatically surfaces similar existing thoughts when capturing new ones
Architecture Decision Records — structured ADR capture with auto-numbering, alternatives, and consequences
Code-linked knowledge — link thoughts to repositories, files, and symbols (brain-code-mcp)
Knowledge freshness — detect stale knowledge when referenced code changes (brain-code-mcp)
Tools
Core tools (both servers)
Tool | Description |
| Store a thought with type, dimensions, metadata, and embedding. Surfaces conflicts with similar active thoughts. |
| Semantic vector search with optional filters (dimension, thought type, etc.) |
| Chronological listing with optional filters |
| All thoughts linked to a given dimension |
| All dimensions with thought counts |
| List all brains with optional thought counts. Respects |
| Replace an existing thought, preserving history. Auto-preserves ADR metadata. |
| Record an Architecture Decision Record with context, alternatives, and consequences |
| List and filter ADRs by status or dimension |
Code tools (brain-code-mcp only)
Tool | Description |
| Capture knowledge linked to specific files, symbols, or repositories |
| Semantic search filtered to code-linked knowledge |
| Check if code-linked knowledge is stale by comparing git state |
| Find stale thoughts with git diffs for review |
Core prompts (both servers)
Prompt | Description |
| Comprehensive orientation: thought counts, dimensions, recent thoughts, ADR summary, open questions |
| Deep dive into a dimension with all linked thoughts, co-occurring dimensions, and ADRs |
| Review active decisions and ADRs, flagging overdue revisit dates |
| Set up a knowledge capture session with existing taxonomy and related knowledge |
Code prompts (brain-code-mcp only)
Prompt | Description |
| All knowledge about a repo grouped by file/symbol, with optional freshness checks |
| All knowledge about a specific file with freshness and semantically related unlinked knowledge |
Setup
Prerequisites
Node.js
PostgreSQL with pgvector extension
An OpenRouter API key (for generating embeddings)
Quick start (Claude Code)
Set OPENROUTER_API_KEY in your shell environment (e.g. in ~/.bashrc or ~/.zshrc):
export OPENROUTER_API_KEY="your-key-here"Then add to your project's .mcp.json:
{
"mcpServers": {
"brain": {
"command": "npx",
"args": ["-y", "github:markschaake/brain-mcp"],
"env": {
"DATABASE_URL": "postgresql://user:pass@host:5432/brain",
"BRAIN_NAME": "personal"
}
}
}
}For brain-code-mcp (includes code-aware tools):
{
"mcpServers": {
"brain": {
"command": "npx",
"args": ["-y", "-p", "github:markschaake/brain-mcp", "brain-code-mcp"],
"env": {
"DATABASE_URL": "postgresql://user:pass@host:5432/brain",
"BRAIN_NAME": "my-project"
}
}
}
}Note: Do not put
OPENROUTER_API_KEYin.mcp.json— it is often checked into version control. The server reads it from the environment automatically.
The database schema is automatically created on first run.
Database options
Option 1: Use the included docker-compose (easiest for local development)
git clone https://github.com/markschaake/brain-mcp.git
cd brain-mcp
docker compose up -d # starts PostgreSQL+pgvector on port 5488With docker-compose, the default DATABASE_URL (postgresql://brain:brain@localhost:5488/brain) works without any configuration.
Option 2: Bring your own PostgreSQL
Any PostgreSQL instance with the pgvector extension installed will work. Set DATABASE_URL in your MCP config. The schema is auto-applied on first server startup.
Local development
pnpm install
pnpm run build
pnpm run dev # watch mode (tsc --watch)
pnpm run lint # run ESLint
# Run directly
OPENROUTER_API_KEY=your-key node dist/index.js # brain-mcp
OPENROUTER_API_KEY=your-key node dist/code.js # brain-code-mcpEnvironment variables
Variable | Description | Default |
| PostgreSQL connection string |
|
| Required for embedding generation | — |
| Override the embedding model |
|
| Which brain (knowledge space) to use |
|
| Comma-separated whitelist of brain names this instance can access. Empty = all brains accessible. | (empty) |
Multi-brain usage
All tools and prompts accept an optional brain parameter to target a specific brain by name at runtime, without restarting the server. Omit it to use the default brain (BRAIN_NAME).
Read-only tools (search, list_recent, explore_dimension, list_dimensions, list_adrs, search_code, check_freshness, refresh_stale_knowledge) also accept brain: "*" to query across all accessible brains.
Write tools (capture_thought, supersede_thought, capture_adr, capture_code_context) reject "*" — you must specify a brain name for writes.
Use BRAIN_ACCESSIBLE to restrict which brains a server instance can access:
{
"mcpServers": {
"brain": {
"command": "npx",
"args": ["-y", "github:markschaake/brain-mcp"],
"env": {
"DATABASE_URL": "postgresql://user:pass@host:5432/brain",
"BRAIN_NAME": "personal",
"BRAIN_ACCESSIBLE": "personal,work,shared"
}
}
}
}When BRAIN_ACCESSIBLE is empty (default), all brains are accessible.
Architecture
Source files
File | Purpose |
| brain-mcp entry point |
| brain-code-mcp entry point (superset) |
| Shared tool registration (core + ADR tools) |
| PostgreSQL connection pool and helpers |
| Auto-migration runner (applies |
| Embedding generation via OpenRouter |
| Git operations for freshness detection |
| MCP prompt registration (core prompts for both servers) |
Database schema
Migrations are in migrations/ and are auto-applied on server startup.
brains — isolated knowledge spaces
thoughts — content + vector(1536) embedding + metadata (jsonb) + thought type + status
dimensions — typed categories with metadata, unique per (brain, name, type)
thought_dimensions — many-to-many links with optional context
Embeddings are indexed with HNSW for fast cosine similarity search.
Code-linked dimension types
brain-code-mcp uses these dimension types to link knowledge to code:
Type | Name convention | Metadata |
| Repository name |
|
| Repo-relative path |
|
| Symbol name |
|
ADR metadata
ADRs are stored as decision thoughts with structured metadata:
{
"adr": true,
"adr_number": 7,
"adr_title": "Use pgvector for semantic search",
"adr_status": "accepted", // proposed | accepted | deprecated | superseded
"adr_context": "Why this decision was needed...",
"adr_alternatives": [{ "name": "Pinecone", "pros": [...], "cons": [...] }],
"adr_consequences": ["Must run PostgreSQL with pgvector"],
"adr_decided_date": "2026-03-01"
}License
ISC
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Shared cross-LLM long-term memory over MCP: semantic recall, sessions, and media (pgvector).
An MCP memory server. One memory your agents share — across models, devices and apps.
Cloud-hosted MCP server for durable AI memory
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA lightweight MCP server that provides long-term memory for LLMs by storing and retrieving important facts, decisions, and preferences through smart semantic search and automatic organization.12MIT
- AlicenseNot gradedqualityCmaintenanceA self-hostable MCP server that provides permanent memory for AI agents using Postgres + pgvector for semantic search and Markdown file sync.2 npmMIT
- AlicenseAqualityDmaintenanceMCP server for persistent, semantic memory across AI sessions; store context, decisions, and learnings and recall them with natural language search.230 npmMIT
- AlicenseNot gradedqualityDmaintenanceA general-purpose MCP memory server that gives AI clients long-term memory with semantic search, memory classification, priority management, and progressive injection, supporting local JSON or cloud PostgreSQL storage.AGPL 3.0