Skip to main content
Glama

Continuum

OS de engenharia com IA, local-first — memória persistente para agentes via MCP.

One memory. Every agent. Continuous engineering.

English summary · Privacidade · Licença MIT

O que é

O Continuum guarda decisões, contexto de projeto e estado útil para agentes de IA (Cursor e outros) num banco SQLite local. Expõe:

  • CLI continuum (init, doctor, projetos, memória, git read-only)

  • Servidor MCP stdio para o agente chamar ferramentas de memória e git

Tudo roda na sua máquina. Sem cloud Continuum, sem telemetria.

Related MCP server: AgentMemory Offline

Local-first e privacidade

  • Sem banco na nuvem — dados em ~/.continuum/ (override: CONTINUUM_HOME)

  • Zero telemetria — o Continuum não phone-home

  • Offline por padrão — nada sai da máquina sem ação explícita sua

  • Cursor / LLM — o modelo e a conta do Cursor (ou outro host) são separados do Continuum; o Continuum só oferece ferramentas MCP locais

Detalhes: PRIVACY.md.

~/.continuum/
  config.toml
  continuum.db
  logs/
  cache/
  backups/

Estado do projeto

Já funciona (MVP + roadmap A–G + polish):

  • SQLite local + CRUD de memória + busca lexical (FTS5)

  • Embeddings locais via Ollama + vector store SQLite (BLOB) + busca híbrida

  • Indexador de repositório (continuum index / continuum project index)

  • Context assembler (project_context com seções compactas)

  • Knowledge graph em SQLite (entities / relationships) + CLI/MCP + UI com filtros

  • Política de branch/commit (Conventional Commits, quality gates; sem force push)

  • GitHub PRs (token via GITHUB_TOKEN / keyring; merge só com --approve)

  • Handoff de sessão + auto-detect DECISION/CONSTRAINT + supersede em conflito

  • Explorer web (apps/web Vue+Vite + continuum serve em :8787)

  • App desktop Windows (continuum desktop / atalho com ícone)

  • Projetos + CLI e MCP stdio + logging JSON local

Adiado: Neo4j, sync multi-dispositivo (ver abaixo), merge automático em main. Publicação PyPI está preparada (uv build / uv publish) e exige token.

Requisitos

  • Python 3.12+

  • uv (desenvolvimento / clone)

  • Git no PATH (ferramentas git)

Instalação

Usuário final (quando publicado no PyPI)

pip install continuum
# ou
uv tool install continuum

Depois o comando continuum fica no PATH.

Desenvolvimento / clone (agora)

git clone https://github.com/matheusxdev/continuum.git
cd continuum
uv sync --extra dev

Instalação editável a partir do git (sem clonar manualmente):

uv pip install "git+https://github.com/matheusxdev/continuum.git"
# ou
pip install "git+https://github.com/matheusxdev/continuum.git"

Embeddings com Ollama (recomendado)

  1. Instale e inicie o Ollama.

  2. Puxe um modelo de embedding:

ollama pull nomic-embed-text
  1. Em ~/.continuum/config.toml:

embedding_provider = "ollama"
embedding_model = "nomic-embed-text"
ollama_base_url = "http://127.0.0.1:11434"
  1. Confirme: continuum doctor (Ollama + Embedding model OK). memory_save passa a gerar embeddings; memory search --mode hybrid|semantic usa o vetor. Se o Ollama estiver offline, a busca degrada para lexical sem falhar.

Quick start

uv run continuum init
uv run continuum doctor
uv run continuum project add .
uv run continuum memory save "Decidimos continuar com Vue + Vite" --type DECISION
uv run continuum memory search "Vue"
uv run continuum index
uv run continuum git status
uv run continuum project context

Com o pacote já no PATH (pip install / uv tool install):

continuum init
continuum doctor
continuum project add .
continuum mcp

Cursor — configuração MCP

Recomendado (pacote instalado no PATH)

{
  "mcpServers": {
    "continuum": {
      "command": "continuum",
      "args": ["mcp"]
    }
  }
}

Desenvolvimento com uv (caminho do clone)

Substitua o diretório pelo caminho absoluto do repositório na sua máquina:

Windows

{
  "mcpServers": {
    "continuum": {
      "command": "uv",
      "args": ["run", "--directory", "C:/path/to/continuum", "continuum", "mcp"]
    }
  }
}

macOS / Linux

{
  "mcpServers": {
    "continuum": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/continuum", "continuum", "mcp"]
    }
  }
}

Há um exemplo em .cursor/mcp.json no repositório (forma PATH).

Ferramentas MCP

Tool

Modo

Descrição

memory_save

mutating

Persistir memória

memory_search

read-only

Busca híbrida (lexical + semântica)

memory_semantic_search

read-only

Só vetor (Ollama)

memory_get / memory_update / memory_delete / memory_recent

CRUD

memory_supersede

mutating

Marcar memória como SUPERSEDED

project_* / project_context

Projetos + contexto em seções

git_* / branch_* / commit_*

Git seguro (sem force push)

entity_* / graph_traverse

read-only

Knowledge graph

pr_* / push_branch

mutating

GitHub PRs (merge exige approve)

session_handoff

read-only

Resumo de handoff

Explorer web (mínimo)

cd apps/web && npm install && npm run build
uv run continuum serve   # http://127.0.0.1:8787
# ou só o front em dev:
cd apps/web && npm run dev   # proxy /api → :8787

App desktop (Windows)

Janela dedicada (WebView2) com a mesma UI de http://127.0.0.1:8787 — sem depender de uma aba do navegador, e pode ir para a barra de tarefas.

# 1) Build da UI (se ainda não tiver apps/web/dist)
cd apps/web; npm install; npm run build; cd ../..

# 2) Dependência pywebview + abrir
uv sync --extra desktop
uv run continuum desktop
# ou:
.\scripts\continuum-desktop.ps1

O comando sobe continuum serve em segundo plano só se a porta 8787 estiver livre. Ao fechar a janela, encerra apenas o servidor que ele mesmo iniciou.

Fixar na barra de tarefas

# Gera assets/continuum.ico (se faltar) e cria Continuum.lnk na Área de trabalho
.\scripts\continuum-desktop.ps1 -InstallShortcut
# Também no Menu Iniciar:
.\scripts\continuum-desktop.ps1 -InstallShortcut -StartMenuAlso

Depois abra o atalho uma vez e, na barra de tarefas, botão direito → Fixar na barra de tarefas. Ícone: assets/continuum.ico.

Requisito: WebView2 Runtime (já presente na maioria dos Windows 10/11).

Indexar repositório

Indexa README / markdown / código (respeita denylist: .env, node_modules, .git, secrets), grava chunks como memórias PROJECT_CONTEXT e gera embeddings quando Ollama está ativo. Incremental por hash.

uv run continuum index
uv run continuum project index
uv run continuum index --force   # reindexar tudo

Sync multi-dispositivo (adiado)

Sync entre máquinas não entra no escopo atual: quebraria o modelo local-first (sem cloud Continuum, sem telemetria). Continuidade entre PCs fica para um desenho futuro explícito (export/import opt-in ou sync peer-to-peer), nunca automático. Use backup de ~/.continuum/ se precisar mover dados.

Layout do código

src/continuum/
  apps/cli/          CLI (Typer)
  apps/mcp/          MCP stdio
  apps/desktop/      Shell pywebview (Windows)
  apps/webapi/       API local do explorer
  core/memory/       Memória + hybrid search
  core/embeddings/   Ollama / null providers
  core/vector/       SQLite BLOB vector store
  core/graph/        Knowledge graph
  core/context/      Context assembler
  core/indexer/      Repository indexer
  core/git/          Git + commit policy + quality gates
  core/github/       GitHub PRs
  core/handoff/      Handoff + auto-type + supersede
  database/          Schema + migrations
  config/            Paths, settings, logging
apps/web/            Vue + Vite explorer
assets/              continuum.ico
scripts/             Launchers (desktop.ps1 / .bat / generate_ico)
docs/                ADRs

Testes e build

uv sync --extra dev
uv run pytest
uv build

Artefatos em dist/ (wheel + sdist).

Publicar no PyPI (quando tiver token)

Não publique sem UV_PUBLISH_TOKEN / credenciais configuradas.

uv build
uv publish

Alternativa com Twine:

uv build
uv run twine upload dist/*

Crie um token em https://pypi.org/manage/account/token/ e use TestPyPI primeiro se preferir:

uv publish --publish-url https://test.pypi.org/legacy/

Spec / roadmap


English summary

Continuum is a local-first AI Engineering OS: persistent agent memory over local SQLite (~/.continuum), with a Typer CLI and MCP stdio server for Cursor and other hosts. No Continuum cloud DB, no telemetry. The Cursor/LLM provider is separate from Continuum itself.

Install (when on PyPI): pip install continuum
Dev now: git cloneuv sync --extra devuv run continuum init

See PRIVACY.md for privacy guarantees. MIT licensed.

Available Tools

14 tools
branch_listB
Read-onlyIdempotent

List local git branches and mark protected ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the useful behavioral detail that protected branches are flagged in the output, but it never explains what 'protected' means or whether the marking depends on configuration.

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?

A single front-loaded sentence with zero waste; the verb and resource come first and the extra output detail follows immediately.

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

Completeness3/5

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

An output schema exists, so return values need not be described, and the operation is simple. However, the lone parameter is undocumented and there is no guidance on repository context, leaving gaps an agent must guess at.

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

Parameters2/5

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

Schema description coverage is 0%: the single 'path' parameter has only a title and a null default, with no explanation. The description does not compensate at all — it never clarifies that 'path' selects the repository directory, leaving the one parameter effectively undocumented.

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

Purpose4/5

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

States a specific verb and resource ('List local git branches') plus an output behavior ('mark protected ones'), which distinguishes it from git_status, git_diff, and git_log. It does not explicitly name a sibling or scope boundary, so it falls just short of 5.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of alternatives such as git_status or git_log. The agent must infer from the name alone that this is the branch-enumeration tool.

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

git_diffA
Read-onlyIdempotent

Git diff (unstaged by default; set staged=true for index). Large diffs are truncated.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
stagedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so safety is covered. The description adds a genuinely useful behavioral trait the annotations cannot convey: 'Large diffs are truncated,' which warns the agent that output may be incomplete and should be scoped with path. No auth or rate-limit context, but truncation disclosure is meaningful added value.

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, no filler, with the default-mode scoping front-loaded and the truncation caveat last. Every clause 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?

An output schema exists, so return values need not be described. The description covers default mode, the staged variant, and the truncation risk, which is nearly everything an agent needs — the only real gap is any explanation of the `path` parameter's purpose.

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 0% schema description coverage, the description must carry parameter meaning. It explains `staged` well (default false, true selects the index), but says nothing about `path`, leaving half of the parameters undocumented in both schema and description.

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

Purpose4/5

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

States a specific tool and resource (git diff) plus its default operating mode, which lets an agent distinguish it from git_status/git_log without reading the schema. However, it never explicitly contrasts itself with those siblings, so it stops short of full differentiation.

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 parenthetical 'unstaged by default; set staged=true for index' gives a clear condition for choosing each mode, which is real usage guidance. It offers no exclusions or named alternatives (e.g., when to prefer git_status or git_log instead), so it is clear context rather than full when/when-not guidance.

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

git_logC
Read-onlyIdempotent

Recent commit log.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds only the vague scope word 'recent' and discloses nothing about pagination, default limits, or output shape that would go beyond structured data.

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

Conciseness2/5

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

The description is a single three-word phrase, which is front-loaded but under-specified rather than concise. It omits necessary information for an agent to determine scope and parameter usage, so the brevity does not earn its place.

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

Completeness2/5

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

For a simple git log tool, the description omits essential context about the path and limit parameters and when to use this versus related git tools. Annotations and an output schema cover safety and return values, but the remaining gaps leave the definition incomplete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for two undocumented parameters (path, limit), but it says nothing about either. The word 'recent' loosely hints at a limit, but there is no useful semantics regarding what path means or how limit is applied.

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

Purpose4/5

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

The description states a clear resource (commit log) and a scope (recent), so an agent can tell this returns recent commits. It does not differentiate itself from sibling git tools like git_status or git_diff, which is why it falls short of a 5.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool instead of alternatives such as git_status or git_diff. The implied use case is viewing commit history, but no conditions or exclusions are given.

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

git_statusB
Read-onlyIdempotent

Git status with protected-branch detection (main/master/production).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the protected-branch detection behavior, but is ambiguous about what that means in practice — does it merely report or does it warn/block? That ambiguity is worth noting for an agent interpreting output.

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?

A single tight sentence with the core purpose front-loaded and no padding. It is appropriately sized, though the brevity comes at the cost of usage context rather than being efficiently informative.

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

Completeness3/5

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

An output schema exists, so return-value explanation is not required, and annotations cover the safety profile. However, the undocumented path parameter and the vague protected-branch behavior leave real gaps for an agent calling this tool.

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

Parameters2/5

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

There is one parameter (path) with 0% schema description coverage, and the description says nothing about it — whether it is a repo directory, a file filter, or relative to cwd. The description fails to compensate for the schema gap.

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

Purpose4/5

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

States a specific verb and resource ('Git status') plus the distinguishing feature (protected-branch detection), which separates it from siblings git_diff and git_log. It is clear what the tool reports, though it doesn't explicitly contrast itself with those siblings.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no prerequisites (e.g., must be in a git repo), and no indication of when to prefer git_diff, git_log, or branch_list instead. Usage must be inferred entirely from the name.

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

memory_deleteA
DestructiveIdempotent

Delete a memory. Requires confirm=true (high-risk).

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
memory_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: a confirm=true gate that is not encoded as a required parameter in the schema, telling the agent a second flag must be set for this high-risk action.

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 short sentences, front-loaded with the action and followed by the gating requirement. Nothing is wasted and no filler is present.

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?

An output schema exists, so return values need not be described, and the annotations carry the safety profile. The description supplies the key missing operational detail (confirm gate). Only minor gaps remain, such as what happens if confirm is omitted or false.

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 0% and only titles are present, so the description must compensate. It usefully explains the confirm flag (must be true, because high-risk), but says nothing about memory_id beyond what the name implies, leaving half the parameters essentially undocumented.

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

Purpose4/5

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

States a specific verb (Delete) and resource (a memory), which clearly distinguishes it from siblings like memory_save, memory_update, and memory_search. No explicit sibling contrast, but the operation is unambiguous.

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

Usage Guidelines3/5

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

The description gives a concrete prerequisite ('Requires confirm=true') and flags the operation as high-risk, which implies when it should be used. It does not, however, contrast with alternatives (e.g., memory_update for editing) or state when deletion is inappropriate.

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

memory_getC
Read-onlyIdempotent

Get a memory by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond this – no note on what happens if the id is missing, no error behavior, no return context. With an output schema present, return format is partially covered, but the description still contributes little.

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?

One short sentence that is front-loaded and waste-free. Appropriate for a simple lookup tool, though it could include a bit more without becoming verbose.

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

Completeness3/5

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

For a single-parameter read tool with an output schema and strong annotations, the description is minimally adequate. However, it lacks any guidance on error behavior (e.g., invalid id) or how the id is obtained, leaving gaps that an agent might need to call it correctly.

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 0%, so the description should ideally clarify the memory_id format or source. It merely says 'by id' without explaining whether the id comes from memory_save or memory_search, so it adds minimal value over the schema's bare type declaration. Baseline 3 given one required param and output schema, but opportunity missed.

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

Purpose4/5

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

States a clear verb (get) and resource (memory) with the lookup key (id), distinguishing it from memory_save/update/delete/search/recent. It does not explicitly name how it differs from sibling tools, keeping it just below a 5.

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

Usage Guidelines2/5

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

No when-to-use guidance, no mention of alternatives like memory_search for retrieval by query, and no prerequisites. The agent must infer usage entirely from the tool name.

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

memory_recentB
Read-onlyIdempotent

List recent memories for the current or given project.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
project_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered without the description. The description adds one genuinely useful behavior: omitting project_id falls back to the current project. It says nothing about ordering, limit behavior, or how many results come back, but with annotations in place a 3 is fair.

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?

A single short sentence with no filler, and the resource is front-loaded. It is efficient, though bordering on under-specified rather than truly economical.

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

Completeness3/5

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

An output schema exists, so return values need not be explained. However, for a listing tool with an undocumented limit parameter and no statement of ordering or default result count, the description leaves the agent guessing on operational details.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the parameter burden. It partially does so for project_id by implying 'current project' as the default, but the limit parameter (default 10) is never mentioned or explained, leaving half the inputs undocumented anywhere.

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

Purpose4/5

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

States a specific verb (List) and resource (recent memories) with the scope qualifier 'current or given project'. That is enough for an agent to tell it apart from memory_search or memory_get conceptually, but it never names or contrasts those siblings explicitly.

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

Usage Guidelines2/5

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

There is no statement of when to reach for this tool instead of memory_search, nor any prerequisite or exclusion. The word 'recent' hints at a time-ordered browse, but the choice between this and search is left entirely to inference.

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

memory_saveC

Save a persistent memory (decision, fact, preference, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoPROJECT
sourceNomcp
contentYes
summaryNo
confidenceNo
importanceNo
project_idNo
memory_typeNoFACT

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare this is a non-read-only, non-idempotent, non-destructive write. The description adds one genuine piece of context beyond that: the memory is 'persistent', implying durability across sessions. It says nothing about what persistence means operationally, whether repeated saves duplicate, or where the record lands, so it is only a modest addition.

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?

A single front-loaded sentence with zero filler or redundancy. It is efficient, though its brevity is part of why the surrounding semantics are missing.

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

Completeness2/5

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

An 8-parameter mutation tool with 0% schema coverage needs far more than one line. The presence of an output schema relieves it of explaining return values, but the storage semantics, parameter meanings, and save-vs-update routing are all absent.

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

Parameters2/5

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

Schema description coverage is 0% across 8 parameters, so the description must carry the load. The enumeration 'decision, fact, preference' loosely maps to the content/memory_type fields, but scope, source, summary, confidence, importance, and project_id are completely unexplained in either the schema or the description.

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

Purpose4/5

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

States a specific verb and resource ('Save a persistent memory') and enumerates the kinds of content it stores (decision, fact, preference). It is distinguishable from memory_search/memory_get/memory_delete by verb, though it never explicitly contrasts itself with memory_update.

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

Usage Guidelines2/5

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

No when-to-use guidance is given. With a sibling named memory_update, the key ambiguity for an agent — whether to save a new memory or update an existing one, and how duplicates are handled — is left entirely unaddressed.

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

memory_updateB

Update fields of an existing memory.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentNo
summaryNo
memory_idYes
confidenceNo
importanceNo
memory_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the agent knows this is a non-destructive update. The description does not add behavioral context such as whether omitted fields remain unchanged, whether the update is partial or full replacement, or what happens to confidence/importance defaults. It only minimally restates the mutation nature.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for a simple update tool.

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

Completeness2/5

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

Given six parameters, zero schema description coverage, and no output schema reference in the description, the definition is incomplete. It should clarify which fields are optional, how partial updates behave, and any constraints on values (e.g., memory_type options or confidence range), none of which are present.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain any parameter semantics. It mentions 'fields' but never enumerates or clarifies the six parameters (content, summary, confidence, importance, memory_type, memory_id). With no schema-level descriptions and no compensating text, the agent is left to infer parameter meaning from names alone.

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

Purpose4/5

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

The description uses a clear verb+resource: 'Update fields of an existing memory.' It distinguishes itself from memory_save (create) and memory_get (read). However, it is generic as to which fields may be updated, so the purpose is clear but not fully specific.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus siblings such as memory_save or memory_delete, nor any prerequisites or exclusions. The agent must infer that this should be used only for modifying an existing memory.

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

project_contextC
Read-onlyIdempotent

Return registered project context, git status, and recent memories.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
project_idNo
recent_limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the useful fact that three distinct data sources are combined into one response, but says nothing about selector precedence (path vs project_id) or behavior when neither is supplied.

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?

A single, front-loaded sentence with no filler, but it is under-specified rather than efficiently concise. The brevity comes at the cost of the usage and parameter detail an agent needs.

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

Completeness2/5

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

An output schema exists so return values need no explanation, but for a 3-param tool with 0% schema coverage and two alternative selectors, the description should clarify how path and project_id interact and what recent_limit does. That guidance is absent.

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

Parameters2/5

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

Schema description coverage is 0% and the description mentions none of the three parameters. 'path', 'project_id', and 'recent_limit' (which controls how many memories come back, directly relevant to the 'recent memories' claim) are left entirely undefined in both schema and description.

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

Purpose4/5

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

States a specific verb ('Return') and enumerates the resources returned: registered project context, git status, and recent memories. This distinguishes it as a composite/aggregate tool relative to siblings like git_status, project_get, and memory_recent, though it never explicitly says it aggregates them.

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

Usage Guidelines2/5

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

No guidance on when to use this composite tool versus calling the individual siblings (git_status, project_get, memory_recent) directly, and no mention of prerequisites or which selector is needed. Usage must be inferred entirely from the name and listed outputs.

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

project_getB
Read-onlyIdempotent

Get a project by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond that—no note on missing-ID errors, auth requirements, or lookup scope. With annotations covering safety, the description contributes almost nothing extra.

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?

A single short sentence with no wasted words, front-loading the action and resource. It is appropriately sized, though almost too terse to be maximally useful.

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 read of a single entity, an output schema exists so return values need not be described, and annotations cover the safety profile. The remaining gap is the absence of error/behavior guidance, which is minor for this 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 0%, but there is only one parameter (project_id) and its purpose is self-evident from its name. The phrase 'by id' confirms that project_id is the lookup key, matching the schema without adding format or constraint details.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('project') with the lookup key ('by id'), which distinguishes it implicitly from project_list and project_register. It is clear but does not explicitly differentiate itself from the sibling project tools.

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

Usage Guidelines2/5

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

Provides no guidance on when to use this tool versus project_list, project_context, or project_register, and no prerequisites or exclusions. The agent must infer usage from the name alone.

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

project_listB
Read-onlyIdempotent

List registered Continuum projects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is fully covered. The description adds nothing beyond that — no note on ordering, whether all projects or a page is returned, or how it relates to project_get's single-project lookup. With an output schema present, return-shape disclosure is not required, but the description contributes zero behavioral context.

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?

A single clause with no filler, front-loaded with the verb. For a zero-argument list tool this is appropriately sized.

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?

With a full output schema, complete annotations, and no parameters, the definition supplies nearly everything an agent needs. The only gap is relational context within the project_* family.

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?

The tool takes no parameters, so the baseline is 4. Schema coverage is 100% and there is nothing for the description to compensate for.

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

Purpose4/5

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

States a specific verb (List) and resource (registered Continuum projects), so the agent knows exactly what it returns. It does not differentiate itself from siblings like project_get or project_register, which also operate on projects, so it falls short of a 5.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus project_get, project_register, or project_context. The 'registered' qualifier hints at scope but the agent must infer that this is the enumeration entry point for the project family.

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

project_registerC
Idempotent

Register a local path as a Continuum project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say what happens on a duplicate registration, whether the name is auto-derived, or what errors can occur for an invalid path.

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?

A single front-loaded sentence with no filler; every word earns its place. It is appropriately terse, though it borders on under-specification rather than being a structural flaw.

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

Completeness2/5

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

An output schema exists so return values need not be described, but for a mutation tool with two fully undocumented optional parameters and no annotation coverage of duplicate/invalid-path behavior, the description leaves core call semantics unaddressed.

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

Parameters1/5

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

Schema description coverage is 0% for both parameters, and the description says nothing about 'name' or 'path' — not their format, not defaults, not whether both are optional and what happens if omitted. With two undocumented parameters, the description fails to compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb ('register') and resource ('a local path as a Continuum project'), so the core action is unambiguous. It does not differentiate itself from siblings like project_list/project_get/project_context, but the singular act of registering vs. listing/getting is inferable.

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

Usage Guidelines2/5

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

No guidance on when to use this versus project_get or project_list, no prerequisites (e.g., does the path need to be a git repo or contain certain files?), and no mention of what happens if the path is already registered. The agent must infer all usage conditions.

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. 14 tool updatesv0.1.0
    • First observedbranch_list
    • First observedgit_diff
    • First observedgit_log
    • First observedgit_status
    • First observedmemory_delete
    • First observedmemory_get
    • First observedmemory_recent
    • First observedmemory_save
    • First observedmemory_search
    • First observedmemory_update
    • First observedproject_context
    • First observedproject_get
    • First observedproject_list
    • First observedproject_register

TDQS

B3.4/5.0

Scored across 14 tools

Disambiguation5/5

Each tool targets a distinct resource+action: the memory_* family cleanly separates save/search/get/update/delete/recent, project_get vs project_context differ by scope, and git_status/git_diff/git_log/branch_list cover orthogonal git queries. No two tools appear to do the same thing, so an agent can select confidently.

Naming Consistency4/5

Most tools follow a consistent resource_verb snake_case pattern (memory_save, project_register, git_status). The lone deviation is branch_list, which drops the git_ prefix used by its sibling git tools, but overall readability remains high.

Tool Count5/5

14 tools split evenly across three coherent domains (memory, project, git) is well-scoped for a context/memory server. Each tool earns its place without redundancy.

Completeness4/5

Memory CRUD is fully covered (save/get/update/delete/search/recent) plus project lifecycle and git inspection. Minor gaps: no project update/unregister/delete or branch checkout/creation, but core workflows are workable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Local-first, auditable memory for AI agents. Provides durable context for MCP hosts with SQLite storage, CLI, and MCP tools for memory management.
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Gives coding agents a local, SQLite-backed memory of a codebase, enabling them to query symbol impact, change history, and task scope through MCP while recording what actually changed after edits.
    MIT