contextforge-mcp
ContextForge MCP gives AI assistants persistent, searchable memory plus project, task, GitHub, collaboration, snapshot, skill, and session-coordination capabilities.
Persistent memory: save, semantically search, list, update, correct, confirm, and delete knowledge items; ingest single or batch items; check memory freshness against git-tracked code changes.
Memory organization: create/list/move/delete spaces and projects; move items between spaces; link/unlink current directory to a project; view linked project.
Relationships & stats: relate memory items with typed relationships, list relationships, view memory usage stats.
GitHub integration: connect/disconnect repos, activate webhooks, sync commits/PRs, list synced commits and PRs.
Snapshots & import/export: create/list/restore/delete snapshots; export memory to JSON/Markdown/CSV; import from ContextForge, Markdown, Notion, or Obsidian formats.
Task tracking: create, list, update, start, resolve, assign, delete tasks; add/list comments; get next-task recommendations; filter by status/scope/project.
Collaboration: share projects by email, list collaborators and their assigned tasks.
Skills & routines: create/get/list/update/delete/run AI skills with prompt templates; schedule skills via routines with cron presets, toggle, run now, and delete routines.
Session presence: declare current work focus with session_update, list other live sessions per project or org, end session presence explicitly.
Allows syncing GitHub commits and pull requests into the memory system.
Provides persistent memory for GitHub Copilot, enabling knowledge retention across sessions.
ContextForge MCP — Persistent Memory for Claude, Cursor & Copilot
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
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-mcpis optional; if you do it, you can drop thenpx -yprefix from the commands below.
2. Get your API key
Go to contextforge.dev
Sign up (free tier available)
Settings → API Keys → Generate API Key
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-mcpRestart 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"
}
}
}
}4. Initialize your project (recommended)
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 initBy 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
SessionStarthook with matchercompactin.claude/settings.json. When Claude Code compacts a long conversation, the hook runsnpx -y contextforge-mcp recalland re-injects your project's 10 most recent memories and pending tasks, so decisions saved in ContextForge survive the summary.
Files written:
CLAUDE.mdfor Claude Code (signals: existingCLAUDE.mdor.claude/directory).cursorrulesfor Cursor (signals: existing.cursorrulesor.cursor/directory).claude/settings.jsonfor 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 |
| Generate only |
| Generate only |
| 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, versionPrints 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 recallAlready 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 launchYou 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 |
| Save knowledge to memory |
| Search your knowledge semantically |
| List all stored items |
| Remove specific items |
| Save multiple items at once |
| Delete items by filter |
Spaces & Projects
Tool | Description |
| List your spaces |
| Create a new space |
| Delete a space |
| Move space to project |
| List your projects |
| Create a new project |
| Delete a project |
| Link directory to project |
| Unlink directory |
| Show linked project |
GitHub Integration
Tool | Description |
| Connect a GitHub repo |
| List connected repos |
| Activate/deactivate webhook |
| Import existing history |
| List synced commits |
| List synced PRs |
| Disconnect a repo |
Issue Tracking
Tool | Description |
| List your issues |
| Create a new issue |
| Mark as in progress |
| Mark as resolved |
| Resolve by title |
| Assign to collaborator |
| Get recommendation |
Collaboration
Tool | Description |
| Share project by email |
| List collaborators |
Snapshots & Export
Tool | Description |
| Create a backup |
| List all snapshots |
| Restore from backup |
| Delete a snapshot |
| Export to JSON/MD/CSV |
| Import from file |
Utility
Tool | Description |
| View usage statistics |
| Link two items |
| 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 |
| Declare what this session is working on ("working on the auth module") |
| See other live sessions in the same project and their focus before touching shared areas (pass |
| 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 |
| Yes | Your API key from the dashboard |
| No | API endpoint (defaults to production) |
| No | Default space for operations |
| No |
|
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 devContributing
Issues and pull requests are welcome at github.com/alfredoizdev/contextforge-mcp.
Support
💬 Questions: support@contextforge.app
License
MIT © Alfredo Izquierdo
Available Tools
11 toolscf_toolsADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Arguments for the tool named in `name`. | |
| name | No | Exact tool name to execute, as returned by a previous `query` call. | |
| query | No | Plain-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
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.
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.
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.
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.
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.
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_freshnessARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| space_id | No | Space UUID (uses default if not specified) |
TDQS
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.
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.
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.
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.
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.
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_confirmAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | UUID of the memory item to confirm as still accurate |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | UUID of the memory item to correct | |
| content | Yes | The corrected, up-to-date content | |
| related_paths | No | Files/dirs this memory is about (e.g. ["src/api.ts"]). Refreshes staleness tracking for future checks. |
TDQS
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.
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.
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.
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.
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.
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_forgetADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | UUID of the memory item to forget (delete) |
TDQS
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.
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.
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.
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.
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.
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_helpARead-onlyIdempotent
Show help and usage instructions for ContextForge memory commands
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tags for categorization | |
| title | No | Optional title for the content | |
| content | Yes | The content to store in memory | |
| category | No | Optional category | |
| space_id | No | Space UUID (uses default if not specified) | |
| source_uri | No | Optional source URI (file path, URL, etc.) | |
| deduplicate | No | Skip saving if identical content already exists (default: true). Set to false to force a copy even when a duplicate is detected. | |
| source_type | No | Type of source (default: manual) | |
| related_paths | No | Files/dirs this memory is about (e.g. ["src/api.ts"]). Enables staleness detection when that code changes. |
TDQS
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.
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.
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.
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.
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.
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_queryARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (1-50, default: 10) | |
| query | Yes | The search query | |
| filters | No | Optional filters | |
| space_id | No | Space UUID (uses default if not specified) | |
| min_score | No | Minimum similarity score (0-1, default: 0.3) | |
| project_id | No | Filter to spaces within this project (auto-set from linked project if not specified) | |
| include_relationships | No | Include related items (default: false) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Scope to a specific project id or name instead of the current one | |
| all_projects | No | List sessions across the whole organization instead of just the current project. Ignored when `project` is also provided. | |
| include_stale | No | Also include sessions whose heartbeat is older than the 10-minute TTL |
TDQS
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.
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.
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.
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.
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.
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_listARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of tasks (1-100, default: 20) | |
| scope | No | "mine" shows only tasks assigned to or created by you (default), "all" shows all tasks in your organization/shared projects | |
| status | No | Filter by status (default: pending) | |
| project_id | No | Filter by project UUID (optional) |
TDQS
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.
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.
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.
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.
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.
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_nextARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
60 tool updates
v1.0.11- Added
cf_tools - Removed
collaborators_list - Removed
memory_create_project - Removed
memory_create_space - Removed
memory_current_project - Removed
memory_delete - Removed
memory_delete_batch - Removed
memory_delete_project - Removed
memory_delete_space - Removed
memory_export - Removed
memory_get_item - Removed
memory_git_activate - Removed
memory_git_commits - Removed
memory_git_connect - Removed
memory_git_disconnect - Removed
memory_git_list - Removed
memory_git_prs - Removed
memory_git_sync - Removed
memory_import - Removed
memory_ingest_batch - Removed
memory_link_project - Removed
memory_list_items - Removed
memory_list_projects - Removed
memory_list_relationships - Removed
memory_list_spaces - Removed
memory_move_item - Removed
memory_move_space - Removed
memory_relate - Removed
memory_snapshot_create - Removed
memory_snapshot_delete - Removed
memory_snapshot_list - Removed
memory_snapshot_restore - Removed
memory_stats - Removed
memory_unlink_project - Removed
memory_update - Removed
project_share - Removed
routines_create - Removed
routines_delete - Removed
routines_get - Removed
routines_list - Removed
routines_run_now - Removed
routines_toggle - Removed
routines_update - Removed
session_end - Removed
session_update - Removed
skills_create - Removed
skills_delete - Removed
skills_get - Removed
skills_list - Removed
skills_run - Removed
skills_update - Removed
tasks_add_comment - Removed
tasks_assign - Removed
tasks_create - Removed
tasks_delete - Removed
tasks_list_comments - Removed
tasks_resolve - Removed
tasks_resolve_by_name - Removed
tasks_start - Removed
tasks_update
2 tool updates
v1.0.9- Added
memory_move_item - Added
memory_update
5 tool updates
v1.0.6- Added
memory_check_freshness - Added
memory_confirm - Added
memory_correct - Added
memory_forget - Changed
memory_ingest2 fields changed- added
Input schema / properties / deduplicateAdded 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" +} - added
Input schema / properties / related_pathsAdded 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" +}
3 tool updates
v1.0.5- Added
session_end - Added
session_list - Added
session_update
60 tool updates
v1.0.4- Added
collaborators_list - Added
memory_create_project - Added
memory_create_space - Added
memory_current_project - Added
memory_delete - Added
memory_delete_batch - Added
memory_delete_project - Added
memory_delete_space - Added
memory_export - Added
memory_get_item - Added
memory_git_activate - Added
memory_git_commits - Added
memory_git_connect - Added
memory_git_disconnect - Added
memory_git_list - Added
memory_git_prs - Added
memory_git_sync - Added
memory_help - Added
memory_import - Added
memory_ingest - Added
memory_ingest_batch - Added
memory_link_project - Added
memory_list_items - Added
memory_list_projects - Added
memory_list_relationships - Added
memory_list_spaces - Added
memory_move_space - Added
memory_query - Added
memory_relate - Added
memory_snapshot_create - Added
memory_snapshot_delete - Added
memory_snapshot_list - Added
memory_snapshot_restore - Added
memory_stats - Added
memory_unlink_project - Added
project_share - Added
routines_create - Added
routines_delete - Added
routines_get - Added
routines_list - Added
routines_run_now - Added
routines_toggle - Added
routines_update - Added
skills_create - Added
skills_delete - Added
skills_get - Added
skills_list - Added
skills_run - Added
skills_update - Added
tasks_add_comment - Added
tasks_assign - Added
tasks_create - Added
tasks_delete - Added
tasks_list - Added
tasks_list_comments - Added
tasks_resolve - Added
tasks_resolve_by_name - Added
tasks_start - Added
tasks_update - Added
tasks_what_next
TDQS
Scored across 11 tools
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.
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.
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.
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
Related MCP Connectors
Private persistent memory for Claude, ChatGPT & Gemini via MCP - semantic search, zero-code setup.
- mcpOAuthai.butlerbrain
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
shared AI-context layer for teams — persistent memory your agents search and update over MCP
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP 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.991Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP Memory Server for Claude Code that provides persistent context across sessions using semantic search (RAG).Apache 2.0
- FlicenseNot gradedqualityDmaintenanceA persistent, conflict-aware memory MCP server for AI coding assistants (Cursor, Claude Code).-
- FlicenseNot gradedqualityDmaintenancePersistent 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-