Skip to main content
Glama

Chat Context MCP

by aolshaun

Cursor Cross-Session Context Retrieval

Unlock the power of your Cursor chat history – Search, organize, and retrieve context from past conversations to enhance your AI-assisted development workflow.

Tests TypeScript License

🎯 The Problem

Every Cursor Composer session is isolated – when you start a new chat, the AI has no memory of your previous conversations. This leads to:

  • ❌ Repeating context and explanations

  • ❌ Lost architectural decisions and discussions

  • ❌ Manual copy-pasting from old chats

  • ❌ Difficulty finding specific conversations

  • ❌ No organization or categorization of chat history

✨ The Solution

This library gives you programmatic access to your entire Cursor chat history with powerful organization and retrieval features:

  • βœ… Nickname sessions – Give chats memorable names instead of UUIDs

  • βœ… Tag & organize – Categorize sessions by feature, bug, topic, etc.

  • βœ… Project-scoped search – Automatically filters chats by project

  • βœ… Full-text search – Search across nicknames, tags, messages, and projects

  • βœ… Rich formatting – Export sessions as Markdown, JSON, or compact previews

  • βœ… Type-safe API – Fully typed TypeScript interface

πŸš€ Quick Start

Installation

npm install cursor-context-core

CLI Tool

The package includes a powerful command-line interface:

# Show statistics cursor-context stats # List sessions cursor-context list --limit 10 # Search for sessions cursor-context search "authentication" # Get session details cursor-context get my-nickname --format markdown # Set nickname and tags cursor-context nickname abc-123 my-important-chat cursor-context tag add abc-123 feature backend

See CLI.md for complete CLI documentation.

MCP Server

Let AI automatically search and retrieve past chat sessions:

Setup:

  1. Build the project: npm run build

  2. Configure Cursor (see MCP-SETUP.md)

  3. Restart Cursor

Usage in Chat:

You: "How did I implement authentication in that project?" AI: *Automatically calls search_sessions tool* "I found your session 'auth-implementation' from 5 days ago..." You: "Load that session" AI: *Calls get_session tool* [Shows full conversation]

The AI decides when to search based on your conversation. See MCP-SETUP.md for setup instructions.

Library Usage

import { CursorContext } from 'cursor-context-core'; // Create API instance (auto-detects Cursor DB path) const api = new CursorContext(); // Sync recent sessions await api.syncSessions(50); // Give a session a nickname await api.setNickname('session-id', 'auth-implementation'); await api.addTag('session-id', 'feature'); // Retrieve by nickname const session = await api.getSession('auth-implementation'); console.log(session.messages); // Search across all sessions const results = await api.searchSessions({ query: 'authentication', projectPath: '/path/to/project' }); // Clean up api.close();

πŸ“š Core Features

1. Session Management

// List sessions with filtering const sessions = await api.listSessions({ projectPath: '/path/to/project', // Filter by project sortBy: 'newest', // newest, oldest, most_messages limit: 10, // Limit results tag: 'feature', // Filter by tag taggedOnly: true // Only tagged sessions }); // Get a specific session const session = await api.getSession('nickname-or-id', { includeMessages: true, // Load full messages parseOptions: { excludeTools: false, // Include tool calls maxContentLength: 10000 // Truncate long messages } });

2. Organization

// Set nicknames await api.setNickname('session-id', 'database-migration'); // Add tags await api.addTag('session-id', 'backend'); await api.addTag('session-id', 'database'); // Remove tags await api.removeTag('session-id', 'backend'); // List all tags const tags = api.getTags(); // [{ tag: 'backend', count: 15 }, { tag: 'frontend', count: 8 }, ...]

3. Search

// Simple search const results = await api.searchSessions({ query: 'authentication' }); // Advanced search const results = await api.searchSessions({ query: 'API endpoints', projectPath: '/my/project', // Scope to project taggedOnly: true, // Only tagged sessions limit: 20, // Limit results caseSensitive: false // Case sensitivity });

4. Project Management

// List all projects const projects = api.getProjects(); // [ // { path: '/path/to/project', name: 'my-app', session_count: 42 }, // ... // ] // Get sessions for a specific project const projectSessions = await api.listSessions({ projectPath: '/path/to/project' });

5. Formatting

import { formatSessionMarkdown, formatSessionJSON, formatSessionPreview, formatSessionList } from 'cursor-context-core'; // Markdown format (great for AI context) const markdown = formatSessionMarkdown(session, { maxMessages: 10, // Limit messages includeTools: true, // Include tool calls includeMetadata: true // Include header }); // JSON format const json = formatSessionJSON(session); // Compact preview const preview = formatSessionPreview(session.metadata); // "πŸ“ auth-implementation β€’ πŸ“ my-app β€’ πŸ’¬ 42 β€’ πŸ“… 2 days ago" // List of sessions const list = formatSessionList(sessions);

6. Statistics

const stats = api.getStats(); console.log(stats); // { // totalSessionsInCursor: 560, // totalSessionsWithMetadata: 50, // sessionsWithNicknames: 12, // sessionsWithTags: 25, // sessionsWithProjects: 35, // totalTags: 15, // totalProjects: 8 // }

πŸ—οΈ Architecture

Core Modules

src/core/ β”œβ”€β”€ api.ts # Main CursorContext API β”œβ”€β”€ cursor-db.ts # Read-only access to Cursor's SQLite DB β”œβ”€β”€ metadata-db.ts # Separate DB for nicknames/tags β”œβ”€β”€ message-parser.ts # Parse Lexical richText format β”œβ”€β”€ workspace-extractor.ts # Extract project paths from tool results β”œβ”€β”€ formatter.ts # Format sessions for output β”œβ”€β”€ platform.ts # Platform detection (macOS/Linux/Windows) β”œβ”€β”€ errors.ts # Custom error types └── types.ts # TypeScript interfaces

How It Works

  1. Read-only Access – Safely reads Cursor's internal SQLite database

  2. Separate Metadata – Stores your nicknames/tags in ~/.cursor-context/metadata.db

  3. Auto-sync – Automatically syncs sessions on first access

  4. Project Detection – Extracts workspace paths from tool results in messages

  5. Smart Parsing – Handles Cursor's complex Lexical richText format

πŸ“– Advanced Usage

Custom Database Paths

const api = new CursorContext( '/custom/path/to/cursor.db', '/custom/path/to/metadata.db', true // Enable auto-sync );

Direct Database Access

// Access underlying databases for advanced operations const cursorDB = api.getCursorDB(); const metadataDB = api.getMetadataDB(); // List all composer IDs const allIds = cursorDB.listComposerIds(1000); // Get raw composer data const composerData = cursorDB.getComposerData('session-id');

Batch Operations

// Sync many sessions const synced = await api.syncSessions(100); console.log(`Synced ${synced} new sessions`); // Bulk tagging const sessions = await api.listSessions({ limit: 50 }); for (const session of sessions) { if (session.has_project) { await api.addTag(session.session_id, `project:${session.project_name}`); } }

πŸ§ͺ Testing

The library includes 169 comprehensive tests:

# Run all tests npm test # Run specific test suite npm test tests/core/api.test.ts # Watch mode npm run test:watch # Build npm run build

Test coverage includes:

  • βœ… Unit tests for each module

  • βœ… Integration tests for the API

  • βœ… End-to-end workflow tests

  • βœ… Error handling and edge cases

πŸ› οΈ Development

# Install dependencies npm install # Build TypeScript npm run build # Run examples npm run dev examples/test-api.ts # Run tests npm test

πŸ“‹ Database Schema

Cursor's Database (state.vscdb)

-- Key-value store cursorDiskKV ( key TEXT PRIMARY KEY, -- e.g., "composerData:{uuid}" value TEXT -- JSON data )

Metadata Database (~/.cursor-context/metadata.db)

session_metadata ( session_id TEXT PRIMARY KEY, nickname TEXT UNIQUE, tags TEXT, -- Comma-separated project_path TEXT, project_name TEXT, has_project INTEGER, created_at INTEGER, last_accessed INTEGER, first_message_preview TEXT, message_count INTEGER )

πŸ”’ Security & Privacy

  • βœ… Read-only access to Cursor's database

  • βœ… Local-only – No data sent to external servers

  • βœ… Separate metadata – Your organization data is stored separately

  • βœ… Retry logic – Handles database locks gracefully

  • βœ… No modifications – Never writes to Cursor's internal database

🎯 Use Cases

1. MCP Server (Recommended)

Integrate with Cursor's Model Context Protocol to let AI automatically fetch context:

// MCP tool: list_sessions const sessions = await api.listSessions({ limit: 10 }); // MCP tool: fetch_session_by_nickname const session = await api.getSession('auth-implementation'); return formatSessionMarkdown(session);

2. CLI Tool

Build a command-line interface:

cursor-context list --project /path/to/project cursor-context get auth-implementation --format markdown cursor-context search "authentication" --limit 5 cursor-context tag session-id feature backend

3. VS Code Extension

Create a sidebar that shows session history with search and filters.

4. Custom Integrations

  • Export sessions to Notion/Obsidian

  • Generate documentation from chat history

  • Analyze development patterns

  • Create knowledge bases

πŸ—ΊοΈ Roadmap

Phase 1: Core Library βœ… (Complete!)

  • βœ… Database access

  • βœ… Message parsing

  • βœ… Metadata management

  • βœ… Full API with search, tagging, formatting

  • βœ… 169 comprehensive tests

Phase 2: CLI Tool βœ… (Complete!)

  • βœ… List, get, search commands

  • βœ… Nickname and tag management

  • βœ… Stats and projects views

  • βœ… Configuration management

  • βœ… Multiple output formats (table, json, markdown, compact)

  • βœ… Color support

  • Interactive TUI mode (future)

  • Shell completion (future)

Phase 3: MCP Server βœ… (Complete!)

  • βœ… MCP protocol implementation

  • βœ… 9 tool definitions with clear descriptions

  • βœ… AI-invoked session search and retrieval

  • βœ… Session management (tag, nickname)

  • βœ… Universal (works in Cursor, VSCode, Claude Desktop)

  • βœ… Stdio-based communication

  • βœ… Integration with core library

Phase 4: VSCode/Cursor Extension (Future)

  • Slash commands (/chat, /chat search, etc.)

  • Session browser UI (sidebar panel)

  • Quick pick menus for explicit control

  • Status bar integration

  • Right-click context menus

  • User-invoked actions (vs AI-invoked in MCP)

Phase 5: Advanced Features

  • Full-text search with SQLite FTS5

  • Session similarity matching (vector embeddings)

  • Automatic tagging with AI

  • Multi-workspace support

  • Session analytics and insights

🀝 Contributing

Contributions are welcome! Please:

  1. Fork the repository

  2. Create a feature branch

  3. Add tests for new functionality

  4. Ensure all tests pass (npm test)

  5. Submit a pull request

πŸ“„ License

MIT License - see LICENSE file for details.

πŸ™ Acknowledgments


Made with ❀️ for developers who want to unlock their Cursor chat history

For detailed technical documentation, see CURSOR-CROSS-SESSION-CONTEXT.md

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aolshaun/chat-context-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server