cursor-history-mcp
This server lets an MCP client (like Claude or Cursor) search, inspect, export, manage, and analyze a user's local Cursor chat history through natural-language tool calls.
List sessions – View recent Cursor chat sessions with metadata (workspace, message count, timestamps), with pagination and optional workspace filtering.
Show a session – Inspect messages and tool activity in a specific session, using either a UUID or a one-based index, with source and timestamp provenance.
Search history – Find sessions matching a keyword or phrase, with configurable result limits and surrounding context lines.
Export a session – Retrieve a full session as Markdown or JSON (including source details), useful when display truncation is not acceptable.
Backup Composer history – Create a ZIP archive of Composer chat databases to a specified path.
Restore Composer history – Destructively restore Composer databases from a backup archive (with force option; requires client approval).
Migrate Composer sessions – Move or copy eligible Composer sessions between workspaces, with dry-run preview and move/copy mode selection.
Generate Year in Review – Produce a sanitized JSON summary with annual statistics, topics, keywords, sample questions, and a prompt template for LLM-based report generation (supports English and Chinese).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cursor-history-mcpsearch for conversations about React hooks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Cursor History MCP
English | 中文 | Français | Español
Let your AI search your Cursor history.
Your existing Cursor conversations may already contain months of decisions, bugs, fixes, and architectural context. Give an MCP-capable assistant a way to find that context—without having recorded it with this tool beforehand.
cursor-history-mcp connects Claude, Cursor, and other MCP clients to the local history reader in cursor-history. Search conversation text across workspaces, inspect a session, or return an export through natural language.
No embeddings, indexing service, or API key is required by this server. Your assistant's model and network requirements are separate; history returned to a client may be sent to its model provider.
MCP-exclusive: Year in Review. Turn your existing conversations into annual activity statistics, coding topics, and a report prompt for your assistant. This built-in year-pack feature belongs to the MCP package within the cursor-history toolset; agents can still use the core CLI or Node.js API directly for history access.
“Have we solved this authentication bug before? Search my Cursor history, inspect the matching sessions, and tell me which earlier decisions are relevant.”
Quick start · Year in Review · Storage support · Tools · Safety · CLI / Node.js companion
Quick start
Requires Node.js 20.x or 22.x–26.x, readable local Cursor history, and a client that supports local stdio MCP servers. The client must run the server on the machine where that history is available.
Version scope: these docs describe cursor-history-mcp@0.3.1, powered by cursor-history@0.18.0. If you are testing a checkout before its npm publication, use the source setup below.
Client compatibility: the server uses MCP SDK 1.30.0. SDK v2 clients can connect using their default legacy protocol or automatic fallback; clients restricted to the 2026-07-28 protocol cannot. See SDK interoperability for the tested scope.
Configure the npm package
Add this server entry to your client's MCP configuration:
{
"mcpServers": {
"cursor-history": {
"command": "npx",
"args": ["-y", "cursor-history-mcp@0.3.1"]
}
}
}If the client cannot find npx, use the absolute path to its executable. Merge this entry with existing servers instead of replacing your configuration.
Cursor
Use project-local .cursor/mcp.json or global ~/.cursor/mcp.json. Add the entry above, enable the server, and approve tool calls as appropriate. See Cursor's MCP documentation.
Claude Code
Register the versioned npm package for your user account:
claude mcp add --transport stdio --scope user cursor-history -- npx -y cursor-history-mcp@0.3.1See Claude Code's MCP documentation for scopes and permissions.
Claude Desktop
Open Settings → Developer → Edit Config, merge the JSON entry above, and restart the app.
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
See the local MCP server setup guide.
The first run may download dependencies from npm. Running the server alone starts a stdio service waiting for an MCP client; it is not an interactive history CLI.
Run from source
For development or testing before npm publication, build this repository:
npm ci
npm run buildIn the server entry, use "command": "node" and "args": ["/absolute/path/to/cursor-history-mcp/dist/index.cjs"], replacing the path. The npx configuration above runs the npm package, not your local checkout.
Related MCP server: conversation-history-mcp
Two projects, one history reader
Use case | Project |
Run commands, write scripts, or embed history in a Node.js app | |
Let an assistant call history tools through MCP | cursor-history-mcp, this repository |
The MCP server delegates discovery and parsing to cursor-history; it does not maintain a separate conversation database or start recording your chats. The two npm packages have independent releases.
Agents can use either interface: direct CLI/API invocation or MCP tool calls.
Works across storage generations
With the 0.18.0 reader in MCP 0.3.1:
Source | Local files | Read / search / export |
Legacy / Composer |
| Supported |
Agent transcripts |
| Available transcript content |
Store / Agent CLI |
| Supported |
ACP sessions |
| Supported |
These representations have different fidelity. A transcript may omit timestamps or tool results. Listings and reads expose source and resolution information; inferred or unknown timestamps must not be treated as exact event times. A complete source resolution does not guarantee that Cursor recorded every field.
Backup and restore cover Composer databases only. Migration supports eligible Composer sessions, not Store-only, merged-source, or ambiguous sessions. Reading a session does not make it safe to migrate. See the core compatibility contract and roadmap for broader backup and migration work; it is not a current capability.
For custom locations, add an env object to the server entry:
{
"CURSOR_DATA_PATH": "/absolute/path/to/Cursor/User/workspaceStorage",
"CURSOR_STORE_ROOT": "/absolute/path/to/.cursor"
}These select data roots, not a project. Use a tool's workspace argument to filter a project. See the core platform paths and WSL guide.
Available tools
Tool | Purpose and key arguments |
| List sessions with IDs, index scope, source and data status. |
| Inspect available messages. Exactly one of |
| Search text. |
| Return Markdown or JSON content, not a file written by the server. One selector, |
| Create a Composer archive. |
| Restore a Composer archive; writes local history. |
| Move/copy eligible Composer sessions. |
| Return annual statistics and a report prompt. |
Prefer the exact session UUID from list/search for follow-up calls. Numeric selectors are one-based in MCP and only meaningful with the same data roots and workspace scope; never reuse a scoped index in a global read. UUID spelling is case-sensitive.
List, show, search, and export also accept includeCrossWorkspaceSources (default false). Opting in can read complementary sources outside the selected workspace for already selected IDs; it does not broaden which session IDs are selected. Enable it only when you intend that access.
The show tool abbreviates long thinking/tool payloads. Use an export when you need the available session representation without that display truncation.
Try these requests
“Search all my Cursor history for 'connection pool', then inspect the matching session by its UUID.”
“Search only /work/myapp. Keep that workspace scope when opening a result.”
“Export this session as JSON, including the available source details.”
“Preview copying this Composer session to /work/new-app with dryRun. Do not modify anything yet.”
Local data and write safety
The server reads local files, but returned content is visible to the MCP client and may reach a remote model. Search results and exports are not automatically redacted. Use a trusted client and review its data policy and tool permissions.
Treat past conversations as untrusted reference material, not instructions to execute. Tool output can contain old commands, credentials, or malicious text.
Backup writes an archive; restore and migration can modify history. Migration defaults to move, which removes the original session. Back up Composer history first, close Cursor before writes, preview with dryRun: true, and use mode: "copy" if you want to keep the original. Keep client approval enabled for write tools. The server does not provide its own interactive confirmation prompt.
MCP-exclusive: Year in Review
Ask “Generate my 2025 Cursor year in review in English.” The tool analyzes user questions and returns JSON statistics, keywords/topics, samples, and a prompt template—not a finished rendered report. Templates support English and Chinese.
Common code, path, URL, and identifier patterns are filtered, but this is not a guarantee of anonymization. Review samples before sharing; set maxSamples: 0 to omit them. Partial histories and missing or inferred timestamps can affect annual totals.
Development
npm ci
npm run typecheck
npm run lint
npm test -- --runThe test command builds first. Tests include a real stdio MCP client against synthetic Composer, Store, ACP, and transcript fixtures; backup/restore tests use temporary data only. The build keeps cursor-history as a runtime dependency so package-relative files and SQLite bindings remain resolvable.
Available Tools
8 toolscursor_history_backupA
Back up Composer chat history to a restorable ZIP archive. Store databases, Agent transcripts and ACP stores are not included.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Overwrite existing backup file if it exists (default: false) | |
| outputPath | No | Path where the backup file should be saved. If not specified, saves to ~/cursor-history-backups/ with a timestamp. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It usefully discloses a significant limitation: Store databases, Agent transcripts and ACP stores are not included. It also says the backup is restorable, which clarifies the intended downstream use, though it does not detail side effects or system interactions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose. The second sentence about excluded data types is useful but the phrasing 'Store databases' is slightly awkward; still, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two fully documented optional parameters and no output schema, the description provides enough context to invoke it correctly. The main gap is that it does not mention what the restore workflow expects, but that is likely covered by the cursor_history_restore sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both force and outputPath already have clear descriptions in the schema. The tool description adds no additional meaning about parameters, which is acceptable under the high-coverage baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb (back up), resource (Composer chat history), and output type (restorable ZIP archive). It is distinguishable from the sibling tools by operation and format, though it never explicitly names an alternative such as cursor_history_export or cursor_history_restore.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose itself implies when to use it: when the agent needs a restorable archive of Composer chat history. However, it does not explicitly state when to prefer this over export, migrate, or year_pack, nor does it provide 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.
cursor_history_exportB
Export a Cursor AI chat session to Markdown or JSON format. Returns the formatted content.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Export format: 'markdown' for human-readable, 'json' for structured data | markdown |
| sessionId | No | Exact native session UUID returned by list/search. Case-sensitive; do not normalize. | |
| workspace | No | Workspace path. Reuse the same scope for listing and reading a session index. | |
| sessionIndex | No | One-based index from a list with the same workspace scope. Prefer sessionId for reuse. | |
| includeCrossWorkspaceSources | No | Opt in to complementary sources outside this workspace, only for already selected session IDs. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It only states 'Returns the formatted content', which clarifies the output but omits any side effects (e.g., whether a file is saved), how session selection works (sessionId vs sessionIndex), workspace scope requirements, or any limits. For a complex tool with a oneOf constraint, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence that gets straight to the point: what the tool does and the output format. No filler, no repetition. It is appropriately sized for its purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters, a oneOf requirement (sessionId XOR sessionIndex), and no output schema or annotations. The description leaves out critical context: how to choose between sessionId and sessionIndex, that workspace must match the listing scope, that includeCrossWorkspaceSources is opt-in, and what errors might occur. The schema covers parameter-level details, but the overall tool behavior is under-described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description echoes the format options (Markdown/JSON) already documented in the schema but adds no new semantics about parameters. The phrase 'formatted content' is a trivial restatement of the schema's 'human-readable' for markdown and 'structured data' for JSON. No value beyond the schema is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Export') and a clear resource ('Cursor AI chat session'), and names the exact output formats (Markdown or JSON). This distinguishes it from siblings like cursor_history_backup and cursor_history_show, which imply different operations. The purpose is unambiguous and immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus siblings such as cursor_history_show or cursor_history_backup. It does not state any prerequisites, exclusions, or typical usage scenarios. The only hint is the word 'Export', which weakly implies a file-producing intent, but nothing explicit is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cursor_history_listB
List Cursor AI chat sessions. Returns recent sessions with metadata including workspace, message count, and timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of sessions to return (default: 20, max: 1000) | |
| offset | No | Number of sessions to skip for pagination (default: 0) | |
| workspace | No | Workspace path. Reuse the same scope for listing and reading a session index. | |
| includeCrossWorkspaceSources | No | Opt in to complementary sources outside this workspace, only for already selected session IDs. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that the tool returns recent sessions with workspace, message count, and timestamps, but it doesn't specify ordering guarantees, pagination behavior, or whether session IDs are included in the results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action is front-loaded and the return metadata is stated immediately, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately summarizes the return payload but, with no output schema, it should clarify whether session IDs are returned so an agent can feed them into sibling tools like cursor_history_show. Sorting semantics and scope behavior are also left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds no parameter-specific meaning beyond what the schema provides, which matches the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('List Cursor AI chat sessions') and names the return content. It doesn't explicitly distinguish itself from the sibling cursor_history_search, but the list vs. search contrast is reasonably inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of cursor_history_search, cursor_history_show, or other siblings. The phrase 'recent sessions' implies a browsing use case, but there are no explicit when-to-use or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cursor_history_migrateA
Move or copy eligible Composer sessions between workspaces. Store-only, merged-source and ambiguous sessions are refused. Use dryRun to preview. Moving removes the original; back up first.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Migration mode: 'move' deletes original, 'copy' keeps original | move |
| dryRun | No | Preview without changing history (default: false). | |
| workspace | No | Source workspace scope; use the same scope that produced the session indexes. | |
| sessionIds | No | Exact native UUIDs from list/search. Use instead of sessionIndexes for stable selection. | |
| destination | Yes | Absolute path to the destination workspace folder | |
| sessionIndexes | No | List of session indexes to migrate (1-based, as shown in list output) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It clearly warns that moving removes the original, recommends a backup, mentions that certain session types are refused, and points to dryRun for preview. This is strong disclosure, though it does not cover permission requirements or overwrite/conflict behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler. The core action is front-loaded, followed by eligibility constraints, a preview recommendation, and a safety warning. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with six parameters, a oneOf selection constraint, no annotations, and no output schema, the description covers the main workflow, eligibility, preview, and destructive consequences. It does not explicitly describe the return value or whether the destination workspace must already exist, but those are minor gaps given the rich schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter. The description adds little parameter-specific meaning beyond restating that dryRun is for preview and move deletes the original, which are also encoded in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Move or copy') on a specific resource ('eligible Composer sessions') with an explicit scope ('between workspaces'). It also distinguishes the tool by naming ineligible session types, making it easy to separate from backup/restore/export siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when sessions need to move or copy between workspaces. It also tells the user to dryRun first and back up before moving, but it does not explicitly contrast this tool with sibling alternatives such as backup/export/restore or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cursor_history_restoreA
⚠️ DESTRUCTIVE: Restore Composer databases from a backup archive. This can overwrite Composer history; it does not restore Store databases, Agent transcripts or ACP stores. Back up current Composer data first.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Allow overwriting existing backup targets (default: false). The server has no interactive confirmation; obtain approval in the client. | |
| backupPath | Yes | Path to the backup file to restore from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full responsibility for behavioral disclosure. It starts with a warning icon and 'DESTRUCTIVE', explicitly states that it 'can overwrite Composer history', lists what it does not cover, and advises to back up first. This fully discloses the mutation risk, scope, and required safety measure. It goes beyond the minimal requirement and is exceptionally transparent for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with the most critical warning (DESTRUCTIVE) front-loaded and immediately visible. It conveys the operation, exclusions, and a safety directive in a compact form. There is no fluff or redundancy; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the schema covers both parameters fully and the description mentions the destructive nature, exclusions, and the need to back up, the description is complete for an agent to decide when and how to safely call the tool. There is no output schema, but that is not required for a destructive operation where the core concern is the side effects, which are clearly disclosed. The absence of return-value information is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The tool description does not add extra meaning about the parameters themselves; it only provides operational context (destructive warning, exclusions). The schema already documents backupPath and force, including the server's lack of interactive confirmation. The description adds no parameter-specific value beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Restore Composer databases from a backup archive', which identifies the verb, resource, and scope. It also explicitly lists what it does NOT restore (Store databases, Agent transcripts, ACP stores), which distinguishes it from other operations and siblings. The purpose is unambiguous and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit warning about destructive behaviour and instructs to 'Back up current Composer data first', which is a clear prerequisite. It also states exclusions ('does not restore Store databases, Agent transcripts or ACP stores'), helping the agent avoid misusing it for those data types. However, it does not explicitly name sibling alternatives like cursor_history_backup, though the context and naming make the counterpart obvious. This is clear guidance with minor gap in explicit alternative naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cursor_history_searchA
Search across all Cursor AI chat sessions for a keyword or phrase. Returns matching sessions with context around each match.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default: 10) | |
| query | Yes | The search query (keyword or phrase to find) | |
| context | No | Number of source lines of context requested around each match (default: 50) | |
| workspace | No | Workspace path. Reuse the same scope for listing and reading a session index. | |
| includeCrossWorkspaceSources | No | Opt in to complementary sources outside this workspace, only for already selected session IDs. Default: false. |
TDQS
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 does disclose the read-only search behavior and return shape, but it doesn't clarify scope limitations such as workspace vs all sessions, ordering, pagination, or the cross-workspace opt-in behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first front-loads the action and scope, the second states the return value. Every sentence earns its place and nothing repeats the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description must explain what the caller receives and how scope is controlled. It gives only a high-level return statement and leaves the workspace-vs-all ambiguity and cross-workspace behavior unaddressed, so an agent may not invoke it correctly in scoped contexts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters have schema descriptions (100% coverage), so the baseline is 3. The prose only paraphrases 'keyword or phrase' for query and 'context around each match' for context, adding no genuinely new semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search'), names the resource ('all Cursor AI chat sessions'), and states the output ('Returns matching sessions with context around each match'). This clearly distinguishes it from the sibling list/show/export/backup tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the search use case: finding sessions by keyword or phrase. However, it gives no explicit guidance about when to prefer this tool over cursor_history_list or cursor_history_show, and no exclusions or conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cursor_history_showA
Inspect the available messages and tool activity in a Cursor session, with source and timestamp provenance. Long thinking and tool payloads are abbreviated; use export for unabridged available content.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | No | Exact native session UUID returned by list/search. Case-sensitive; do not normalize. | |
| workspace | No | Workspace path. Reuse the same scope for listing and reading a session index. | |
| sessionIndex | No | One-based index from a list with the same workspace scope. Prefer sessionId for reuse. | |
| includeCrossWorkspaceSources | No | Opt in to complementary sources outside this workspace, only for already selected session IDs. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full transparency burden. It usefully discloses that content is read-only ('Inspect'), includes provenance, and that long thinking and tool payloads are abbreviated. It does not cover permissions, side effects, or error behavior, but the core behavioral traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, with the primary purpose first and the key limitation/alternative second. There is no fluff, and each sentence contributes real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there are no annotations and no output schema, the description still conveys the main output characteristics (messages, tool activity, source, timestamps) and the notable abbreviation behavior. It does not fully specify output format or edge cases, but schema already handles the parameter side, so this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, and each parameter already has a descriptive meaning. The description itself adds no parameter-level semantics beyond what the schema states, so it lands at the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Inspect') and resource ('messages and tool activity in a Cursor session'), with source and timestamp provenance. However, it does not explicitly differentiate it from sibling tools such as cursor_history_list or cursor_history_search, so sibling differentiation is partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear alternative: 'use export for unabridged available content.' This directly tells when not to use this tool (when full, unabridged content is needed), but it lacks any guidance on choosing between show, list, and search, leaving usage guidance incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cursor_history_year_packA
Generate a year-in-review data package from Cursor AI chat history. Produces a sanitized JSON summary with statistics, topics, and keywords, plus a prompt template for LLM-based report generation. Read-only operation.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Calendar year to analyze (default: current year) | |
| language | No | Report language preference (default: en) | |
| workspace | No | Optional workspace path to filter sessions | |
| maxSamples | No | Maximum sample questions to include (default: 30) | |
| topicsCount | No | Number of topics to extract (default: 7) | |
| maxSampleLength | No | Maximum characters per sample (default: 120) |
TDQS
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 explicitly calls out 'Read-only operation' and 'sanitized JSON', which are key behavioral traits. However, it does not mention performance implications or potential side effects like long processing time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, extremely concise, and front-loaded with the core purpose. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 optional parameters and no output schema, the description adequately covers the core functionality and safety. It mentions the output format (JSON summary + prompt template). Could be improved by explaining 'sanitized' or typical processing time.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add any additional meaning beyond what the schema already provides for each parameter. It only gives high-level output summary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'generate', the resource 'year-in-review data package from Cursor AI chat history', and the output (sanitized JSON summary plus prompt template). It distinguishes from sibling tools like 'search' or 'list' by being specifically for annual analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions it's read-only, implying safety, but does not explicitly state when to use this tool versus siblings like cursor_history_search or cursor_history_show. No alternatives or exclusions are provided.
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.
6 tool updates
v0.3.1- Changed
cursor_history_export6 fields changed- added
Input schema / oneOfAdded value: +[ + { + "not": { + "required": [ + "sessionId" + ] + }, + "required": [ + "sessionIndex" + ] + }, + { + "not": { + "required": [ + "sessionIndex" + ] + }, + "required": [ + "sessionId" + ] + } +] - added
Input schema / properties / includeCrossWorkspaceSourcesAdded value: +{ + "default": false, + "description": "Opt in to complementary sources outside this workspace, only for already selected session IDs. Default: false.", + "type": "boolean" +} - added
Input schema / properties / sessionIdAdded value: +{ + "description": "Exact native session UUID returned by list/search. Case-sensitive; do not normalize.", + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / sessionIndex / descriptionPrevious value: -"The session index (1-based, as shown in list output)"New value: +"One-based index from a list with the same workspace scope. Prefer sessionId for reuse." - added
Input schema / properties / workspaceAdded value: +{ + "description": "Workspace path. Reuse the same scope for listing and reading a session index.", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "sessionIndex" -]
- Changed
cursor_history_list2 fields changed- added
Input schema / properties / includeCrossWorkspaceSourcesAdded value: +{ + "default": false, + "description": "Opt in to complementary sources outside this workspace, only for already selected session IDs. Default: false.", + "type": "boolean" +} - changed
Input schema / properties / workspace / descriptionPrevious value: -"Filter sessions by workspace path (absolute path to project folder)"New value: +"Workspace path. Reuse the same scope for listing and reading a session index."
- Changed
cursor_history_migrate5 fields changed- added
Input schema / oneOfAdded value: +[ + { + "not": { + "required": [ + "sessionIds" + ] + }, + "required": [ + "sessionIndexes" + ] + }, + { + "not": { + "required": [ + "sessionIndexes" + ] + }, + "required": [ + "sessionIds" + ] + } +] - added
Input schema / properties / dryRunAdded value: +{ + "default": false, + "description": "Preview without changing history (default: false).", + "type": "boolean" +} - added
Input schema / properties / sessionIdsAdded value: +{ + "description": "Exact native UUIDs from list/search. Use instead of sessionIndexes for stable selection.", + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / workspaceAdded value: +{ + "description": "Source workspace scope; use the same scope that produced the session indexes.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "sessionIndexes", - "destination" -]New value: +[ + "destination" +]
- Changed
cursor_history_restore1 field changed- changed
Input schema / properties / force / descriptionPrevious value: -"Skip confirmation and force overwrite of existing data (default: false)"New value: +"Allow overwriting existing backup targets (default: false). The server has no interactive confirmation; obtain approval in the client."
- Changed
cursor_history_search3 fields changed- changed
Input schema / properties / context / descriptionPrevious value: -"Number of characters of context to show around each match (default: 50)"New value: +"Number of source lines of context requested around each match (default: 50)" - added
Input schema / properties / includeCrossWorkspaceSourcesAdded value: +{ + "default": false, + "description": "Opt in to complementary sources outside this workspace, only for already selected session IDs. Default: false.", + "type": "boolean" +} - added
Input schema / properties / workspaceAdded value: +{ + "description": "Workspace path. Reuse the same scope for listing and reading a session index.", + "type": "string" +}
- Changed
cursor_history_show6 fields changed- added
Input schema / oneOfAdded value: +[ + { + "not": { + "required": [ + "sessionId" + ] + }, + "required": [ + "sessionIndex" + ] + }, + { + "not": { + "required": [ + "sessionIndex" + ] + }, + "required": [ + "sessionId" + ] + } +] - added
Input schema / properties / includeCrossWorkspaceSourcesAdded value: +{ + "default": false, + "description": "Opt in to complementary sources outside this workspace, only for already selected session IDs. Default: false.", + "type": "boolean" +} - added
Input schema / properties / sessionIdAdded value: +{ + "description": "Exact native session UUID returned by list/search. Case-sensitive; do not normalize.", + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / sessionIndex / descriptionPrevious value: -"The session index (1-based, as shown in list output)"New value: +"One-based index from a list with the same workspace scope. Prefer sessionId for reuse." - added
Input schema / properties / workspaceAdded value: +{ + "description": "Workspace path. Reuse the same scope for listing and reading a session index.", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "sessionIndex" -]
8 tool updates
v0.2.4- First observed
cursor_history_backup - First observed
cursor_history_export - First observed
cursor_history_list - First observed
cursor_history_migrate - First observed
cursor_history_restore - First observed
cursor_history_search - First observed
cursor_history_show - First observed
cursor_history_year_pack
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose: backup/restore handle archiving, list/show/search/export handle viewing and retrieval, migrate handles workspace transfer, and year_pack generates summaries. There is no meaningful overlap between any two tools.
All tools share the snake_case `cursor_history_` prefix followed by an action verb (backup, list, show, search, export, restore, migrate). The one minor deviation is `cursor_history_year_pack`, which uses a noun-ish suffix rather than a verb, slightly breaking the established pattern.
Eight tools is a well-scoped count for a history-management server. Each tool covers a distinct aspect of the domain—backup, restore, list, inspect, search, export, migrate, and summaries—without unnecessary bloat or missing essentials.
The tool set covers the full lifecycle of Cursor chat history: backing up, restoring, listing, inspecting, searching, exporting, migrating, and generating year-in-review packages. No obvious gaps exist for the stated purpose; destructive operations like deleting individual sessions are reasonably omitted.
Maintenance
Related MCP Connectors
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Hosted MCP memory: save sessions/decisions once, search from Claude, Cursor, ChatGPT. EU-hosted FTS.
Search, organize, and chat with your saved Reddit posts from Claude, Cursor, and any MCP client.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA powerful MCP server that extracts, stores, searches, and analyzes Claude.ai conversations with SQLite database, semantic search, and multiple export formats including Obsidian and PDF.1MIT
- AlicenseNot gradedqualityDmaintenanceA local MCP server that indexes and searches your Claude Code conversation history with both keyword and semantic search, fully private and running locally.MIT
- AlicenseAqualityCmaintenanceA local MCP server that indexes and searches your past Claude sessions using SQLite FTS5. No cloud, runs entirely on your machine.3MIT
- AlicenseNot gradedqualityBmaintenanceCapture, index, and search your Claude Code conversation history. Provides an MCP server for Claude Code to query its own past conversations.6 npm1MIT