Skip to main content
Glama

ContextForge MCP — Persistent Memory for Claude, Cursor & Copilot

npm version License: MIT Node.js Glama MCP

Give Claude Code, Cursor, and GitHub Copilot persistent memory across sessions via the Model Context Protocol (MCP). Stop re-explaining your project every time.

ContextForge MCP is an open-source MCP server that connects your AI coding assistants to long-term, searchable memory. Decisions, architecture notes, debugging context, and project knowledge stay available across every session — across every tool that supports MCP.

  • 🧠 Persistent memory — your AI remembers everything across sessions, days, and weeks

  • 🔍 Semantic search — find knowledge by meaning, not keywords

  • 🔗 One memory, every tool — Claude Code, Cursor, Copilot, Claude Desktop, Windsurf

  • 🐙 Git integration — sync commits and PRs automatically

  • ✅ Task tracking — issues, assignments, and project status

  • 👥 Team collaboration — share projects and memory with your team

  • 🆓 Free tier — get started without a credit card

NOTE

Works automatically, no config needed (v0.5.1+). On connect, the server sends startup instructions to your AI client. Clients that honor them (Claude Desktop, Claude Code) load your project memory at the start of every session and save new decisions proactively — without you editing any settings. Running init (Step 4) is now a reinforcement, not a requirement, and still helps on clients that don't yet honor server instructions (e.g. Cursor).


Quick Start

1. Install

No install step needed — the setup below runs the server via npx -y contextforge-mcp, which fetches it on demand and keeps it up to date.

Prefer a global install for slightly faster cold starts? npm install -g contextforge-mcp is optional; if you do it, you can drop the npx -y prefix from the commands below.

2. Get your API key

  1. Go to contextforge.dev

  2. Sign up (free tier available)

  3. Settings → API Keys → Generate API Key

  4. Copy your key (starts with cf_)

3. Connect to your AI tool

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "contextforge": {
      "command": "npx",
      "args": ["-y", "contextforge-mcp"],
      "env": {
        "CONTEXTFORGE_API_KEY": "your-api-key-here"
      }
    }
  }
}

Restart Claude Desktop.

Claude Code (CLI)

claude mcp add contextforge -s user \
  -e CONTEXTFORGE_API_KEY=your-api-key-here \
  -- npx -y contextforge-mcp

Restart Claude Code and run /mcp to verify it's connected.

Cursor

Add to your Cursor MCP settings:

{
  "mcpServers": {
    "contextforge": {
      "command": "npx",
      "args": ["-y", "contextforge-mcp"],
      "env": {
        "CONTEXTFORGE_API_KEY": "your-api-key-here"
      }
    }
  }
}

GitHub Copilot (VS Code)

Add to your Copilot MCP config:

{
  "servers": {
    "contextforge": {
      "command": "npx",
      "args": ["-y", "contextforge-mcp"],
      "env": {
        "CONTEXTFORGE_API_KEY": "your-api-key-here"
      }
    }
  }
}

With v0.5.1+ the server auto-loads memory on supporting clients (see the note at the top), so this step is optional but recommended: it reinforces the behavior, covers clients that don't honor server instructions, and fully overrides the built-in file-based memory.

Set up your project so your AI editor always prefers ContextForge memory:

npx contextforge-mcp init

By default, init auto-detects which editor your project uses and writes three rule sections and one hook:

  • Memory rules — route memory questions to ContextForge instead of the built-in file memory

  • Session Presence rules — make parallel sessions check for each other at conversation start and before big changes

  • Startup Context rules — load a short project summary (overview, open tasks, live sessions) from ContextForge at the start of every conversation

  • Post-compaction recall hook (Claude Code only) — a SessionStart hook with matcher compact in .claude/settings.json. When Claude Code compacts a long conversation, the hook runs npx -y contextforge-mcp recall and re-injects your project's 10 most recent memories and pending tasks, so decisions saved in ContextForge survive the summary.

Files written:

  • CLAUDE.md for Claude Code (signals: existing CLAUDE.md or .claude/ directory)

  • .cursorrules for Cursor (signals: existing .cursorrules or .cursor/ directory)

  • .claude/settings.json for Claude Code — merged, never overwritten; only the recall hook is added

If no editor is detected, both files are generated.

On clients that honor server instructions (Claude Desktop, Claude Code), ContextForge is used automatically even without this step. On other clients — or to guarantee the built-in file-based auto-memory never wins — run init: it writes explicit rules that always route memory to ContextForge.

Override with --editor

Flag

Behavior

--editor=claude

Generate only CLAUDE.md

--editor=cursor

Generate only .cursorrules

--editor=all

Generate both, skip detection

Re-running init is idempotent per section — sections you already have are left untouched; missing ones are appended. Upgrading from an older version? Just re-run npx contextforge-mcp init: it adds the new Startup Context section without touching the rest of your file.

Check your version

npx contextforge-mcp --version   # also: -v, version

Prints the installed version (e.g. contextforge-mcp 0.5.2).

Surviving compaction (Claude Code)

Long sessions get compacted: Claude Code summarizes the conversation to free space, and the summary keeps the gist but drops details — usually the decisions. init installs a hook that fires right after every compaction and prints your project's most recent ContextForge memories and pending tasks back into the context.

The hook runs as a plain shell command, so it reads your API key from CONTEXTFORGE_API_KEY if set, otherwise from the contextforge server entry in ~/.claude.json (where claude mcp add stores it), otherwise from a project .mcp.json. It needs a linked project (.contextforge in the repo root). If anything is missing it prints nothing and never blocks the session.

Try it by hand from your project directory:

npx contextforge-mcp recall

Already using ContextForge? (existing users)

Nothing to reconfigure. Update to the latest and restart your AI client:

npm update -g contextforge-mcp   # only if you installed globally; npx users get it on next launch

You do not need to re-run init for the auto-load behavior. To get the post-compaction recall hook, run npx contextforge-mcp init once in each project; it only adds what is missing.


Related MCP server: mcp-server-claude

Available Tools

ContextForge defines 69 tools across Knowledge Management, GitHub Integration, Issue Tracking, and Collaboration. No capability was ever removed — every tool below is fully callable — but as of v0.11.0, your AI client sees only 11 of them by default (CONTEXTFORGE_TOOLS=lean, the default):

  • 10 core tools — the ones used on the agent's own initiative every session: memory_query, memory_ingest, memory_check_freshness, memory_confirm, memory_correct, memory_forget, tasks_list, tasks_what_next, session_list, memory_help.

  • cf_tools — one gateway tool that discovers and runs the other 59. Ask your AI naturally ("sync my git commits", "restore from a snapshot", "olvida ese recuerdo viejo") and it searches (English or Spanish) and calls the right tool for you — no need to know an exact name.

Set CONTEXTFORGE_TOOLS=full to expose all 69 tools directly to your client instead, matching the behavior of versions before 0.11.0. See Environment Variables.

Why lean by default: 69 tool schemas cost ~15,000 tokens of context on every session, push past Cursor's 40-tool cap, and contribute to the accuracy degradation several clients show past ~50 tools. The lean set cuts that to ~3,500 tokens (~77% less) while keeping every tool one call away via cf_tools.

Knowledge Management

Tool

Description

memory_ingest

Save knowledge to memory

memory_query

Search your knowledge semantically

memory_list_items

List all stored items

memory_delete

Remove specific items

memory_ingest_batch

Save multiple items at once

memory_delete_batch

Delete items by filter

Spaces & Projects

Tool

Description

memory_list_spaces

List your spaces

memory_create_space

Create a new space

memory_delete_space

Delete a space

memory_move_space

Move space to project

memory_list_projects

List your projects

memory_create_project

Create a new project

memory_delete_project

Delete a project

memory_link_project

Link directory to project

memory_unlink_project

Unlink directory

memory_current_project

Show linked project

GitHub Integration

Tool

Description

memory_git_connect

Connect a GitHub repo

memory_git_list

List connected repos

memory_git_activate

Activate/deactivate webhook

memory_git_sync

Import existing history

memory_git_commits

List synced commits

memory_git_prs

List synced PRs

memory_git_disconnect

Disconnect a repo

Issue Tracking

Tool

Description

issues_list

List your issues

issues_create

Create a new issue

issues_start

Mark as in progress

issues_resolve

Mark as resolved

issues_resolve_by_name

Resolve by title

issues_assign

Assign to collaborator

issues_what_next

Get recommendation

Collaboration

Tool

Description

project_share

Share project by email

collaborators_list

List collaborators

Snapshots & Export

Tool

Description

memory_snapshot_create

Create a backup

memory_snapshot_list

List all snapshots

memory_snapshot_restore

Restore from backup

memory_snapshot_delete

Delete a snapshot

memory_export

Export to JSON/MD/CSV

memory_import

Import from file

Utility

Tool

Description

memory_stats

View usage statistics

memory_relate

Link two items

memory_help

Show help


Session Presence (multi-session coordination)

Running several Claude Code sessions in parallel (worktrees, agent teams)? Each MCP process automatically registers itself as a live session and heartbeats while it runs. On a clean exit the session is removed at once (a detached helper delivers the goodbye even while the host process is being killed); if the process dies hard, the session expires ~10 minutes after its last heartbeat. Three tools let the agent coordinate — session_list is a core tool and always visible; session_update and session_end are reached through the cf_tools gateway by default (or set CONTEXTFORGE_TOOLS=full to see all three directly):

Tool

What it does

session_update

Declare what this session is working on ("working on the auth module")

session_list

See other live sessions in the same project and their focus before touching shared areas (pass all_projects: true for the whole org)

session_end

Explicitly end this session's presence (also automatic on exit)

By default session_list is scoped to the current project — where work actually collides. In a multi-project organization, pass all_projects: true to see every session, or project: "<name-or-id>" to scope elsewhere.

Recommended pattern for your CLAUDE.md: call session_list when a conversation starts; call session_update when starting or switching tasks.


Natural Language Examples

You don't need to memorize commands — just talk naturally to your AI:

# Knowledge
"Save this: we use PostgreSQL for the main database"
"What database do we use?"
"List my spaces"

# GitHub
"Connect my repo github.com/myuser/myproject"
"What commits did I make today?"
"Show PRs merged this week"

# Issues
"Create an issue: Update the login page design"
"What's pending?"
"What should I work on next?"
"Mark the login issue as done"

Environment Variables

Variable

Required

Description

CONTEXTFORGE_API_KEY

Yes

Your API key from the dashboard

CONTEXTFORGE_API_URL

No

API endpoint (defaults to production)

CONTEXTFORGE_DEFAULT_SPACE

No

Default space for operations

CONTEXTFORGE_TOOLS

No

lean (default) exposes 11 tools — the 10 most-used plus the cf_tools gateway to the other 59. full exposes all 69, as versions before 0.11.0 did. Lean keeps ContextForge under Cursor's 40-tool cap and Claude Code's 50-tool degradation threshold.


How it works

ContextForge MCP is a thin client that translates Model Context Protocol tool calls into authenticated HTTP requests against the ContextForge API. Your knowledge is stored, indexed (semantic embeddings), and retrieved on the server side — the MCP client itself is stateless.

This means:

  • No infra to manage — no local databases, no embeddings to run, no vector stores to maintain

  • Works everywhere your AI works — same memory across Claude Code, Cursor, Copilot, etc.

  • Team collaboration — shared projects sync in real time


Dashboard

Manage your memory visually at contextforge.dev:

  • View and organize your knowledge

  • Search and filter memories

  • Manage API keys and billing

  • Track issues and collaborate

  • Export and backup data


Development

# Clone and install
git clone https://github.com/alfredoizdev/contextforge-mcp.git
cd contextforge-mcp
npm install

# Build
npm run build

# Run tests
npm test

# Watch mode
npm run dev

Contributing

Issues and pull requests are welcome at github.com/alfredoizdev/contextforge-mcp.


Support


License

MIT © Alfredo Izquierdo

Available Tools

11 tools
cf_toolsA
Destructive

Discover and run 59 additional ContextForge capabilities that are not in your tool list: git sync and history, spaces, projects, skills, routines, snapshots, import/export, task editing, and collaboration. If you cannot find a ContextForge capability in your tool list, search for it HERE before concluding it does not exist. Two modes: pass query with a plain-language description to search (returns full, ready-to-call schemas of the best matches), or pass name plus args to run one.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoArguments for the tool named in `name`.
nameNoExact tool name to execute, as returned by a previous `query` call.
queryNoPlain-language description of the capability you need, e.g. 'sync git commits' or 'forget an outdated memory'. Returns full schemas of the best matches.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already encode destructiveHint=true, and the description appropriately supports this by stating the tool can 'run' named tools with arguments. It also discloses important behavior: query returns full ready-to-call schemas)Skip; these are exactly WHAT the schema already says, but the description adds the meta-context that this tool can have destructive effects because it can run arbitrary hidden tools. A 4 seems high but justified; only minor lack is explicit caution/warning or side-effect caveats, which annotations already flag.

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

Conciseness5/5

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

Three sentences, front-loaded with the most important directive (search before concluding absence), then mode details. No filler or redundant restatement of schema fields.

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

Completeness5/5

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

For a bridge/dispatcher tool, the description covers the full calling pattern: when to use it, how to search, what search returns, and how to execute. No output schema exists, but the description states the key return behavior (full schemas). Coupled with 100% schema coverage and strong annotations, nothing essential is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already explains all three parameters. The description adds semantic clarity beyond raw parameter names by explaining how query, name, and args interrelate (e.g., name must come from a previous query result and defines the execution mode). It correctly avoids re-listing parameter mechanics.

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 identifies the tool as a discovery-and-execution gateway for 59 ContextForge capabilities absent from the visible tool list. Its phrase 'not in your tool list' and enumeration of capability areas (git sync, spaces, projects, etc.) distinguish it from sibling memory/task tools.

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

Usage Guidelines5/5

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

The description explicitly tells the agent to search here before concluding a ContextForge capability doesn't exist, and precisely differentiates the two modes: query for searching (returns schemas) versus name plus args for execution. No ambiguity about when or how to invoke.

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

memory_check_freshnessA
Read-onlyIdempotent

Check whether memories linked to git-tracked code (via related_paths on memory_ingest) are stale because the underlying code changed since they were saved. Compares each candidate's saved commit SHA against the current HEAD with a local git diff — no data leaves your machine for the diff itself. Returns up to 3 memories whose related files changed, so you can review and refresh them. Call this periodically or when you suspect saved context might be out of date.

ParametersJSON Schema
NameRequiredDescriptionDefault
space_idNoSpace UUID (uses default if not specified)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate readOnly and idempotent behavior. The description adds specific behavioral details: it uses a local git diff, no data leaves the machine, and returns up to 3 stale memories. This context enhances understanding beyond annotations.

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 concise sentences: first states purpose, second explains mechanism and privacy, third gives usage advice. No unnecessary words.

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 no output schema, the description covers purpose, mechanism, privacy, return value (up to 3 items), and usage frequency. The single optional parameter is well-documented in the schema. No gaps identified.

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?

With only one optional parameter (space_id) and 100% schema coverage, the description does not add meaning beyond the schema's description. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool checks if memories linked to git-tracked code are stale by comparing commit SHAs, using a specific verb ('check') and resource ('freshness of memories'). It distinguishes from siblings like memory_ingest and memory_query by its unique caching context.

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 advises calling 'periodically or when you suspect saved context might be out of date,' providing clear usage context. It does not explicitly list when not to use or alternatives, but the guidance is sufficient for general use.

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

memory_confirmA
Idempotent

Confirm that a memory flagged by memory_check_freshness is still accurate, even though its related code changed. Updates the memory's confirmed timestamp so it won't be flagged again until the code changes further.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUUID of the memory item to confirm as still accurate

TDQS

A4.4/5.0
Behavior5/5

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

The description adds meaningful behavioral context beyond annotations: it updates the confirmed timestamp and suppresses re-flagging until the code changes further. This explains the effect and side-effect, while idempotentHint already indicated safe repetition. No contradiction.

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

Conciseness5/5

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

Two sentences with no wordiness. The first sentence states the core action and condition; the second explains the effect. Every sentence serves a purpose.

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 one-parameter tool with no output schema, the description adequately explains purpose, effect, and relation to memory_check_freshness. It could mention error handling (e.g., if the id is not flagged) for completeness, but overall it is sufficient.

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

Parameters3/5

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

The single parameter 'id' is fully described in the schema (UUID of the memory item). The tool description does not add further meaning about the parameter, but the baseline is 3 due to high schema coverage. The description references the context of flagging, which indirectly clarifies what kind of id is accepted.

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 identifies the tool's purpose: confirming a memory flagged by memory_check_freshness as still accurate. It specifies the resource ('memory flagged by memory_check_freshness') and the verb ('confirm'), and distinguishes from related tools like memory_correct and memory_forget by referencing the flagging mechanism.

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 implies usage when memory_check_freshness has flagged a memory and the agent believes it is still accurate. It does not explicitly state when not to use it or alternatives, but the context is sufficient for an AI agent familiar with the memory ecosystem to make appropriate decisions.

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

memory_correctA

Update a memory flagged by memory_check_freshness with corrected content after its related code changed. Replaces the stored content and refreshes the git context (current commit SHA) so future freshness checks compare against the new baseline. For a general edit to any memory that is NOT part of a freshness check, use memory_update instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUUID of the memory item to correct
contentYesThe corrected, up-to-date content
related_pathsNoFiles/dirs this memory is about (e.g. ["src/api.ts"]). Refreshes staleness tracking for future checks.

TDQS

A4.4/5.0
Behavior4/5

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

All annotations are false-valued (readOnlyHint, openWorldHint, idempotentHint, destructiveHint), so the description carries the full behavioral burden. It discloses that the tool 'Replaces the stored content' and — crucially — that it 'refreshes the git context (current commit SHA) so future freshness checks compare against the new baseline', a side effect not visible in the schema. It stops just short of explaining failure modes or preconditions like git connectivity.

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

Conciseness5/5

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

Three sentences with zero waste: sentence one states trigger and action, sentence two discloses side effects, sentence three routes to the sibling alternative. The scoping condition is front-loaded ahead of the side-effect detail. 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 write tool with 2 required params and no output schema, the description covers the trigger context, the mutation, the git-baseline side effect, and the sibling distinction. Minor gaps exist — failure behavior, return value, and preconditions (e.g., whether the git repo must be connected) are unstated — but nothing an agent needs to invoke it correctly is missing.

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 id, content, and related_paths are already fully documented structurally. The description adds workflow context (what 'corrected content' means in this freshness-check flow, why related_paths matters for the git baseline) but no new formats, constraints, or syntax. Baseline 3 is appropriate since the schema does the heavy lifting.

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?

States a specific verb ('Update'), resource ('a memory'), and precise scope ('flagged by memory_check_freshness'), which immediately distinguishes it from the broader memory_update sibling named in the last sentence. The annotation title 'Correct Memory' reinforces the same purpose. An agent can tell exactly what this tool is for without opening any other definition.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use trigger ('after its related code changed', 'flagged by memory_check_freshness') and an explicit when-not-to-use rule with the named alternative: 'For a general edit to any memory that is NOT part of a freshness check, use memory_update instead.' This is ideal routing guidance — nothing left to inference.

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

memory_forgetA
DestructiveIdempotent

Delete a memory flagged by memory_check_freshness that is no longer relevant or accurate. Use this instead of memory_delete when acting directly on a freshness check result.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUUID of the memory item to forget (delete)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate destructive and idempotent behavior. Description adds context that the tool targets 'no longer relevant or accurate' memories sourced from freshness checks, which is helpful beyond annotations.

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

Conciseness5/5

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

Two concise sentences with no wasted words. Front-loaded with the core action and resource, then immediately follows with usage guidance.

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

Completeness5/5

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

For a single-parameter destructive tool with good annotations, the description fully covers purpose, usage context, and relationship to alternatives. No gaps in what an agent needs to know.

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?

Only one parameter 'id' with full schema description. Description does not add extra meaning beyond the schema, meeting the baseline for 100% schema coverage.

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

Purpose5/5

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

Description clearly specifies the action ('Delete') and the specific resource ('memory flagged by memory_check_freshness'). Explicitly distinguishes from sibling tool memory_delete, which is a nearby alternative.

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

Usage Guidelines5/5

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

Description explicitly states when to use this tool ('when acting directly on a freshness check result') and directs to use memory_delete otherwise, providing clear guidance.

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

memory_helpA
Read-onlyIdempotent

Show help and usage instructions for ContextForge memory commands

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds no extra behavioral context. It does not contradict annotations. With annotations covering safety, a score of 3 is appropriate.

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?

Single sentence, zero waste. Front-loaded with key action and scope. Perfectly concise.

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 zero-parameter help tool, the description is sufficient. It could optionally mention output format, but not necessary. Annotations cover safety. Minor gap: no mention of interactivity.

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

Parameters4/5

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

No parameters exist (0 params), so schema coverage is 100%. According to guidelines, baseline is 4. Description adds no parameter info but none is needed.

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

Purpose5/5

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

Description clearly states it shows help and usage instructions for memory commands. Verb 'show' and resource 'help' are specific. Given sibling tools are all memory commands, this distinguishes itself as the help command.

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 purpose is clear: use when you need help with memory commands. No explicit when-not-to-use or alternatives, but the context is obvious from the name and sibling list. Adequate for a zero-parameter help tool.

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

memory_ingestA

Save important context to persistent memory — be proactive. Call this WHENEVER you learn information that would be valuable in a future conversation: project decisions ('we chose Postgres because X'), architectural choices, user preferences, debugging insights, recurring patterns, deadlines, stakeholder context, or any 'remember this' / 'save this' / 'note that' style request from the user. Heuristic: if you would be sad to lose this fact when the conversation ends, ingest it. Better to over-save than to under-save — the memory_query semantic search will surface what's relevant later. Always pass meaningful title and tags so the item is discoverable. Set deduplicate:false to save even if identical content already exists. ROUTE BY TOPIC: pass space:"<name>" matching the memory's topic so it lands in the right space instead of the catch-all default. If you don't yet know the project's spaces, call cf_tools with query "list spaces" once and reuse the result. Saving without space: piles everything into one default space — avoid it in multi-space projects.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOptional tags for categorization
titleNoOptional title for the content
contentYesThe content to store in memory
categoryNoOptional category
space_idNoSpace UUID (uses default if not specified)
source_uriNoOptional source URI (file path, URL, etc.)
deduplicateNoSkip saving if identical content already exists (default: true). Set to false to force a copy even when a duplicate is detected.
source_typeNoType of source (default: manual)
related_pathsNoFiles/dirs this memory is about (e.g. ["src/api.ts"]). Enables staleness detection when that code changes.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already signal read/write behavior (readOnlyHint=false, destructiveHint=false), and the description adds meaningful behavioral context: deduplication semantics (default true, with guidance to set false), and the consequence of omitting space (piles into default space). It also implies long-term persistence and retrieval via semantic search. No contradiction detected; only minor missing detail like side effects on existing entries, but not required given annotations.

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 long but tightly structured with bold headings, front-loading the core purpose and examples, then routing guidance. Every sentence earns its place; no fluff or repetition. The length is justified by the tool's complexity and the need to convey proactivity and space routing.

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 the complexity (9 params, multiple behaviors) and absence of an output schema, the description covers when to use, what to save, parameter priorities, space routing, deduplication, and how to discover spaces. No critical missing information. The only minor gap is return behavior, but without an output schema that's not required. Complete for effective use.

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

Parameters4/5

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

Schema covers 100% of parameters, so baseline is 3. The description adds value by emphasizing meaningful title and tags for discoverability, explaining space_id's role via 'pass space:'<name>'' and default fallback, and clarifying deduplicate behavior. Not all parameters are elaborated (source_uri, related_paths), but those are self-explanatory and don't require extra context. This exceeds the baseline.

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

Purpose5/5

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

The description states a specific verb ('save'), a resource ('persistent memory'), and a clear scope: information valuable for future conversations, with concrete examples like project decisions and user preferences. It also conveys proactivity and distinguishes itself from memory_query by noting that query will later surface what was saved. This fully differentiates the tool's purpose.

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

Usage Guidelines5/5

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

Provides explicit when-to-use guidance ('Call this WHENEVER...'), a decision heuristic ('if you would be sad to lose this fact'), and preference for over-saving. It also gives routing instructions with spaces, including how to discover spaces via cf_tools, and warns against default-space usage in multi-space projects. This is exceptionally actionable.

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

memory_queryA
Read-onlyIdempotent

Search persistent memory BEFORE answering any project-specific question. You MUST call this tool: (a) at the start of any conversation that touches the user's codebase, work, or decisions, BEFORE generating any response; (b) whenever the user references prior context ('did we', 'we decided', 'remember', 'what did I save', 'last time'); (c) before making architectural or design recommendations — the user's prior decisions live here. Returns semantically relevant stored content. Skipping this when relevant context exists makes you appear to have amnesia and is the #1 reason users abandon persistent memory — always check first, even if you think you remember.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results (1-50, default: 10)
queryYesThe search query
filtersNoOptional filters
space_idNoSpace UUID (uses default if not specified)
min_scoreNoMinimum similarity score (0-1, default: 0.3)
project_idNoFilter to spaces within this project (auto-set from linked project if not specified)
include_relationshipsNoInclude related items (default: false)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and idempotentHint=true. Description adds that it returns semantically relevant content and must be called even if the AI thinks it remembers, which goes beyond the annotations.

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

Conciseness3/5

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

The description is verbose with imperative instructions and repeated emphasis on the consequences of skipping. While informative, it could be more concise and front-loaded.

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?

The description thoroughly covers the tool's role and usage context despite the lack of an output schema. It compensates for the missing return value documentation by stressing the importance of the tool.

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 does not add extra meaning beyond the schema's parameter descriptions, focusing instead on usage context.

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

Purpose5/5

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

The description explicitly states 'Search persistent memory' and instructs when to use it before answering project-specific questions, clearly distinguishing it from siblings like memory_get_item or memory_list_items.

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

Usage Guidelines5/5

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

Provides explicit conditions: at conversation start, when prior context is referenced, before architectural decisions. Includes warnings about consequences of skipping, fulfilling the 'when-not' and 'alternatives' implicitly by omission.

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

session_listA

List OTHER live Claude Code sessions working on the same project right now, and what each is focused on. By default it is scoped to THIS session's project (the one linked in the current directory) — that's where work actually collides. If the current directory isn't linked to a project, it falls back to the whole organization. Use it at conversation start and before big changes to avoid stepping on parallel sessions. Pass a specific project to scope elsewhere, or all_projects: true to see every session across the organization. Sessions expire automatically ~10 minutes after their last heartbeat.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoScope to a specific project id or name instead of the current one
all_projectsNoList sessions across the whole organization instead of just the current project. Ignored when `project` is also provided.
include_staleNoAlso include sessions whose heartbeat is older than the 10-minute TTL

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries full burden and discloses key behaviors: sessions expire ~10 min after last heartbeat, default scoping to the current project, fallback to organization if no project linked, and parameter interactions. No contradictions.

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 a moderate-length paragraph with key information front-loaded. Each sentence adds value, and there is no redundant or repetitive content. Could be slightly more concise, but overall efficient.

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 no output schema, the description provides sufficient context about behavior and parameter effects. It mentions that the tool shows 'what each is focused on,' hinting at output structure. For a listing tool, it covers the major aspects needed for correct invocation.

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

Parameters4/5

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

Schema coverage is 100% with individual parameter descriptions. The description adds extra semantics, such as explaining that `all_projects` is ignored when `project` is provided, which goes beyond the schema. It also clarifies default behavior for scoping.

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 starts with a specific verb and resource: "List OTHER live Claude Code sessions working on the same project right now, and what each is focused on." It clearly distinguishes from sibling tools like session_end and session_update, and no other tool lists live sessions.

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

Usage Guidelines4/5

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

The description explicitly states when to use the tool: "Use it at conversation start and before big changes to avoid stepping on parallel sessions." It also explains default scoping and fallback behavior. However, it does not explicitly mention when not to use it or contrast with alternatives.

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

tasks_listA
Read-onlyIdempotent

Call this at the start of any conversation about work, planning, or status — and any time the user asks about pending/open/in-progress tasks. Shows pending tasks by default (sort by due date, urgent first). Use status "all" for everything, "resolved" for completed, "in_progress" for active work. IMPORTANT: Every task includes a dashboard URL (🔗). You MUST include these clickable links when presenting tasks to the user. If you see overdue tasks (past due date), surface them at the top of your response.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of tasks (1-100, default: 20)
scopeNo"mine" shows only tasks assigned to or created by you (default), "all" shows all tasks in your organization/shared projects
statusNoFilter by status (default: pending)
project_idNoFilter by project UUID (optional)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable behavioral details such as default sorting, surfacing overdue tasks, and the requirement to include clickable dashboard URLs, which go beyond annotations.

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 informative but slightly lengthy. However, critical usage instructions are front-loaded in bold, and the rest is structured logically. A minor improvement would be to trim redundant phrasing, but it remains clear and effective.

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 no output schema, the description covers key behaviors: default view, sorting, status filtering, and the critical requirement to include dashboard links and surface overdue tasks. It provides sufficient context for an agent to use the tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds extra meaning by explaining default for status (pending) and that overdue tasks should be surfaced. It also highlights the dashboard URL, though not a parameter, it informs output handling.

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

Purpose5/5

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

The description clearly states the tool lists tasks, with specific verb 'call' and resource 'tasks'. It distinguishes from sibling task tools (like tasks_create) by focusing on listing. It also specifies default behavior (pending, sorted by due date, urgent first) and optional filters.

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

Usage Guidelines5/5

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

Explicitly instructs when to call: 'at start of any conversation about work, planning, or status — and any time the user asks about pending/open/in-progress tasks.' It also explains how to use status parameter and emphasizes including dashboard links.

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

tasks_what_nextA
Read-onlyIdempotent

Call this whenever the user asks what they should work on, what's next, what's pending, or how to start the day. Trigger phrases include: 'what should I do', 'where do I start', 'qué hago hoy', 'next task', 'I have time, what's open'. Returns the highest-priority unresolved task assigned to the user, with due date and priority. Always include the dashboard URL (🔗) in your reply so the user can click through. Prefer this over generic answers when the user seems unsure about priorities — it gives a concrete next action.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. Description adds that it returns highest-priority unresolved task with due date and priority, and instructs to include dashboard URL. No additional behavioral details beyond annotations, but enough for safe use.

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?

Concise, front-loads purpose and trigger phrases. Could be slightly tighter, but each sentence adds value. No redundancy.

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 tool with no parameters and no output schema, the description covers purpose, trigger phrases, output content, and best practices. Missing explicit mention of error cases or edge conditions, but adequate.

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

Parameters4/5

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

No parameters, so baseline 4. Description doesn't need to add parameter info. Mentions output format briefly, which is helpful.

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

Purpose5/5

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

Description clearly states the tool returns the highest-priority unresolved task for the user, with explicit trigger phrases and usage context. Distinguishes from sibling tools like tasks_list or tasks_create by focusing on 'what's next' rather than general task operations.

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

Usage Guidelines4/5

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

Provides explicit trigger phrases and advises preferring this over generic answers when user seems unsure. Lacks explicit 'do not use for' conditions, but context from sibling tools implies boundaries. Slight gap in completeness.

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. 60 tool updatesv1.0.11
    • Addedcf_tools
    • Removedcollaborators_list
    • Removedmemory_create_project
    • Removedmemory_create_space
    • Removedmemory_current_project
    • Removedmemory_delete
    • Removedmemory_delete_batch
    • Removedmemory_delete_project
    • Removedmemory_delete_space
    • Removedmemory_export
    • Removedmemory_get_item
    • Removedmemory_git_activate
    • Removedmemory_git_commits
    • Removedmemory_git_connect
    • Removedmemory_git_disconnect
    • Removedmemory_git_list
    • Removedmemory_git_prs
    • Removedmemory_git_sync
    • Removedmemory_import
    • Removedmemory_ingest_batch
    • Removedmemory_link_project
    • Removedmemory_list_items
    • Removedmemory_list_projects
    • Removedmemory_list_relationships
    • Removedmemory_list_spaces
    • Removedmemory_move_item
    • Removedmemory_move_space
    • Removedmemory_relate
    • Removedmemory_snapshot_create
    • Removedmemory_snapshot_delete
    • Removedmemory_snapshot_list
    • Removedmemory_snapshot_restore
    • Removedmemory_stats
    • Removedmemory_unlink_project
    • Removedmemory_update
    • Removedproject_share
    • Removedroutines_create
    • Removedroutines_delete
    • Removedroutines_get
    • Removedroutines_list
    • Removedroutines_run_now
    • Removedroutines_toggle
    • Removedroutines_update
    • Removedsession_end
    • Removedsession_update
    • Removedskills_create
    • Removedskills_delete
    • Removedskills_get
    • Removedskills_list
    • Removedskills_run
    • Removedskills_update
    • Removedtasks_add_comment
    • Removedtasks_assign
    • Removedtasks_create
    • Removedtasks_delete
    • Removedtasks_list_comments
    • Removedtasks_resolve
    • Removedtasks_resolve_by_name
    • Removedtasks_start
    • Removedtasks_update
  2. 2 tool updatesv1.0.9
    • Addedmemory_move_item
    • Addedmemory_update
  3. 5 tool updatesv1.0.6
    • Addedmemory_check_freshness
    • Addedmemory_confirm
    • Addedmemory_correct
    • Addedmemory_forget
    • Changedmemory_ingest2 fields changed
      • addedInput schema / properties / deduplicate
        Added value: +{
        +  "description": "Skip saving if identical content already exists (default: true). Set to false to force a copy even when a duplicate is detected.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / related_paths
        Added value: +{
        +  "description": "Files/dirs this memory is about (e.g. [\"src/api.ts\"]). Enables staleness detection when that code changes.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  4. 3 tool updatesv1.0.5
    • Addedsession_end
    • Addedsession_list
    • Addedsession_update
  5. 60 tool updatesv1.0.4
    • Addedcollaborators_list
    • Addedmemory_create_project
    • Addedmemory_create_space
    • Addedmemory_current_project
    • Addedmemory_delete
    • Addedmemory_delete_batch
    • Addedmemory_delete_project
    • Addedmemory_delete_space
    • Addedmemory_export
    • Addedmemory_get_item
    • Addedmemory_git_activate
    • Addedmemory_git_commits
    • Addedmemory_git_connect
    • Addedmemory_git_disconnect
    • Addedmemory_git_list
    • Addedmemory_git_prs
    • Addedmemory_git_sync
    • Addedmemory_help
    • Addedmemory_import
    • Addedmemory_ingest
    • Addedmemory_ingest_batch
    • Addedmemory_link_project
    • Addedmemory_list_items
    • Addedmemory_list_projects
    • Addedmemory_list_relationships
    • Addedmemory_list_spaces
    • Addedmemory_move_space
    • Addedmemory_query
    • Addedmemory_relate
    • Addedmemory_snapshot_create
    • Addedmemory_snapshot_delete
    • Addedmemory_snapshot_list
    • Addedmemory_snapshot_restore
    • Addedmemory_stats
    • Addedmemory_unlink_project
    • Addedproject_share
    • Addedroutines_create
    • Addedroutines_delete
    • Addedroutines_get
    • Addedroutines_list
    • Addedroutines_run_now
    • Addedroutines_toggle
    • Addedroutines_update
    • Addedskills_create
    • Addedskills_delete
    • Addedskills_get
    • Addedskills_list
    • Addedskills_run
    • Addedskills_update
    • Addedtasks_add_comment
    • Addedtasks_assign
    • Addedtasks_create
    • Addedtasks_delete
    • Addedtasks_list
    • Addedtasks_list_comments
    • Addedtasks_resolve
    • Addedtasks_resolve_by_name
    • Addedtasks_start
    • Addedtasks_update
    • Addedtasks_what_next

TDQS

A4.3/5.0

Scored across 11 tools

Disambiguation4/5

Most tools have clear, distinct roles: memory ingest/query/freshness tools, task list/next tools, session list, and the catch-all cf_tools. There is mild overlap between tasks_list and tasks_what_next, and cf_tools can serve as an alternate entry point for capabilities, but the descriptions provide strong usage triggers.

Naming Consistency4/5

The tools mostly follow a clear prefix-plus-verb pattern like memory_ingest, memory_query, tasks_list, and session_list. The main inconsistency is cf_tools, which breaks the naming convention, and memory_help/tasks_what_next are slightly less verb-oriented, but the overall pattern is still readable.

Tool Count5/5

With 11 primary tools, the visible surface is well-scoped and within the ideal range for an MCP server. The cf_tools meta-tool cleverly keeps the count manageable while exposing 59 additional capabilities, so the apparent tool count matches the server's core workflows.

Completeness4/5

The memory lifecycle is well covered with ingest, query, freshness checking, confirm, correct, and forget, and task/session reading is present. General memory updates/deletes and task editing are not first-class tools but are accessible through cf_tools, which creates a minor discoverability gap rather than a true dead end.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    MCP server that provides cross-session persistent memory for AI coding assistants using local vector database and semantic search, enabling automatic recall of project context, issues, and tasks.
    9
    91
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Persistent memory server for AI assistants with semantic search and three-layer context (global, project, personality). Works with MCP-compatible AI tools like Claude Code, Cursor, Continue, Cline, and more.
    1
    -