Skip to main content
Glama

Claudex

Professional conversation viewer and analysis tool for Claude Code

Category: Development Tools · Conversation Analysis · Usage Monitoring

Claudex is a full-stack web application designed for developers, QA engineers, and researchers who need to inspect, search, and analyze Claude Code conversation histories. Built with React and Fastify, it provides enterprise-grade full-text search using SQLite FTS5, universal template support for all Claude Code versions, and comprehensive analytics dashboards.

Version License: MIT Documentation Discussions Mentioned in Awesome Claude Code

📚 Documentation | 💬 Discussions | 🐛 Issues

Claudex — browse, search, and give Claude Code persistent memory. SQLite FTS5 full-text search across all sessions, MCP server with 10 tools, universal V1/V2/V3 template support.


🆕 What's New

Version 1.3.0 (February 12, 2026) — MCP Server

  • 🧠 MCP Server: Model Context Protocol server gives Claude Code persistent memory across sessions

  • 🔧 10 MCP Tools: Project context, session search, conversation retrieval, structured memory CRUD

  • 💾 Structured Memory System: Store coding knowledge (conventions, architecture, decisions, error patterns) with priority, confidence, and TTL

  • 📋 3 MCP Prompts: /recall, /catchup, /history for quick access to past sessions

  • 🎯 Token Budgeting: Three detail levels (minimal/standard/full) for context management

  • 📖 One-Command Setup: claude mcp add --transport stdio claudex -- claudex-mcp

Version 1.2.0 (November 11, 2025)

  • 🎨 Comprehensive Theming System: 10 professional themes (default, emerald, green, blue, purple, orange, red, rose, yellow, classic)

  • 🔤 Advanced Typography: 29 font families with visual preview

  • 📏 Granular Font Sizing: 5 precise font size options (14px-18px)

  • 💾 Settings Persistence: All customizations saved to localStorage

Version 1.1.0 (October 27, 2025)

  • 🎯 Smart Title Extraction: Meaningful session titles from conversation content

  • 📊 Tremor Analytics Dashboard: Tailwind-based charts and multi-scale visualizations

  • 🐳 Docker Multi-Platform: amd64 and arm64 with optimized ~200MB images

  • ⚡ Performance: 121x faster async search index rebuild

View full changelog | Troubleshooting guide


Related MCP server: acheron-mcp-server

📸 Screenshots

🎨 NEW in v1.2.0: Theming & Customization

Conversation View

✨ Features

  • MCP Server: Give Claude Code persistent memory — conventions, architecture, decisions, and error patterns survive across sessions

  • Structured Memory: Store and recall coding knowledge with priority (1-10), confidence, and TTL-based expiration

  • Auto Project Discovery: Automatically scans ~/.claude/projects directory to discover all conversations across multiple projects

  • Full-Text Search: Enterprise-grade SQLite FTS5 search engine with advanced filtering by project, session, role, date range, and content highlighting

  • Universal Template Support: Intelligent template detection and parsing for all Claude Code versions (V1.x, V2-mixed, V2.0+) with automatic format detection

  • Smart Content Rendering: Syntax-highlighted code blocks, markdown rendering, diff visualization, JSON formatting, and tool usage tracking

  • Session Analytics: Comprehensive analytics dashboard with message distribution charts, file operation tracking, and conversation statistics using Tremor React

  • Export Options: Export conversations to JSON (structured data), HTML (readable format), or plain TXT for archival and sharing

  • Modern UI: Responsive React interface with 10 themes, 29 fonts, session favorites, and optimized for developer workflows


💖 Support This Project

Claudex is free and open source. If it saves you time and improves your workflow, please consider:

  • Star the repo - Help others discover Claudex

  • 🐛 Report bugs - Your feedback makes us better

  • 💡 Share ideas - Request features in Discussions

  • Buy me a coffee - Support continued development

Ko-fi PayPal

Every contribution helps keep this project alive and growing! 🚀


🚀 Quick Start

Prerequisites

  • Node.js 18+ and npm

  • Claude Code installed with conversation history in ~/.claude/projects

Installation

# Global installation
npm install -g @kunwarshah/claudex [https://www.npmjs.com/package/@kunwarshah/claudex]

# Then run anywhere:
claudex

# Custom port (if 3400 is in use):
claudex --port 3500

# Custom project directory:
claudex --project-root ~/my-claude-projects

# Or use without installing (npx):
npx @kunwarshah/claudex

Add MCP Server (gives Claude Code persistent memory):

claude mcp add --transport stdio claudex -- claudex-mcp

See the MCP Server Guide for details.

CLI Options:

  • --help, -h: Show help message

  • --version, -v: Show version

  • --port, -p <port>: Custom server port (default: 3400)

  • --project-root <path>: Custom Claude projects directory

Environment Variables:

  • PORT: Server port (default: 3400)

  • PROJECT_ROOT: Claude projects directory (default: ~/.claude/projects)

Option 2: From Source

  1. Clone the repository:

git clone https://github.com/kunwar-shah/claudex.git
cd claudex
  1. Run system check (optional but recommended):

npm run check

This validates your environment and catches common setup issues.

  1. Install dependencies (or use auto-fix):

# Option 1: Manual installation
npm install
cd server && npm install && cd ..
cd client && npm install && cd ..

# Option 2: Auto-fix (installs deps + creates .env)
npm run check:fix
  1. Configure environment (if not using auto-fix):

cd server
cp .env.example .env
# Edit .env if needed (default: PROJECT_ROOT=~/.claude/projects)
cd ..
  1. Start the application:

# Automatically runs system check, then starts servers
npm run dev
  1. Open your browser: http://localhost:3000

The backend API runs on http://localhost:3400

System Checker

Claudex includes a comprehensive system checker that validates your environment:

# Quick check
npm run check

# Detailed output
npm run check:verbose

# Auto-fix common issues
npm run check:fix

# JSON output (for CI/CD)
npm run check:json

What it checks:

  • ✅ Node.js & npm versions

  • ✅ PROJECT_ROOT path & permissions

  • ✅ Port availability (3000, 3400)

  • ✅ Dependencies installation

  • ✅ Claude Code data (projects, sessions)

  • ✅ JSONL file validity

  • ✅ Database permissions

  • ✅ Search index status

Global CLI Installation (Optional)

Install globally to use claudex command anywhere:

./install.sh

# Then run from anywhere:
claudex

🔧 Configuration

Server Configuration (.env)

# Path to Claude Code projects directory
# Supports ~ expansion (e.g., ~/.claude/projects)
PROJECT_ROOT=~/.claude/projects

# Server port
PORT=3400

# Environment
NODE_ENV=development

Default Ports

📂 Project Structure

claudex/
├── server/                    # Backend (Node.js + Fastify)
│   ├── src/
│   │   ├── parsers/          # Template detection & message parsing
│   │   │   ├── templateDetector.js    # V1/V2/V3 template detection
│   │   │   └── messageParser.js       # Universal message parser
│   │   ├── services/         # Core business logic
│   │   │   ├── fileScanner.js        # Project/session discovery
│   │   │   ├── sessionParser.js      # Full session parsing
│   │   │   ├── searchDatabase.js     # SQLite FTS5 search
│   │   │   ├── searchIndexer.js      # Search index builder
│   │   │   └── memoryService.js      # Structured memory CRUD
│   │   ├── mcp/              # MCP server (Claude Code integration)
│   │   │   ├── index.js              # MCP entry point + stdio transport
│   │   │   ├── tools.js              # 10 MCP tool handlers
│   │   │   ├── resources.js          # MCP resources
│   │   │   └── prompts.js            # 3 MCP prompts
│   │   ├── routes/           # API endpoints
│   │   │   ├── projects.js           # Project/session routes
│   │   │   ├── search.js             # Search routes
│   │   │   └── export.js             # Export routes
│   │   ├── utils/            # Helper utilities
│   │   │   └── pathHelper.js         # Path expansion (~/ support)
│   │   └── server.js         # Main server
│   ├── data/                 # SQLite database (auto-created)
│   ├── .env.example          # Environment template
│   └── package.json
├── client/                   # Frontend (React + Vite)
│   ├── src/
│   │   ├── components/       # React components
│   │   │   ├── ProjectSelector.jsx
│   │   │   ├── SessionList.jsx
│   │   │   ├── ConversationThread.jsx
│   │   │   ├── MessageBubble.jsx
│   │   │   ├── ClaudeMessageRenderer.jsx
│   │   │   └── SearchPage.jsx
│   │   ├── services/         # API client
│   │   │   └── api.js
│   │   └── App.jsx           # Main app
│   └── package.json
├── bin/                      # CLI entry point
├── test-search.sh           # Search API testing script
├── install.sh               # Global CLI installer
├── SETUP.md                 # Detailed setup guide
├── README.md                # This file
└── package.json             # Root package (CLI + concurrently)

🎯 Supported Claude Code Formats

The viewer automatically detects and parses all Claude Code conversation formats:

  • Claude Code v2.0+: New format with role field directly

  • Claude Code v1.x: Original format with type field

  • Edge cases: Mixed formats and migration states

  • New message types: file-history-snapshot support

  • Role mapping: All system messages → assistant (binary user/assistant classification)

Legacy Templates (Auto-detected)

  • V2-Mixed: Transition format between V1 and V2

  • V1: Original Claude Code format

The template detector uses a waterfall detection strategy, automatically selecting the best parser for your conversation files.

🔍 Search System

Building the Search Index

The search index needs to be built before searching:

# Option 1: Via API
curl -X POST http://localhost:3400/api/search/index/build

# Option 2: Via test script
./test-search.sh

# Option 3: Via UI (Search page → "Rebuild Index" button)

When to Rebuild Index

Rebuild the search index when:

  • First time setup

  • After template changes

  • When new conversations are added

  • If search results seem outdated

Search API Examples

# Basic search
curl -X POST http://localhost:3400/api/search \
  -H "Content-Type: application/json" \
  -d '{"q": "migration", "limit": 10}'

# Search with filters
curl -X POST http://localhost:3400/api/search \
  -H "Content-Type: application/json" \
  -d '{
    "q": "database",
    "projectId": "my-project",
    "role": "user",
    "limit": 20,
    "offset": 0
  }'

# Check index status
curl http://localhost:3400/api/search/index/status

📡 API Endpoints

Projects & Sessions

Endpoint

Method

Description

/api/projects

GET

List all projects

/api/projects/:id/sessions

GET

Get sessions for project

/api/projects/:id/sessions/:sessionId

GET

Get full session with messages

Endpoint

Method

Description

/api/search

POST

Search conversations (FTS5)

/api/search/index/build

POST

Build/rebuild search index

/api/search/index/status

GET

Get index statistics

/api/search/index/clear

POST

Clear search index

Export

Endpoint

Method

Description

/api/export/session/:projectId/:sessionId?format=json

GET

Export as JSON

/api/export/session/:projectId/:sessionId?format=html

GET

Export as HTML

/api/export/session/:projectId/:sessionId?format=txt

GET

Export as TXT

Health

Endpoint

Method

Description

/api/health

GET

Health check + system info

🛠️ Development

Development Mode

# Run both frontend + backend with hot reload
npm run dev

# Or run separately:
# Terminal 1 - Backend (auto-restarts on changes)
cd server && npm run dev

# Terminal 2 - Frontend (hot module replacement)
cd client && npm run dev

Testing the Search System

# Run comprehensive search tests
./test-search.sh

This script will:

  1. Check server health

  2. Get index status

  3. Build/rebuild index

  4. Run test searches with various filters

  5. Display results

Adding New Templates

  1. Update Template Detector (server/src/parsers/templateDetector.js):

'my-template': {
  name: 'My Template Name',
  detect: (samples) => {
    return samples.some(s => s.myUniqueField !== undefined);
  },
  parser: 'my-template'
}
  1. Add Parser Method (server/src/parsers/messageParser.js):

parseMyTemplate(rawMessage) {
  return {
    id: rawMessage.id || this.generateId(),
    role: rawMessage.myRole === 'user' ? 'user' : 'assistant',
    content: rawMessage.myContent || '',
    timestamp: rawMessage.myTimestamp,
    // ... other fields
  };
}
  1. Rebuild Search Index: The new template will be automatically detected and used.

📝 Scripts Reference

Claudex Directory

  • npm run dev - Run frontend + backend concurrently (with pre-check)

  • npm start - Run frontend + backend (production mode)

  • npm run check - Run system health check

  • npm run check:verbose - Run detailed system check

  • npm run check:fix - Auto-fix common setup issues

  • npm run check:json - JSON output for CI/CD

  • ./install.sh - Install as global CLI command

  • ./test-search.sh - Test search API endpoints

Server Directory

  • npm run dev - Run with nodemon (auto-restart)

  • npm start - Run in production mode

Client Directory

  • npm run dev - Vite dev server (http://localhost:3000)

  • npm run build - Build for production

  • npm run preview - Preview production build

🐛 Troubleshooting

Quick Diagnosis

Run the system checker first to identify issues:

npm run check:verbose

This will check all common problems and provide actionable suggestions.

Common Issues

"No messages found" Despite Messages Existing

Fixed in v1.1.1 - If you see intermittent empty sessions or duplicate key warnings:

# Update to latest version
cd claude-viewer
git pull origin main
npm install && cd server && npm install && cd ../client && npm install && cd ..
npm run dev

See detailed troubleshooting guide for more information.

No Projects Found

# Check what the system sees
npm run check

# Verify path
cat server/.env | grep PROJECT_ROOT
  • Verify PROJECT_ROOT in .env points to ~/.claude/projects

  • Check that Claude Code has created conversation files

  • Run npm run check:fix to auto-create missing directories

Search Not Working

# Quick fix via UI
# Visit http://localhost:3000/search → Click "Rebuild Index"

# Or via command line
curl -X POST http://localhost:3400/api/search/index/build

Port Conflicts

# System checker will detect port conflicts
npm run check

# Auto-detected ports in use show PID
# Kill process: kill <PID>
# Or change PORT in server/.env

Permission Errors

# Check permissions
npm run check:verbose

# Fix permissions
chmod +r ~/.claude/projects
chmod +w claude-viewer/server/data

Dependencies Issues

# Auto-install all dependencies
npm run check:fix

🚢 Production Deployment

Claudex includes production-ready Docker configuration with multi-stage builds for optimal image size.

Quick Start with Docker

# Build and start with docker-compose
docker-compose up -d

# View logs
docker-compose logs -f

# Stop
docker-compose down

Access at: http://localhost:3400

Docker Configuration

The default docker-compose.yml mounts your Claude projects directory as read-only:

volumes:
  # Adjust path to match your system
  - ~/.claude/projects:/root/.claude/projects:ro

Common path configurations:

# Linux/macOS
~/.claude/projects:/root/.claude/projects:ro

# Windows (WSL2)
/mnt/c/Users/YourName/.claude/projects:/root/.claude/projects:ro

# Custom path
/path/to/your/projects:/root/.claude/projects:ro

Docker Commands

# Build image manually
docker build -t claudex:latest .

# Run container manually
docker run -d \
  -p 3400:3400 \
  -v ~/.claude/projects:/root/.claude/projects:ro \
  -v claudex-data:/app/data \
  --name claudex-web \
  claudex:latest

# Check health
docker ps  # Check STATUS column for "healthy"

# View logs
docker logs claudex-web -f

# Stop and remove
docker stop claudex-web && docker rm claudex-web

Docker Features

  • Multi-stage build: Optimized image size (~200MB)

  • Non-root user: Runs as nodejs user for security

  • Health checks: Automatic health monitoring

  • Persistent volumes: Stores search index and logs

  • Read-only mounts: Claude projects mounted read-only for safety

  • Log rotation: JSON logs with 10MB max size, 3 file rotation

Docker Environment Variables

# Override in docker-compose.yml or docker run
-e PORT=3400                           # Server port
-e HOST=0.0.0.0                        # Bind address
-e NODE_ENV=production                 # Environment
-e PROJECT_ROOT=/root/.claude/projects # Claude projects path

Manual Production Build

For non-Docker deployments:

# 1. Install dependencies
npm run install-deps

# 2. Build client
npm run build

# 3. Start server (serves built client)
cd server && NODE_ENV=production npm start

Access at: http://localhost:3400

📋 Roadmap

  • SQLite FTS5 full-text search

  • Universal template support (V1/V2/V3)

  • Export to JSON/HTML/TXT

  • Docker deployment (v1.1.0)

  • Conversation analytics dashboard (v1.1.0)

  • Theming system — 10 themes, 29 fonts (v1.2.0)

  • Session favorites/bookmarking (v1.2.4)

  • MCP server for Claude Code (v1.3.0)

  • Structured memory system (v1.3.0)

  • Token cost calculator

  • WebSocket live updates

  • Plugin system for custom parsers


📄 License

MIT License - see LICENSE file for details.

🤝 Contributing

  1. Fork the repository

  2. Create a feature branch: git checkout -b feature/amazing-feature

  3. Commit changes: git commit -m 'Add amazing feature'

  4. Push to branch: git push origin feature/amazing-feature

  5. Open a Pull Request

📚 Additional Documentation

  • SETUP.md - Detailed setup and configuration guide

  • INSTALL.md - Legacy installation instructions

💡 Tips

  • Use the search page to find conversations across all projects

  • Export conversations to share with team members

  • Rebuild search index after adding new conversations

  • Check /api/health endpoint to verify system status

  • Use npm run dev for the best development experience with hot reload

Available Tools

10 tools
delete_memoryA

Delete a specific memory by namespace, type, and key. Use when a memory is outdated or incorrect.

ParametersJSON Schema
NameRequiredDescriptionDefault
namespaceYesMemory namespace
memoryTypeYesMemory type
keyYesMemory key
projectIdNoProject ID (defaults to current project)

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility for behavioral disclosure. It only states 'Delete' without mentioning side effects (e.g., permanent removal), authorization requirements, or error behavior (e.g., if memory does not exist). This is insufficient for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, 17 words, front-loaded with the essential action and usage condition. No unnecessary information, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a delete operation with 4 parameters and no output schema, the description lacks critical context such as what happens on success/failure, whether the operation is reversible, and any preconditions. It is incomplete for an agent to fully understand the tool's implications.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all parameters with descriptions (100% coverage), so baseline is 3. The description merely reiterates the required parameters without adding additional meaning or constraints beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Delete' and the resource 'memory', with specific identifiers (namespace, type, key). It distinguishes from sibling tools like store_memory and recall_memory by focusing on deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'when a memory is outdated or incorrect.' However, it does not mention when not to use it or provide alternatives, such as using store_memory to update instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_contextA

Get a condensed context snapshot for the current project. Call this at the START of every session to load project memory: recent sessions, favorited sessions, and project stats. This is your primary memory tool — use it before doing any work.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoProject ID (defaults to current project)
detailNoDetail level for token budgeting: "minimal" (~500 tokens), "standard" (~1500 tokens, default), "full" (~3000+ tokens)standard

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses what the tool returns ('recent sessions, favorited sessions, and project stats') and mentions token budgeting via the 'detail' parameter. It does not discuss error handling or edge cases (e.g., empty projects), but it is sufficient for an agent to understand the tool's non-destructive nature and purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is just two sentences. The first sentence immediately states the purpose. The second provides usage guidance. No unnecessary words. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a tool that loads project-wide context, the description covers what it returns and when to use it. It lacks an explicit output schema but compensates by describing the snapshot contents. It is sufficient for the agent to decide to call it at startup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the output as a 'condensed context snapshot' with specific content (sessions, stats). It also elaborates on the 'detail' parameter by giving token estimates (e.g., ~500 tokens for minimal). This goes beyond the schema's enum values, helping the agent choose based on budget.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's verb ('Get') and resource ('condensed context snapshot for the current project'). It specifies the exact use case: call at the start of every session to load project memory. This distinguishes it from siblings that deal with individual memories or sessions, as it is positioned as a summary view.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use the tool: 'at the START of every session' and 'before doing any work.' It labels itself as 'your primary memory tool,' providing strong usage guidance. Though it doesn't list alternatives, the context makes it clear this is for loading context, not for searching or storing individual memories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sessionA

Get the full conversation from a session. Defaults to the current project. Use this when you need to read the actual messages from a past session — e.g., to recall implementation details, decisions made, or code that was written.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesThe session UUID
projectIdNoProject ID (defaults to current project)
maxMessagesNoMax messages, most recent first (default 50)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries this burden. It states it reads messages and defaults to the current project, but doesn't mention the maxMessages limit (in schema) or response format. This is adequate but not detailed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff: first sentence defines purpose, second sentence provides usage guidance. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters and no output schema or annotations, the description is too sparse. It lacks information on return values, errors, or constraints beyond what the schema provides. It does not fully prepare the agent for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline 3. The description only repeats the default behavior for projectId from the schema, adding no new meaning for sessionId or maxMessages.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get the full conversation from a session,' specifying a specific verb and resource. It distinguishes from siblings like get_session_summary (summary vs. full) and search_conversations (search vs. full retrieval). Examples of use cases add clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this when you need to read the actual messages from a past session' with concrete examples. While it doesn't list when not to use or name alternatives, the context is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_session_summaryA

Get a quick summary of a session — title, message count, dates, tags, favorites, and token stats. Defaults to the current project. Cheaper than get_session when you only need metadata, not full messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesThe session UUID
projectIdNoProject ID (defaults to current project)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that it returns metadata (title, message count, dates, tags, favorites, token stats) and is cheaper, but does not mention authentication requirements or error handling. Still, for a read-only summary, it is fairly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no redundancy. Front-loaded with purpose and key differentiator. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given tool complexity is low, no output schema, and annotations absent, description adequately covers what the tool does, what it returns, and when to use it. No missing critical information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with basic descriptions. The description adds value by stating projectId defaults to current project, which matches schema but does not elaborate on format or constraints beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it gets a quick summary of a session with specific fields (title, message count, etc.) and distinguishes it from get_session by noting it's cheaper and for metadata only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly indicates when to use: 'cheaper than get_session when you only need metadata, not full messages', providing clear guidance on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_memoriesA

List all stored memories for the current project with stats. Shows namespace, type, key, priority. Useful for understanding what knowledge is stored.

ParametersJSON Schema
NameRequiredDescriptionDefault
namespaceNoFilter by namespace
projectIdNoProject ID (defaults to current project)

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only says 'List,' implying a read operation, but does not explicitly state that the tool is non-destructive, does not modify state, or require any permissions. No information about rate limits or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, with the action verb 'List' upfront. Every word adds value; no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description partially explains return values (namespace, type, key, priority, stats). For a simple list tool with two optional parameters, this is sufficient, though explicit format could be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are well-documented. The description adds value by mentioning that the output shows stats and priority, which are not in the parameter descriptions. This helps the agent understand what the result contains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all stored memories for the current project, which distinguishes it from siblings like store_memory, delete_memory, and recall_memory. It also specifies what information is shown (namespace, type, key, priority).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'Useful for understanding what knowledge is stored,' which implies usage context but does not explicitly compare to alternatives like search_conversations or recall_memory. No when-not or exclusion criteria are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsA

List all Claude Code projects on this machine. Shows which project is currently active.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It clearly states that the tool lists projects, implying read-only behavior, and mentions showing the active project. It does not discuss side effects, permissions, or output format, but for a simple listing tool this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, 14 words, no wasted text. Front-loaded with the main verb 'List' and resource. Highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 0 parameters and no output schema or annotations, the description is complete. It tells the agent everything needed: what it lists and that it indicates the active project.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0 parameters, so baseline is 4. The description adds no parameter information, but schema coverage is effectively 100%, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'Claude Code projects', and adds the specific detail of showing the active project. This distinguishes it from sibling tools like get_project_context which focuses on context rather than listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing projects, but does not explicitly state when to use it versus alternatives like get_project_context, nor does it provide any when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sessionsA

List sessions for a project. Defaults to the current project. Pass projectId to target a different project. Use this when the user asks about previous conversations, or when you need to find a specific session.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoProject ID (defaults to current project)
limitNoMax sessions (default 20)
sortByNoSort orderupdated

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must cover behavioral traits. It explains defaulting to current project and targeting different projects, but lacks details on side effects, response format, or limitations. Adequate for basic understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with main action. No fluff. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should explain return format. It mentions 'list sessions' but does not describe what the output contains. With low complexity, description is partially complete but lacks output details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with parameter descriptions. Description adds context: 'Defaults to the current project. Pass projectId to target a different project.' This reinforces schema info but adds little beyond. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool lists sessions for a project, with default behavior and option to specify a different project. It distinguishes from siblings like get_session (single session) and search_conversations (search).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'when the user asks about previous conversations, or when you need to find a specific session.' This provides clear context, but does not mention when not to use or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recall_memoryA

Recall stored memories for the current project. Returns memories sorted by priority and recency. Use this to retrieve codebase knowledge, conventions, decisions, and context from previous sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault
namespaceNoFilter by namespace (e.g., "codebase"). Omit to get all namespaces.
memoryTypeNoFilter by type (e.g., "convention", "map", "decision"). Omit to get all types.
keyNoGet a specific memory by key
limitNoMax memories to return (default 20)
projectIdNoProject ID (defaults to current project)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that results are sorted by priority and recency, which adds behavioral context beyond the input schema. However, it does not mention auth requirements, error behavior, or the non-destructive nature, making it adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two short, front-loaded sentences. Every sentence adds value: the first defines the action and resource, the second provides usage guidance. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a retrieval tool with no output schema, the description is fairly complete. It explains the sorting order and the types of content retrievable. It could mention default limit (implied by schema) or error scenarios, but it covers the main usage context well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the baseline is 3. The description does not add any extra meaning to the parameters beyond what the schema provides (e.g., explaining format or relationships). It mentions sorting of results, not parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the verb 'recall', the resource 'stored memories', and the scope 'current project'. It provides specific examples of what to retrieve (codebase knowledge, conventions, decisions, context), making the purpose clear and distinguishing it from siblings like store_memory or delete_memory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'Use this to retrieve...' which gives clear context for when to use the tool. However, it does not mention when not to use it or explicitly compare to siblings like list_memories or search_conversations, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_conversationsA

Search conversations using full-text search. Defaults to the current project. Set allProjects=true to search across all projects, or pass a specific projectId. Use this when the user asks "did we discuss X before?" or references past work, decisions, or code changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (supports FTS5: AND, OR, NOT, "exact phrases")
projectIdNoSearch a specific project (defaults to current)
allProjectsNoSearch across ALL projects instead of just the current one
limitNoMax results (default 10)

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description fully covers behavioral traits: it defaults to current project, supports full-text search syntax. Read-only nature is implied but not explicitly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each essential and front-loaded with purpose. No redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequately covers search behavior and parameters, but lacks detail on return format or sorting. Given no output schema, minor gap, but sufficient for typical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds meaningful context for query (FTS5 syntax), projectId (defaults to current), and allProjects/limit behavior, exceeding the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches conversations using full-text search, with a specific verb and resource. It distinguishes itself from siblings which are memory and project management tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit examples are given for when to use this tool ('did we discuss X before?'), and it clarifies defaults and options like allProjects and projectId.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

store_memoryA

Store a structured memory for the current project. Use this when you discover important codebase patterns, conventions, decisions, or architecture details that should persist across sessions. Memories are stored in SQLite and survive restarts.

ParametersJSON Schema
NameRequiredDescriptionDefault
namespaceNoMemory group (default: "codebase"). Use "codebase" for coding memories.codebase
memoryTypeYesMemory kind: "map" (file tree, architecture), "convention" (coding rules, patterns), "decision" (technical choices + rationale), "snapshot" (current focus/blockers, use with ttlHours), "dependency" (key packages), "error_pattern" (recurring fixes)
keyYesUnique identifier within namespace+type (e.g., "file-tree", "naming-convention", "chose-sqlite-over-postgres")
valueYesThe memory content — structured JSON preferred (e.g., {"pattern": "camelCase", "scope": "variables"})
priorityNoInjection priority 1-10 (10 = always inject, 5 = default, 1 = low priority)
confidenceNoConfidence 0.0-1.0 (1.0 = certain, lower = inferred)
ttlHoursNoAuto-expire after N hours (use for snapshots/focus, omit for permanent memories)
projectIdNoProject ID (defaults to current project)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that memories are stored in SQLite and survive restarts. However, does not mention overwrite behavior, limits, or side effects beyond persistence. With no annotations, additional detail would be beneficial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. First sentence states purpose, second adds usage guidance. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with no output schema, the description covers core purpose and storage behavior. Could mention conflict handling or return value expectations, but overall adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with good parameter descriptions. The tool description adds no extra param info beyond what is in the schema, which is acceptable but does not elevate the score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Store' and resource 'structured memory' for the current project, and distinguishes it by stating it persists across sessions. Sibling tools like recall_memory and delete_memory are clearly different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'when you discover important codebase patterns, conventions, decisions, or architecture details that should persist across sessions.' Does not explicitly exclude alternatives, but the context makes it clear this is the only store tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 10 tool updatesv1.0.0
    • First observeddelete_memory
    • First observedget_project_context
    • First observedget_session
    • First observedget_session_summary
    • First observedlist_memories
    • First observedlist_projects
    • First observedlist_sessions
    • First observedrecall_memory
    • First observedsearch_conversations
    • First observedstore_memory

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clear, distinct purpose. Overlap exists between list_memories and recall_memory, but they serve different retrieval needs (stats vs. priority/recency). Similarly, get_session_summary is a cheaper alternative to get_session. Overall, no two tools are ambiguous.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., delete_memory, list_sessions, search_conversations). The pattern is predictable and easy to parse.

Tool Count5/5

10 tools is appropriate for this domain, covering memory management, session tracking, and project awareness. Each tool serves a necessary function without unnecessary bloat.

Completeness4/5

The tool set covers the core lifecycle of memories (create, read, delete) and sessions (list, read, search, summarize). A minor gap is the lack of an explicit memory update tool, though store_memory can overwrite. Overall, the surface is complete for its stated purpose.

Maintenance

ActivityStale
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Persistent memory for Claude Code. Automatically indexes every conversation and provides production-grade hybrid search (BM25 + vectors + reranker) via MCP tools. 100% local, zero config, zero API keys, zero invoice.
    16
    57
    7
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Persistent local memory for Claude Code that indexes every session's JSONL file verbatim into SQLite + ChromaDB. Exposes 17 MCP tools for semantic recall, deterministic file replay, and fuzzy "do you remember when..." queries across your entire session history — no API calls, nothing leaves the machine.
    17
    13
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides persistent, searchable memory for Claude Code using local SQLite, semantic embeddings, and full-text search, enabling Claude to recall and retrieve context across sessions and projects without external services.
    19
    4
    MIT

Latest Blog Posts

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/kunwar-shah/claudex'

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