Skip to main content
Glama
S2thend

cursor-history-mcp

by S2thend

Cursor History MCP

npm version npm downloads License: MIT Node.js

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.1

See 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.json

  • Windows: %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 build

In 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

cursor-history: CLI + Node.js API

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

workspaceStorage/*/state.vscdb + globalStorage/state.vscdb

Supported

Agent transcripts

~/.cursor/projects/**/agent-transcripts/**/*.jsonl

Available transcript content

Store / Agent CLI

~/.cursor/chats/**/store.db

Supported

ACP sessions

~/.cursor/acp-sessions/**/store.db

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

cursor_history_list

List sessions with IDs, index scope, source and data status. limit, offset, workspace

cursor_history_show

Inspect available messages. Exactly one of sessionId / sessionIndex; optional workspace

cursor_history_search

Search text. query, limit, context (neighboring source lines), workspace

cursor_history_export

Return Markdown or JSON content, not a file written by the server. One selector, format, workspace

cursor_history_backup

Create a Composer archive. outputPath, optional force

cursor_history_restore

Restore a Composer archive; writes local history. backupPath, optional force

cursor_history_migrate

Move/copy eligible Composer sessions. sessionIds or sessionIndexes, destination, workspace, mode, dryRun

cursor_history_year_pack

Return annual statistics and a report prompt. year, language (en / zh), workspace, sample limits

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 -- --run

The 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.

Issues · Pull requests · MIT license

Available Tools

8 tools
cursor_history_backupA

Back up Composer chat history to a restorable ZIP archive. Store databases, Agent transcripts and ACP stores are not included.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoOverwrite existing backup file if it exists (default: false)
outputPathNoPath where the backup file should be saved. If not specified, saves to ~/cursor-history-backups/ with a timestamp.

TDQS

A3.7/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 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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoExport format: 'markdown' for human-readable, 'json' for structured datamarkdown
sessionIdNoExact native session UUID returned by list/search. Case-sensitive; do not normalize.
workspaceNoWorkspace path. Reuse the same scope for listing and reading a session index.
sessionIndexNoOne-based index from a list with the same workspace scope. Prefer sessionId for reuse.
includeCrossWorkspaceSourcesNoOpt in to complementary sources outside this workspace, only for already selected session IDs. Default: false.

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of sessions to return (default: 20, max: 1000)
offsetNoNumber of sessions to skip for pagination (default: 0)
workspaceNoWorkspace path. Reuse the same scope for listing and reading a session index.
includeCrossWorkspaceSourcesNoOpt in to complementary sources outside this workspace, only for already selected session IDs. Default: false.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoMigration mode: 'move' deletes original, 'copy' keeps originalmove
dryRunNoPreview without changing history (default: false).
workspaceNoSource workspace scope; use the same scope that produced the session indexes.
sessionIdsNoExact native UUIDs from list/search. Use instead of sessionIndexes for stable selection.
destinationYesAbsolute path to the destination workspace folder
sessionIndexesNoList of session indexes to migrate (1-based, as shown in list output)

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoAllow overwriting existing backup targets (default: false). The server has no interactive confirmation; obtain approval in the client.
backupPathYesPath to the backup file to restore from

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdNoExact native session UUID returned by list/search. Case-sensitive; do not normalize.
workspaceNoWorkspace path. Reuse the same scope for listing and reading a session index.
sessionIndexNoOne-based index from a list with the same workspace scope. Prefer sessionId for reuse.
includeCrossWorkspaceSourcesNoOpt in to complementary sources outside this workspace, only for already selected session IDs. Default: false.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoCalendar year to analyze (default: current year)
languageNoReport language preference (default: en)
workspaceNoOptional workspace path to filter sessions
maxSamplesNoMaximum sample questions to include (default: 30)
topicsCountNoNumber of topics to extract (default: 7)
maxSampleLengthNoMaximum characters per sample (default: 120)

TDQS

A4/5.0
Behavior4/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 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 6 tool updatesv0.3.1
    • Changedcursor_history_export6 fields changed
      • addedInput schema / oneOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "sessionId"
        +      ]
        +    },
        +    "required": [
        +      "sessionIndex"
        +    ]
        +  },
        +  {
        +    "not": {
        +      "required": [
        +        "sessionIndex"
        +      ]
        +    },
        +    "required": [
        +      "sessionId"
        +    ]
        +  }
        +]
      • addedInput schema / properties / includeCrossWorkspaceSources
        Added value: +{
        +  "default": false,
        +  "description": "Opt in to complementary sources outside this workspace, only for already selected session IDs. Default: false.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / sessionId
        Added value: +{
        +  "description": "Exact native session UUID returned by list/search. Case-sensitive; do not normalize.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / sessionIndex / description
        Previous 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."
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Workspace path. Reuse the same scope for listing and reading a session index.",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "sessionIndex"
        -]
    • Changedcursor_history_list2 fields changed
      • addedInput schema / properties / includeCrossWorkspaceSources
        Added value: +{
        +  "default": false,
        +  "description": "Opt in to complementary sources outside this workspace, only for already selected session IDs. Default: false.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / workspace / description
        Previous 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."
    • Changedcursor_history_migrate5 fields changed
      • addedInput schema / oneOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "sessionIds"
        +      ]
        +    },
        +    "required": [
        +      "sessionIndexes"
        +    ]
        +  },
        +  {
        +    "not": {
        +      "required": [
        +        "sessionIndexes"
        +      ]
        +    },
        +    "required": [
        +      "sessionIds"
        +    ]
        +  }
        +]
      • addedInput schema / properties / dryRun
        Added value: +{
        +  "default": false,
        +  "description": "Preview without changing history (default: false).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / sessionIds
        Added value: +{
        +  "description": "Exact native UUIDs from list/search. Use instead of sessionIndexes for stable selection.",
        +  "items": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Source workspace scope; use the same scope that produced the session indexes.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "sessionIndexes",
        -  "destination"
        -]New value: +[
        +  "destination"
        +]
    • Changedcursor_history_restore1 field changed
      • changedInput schema / properties / force / description
        Previous 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."
    • Changedcursor_history_search3 fields changed
      • changedInput schema / properties / context / description
        Previous 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)"
      • addedInput schema / properties / includeCrossWorkspaceSources
        Added value: +{
        +  "default": false,
        +  "description": "Opt in to complementary sources outside this workspace, only for already selected session IDs. Default: false.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Workspace path. Reuse the same scope for listing and reading a session index.",
        +  "type": "string"
        +}
    • Changedcursor_history_show6 fields changed
      • addedInput schema / oneOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "sessionId"
        +      ]
        +    },
        +    "required": [
        +      "sessionIndex"
        +    ]
        +  },
        +  {
        +    "not": {
        +      "required": [
        +        "sessionIndex"
        +      ]
        +    },
        +    "required": [
        +      "sessionId"
        +    ]
        +  }
        +]
      • addedInput schema / properties / includeCrossWorkspaceSources
        Added value: +{
        +  "default": false,
        +  "description": "Opt in to complementary sources outside this workspace, only for already selected session IDs. Default: false.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / sessionId
        Added value: +{
        +  "description": "Exact native session UUID returned by list/search. Case-sensitive; do not normalize.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / sessionIndex / description
        Previous 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."
      • addedInput schema / properties / workspace
        Added value: +{
        +  "description": "Workspace path. Reuse the same scope for listing and reading a session index.",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "sessionIndex"
        -]
  2. 8 tool updatesv0.2.4
    • First observedcursor_history_backup
    • First observedcursor_history_export
    • First observedcursor_history_list
    • First observedcursor_history_migrate
    • First observedcursor_history_restore
    • First observedcursor_history_search
    • First observedcursor_history_show
    • First observedcursor_history_year_pack

TDQS

A4/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Capture, index, and search your Claude Code conversation history. Provides an MCP server for Claude Code to query its own past conversations.
    6 npm
    1
    MIT