MCP Integration
How Memvault integrates with the Model Context Protocol to give agents memory.
What is MCP?
The Model Context Protocol is Anthropic's standard for connecting AI agents to external data sources.
With MCP, agents can:
- Read data from local tools
- Write data to local services
- Access resources securely
- Call functions with type safety
Memvault as an MCP Server
Memvault exposes its functionality through MCP tools:
┌──────────────────────────────────┐
│ Claude Code / Agent │
└──────────────┬───────────────────┘
│ MCP Protocol
┌──────────────▼───────────────────┐
│ Memvault MCP Server (stdio) │
├──────────────────────────────────┤
│ • memvault_context │
│ • memvault_search │
│ • memvault_memory_update │
│ • memvault_session_read │
│ • ... (more tools) │
└──────────────┬───────────────────┘
│
┌──────────────▼───────────────────┐
│ Local Vault (files + SQLite) │
└──────────────────────────────────┘Available MCP Tools
Core Tools
memvault_context
Get session state, memories, and history.
{
"name": "memvault_context",
"arguments": {
"session": "current",
"query": "optional search term"
}
}Returns:
- Core memories (background, preferences)
- Session summary
- Related historical context
- Pending messages
memvault_search
Full-text search across all sessions and memories.
{
"name": "memvault_search",
"arguments": {
"query": "folder picker",
"limit": 10,
"kind": "session" // or "memory"
}
}memvault_memory_update
Create or update agent memory.
{
"name": "memvault_memory_update",
"arguments": {
"kind": "preference",
"title": "Code Review Style",
"body": "User wants security-focused reviews",
"evidence": [
{"session": "abc123", "message": "msg_01"}
]
}
}memvault_session_read
Read full session messages with pagination.
{
"name": "memvault_session_read",
"arguments": {
"session": "abc123",
"offset": 0,
"limit": 100
}
}Link Management
memvault_session_link
Create relationships between sessions.
{
"name": "memvault_session_link",
"arguments": {
"from": "session_a",
"to": "session_b",
"kind": "continuation" // or "branch", "reference"
}
}Maintenance
memvault_tasks
Query and claim maintenance tasks.
{
"name": "memvault_tasks",
"arguments": {
"op": "list" // or "claim"
}
}Setup
1. Install Memvault
go install github.com/liyown/memvault/cmd/memvault@latest2. Start MCP Server
Claude Code
Edit ~/.claude/settings.json:
{
"mcp": {
"servers": {
"memvault": {
"command": "memvault",
"args": ["mcp"],
"env": {
"MEMVAULT_HOME": "/Users/you/memvault"
}
}
}
}
}Codex
Similar MCP configuration in Codex settings.
3. Restart Agent
Quit and restart Claude Code or Codex to load the MCP server.
How It Works
stdio Transport
Memvault uses stdio (standard input/output) for MCP:
Agent Process Memvault Process
│ │
├──────request──────────>│
│ (JSON-RPC) │
│ │
│<─────response──────────┤
│ (JSON-RPC) │- Fast: No network overhead
- Secure: No exposed ports
- Simple: No authentication needed
Session Identity
Hook provides session identity:
// Via hook at session start
{
"agent": "claude",
"native_session_id": "4b67a8e4-b697-4ede-..."
}Memvault maps to internal session ID:
// Internal session
{
"id": "f75cb010b12a8eb0...",
"native_id": "4b67a8e4-b697-4ede-...",
"agent": "claude"
}Context Injection
At session start:
- Hook fires → creates session
- Agent calls
memvault_context - Memvault returns memories
- Injected into agent's context
Agent Start
↓
Hook: session-start
↓
MCP: memvault_context
↓
Returns: background, preferences, summaries
↓
Agent has full contextAgent Workflow
Reading Context
// At start of session
const context = await mcp.call("memvault_context", {
session: "current"
});
// Context contains:
// - core memories (who user is, preferences)
// - session summary (what we were doing)
// - related history (similar past conversations)Searching History
// When user asks about past work
const results = await mcp.call("memvault_search", {
query: "folder picker implementation",
limit: 5
});
// Returns relevant sessions and memoriesUpdating Memory
// After important learning
await mcp.call("memvault_memory_update", {
kind: "knowledge",
title: "Project uses Go",
body: "This codebase is Go-based. Uses embed for assets.",
evidence: [{
session: currentSession,
message: messageId
}]
});Protocol Details
Request Format
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "memvault_search",
"arguments": {
"query": "test"
}
}
}Response Format
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{ results JSON }"
}
]
}
}Error Handling
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32603,
"message": "Session not found"
}
}Security Model
No Authentication
- stdio transport → same user
- No network exposure
- Process isolation via OS
Permission Model
- Read: Always allowed
- Write: Requires session ownership
- Delete: Not exposed via MCP
Data Validation
- All inputs validated
- SQL injection prevented (prepared statements)
- Path traversal blocked
- Size limits enforced
Debugging
Enable Verbose Mode
export MEMVAULT_LOG_LEVEL=debug
memvault mcpTest Tool Manually
# Send JSON-RPC request
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"memvault_search","arguments":{"query":"test"}}}' | memvault mcpCheck Logs
tail -f ~/.memvault/logs/mcp.logPerformance
Latency
| Operation | Typical Time |
|---|---|
memvault_context | 10-50ms |
memvault_search | 20-100ms |
memvault_memory_update | 5-20ms |
memvault_session_read | 10-50ms |
Caching
- Session context cached
- Search index in memory
- File reads cached by OS
Comparison with Other Approaches
Webhooks
❌ Requires server
❌ Network latency
❌ Authentication needed
❌ Exposed to network
REST API
❌ Port binding
❌ HTTP overhead
❌ CORS issues
❌ Auth complexity
MCP (stdio)
✅ No server needed
✅ Zero network overhead
✅ OS-level security
✅ Simple integration
Future Extensions
Planned Tools
memvault_export- Export sessionsmemvault_stats- Usage statisticsmemvault_conflicts- List memory conflicts
Resource Providers
MCP resources for:
- Memory files (read via URI)
- Session archives (read via URI)
- Search indices (query via URI)
Next Steps
- Agent Memory Guide - Using memory in practice
- CLI Reference - Command-line tools
- Configuration - MCP settings