Skip to main content
Glama

brain

Your local second brain for Claude, ChatGPT and any AI agent.

brain is an MCP server that runs on your Mac and gives your AI agents a shared memory: your notes, your projects, what they know about you and the web pages you saved, with semantic search. Connect it once to Claude, ChatGPT, Cursor or whatever agent you use, and they all read and write the same knowledge base. Everything stays on your computer.

It ships with a web dashboard so you never have to touch the terminal: turn services on and off, fill in your profile, import the memory other chatbots have about you, connect agents, explore the connection graph and search what you saved.

curl -fsSL https://raw.githubusercontent.com/Lautaro005/brain/main/install.sh | bash

Then type brain and the dashboard opens.

Website: https://lautaro005.github.io/brain/


Contents


Related MCP server: ClawMem MCP Server

What you can do

  • Let your agents know you. Write a profile (who you are, what you do, how you like to work) and import the memory ChatGPT, Claude or Gemini already have about you. Every connected agent reads it when it starts and saves anything new it learns with add_memory.

  • One knowledge base, shared by every agent. Markdown notes organized into projects and skills. What Claude writes today, ChatGPT can read tomorrow.

  • Save the web. Give brain a URL and it downloads the page, extracts the text (including sites built with JavaScript), indexes it and makes it available to semantic search: you search by meaning, not exact words.

  • See how everything connects. An interactive graph shows your profile, memories, projects, skills, sources and tags, and how they relate.

  • Undo anything. Every write goes into a version history. If an agent deletes or overwrites something, you get it back.

  • Private by design. Embeddings are computed on your machine with Ollama, and nothing leaves your computer.

Installation

Requirements: macOS (Apple Silicon or Intel) and git (xcode-select --install if you don't have it). The installer takes care of the rest.

curl -fsSL https://raw.githubusercontent.com/Lautaro005/brain/main/install.sh | bash

The installer:

  1. Installs uv if you don't have it (it manages Python and the dependencies without touching the system Python).

  2. Downloads brain into ~/.brain.

  3. Installs the dependencies and the headless Chromium used to scrape JavaScript sites.

  4. Installs Ollama with Homebrew if needed, and pulls the nomic-embed-text embedding model (~270 MB). Without Homebrew, it tells you where to download Ollama.

  5. Creates the brain command in ~/.local/bin and adds it to your PATH if it wasn't there.

Running it again updates the install. To install somewhere else, set BRAIN_HOME=~/some/folder before bash.

git clone https://github.com/Lautaro005/brain ~/.brain && cd ~/.brain
uv sync
uv run playwright install chromium
ollama pull nomic-embed-text
./brain.sh

Getting started

  1. Open the dashboard: brain. It opens at http://127.0.0.1:8765 and starts Ollama and the Chroma server if they aren't running. Keep it open while you use your agents; Ctrl+C closes it.

  2. Connect your agents: Connect agent tab → Connect on Claude Desktop, ChatGPT or whichever you use.

  3. Tell it who you are: Profile tab → fill in "About you" and import your memory from another chatbot.

  4. Try it: in Claude, ask "what do you know about me according to brain?" or "save this URL to brain: …".

The dashboard

Tab

What it's for

Dashboard

Switches to turn Chroma, Ollama and the MCP Inspector (a UI to try the tools by hand) on and off. Vault metrics, activity charts for the last 30 days, sources by domain, operations, system health and recent changes.

Profile

Your details (name, headline, about me) and your memory. The importer takes 3 steps: pick the chatbot, copy a prompt that asks it for all its memory in a fixed format, and paste the answer (or upload a .txt, .md or .json). You get a preview before importing and can drop anything you don't want.

Connect agent

Connect and disconnect brain from Claude Desktop, ChatGPT, Claude Code, Codex, Cursor, VS Code, Windsurf and Gemini CLI in one click, plus manual setup for anything else. My connections shows which agents are connected and whether they point to this install.

Graph

Interactive map of the vault: profile, memory, projects, skills, sources, folders and tags. Click a node to see its content and connections. Controls to zoom in, zoom out and re-center (also the 0 key or double-clicking the background).

Knowledge

Save a URL (optionally forcing JavaScript rendering), semantic search with a relevance score, and the list of saved sources.

Logs

Live output of every service the dashboard manages.

The bottom of the sidebar has the theme (system, light or dark) and the language (English / Español).

When you close the dashboard, it only stops what it started. If Ollama was already running (for example the menu-bar app), it shows up as External and is left alone.

Connecting agents

Each agent keeps its list of MCP servers in its own file. When you click Connect, brain adds its entry without touching the rest of the file, and saves a backup first (<file>.bak-brain).

Agent

Where it's configured

Notes

Claude Desktop (chat and Cowork)

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

Claude rewrites this file when it quits, so it's edited with the app closed. If it's open, the dashboard offers to quit it, connect and reopen it.

ChatGPT (desktop app)

~/.codex/config.toml

Works in Codex and ChatGPT Work modes; regular ChatGPT chat doesn't use local servers. Afterwards: Settings → MCP servers → Restart. Shares its config with Codex CLI.

Claude Code

~/.claude.json (via claude mcp add -s user)

Available in all your projects.

Codex CLI

~/.codex/config.toml

Same config as ChatGPT.

Cursor

~/.cursor/mcp.json

VS Code (Copilot, agent mode)

~/Library/Application Support/Code/User/mcp.json

Windsurf

~/.codeium/windsurf/mcp_config.json

Gemini CLI

~/.gemini/settings.json

Anything else

The dashboard gives you ready-to-copy config as JSON, TOML, a command, or field by field.

All of them launch the same server (uv run --directory ~/.brain python server.py) with absolute paths, so they work from any folder.

Apps with an "Add MCP server" form

Many apps have a dialog with two options, Run a command and Connect to a URL. Choose Run a command: brain is a local (stdio) server and doesn't expose a URL, so "Connect to a URL" won't work. Pointing it at the dashboard's address returns 403, because the dashboard only accepts requests from its own page.

Field

Value

Server name

brain

Executable command

the absolute path to uv, e.g. /Users/you/.local/bin/uv (which uv prints it)

Arguments (one per line)

run--directory/Users/you/.brainpythonserver.py

Environment

empty

The Connect agent tab shows these values already filled in for your machine, each with a copy button.

How it works

flowchart LR
    subgraph Agents
        A1[Claude Desktop]
        A2[ChatGPT]
        A3[Claude Code / Cursor / …]
    end
    subgraph brain["brain (your Mac)"]
        S1[server.py<br/>one process per agent]
        V[(vault/<br/>Markdown)]
        H[(data/history.sqlite3<br/>versions)]
        C[(Chroma<br/>shared HTTP server)]
        O[Ollama<br/>nomic-embed-text]
        P[Playwright<br/>headless Chromium]
        D[Dashboard<br/>127.0.0.1:8765]
    end
    A1 & A2 & A3 -- MCP over stdio --> S1
    S1 --> V
    S1 --> H
    S1 -- embeddings --> O
    S1 -- chunks --> C
    S1 -- JS sites --> P
    D --> V & H & C
    D -. starts/stops .-> C & O

Pieces:

  • MCP server (server.py). Each agent launches its own process and talks to it over stdio (MCP's standard for local servers). It exposes the tools and tells the model to read BRAIN.md, your profile and your memory first.

  • Vault (~/.brain/vault/). Markdown files with YAML frontmatter:

    • BRAIN.md: a short index the agent reads first.

    • profile.md: your profile.

    • memory/: one file per category ("Work", "Preferences"…) with one fact per bullet.

    • projects/ and skills/: your notes and reusable instructions.

    • knowledge/sources/: the full text of every saved URL.

  • History (data/history.sqlite3). Every write stores the file's previous and new content. A cross-process file lock makes writes atomic, so Claude, ChatGPT and the dashboard can write at the same time without clobbering each other.

  • Chroma. The vector database behind semantic search. It runs as a single HTTP server on 127.0.0.1:8055, so every process shares it without fighting over the disk.

  • Ollama. Computes embeddings on your machine with nomic-embed-text, using the prefixes the model expects (search_document: when indexing, search_query: when searching).

What happens when you save a URL (save_url):

  1. trafilatura downloads the page and extracts clean text.

  2. If it gets fewer than 30 words (typical of JavaScript-built sites) or the download fails, it renders the page in headless Chromium with Playwright and extracts again.

  3. It splits the text into ~500-word chunks with a 50-word overlap.

  4. It embeds each chunk with Ollama and stores it in Chroma, with metadata pointing back to the source .md.

  5. It writes knowledge/sources/<slug>.md with the full text and its chunk ids. Saving the same URL again updates it instead of duplicating it.

How memory import works: the dashboard's prompt asks the chatbot for its memory grouped as ## Category / - fact. The parser also accepts plain lists, bold labels, numbered lists and JSON. It deduplicates, strips date prefixes, and when a memory mentions one of your projects by name, links them in the graph.

MCP tools

Tool

What it does

list_vault(prefix?)

Lists vault files with their description

read_file(path)

Reads a file

write_file(path, content)

Creates or replaces a file

append_file(path, content)

Appends to a file

str_replace_file(path, old, new)

Targeted replace (old must appear exactly once)

delete_file(path)

Deletes a file (recoverable)

file_history(path)

A file's versions

restore_file(path, version_id)

Restores a file to an earlier version (also brings back deleted files)

add_memory(fact, category?)

Saves a fact about you to your memory, without duplicates

list_skills() / get_skill(name)

Skills: reusable instructions in skills/

save_url(url, render_js?)

Scrapes, indexes and saves a URL

search_knowledge(query, top_k?)

Semantic search over what you saved

list_sources()

Every saved URL

The brain command

brain                 opens the dashboard and starts Ollama and Chroma
brain --port 8766     dashboard on another port
brain --no-autostart  don't start Ollama/Chroma automatically
brain --no-browser    don't open the browser
brain update          updates to the latest version
brain path            shows where it's installed
brain uninstall       removes the command (keeps your data)
brain help            help

Data, privacy and security

  • Everything is local. Your data lives in ~/.brain/vault/ and ~/.brain/data/. Both folders are in .gitignore, so they're never uploaded anywhere, not even if you fork the repo.

  • No external services. Embeddings are computed with Ollama on your machine. brain only goes online when you ask it to save a URL.

  • The dashboard only accepts requests from your own machine. It listens on 127.0.0.1, rejects requests with any other Host (DNS-rebinding protection), and its actions require a custom header browsers won't send from other pages. No website you have open can start processes or write to your vault.

  • Agents can't leave the vault. The tools reject paths with .., absolute paths, hidden files and symlinks that point outside.

  • Everything can be undone. Any write can be reverted with file_history + restore_file.

To start from scratch: close the dashboard and your agents, and delete ~/.brain/vault and ~/.brain/data. They're recreated empty on the next start.

Troubleshooting

Problem

Fix

"Ollama isn't running"

Turn on the Ollama switch in the Dashboard, or open the Ollama app.

"The Chroma server isn't running"

Open the dashboard (brain); it starts Chroma. Agents need it for save_url and search_knowledge.

An app returns 403 when connecting

You used "Connect to a URL". Use Run a command with the values from Apps with an "Add MCP server" form.

brain doesn't show up in Claude Desktop

Connect it from Connect agent and restart Claude. Check My connections.

brain doesn't show up in ChatGPT

Use Codex or ChatGPT Work mode and go to Settings → MCP servers → Restart. Regular chat doesn't use local servers.

"Couldn't extract text from that URL"

The site may be paywalled or require a login. Try Force JS rendering.

brain: command not found

Open a new terminal. If it persists, add export PATH="$HOME/.local/bin:$PATH" to your ~/.zshrc.

Port 8765 is taken

brain --port 8766

Uninstalling

  1. In the dashboard, Connect agent → disconnect your agents (or remove the brain entry from their config).

  2. brain uninstall removes the command.

  3. rm -rf ~/.brain deletes the app and your data.

Development

  • CLAUDE.md: technical guide for agents working on the repo (architecture, conventions and gotchas).

  • CHANGES.md: the log of every change and decision. New changes are appended at the end.

  • BUILD.md: the original spec.

  • docs/: the website, published with GitHub Pages.

git clone https://github.com/Lautaro005/brain && cd brain
uv sync && ./brain.sh

The dashboard UI is available in English and Spanish; the internal docs (CLAUDE.md, CHANGES.md, BUILD.md) are in Spanish.

License

MIT © 2026 Lautaro Silva

Available Tools

14 tools
add_memoryA

Guarda un hecho duradero sobre el usuario en memory/.md (sin duplicar). Ej: add_memory("Prefiere respuestas cortas", "Preferencias").

ParametersJSON Schema
NameRequiredDescriptionDefault
factYes
categoryNoGeneral

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?

With no annotations, the description carries the behavioral burden. It discloses the durable write behavior, the category-based file path, and deduplication. It does not describe failure modes or response details, but the output schema covers the latter and the main side-effect behavior is well communicated.

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

Conciseness5/5

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

Two sentences with zero filler. The core purpose, storage location, dedup behavior, and a useful invocation example are all packed into a very compact description.

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

Completeness4/5

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

The tool is simple, has an output schema, and the description covers purpose, file location, deduplication, and parameters via example. The only notable gaps are the missing explicit mention of the default category and lack of guidance about when not to use it, but these are minor for successful invocation.

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 descriptions are absent, so the description must compensate. It partially does by providing a concrete example mapping 'fact' to a preference string and 'category' to 'Preferencias', and by showing how category influences the file path. However, it does not explain that category defaults to 'General', which is only visible in the schema.

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

Purpose5/5

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

The description clearly states the action ('Guarda un hecho duradero sobre el usuario'), the storage target ('memory/<category>.md'), and a key behavior ('sin duplicar'). The example further clarifies exactly what kind of content belongs here, distinguishing it from generic file-writing tools.

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

Usage Guidelines3/5

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

The description implies when to use the tool: when persisting durable user facts/preferences rather than writing arbitrary files. However, it does not explicitly name alternatives or exclusions, such as when to prefer write_file, append_file, or search_knowledge instead.

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

append_fileB

Agrega contenido al final de un archivo del vault (lo crea si no existe). Queda en el historial.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
contentYes

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?

With no annotations provided, the description must carry the full burden. It discloses that the file is created if missing and that the action is recorded in history ('Queda en el historial'). However, it doesn't disclose potential side effects like overwriting, permission requirements, or error behavior, and it doesn't explicitly state whether the operation is atomic or reversible.

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 core action and key exception (creating if missing). No wasted words; the history note is a useful extra. The structure is ideal for quick parsing.

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

Completeness3/5

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

The tool is simple, and the description covers the essential behavior. However, it lacks details on return values (despite having an output schema), path syntax, and how it differs from write_file. Given the low complexity, this is adequate but not thorough.

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 coverage is 0%, so the description must explain both parameters. It refers to 'content' but doesn't clarify what format is expected or how 'path' should be specified (relative/absolute). The description adds minimal value beyond the raw parameter names.

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

Purpose4/5

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

The description clearly states the verb 'Agrega' (adds) and the resource 'archivo del vault' (vault file), and includes the key behavior of creating the file if it doesn't exist. It's specific enough to distinguish from read_file or delete_file, though it doesn't explicitly contrast with write_file or str_replace_file.

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

Usage Guidelines2/5

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

No guidance is provided on when to choose this tool over siblings like write_file (overwrites) or str_replace_file (replaces). The description implies appending as a distinct operation but never states when it's appropriate or preferable, leaving the agent to infer from context.

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

delete_fileB

Borra un archivo del vault. Recuperable con file_history + restore_file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses that deletion is recoverable via file_history + restore_file, a key behavioral trait. However, it does not mention permissions, behavior for missing paths, or whether deletion is permanent under some conditions.

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, compact sentence with the primary action front-loaded and the recovery note appended. Every phrase earns its place with no filler.

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 low-complexity tool with one required parameter and an output schema, the description is nearly complete: it states the action and the recovery path. The main gap is missing parameter semantics for path, which prevents a perfect score.

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?

The only parameter, path, has 0% schema description coverage, and the description does not clarify what format path should take (vault-relative, absolute, file extension rules, etc.). The agent is left with only the schema's generic 'Path' title.

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 specific verb and resource: 'Borra un archivo del vault' (deletes a file from the vault). It clearly identifies the tool's core operation, though it does not explicitly contrast itself with sibling tools.

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?

Usage is implied: use this to delete a vault file. It also names file_history and restore_file as recovery alternatives, which hints at when recovery might matter, but it gives no explicit when-to-use or when-not-to-use guidance.

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

file_historyA

Versiones de un archivo del vault, la más nueva primero (id, fecha, operación). El id sirve para restore_file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description bears the full burden. It discloses the ordering (newest first) and the fields, which is useful. However, it doesn't mention whether this tool mutates anything (it's likely read-only), what happens if the path doesn't exist, or details about pagination/limits. These gaps are not severe for a list operation.

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 concise sentence with no filler. It front-loads the purpose and includes the key detail about the id being for restore_file, which is crucial for routing.

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?

There is an output schema, so return details are covered. The tool is simple with one param, and the description covers the basics. However, given the siblings include restore_file, it would help to mention that this is a read-only overview before restore. Also, path syntax is not specified, which could cause incorrect calls.

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

Parameters3/5

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

The only parameter, path, is self-explanatory, but schema coverage is 0%, meaning the description must add meaning. The description implies the path points to a vault file, but doesn't clarify path format (e.g., relative to vault root). Since coverage is 0%, a baseline 1 might be argued, but the description's mention of 'archivo del vault' gives some context, so a 3 is fair.

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

Purpose4/5

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

The description clearly states the tool lists versions of a vault file, newest first, with fields id, date, and operation. It distinguishes from siblings like read_file and restore_file by focusing on history. However, it doesn't explicitly name a sibling for comparison, making differentiation slightly implicit.

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

Usage Guidelines3/5

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

The description implies usage for viewing file versions, and mentions that the id is used for restore_file, which hints at when to use it (before restoring). But it doesn't provide explicit exclusions or alternatives; an agent might need to infer when to use this vs. read_file.

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

get_skillA

Devuelve el contenido de un skill por nombre (ej. 'mi-skill' o 'mi-skill.md').

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are present, so the description carries the burden. It accurately states the operation (returns content) and demonstrates accepted name formats, but it does not disclose behavior on missing skills, extension normalization, or whether the operation is read-only beyond the verb 'Devuelve'.

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

Conciseness5/5

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

Single sentence, front-loaded with the action and resource, with useful examples. No filler.

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 one-parameter getter with an output schema, the description is largely sufficient: it specifies the resource, the input format, and the returned content. It could add a pointer to list_skills for discovery or error behavior, but these are not critical for correct invocation.

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

Parameters4/5

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

Schema coverage is 0%, and the description compensates by explaining that 'name' accepts either 'mi-skill' or 'mi-skill.md'. This adds format flexibility beyond the bare schema, though it does not specify case sensitivity or resolution rules.

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

Purpose4/5

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

The description uses a specific verb ('Devuelve') and resource ('contenido de un skill') and gives two accepted name formats. It clearly identifies the tool as a skill-content getter, though it does not explicitly contrast it with list_skills or read_file.

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 explicit when-to-use or alternative guidance is provided. It implies use when you need a skill's content by name, but does not mention list_skills for discovery or read_file for arbitrary files, nor any exclusions.

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

list_skillsA

Lista los skills disponibles (skills/*.md) con su description, para decidir cuál aplica.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden. It discloses the exact source files it lists, that it includes descriptions, and that it is a listing operation rather than a mutation. It does not state read-only behavior explicitly, but 'Lista' and the file pattern make the non-destructive nature clear.

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 efficient sentence that front-loads the action, specifies the source location, states what fields are included, and explains the purpose. Every phrase earns its place with no redundancy.

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

Completeness5/5

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

For a parameterless listing tool with an output schema, the description is complete: it tells an agent what will be listed, where it comes from, what metadata is included, and why the tool should be used. Nothing critical is missing for correct invocation.

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

Parameters4/5

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

The tool has zero parameters, so there is no parameter documentation burden. The description correctly avoids inventing parameter details, and the empty input schema already communicates that no arguments are needed.

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

Purpose5/5

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

The description states a specific verb ('Lista'), a clear resource ('skills'), and a precise source pattern ('skills/*.md'). It also says the listing includes each skill's description and names the purpose ('para decidir cuál aplica'), which distinguishes it from sibling tools like get_skill.

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

Usage Guidelines4/5

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

The description provides clear usage context: use this tool to review available skills and their descriptions when deciding which skill to apply. It does not explicitly mention exclusions or contrast it with get_skill, but the intended decision-making scenario is evident.

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

list_sourcesA

Lista todas las fuentes scrapeadas (url, fecha, path del .md, título).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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?

No annotations are provided, so the description carries the behavioral disclosure burden. The verb 'Lista' clearly indicates a read-only operation and explicitly states the output fields, which is adequate for a parameterless listing tool. It does not mention potential pagination or data freshness, but these are minor for this simple use case.

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

Conciseness5/5

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

The description is a single sentence with a parenthetical list of fields, front-loading the core action and resource. Every word earns its place with no redundant detail.

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-value details are already structured. Combined with zero parameters, the description is sufficient for correct invocation. The only minor gap is not clarifying how 'sources' relate to sibling list_vault, but that does not block usage.

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 has zero parameters and schema description coverage is 100%, so there are no input semantics to clarify. The baseline of 4 applies because the description cannot add value for parameters that do not exist.

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

Purpose5/5

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

The description uses a specific verb ('Lista') with a clear object ('todas las fuentes scrapeadas') and enumerates the returned fields (url, fecha, path del .md, título). This makes the tool's scope unmistakable and differentiates it from siblings like list_vault and list_skills by resource type.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives such as list_vault, search_knowledge, or save_url. There are no explicit conditions, exclusions, or references to sibling tools, so an agent must infer the appropriate context.

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

list_vaultA

Lista archivos .md del vault (path + description del frontmatter). prefix opcional, ej. 'projects'.

ParametersJSON Schema
NameRequiredDescriptionDefault
prefixNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations available, the description carries the full burden of behavioral disclosure. It correctly implies a read-only operation ('list') and specifies the output content (path + description). However, it omits behavioral details such as recursion, ordering, or handling of hidden files, which could matter in edge cases.

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, concise sentence that front-loads the primary purpose and includes an illustrative example. Every component earns its place without redundancy or excessive detail.

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

Completeness4/5

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

For a simple tool with one optional parameter, the description provides the core information needed: what it returns (paths and descriptions) and how prefix works. The presence of an output schema (not shown) reduces the need to explain return values. Missing details like whether files are listed recursively are likely minor for typical usage.

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 input schema provides no description for the 'prefix' parameter, leaving 0% schema coverage. The description adds meaning by stating it is optional and giving an example ('projects'), which implies it filters by path prefix. This is sufficient for the agent to understand the parameter's role.

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

Purpose4/5

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

The description clearly states the verb 'list' and the resource 'vault', specifying that it lists .md files with their path and frontmatter description. It does not explicitly name sibling tools to differentiate itself, but the purpose is unambiguous. The optional prefix is mentioned, adding specificity.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like search_knowledge or list_sources. The description only explains what the tool does, not the contexts where it is preferred. There are no directives on prerequisites or exclusions.

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

read_fileA

Devuelve el contenido completo de un archivo del vault (path relativo, ej. 'BRAIN.md').

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are present, so the description carries the burden. It states the tool returns the complete file content and that the path is vault-relative, which is useful. It does not disclose error behavior, encoding, or explicitly confirm no side effects, though 'Devuelve' implies a read-only operation.

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 filler. Every piece of information — return value, scope, and path format — is useful and immediately accessible.

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

Completeness5/5

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

For a simple one-parameter read operation with an output schema present, the description covers everything needed to invoke it correctly: the action, the result, and the path convention. No additional context is required.

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 schema only lists 'path' with no description, so the description adds critical meaning: the path is relative and should be within the vault, with 'BRAIN.md' as an example. This fully compensates for the 0% schema coverage.

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

Purpose5/5

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

The description uses a specific verb ('Devuelve') and a specific resource ('contenido completo de un archivo del vault'), and gives a concrete path example. This clearly distinguishes read_file from write/delete siblings.

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

Usage Guidelines3/5

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

Usage is implied: the tool returns file content, so an agent can infer when to use it. However, there is no explicit guidance about when to choose this over alternatives like list_vault or file_history, and no exclusions are mentioned.

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

restore_fileA

Vuelve un archivo a como quedó en la versión version_id (ver file_history). La restauración también queda en el historial, así que se puede deshacer.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
version_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of disclosing side effects. It states that restoration adds to the history and is therefore undoable, which is a key behavioral trait. It does not mention permissions or error behavior, but for a simple mutation tool, this is adequate and goes beyond a bare 'restore' statement.

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

Conciseness5/5

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

The description is two sentences, with the core action front-loaded and the side effect (history entry/undoability) in the second sentence. Every word earns its place; there is no fluff or redundancy.

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

Completeness4/5

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

For a tool with only two required parameters and an output schema (not detailed), the description covers the action, the source of version_id, and the reversibility. It does not detail when to use vs. alternatives, but that is addressed under usage guidelines. Overall, it is sufficient for an agent to call it correctly without additional context.

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 schema has zero description coverage for both parameters, so the description must compensate. It explains that version_id refers to a version from file_history, giving context that the schema lacks. Path is implicitly understood as the file to restore. This adds meaningful semantics, though it could be more explicit about the path parameter.

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

Purpose5/5

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

The description clearly states a specific verb and resource: 'restore a file to how it was in version version_id'. It distinguishes itself from siblings like read_file, write_file, and file_history by focusing on the action of restoring a prior version, which 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?

It references 'file_history' as a source for version_id, implying the agent should consult history first to obtain a valid version. However, it does not explicitly state when to use this tool over alternatives like write_file or when not to use it. The guidance is implied rather than explicit, so it falls short of a higher score.

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

save_urlA

Scrapea una URL, la chunkea, la indexa en Chroma y crea/actualiza su .md en knowledge/sources/. Si la URL ya estaba guardada, la actualiza (no duplica). Si el fetch normal no saca texto útil (sitio con mucho JS), renderiza solo con Playwright; render_js=True fuerza ese camino directo.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
render_jsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full disclosure burden. It states the side effects (scrapes, chunks, indexes in Chroma, writes/updates a markdown file), explains the no-duplicate update behavior, and discloses the Playwright fallback path plus the flag that forces it.

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

Conciseness5/5

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

Two sentences with no filler. The core pipeline is front-loaded first, followed by the update behavior and the conditional render_js logic, so an agent can quickly parse the essential information.

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

Completeness5/5

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

For a two-parameter side-effecting tool with an output schema, this is complete: it names target storage, the on-disk output location, update semantics, and the JS-rendering fallback. No critical invocation detail is missing.

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

Parameters4/5

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

Even though schema description coverage is 0%, the description adds real meaning to render_js by explaining the normal fetch path, the fallback condition, and the forced direct path. The url parameter is self-explanatory from its type and the tool's stated purpose.

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

Purpose5/5

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

The description opens with a specific verb (Scrapea) and resource (una URL), then lists the concrete pipeline: chunking, indexing in Chroma, and creating/updating the .md file in knowledge/sources/. This clearly separates it from the file and knowledge sibling tools.

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?

It provides clear context: use this to save a URL into the knowledge base, and it can update an existing entry without duplicating. It does not explicitly name alternative sibling tools or give when-not-to-use guidance, but no direct sibling competes with this ingestion behavior.

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

search_knowledgeA

Búsqueda semántica en las fuentes scrapeadas. Devuelve chunks con url y source_md_path.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It reveals that the tool performs semantic search and returns chunks with url and source_md_path, but it does not explicitly state read-only behavior, authentication needs, rate limits, or error behavior. It is adequate but not rich.

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 that leads with the operation and then the return shape. There is no filler, redundancy, or unnecessary detail.

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

Completeness3/5

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

The tool is simple, has an output schema, and the description conveys the core search behavior. However, the 0% parameter coverage and lack of usage guidance leave an agent to infer details about top_k and when this tool should be chosen over siblings. It is adequate but not fully complete.

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 needed to compensate. It adds meaning to the query parameter through 'Búsqueda semántica' but says nothing about top_k, result limits, or how the query is interpreted. The schema's default value is the only clue for top_k.

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

Purpose5/5

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

The description names a specific operation ('Búsqueda semántica') and a specific resource ('fuentes scrapeadas'), and it states the return shape ('chunks con url y source_md_path'). This makes the tool's purpose clear and distinguishes it from file-management and source-listing siblings.

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

Usage Guidelines3/5

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

The description implies that this tool is for querying scraped knowledge rather than for file operations or listing sources, but it does not explicitly state when to prefer it over alternatives or when not to use it. No exclusions or sibling comparisons are provided.

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

str_replace_fileC

Reemplazo puntual: 'old' debe aparecer exactamente una vez en el archivo. Queda en el historial.

ParametersJSON Schema
NameRequiredDescriptionDefault
newYes
oldYes
pathYes

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?

With no annotations, the description carries the full burden of disclosing behavior. It does state a critical constraint: 'old' must appear exactly once, and that the change is recorded in history (implying reversibility). However, it does not disclose what happens if the constraint is violated (e.g., failure or error), whether the operation is destructive, or what the response contains. It provides partial transparency but lacks important details.

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

Conciseness4/5

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

The description is a single concise sentence, front-loading the key constraint and history note. It avoids unnecessary words and conveys the essential behavior in minimal space. It could be slightly more structured (e.g., separating constraint and history), but it is efficient and scannable.

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 tool with no annotations, an output schema, and three required parameters, this description is insufficiently complete. It omits error behavior (what if 'old' is missing or appears multiple times), return values, and prerequisites. It also lacks any comparison to sibling tools, which are numerous. An agent would need to open the schema or experiment to understand full usage, making this a minimally viable but incomplete definition.

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 parameter meanings. It mentions 'old' and its uniqueness constraint, but does not explicitly define 'path' (file location) or 'new' (replacement string). An agent could infer these from the tool name, but the description adds minimal value beyond the schema's bare property names. The constraint on 'old' is useful, but the other two parameters are 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?

The description states a specific verb ('reemplazo' = replace), the resource (file), and the key constraint that 'old' must appear exactly once. It distinguishes itself from siblings like write_file or append_file by implying a targeted replacement rather than a full overwrite or addition. However, it does not explicitly mention the 'path' or 'new' parameters, relying on inference from the tool name.

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 explicit guidance is given on when to use this tool versus siblings. It doesn't say 'use this for single-occurrence replacements, use write_file for full rewrites'. The uniqueness constraint hints at a scenario, but it does not contrast with alternatives or state exclusions. The agent must infer usage from the name and context.

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

write_fileA

Crea o REEMPLAZA ENTERO un archivo del vault. Queda en el historial (file_history).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden. It clearly indicates a mutating action (create/replace entirely) and adds a notable side effect: the operation is recorded in file_history. This goes beyond a bare 'writes' and covers a meaningful behavior, though other traits (e.g., overwrite confirmation) are absent.

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 extremely concise, comprising two short phrases with no wasted words. The primary action is front-loaded, and the history note is appended efficiently. Perfectly sized for its simple purpose.

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 are covered. The description covers the core action and history side effect. However, with no annotations and sibling partial-edit tools, it could be more explicit about when to choose this over append_file or str_replace_file. The ambiguity is mitigated by 'entero' but not fully resolved, leaving minor gaps.

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. It does not explain the 'path' or 'content' parameters at all. Although the parameter names are self-explanatory, the description adds no meaning or format expectations beyond the bare schema, failing 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?

The description clearly states the tool creates or completely replaces a file in the vault, using the verb 'Crea o REEMPLAZA ENTERO' which distinguishes it from partial-edit siblings. It identifies the resource (vault file) and implies full-file operations, though it doesn't explicitly name alternatives.

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

Usage Guidelines3/5

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

The description implies when to use (create or fully overwrite a file) but does not state when not to use it or explicitly mention alternatives like append_file or str_replace_file for partial edits. The 'entero' hints at full replacement but lacks explicit routing.

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 observedadd_memory
    • First observedappend_file
    • First observeddelete_file
    • First observedfile_history
    • First observedget_skill
    • First observedlist_skills
    • First observedlist_sources
    • First observedlist_vault
    • First observedread_file
    • First observedrestore_file
    • First observedsave_url
    • First observedsearch_knowledge
    • First observedstr_replace_file
    • First observedwrite_file

TDQS

A3.7/5.0

Scored across 14 tools

Disambiguation5/5

Each tool targets a distinct operation or resource: vault file listing/content/mutation/history, memory facts, skills, and knowledge sources are clearly separated. Even similar file-editing tools are distinguished by whole-file vs append vs targeted replace.

Naming Consistency4/5

Almost all tools follow a clear verb_noun snake_case pattern (list_vault, write_file, save_url, search_knowledge). The only deviation is file_history, which is noun_noun rather than an action like get_file_history or list_file_history.

Tool Count5/5

Fourteen tools is well-scoped for a personal knowledge/brain vault server: each tool covers a meaningful capability without redundancy. The count is in the ideal range.

Completeness4/5

The file lifecycle is fully covered with read/write/append/replace/delete plus history and restore. Minor gaps remain: memory facts only have an add operation (though vault tools can edit them), and there is no explicit way to remove a scraped source from the search index.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Local-first, multi-user shared memory for AI agents with semantic search, offline support, and team synchronization.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to maintain persistent, local memory with retrieval-augmented search, knowledge graphs, and context surfacing, without any cloud dependencies.
    535 npm
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to search and retrieve memories from your Mac, including screen captures, meeting transcripts, and browsing history, all locally and privately.
    1
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to capture, structure, remember, and retrieve source-backed memory as local Markdown files, with reviewable writes and no cloud dependency.
    186
    MIT