chatlab-mcp
# chatlab-mcp
**[English](./README.md) | [简体中文](./README.zh-CN.md) | [繁體中文](./README.zh-TW.md) | [日本語](./README.ja.md)**
MCP server that connects [ChatLab](https://github.com/hellodigua/ChatLab) to AI assistants (Claude Desktop, Cursor, custom agents). Query your local chat history with natural language.
> Tracks ChatLab v0.19.0
## Requirements
- [ChatLab](https://github.com/hellodigua/ChatLab) installed and running
- API enabled in ChatLab Settings → API, with a token generated
- Node.js 18+
## Installation
### npx (recommended)
No installation needed. Configure your AI client directly:
```json
{
"mcpServers": {
"chatlab": {
"command": "npx",
"args": ["-y", "chatlab-mcp"],
"env": {
"CHATLAB_TOKEN": "clb_xxxxxxxxxxxx",
"CHATLAB_URL": "http://127.0.0.1:5200"
}
}
}
}
```
### From source
```bash
git clone https://github.com/gamesme/chatlab-mcp
cd chatlab-mcp
npm install && npm run build
```
## Claude Desktop
Edit `~/Library/Application Support/Claude/claude_desktop_config.json`:
**With npx:**
```json
{
"mcpServers": {
"chatlab": {
"command": "npx",
"args": ["-y", "chatlab-mcp"],
"env": {
"CHATLAB_TOKEN": "clb_xxxxxxxxxxxx",
"CHATLAB_URL": "http://127.0.0.1:5200"
}
}
}
}
```
**From source (use your Homebrew node to avoid version issues):**
```json
{
"mcpServers": {
"chatlab": {
"command": "/opt/homebrew/bin/node",
"args": ["/absolute/path/to/chatlab-mcp/dist/index.js"],
"env": {
"CHATLAB_TOKEN": "clb_xxxxxxxxxxxx",
"CHATLAB_URL": "http://127.0.0.1:5200"
}
}
}
}
```
Restart Claude Desktop after saving. The `chatlab` tools will appear in the tools list.
## Tools
### Core (6)
| Tool | Description |
|------|-------------|
| `list_sessions` | List all imported chat sessions with name, platform, and message count |
| `get_session` | Get details of a single session by ID |
| `get_messages` | Retrieve messages with filters: keyword, time range, sender, pagination (max 100/call) |
| `get_members` | List all members in a session with their platformId and message count |
| `get_stats_overview` | Statistical overview: message counts, member activity, type distribution, time range |
| `execute_sql` | Run aggregation queries (COUNT/GROUP BY) against the session database |
### Analytics (v0.19.0+, 9)
| Tool | Description |
|------|-------------|
| `get_message_context` | N messages before/after one or more target message IDs |
| `get_conversation_between` | Interleaved messages between two specific members (numeric IDs) |
| `get_session_summaries` | AI-generated chat sub-session summaries (from the chat_session table) |
| `deep_search_messages` | FTS5 keyword search with surrounding context window |
| `get_time_stats` | Hourly / weekday / daily distribution, timezone-aware |
| `get_member_activity` | Top-N members by message count with percentage of total |
| `get_member_name_history` | Historical account name / nickname entries for a member |
| `get_response_time_analysis` | Reply intervals between sender pairs (LAG window function) |
| `keyword_frequency` | Stub — returns guidance (NLP segmentation not bundled in MCP) |
### Notes
- `get_messages` returns at most 100 messages per call. Use the `page` parameter to paginate. Responses include `has_more` and a `hint` when more results exist.
- `execute_sql` is for statistical aggregation only. Use `get_messages` or `get_message_context` to read message content.
- Analytics tools issue their own SQL through the same `/sql` endpoint (no 200-row LIMIT injection).
- All avatar/binary fields are stripped from responses to minimize context usage.
## CLI Options
```bash
node dist/index.js --token <token> --url <url>
# or via env vars
CHATLAB_TOKEN=clb_xxx CHATLAB_URL=http://127.0.0.1:5200 node dist/index.js
```
`CHATLAB_URL` defaults to `http://127.0.0.1:5200`.
## Development
```bash
npm test # run all tests
npm run test:watch # watch mode
npm run dev # run with ts-node (no build step)
npm run build # compile TypeScript → dist/
```
TDQS
Scored across 17 tools
Most tools have clearly distinct purposes, but there is slight overlap between get_messages, get_conversation_text, and get_full_conversation. However, descriptions clarify when to use each, so ambiguity is low.
All tools follow a consistent verb_noun pattern with snake_case. Most use 'get_' prefix, except deep_search_, execute_sql, keyword_frequency, and list_sessions, which are still clear and consistent with their verb choice.
17 tools is slightly above the typical well-scoped range (3-15), but each tool serves a distinct analytical purpose for chat sessions, so it feels appropriate rather than bloated.
The tool set covers all major aspects of chat analysis (listing, messages, members, activity, time stats, context, summaries). The only gap is the stub keyword_frequency tool, which is acknowledged but not implemented.