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 computer (macOS, Linux or Windows) 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; agents in the cloud (Claude.ai, Manus on the web…) can reach it through an optional private URL.

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      # macOS and Linux
irm https://raw.githubusercontent.com/Lautaro005/brain/main/install.ps1 | iex               # Windows (PowerShell)

Then type brain and the dashboard opens.

Website: https://lautaro005.github.io/brain/ · Docs: https://lautaro005.github.io/brain/docs/ · Changelog: https://lautaro005.github.io/brain/changelog/


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.

  • Chat with your memory. A local Ollama model that already knows your profile and memory. Ask it things, or have it save, add or edit notes for you. Chats are kept in Chroma, and you can pop the chat out into a floating window that stays on top of your other apps.

  • See how everything connects. An interactive graph shows your profile, memories, projects, skills, sources and tags, and how they relate. When the chat or an agent wants to link or unlink notes, you first see an image of the change and approve it.

  • Check facts, with the evidence in view. Fact check splits a text into claims, looks in your memory first and on the web only if needed, reads every page, looks for counter-evidence and gives a verdict by rules, with quotes, dates and limitations.

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

  • Bring your apps along. Plug other MCP servers into brain (GitHub, Notion, Gmail…, or hundreds of apps through Composio): their tools show up in every agent you connected, and whatever they fetch is saved to your memory automatically.

  • Private by design. Embeddings are computed on your machine with Ollama, and your data never leaves your computer (the only request brain makes on its own is checking GitHub for a new version; Fact check searches the web only when you run it).

Installation

Requirements: macOS, Linux or Windows, and git. The installer takes care of the rest.

System

Command

File

macOS

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

Linux

same command

brain-install-linux.sh in each release (bash brain-install-linux.sh)

Windows

irm https://raw.githubusercontent.com/Lautaro005/brain/main/install.ps1 | iex (PowerShell)

brain-setup.exe in each release

Missing git? macOS: xcode-select --install. Linux: your distro's package manager (sudo apt install git). Windows: the installer tries winget, or get it from git-scm.com. brain-setup.exe isn't code-signed yet, so Windows SmartScreen may ask you to confirm (More info → Run anyway).

Every commit to main runs the tests and both installers on macOS, Linux and Windows in GitHub Actions, and every release attaches the Windows .exe and the Linux installer.

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 if needed (Homebrew on macOS, winget on Windows, the official script on Linux when sudo doesn't ask for a password; otherwise it tells you the command), and pulls the nomic-embed-text embedding model (~270 MB). Without Homebrew, it tells you where to download Ollama. The chat model (llama3.2, ~2 GB) is optional and not pulled automatically: it powers the Chat tab, source summaries (abstract) and entity extraction for the graph. Get it with ollama pull llama3.2 or the Download llama3.2 button in the Chat tab; without it those three features are skipped and everything else works. Use another model with BRAIN_SUMMARY_MODEL=<model>, or turn summaries and entities off with BRAIN_SUMMARY_MODEL=off.

  5. Creates the brain command in ~/.local/bin (%USERPROFILE%\.local\bin\brain.cmd on Windows) and adds it to your PATH if it wasn't there.

On Linux, Chromium needs some system libraries; if they're missing the installer prints the one command to add them (sudo uv run playwright install-deps chromium).

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.

Chat

Talk to a local Ollama model with your profile, all your memories, the BRAIN.md index and related bits of past chats as context. It gets the same tools your agents get (read, search, write, add_memory, save_url, your connections…), so it can look things up and make changes. Every tool call is listed in the answer, and you can expand each one to see its arguments and result; every write lands in the version history. Models that can't take native tools (common with GGUF models pulled from Hugging Face) get the tools as text instead, so they can act on the vault too. Pick the model from the ones installed in Ollama (or download llama3.2 in one click) when you start a chat; it then stays with that chat. A circle next to the send button fills up as the chat uses the model's context window. Rename a chat with the pencil next to its title. Type / for commands: /organize tidies up the vault and its graph with a built-in skill (adapted from file-organizer): it asks how you want it organized, proposes a plan and changes only what you approve; /add-mcp sets up a connector from a URL or instructions (you approve it with one click before anything runs); /factcheck verifies a claim with Fact check; /compact summarizes the conversation the way Claude Code does (main request, every instruction you gave, decisions, exact data and paths, changes made with tools, pending work and what it was doing), in parts if it doesn't fit, so the model keeps going from the summary; add instructions after it (/compact focus on the dates). When a chat reaches 85% of the context window it compacts by itself before answering, and right after compacting brain preloads the new context in Ollama so the next answer doesn't wait; /reflect brings Reflect's suggestions into the chat; /new starts a new chat. Below the commands, under Your skills, come the skills saved in your vault's skills/ (usually written by your agents): /<skill> loads it into the chat. The chat always gets a fixed guide to how brain works, so it can tell you where things are, and clear working rules: understand the request, use just the tools it needs, never repeat the same call, and always end with an answer. Answers can include HTML (tables, collapsible sections, simple diagrams), sanitized so no script, form or outside image gets through. When the model writes an html (or svg) code block, it's shown as a rendered preview once the answer is done, with a Preview / Code toggle in its top-right corner and Copy; the preview runs in an isolated frame with no scripts or internet resources unless you click Run scripts. To link or unlink notes it calls propose_graph_change: you see an image of the graph with the change marked and approve, reject or undo it. Chats are saved in Chroma (chats collection) with a searchable list; Float opens the chat in an always-on-top window (Document Picture-in-Picture in Chrome, Edge and Arc; a regular pop-up elsewhere).

Profile

Your details (name, headline, about me) and your memory. Below About you, What brain knows about you is a summary of your memory that rewrites itself whenever a memory changes, and goes into profile.md so every agent reads it. 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. Reflect reviews your memory and suggests fixes (duplicates, contradictions, notes without entities) without changing anything.

Connect agent

Connect and disconnect brain from Claude Desktop, ChatGPT, OpenMausBot, DeepSeek Harness, Claude Code, Codex, Cursor, VS Code, Windsurf and Gemini CLI in one click, Manus Studio with the values for its form (under Any other MCP client), remote access by URL for agents in the cloud, plus manual setup for anything else. My connections lists the agents brain configured, plus any app that used brain (detected from the MCP handshake, so apps where you added brain with an "Add MCP server" form show up the first time they use it) and apps you note by hand.

Connections

Other MCP servers brain uses on your behalf: add them as a local command or a URL (or through Composio), switch each one on or off, choose whether its results are saved to memory, refresh its tools. Servers that need a login (OAuth) show Sign in: it opens the service's own sign-in page and brain keeps the token. Connections an agent proposed (/add-mcp in the chat) wait here for you to approve them.

Graph

Interactive map of the vault: profile, memory, projects, skills, sources, folders, tags and entities. 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). Graph changes proposed by an agent wait at the top, with their image, to be approved or rejected.

Knowledge

Save a URL (optionally forcing JavaScript rendering), hybrid search (semantic score, or a keyword tag for exact matches), a button to rebuild the keyword index, and the list of saved sources with how old their content is and when they were last checked. Refresh re-downloads one source or all of them; if a refresh fails, the last good copy is kept and the error is shown.

Fact check

Verify claims: brain searches your memory first and the web only if that's not enough (and says so), reads every page, groups sources that aren't independent, looks for counter-evidence and gives a verdict by rules (supported, likely supported, mixed, inconclusive, likely false, false, not verifiable) with quotes, dates and limitations. Preferences are set once: level, freshness, primary sources, counter-evidence, claim types, high-risk topics, regions, languages, source types, search engine (DuckDuckGo, SearXNG, Brave, or a search tool from your Connections such as OpenSEO or Composio), blocked domains, and whether the chat and all your agents check facts that aren't in brain on their own. Copy the report, save a source to brain or block a domain with one click.

Logs

Live output of every service the dashboard manages.

The bottom of the sidebar has the theme (system, light or dark), the language (English / Español), an i button that lists the services (Chroma, Ollama, MCP Inspector) and their state, and Settings (the gear), a full view where you can:

  • see the installed version and check for updates: brain asks GitHub for the latest release when the dashboard opens, every 3 hours while it's open, and when you click the button. If there's a newer one, Settings shows it with a link to the release notes and the gear turns green; the green Update and restart button next to Check for updates closes brain, updates it and reopens it (the page reloads by itself), or run brain update;

  • reorder the sidebar and hide the views you don't use (a hidden view is still reachable by its URL, e.g. #logs);

  • pick the default chat model, used when the chat opens and on every new chat;

  • set the chat's context window: each model's maximum with a cap for all (16k by default), everything each model supports, or a value per model, with a table of the detected models and what they support;

  • make a backup of everything local (vault, history, settings, connections and what's indexed in Chroma, embeddings included) and restore it; credentials are left out unless you tick the box, and restoring first saves a backup of the current state;

  • set up an automatic backup (Automatic backup…): the folder (any folder, e.g. an external drive or a synced folder, with a folder picker), how often (every X hours, every day or once a week, at a set time), the file name ({date}, {time}, {version}, {n}), how many to keep, whether to include credentials and whether to skip it when nothing changed. It runs while brain is open, and catches up when you open it if one was missed;

  • write a system prompt for the chat: how you want it to answer (tone, format, language, focus), added to brain's own instructions; the chat's fixed app context is shown below it, read-only;

  • turn on system notifications for uploads, changes and deletions in your vault, whether an agent, the chat or you made them;

  • note format: fill in type, created and updated on older notes in one click (new writes get them automatically);

  • give each graph node type (Brain, Profile, Memory, Projects, Skills, Sources, Notes, Folders, Tags, Entities) its own color, or go back to black and white.

The button next to the logo collapses the sidebar into a narrow rail of icons.

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

OpenMausBot

~/.openmausbot/config.json

Reads its MCP servers when it opens, so it's edited with the app closed; the dashboard offers to quit, connect and reopen it.

DeepSeek Harness (desktop app and dsh CLI)

~/.dsh/cordis.patch.yml

brain adds its own block (an @deepseek-ai/dsh-mcp-client row, stdio) and removes only that block; dsh reloads it without restarting. Tools show up as mcp__brain__….

Manus Studio

its own form

Manus adds local servers with its Run a command form; copy the command and arguments from Any other MCP client; its card switches to Detected once Manus uses brain. Manus on the web can use remote access.

Anything else

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

Paths are the macOS ones; on Windows they're under %APPDATA% and on Linux under ~/.config. All the local agents launch the same server (uv run --directory ~/.brain python server.py) with absolute paths, so they work from any folder.

Remote access by URL

For agents that run in the cloud or on another computer (Manus on the web, Claude.ai custom connectors, ChatGPT developer mode…), Connect agent → By URL publishes brain's MCP server through a Cloudflare tunnel. Off by default.

  • brain runs server.py --http on 127.0.0.1:8770 and cloudflared publishes it; no ports are opened on your router. The first time, Install cloudflared downloads it from Cloudflare's GitHub release and checks the published SHA256 (or brain uses the one you installed with brew, winget or apt).

  • The URL is https://…/<token>/mcp; without the token every request gets 404. Apps that prefer a header can use …/mcp with Authorization: Bearer <token>. Generate a new URL cuts off the old one right away, and Read-only leaves only the tools that read and search.

  • Without a Cloudflare account the URL is a *.trycloudflare.com address that changes each time it starts. For a fixed one, create a tunnel in your account pointing to http://localhost:8770 and paste its hostname and token under Fixed URL with your Cloudflare account.

  • Through the URL, save_url and read_url only fetch public addresses, never your computer or local network.

  • It stays up until you turn it off or close brain. While it's on, brain keeps the computer from going to sleep by itself (the screen can still turn off; untick Keep the computer from sleeping to allow it). If the computer sleeps anyway (closing the lid), a watchdog checks the tunnel on wake: cloudflared reconnects with the same URL, and if it can't, or the tunnel no longer exists on Cloudflare's side, brain reopens it by itself. A quick tunnel then gets a new *.trycloudflare.com URL and the card tells you; a named tunnel keeps its URL. Reconnect does the same by hand.

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. If the app only takes a URL, use remote access: 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. Once the app uses brain for the first time, it appears under My connections on its own.

Connections

brain is also an MCP client. In the Connections tab you add other MCP servers, and brain re-exposes their tools to every agent you connected, prefixed with the connection's name (github__create_issue, composio__GMAIL_FETCH_EMAILS) so they never clash with brain's own tools.

  • Local command (recommended): an MCP server that runs on your Mac, e.g. npx -y @modelcontextprotocol/server-github with GITHUB_TOKEN=…. The token stays on your machine.

  • URL: a remote MCP server, with optional headers (Authorization: Bearer …).

  • Composio (optional). Composio stores your accounts' OAuth tokens in its own cloud; brain keeps the key, the configuration and everything it fetches locally. Two kinds of key work:

    • Consumer key (ck_…, the usual one from dashboard.composio.dev): paste it and click Save and connect. brain connects to https://connect.composio.dev/mcp with the x-consumer-api-key header, and the apps you already linked in Composio come with it. No user ID needed.

    • Project key (ak_…): fill in the user ID, click Choose apps, pick the auth configs, and brain creates the MCP server through Composio's developer API (x-api-key).

    • Disconnect removes the Composio connection and wipes the key from .env.

Every connection has two switches: Active (turn it off and its tools disappear from your agents right away) and Save to memory. With the second one on, each result is written to vault/knowledge/connections/<connection>/…md (or knowledge/composio/<app>/…), with the tool name, arguments and time in its frontmatter, and indexed in Chroma: what you fetched from GitHub or Gmail becomes searchable with search_knowledge and shows up in the graph.

Secrets (env values, headers, the Composio API key) live in ~/.brain/.env with 600 permissions, outside the vault and never committed. The connection list lives in ~/.brain/data/connections.json.

Fact check

The Fact check view verifies claims with a process you can see, instead of a "true/false" button:

  1. The local chat model splits the text into checkable claims and marks opinions, predictions and vague statements as not verifiable.

  2. Each claim is searched in brain first. If nothing relevant is saved, it's old, your notes disagree, there's no primary source or it's a current topic, brain searches the web (if you allow it) and tells you it did.

  3. It runs a neutral query, an evidence query, a counter-evidence query and a primary-source query; opens and reads every page (a page it can't open is marked not fully inspected and doesn't count); types each source (official, academic, fact-checker, news, reference, social, other) by what it is; and groups pages from the same site or with copied text into one line of evidence.

  4. The model says whether each source supports, contradicts or supports with limits, and must quote the exact sentence; a quote that isn't in the page doesn't count.

  5. The verdict comes from fixed rules over independent lines of evidence: never "supported" with a single secondary source, and conflicting evidence is shown as a conflict.

Preferences (level, freshness, primary sources, counter-evidence, claim types, high-risk topics with extra rigor, regions, languages, source types, search engine, blocked domains) are set once in the view. Nothing is saved to your vault unless you click Save to brain. It also works from the chat (/factcheck) and for agents (fact_check, which always applies your preferences). Turn on Let the chat and all your agents check facts that aren't in brain and every connected agent gets that instruction, and search_knowledge suggests fact_check when it finds nothing. For health, law, finance or safety it reminds you it's informational, not professional advice.

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
    S1 -- MCP client --> X[Your connections<br/>GitHub · Notion · Composio…]
    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. With remote access on, the dashboard also runs one copy over streamable HTTP (server.py --http, 127.0.0.1:8770) behind a Cloudflare tunnel.

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

    • Every note carries type (Project, SubProject, File, Memory, Skill, Source…; inside projects/, a project's main note is a Project, a subfolder's main note a SubProject and everything else a File, and the graph links each part to its project), created and updated, filled in by brain on every write: a small profile of the Open Knowledge Format, so any AI can tell what a note is and how current it is. FORMAT.md at the root of the vault explains every type and field to your agents. Links can be [text](path.md) or [[name]].

  • 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 chunks of up to ~500 words (50-word overlap) that follow its structure: a heading stays with its first paragraph, lists, tables and code blocks aren't cut, and a chunk that starts mid-section carries the section title, which also goes into the chunk's metadata.

  4. It embeds each chunk with Ollama and stores it in Chroma, with metadata pointing back to the source .md. The same chunks go into a keyword index (SQLite FTS5, data/search.sqlite3), which catches proper names, IDs and exact numbers that embeddings miss.

  5. If a chat model is installed in Ollama, it adds a short abstract (pages over 800 words) and the entities it names (people, places, organizations, projects) to the frontmatter. Both are optional: without the model the page is saved the same way.

  6. It writes knowledge/sources/<slug>.md with the full text, its chunk ids, type: Source, title, resource (the URL) and, when the page shows them, author and published. Saving the same URL again updates it instead of duplicating it.

Search (search_knowledge) runs the semantic search and the keyword search, and merges both lists with reciprocal rank fusion. If Chroma or Ollama is down, keyword search keeps working and the answer says so.

Memory over time: each fact carries the date it was saved (an HTML comment at the end of the bullet, invisible when reading). When a fact changes, add_memory(new, supersede=old) moves the old one to a ## Historial section with the date it stopped being true, so agents only see what's current and the past isn't lost.

Entities in the graph: notes in knowledge/ and memory/ get an entities list. Two notes that name the same person or project end up connected through a shared entity node, even if nobody linked them.

Reflect (Profile tab) reviews what's stored and suggests fixes: facts duplicated across categories, facts that probably contradict each other, and recent notes without entities. It never writes anything; each suggestion shows the tool call that would apply 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)

set_frontmatter(path, fields)

Changes metadata (description, tags, related…) without touching the content; null removes a field

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)

move_file(src, dst)

Moves or renames a note (recoverable). Not for BRAIN.md, profile.md, memory/ or knowledge/sources/

vault_overview()

What's messy in the vault: loose notes, notes with no links or no description, tag variants, similar names

propose_graph_change(changes, reason?)

Proposes adding or removing related links between notes. It changes nothing: you see an image of the graph with the changes marked and approve or reject it

inspect_graph_region(nodes)

Read-only: the neighbors of some notes and why they're linked

add_memory(fact, category?, supersede?)

Saves a fact about you to your memory, without duplicates and with the date it was saved. If it replaces an older fact (you moved, changed jobs…), pass the old one in supersede: it isn't deleted, it moves to a ## Historial section of the same file, dated

memory_history(category?)

Facts that were superseded in a memory category

list_skills() / get_skill(name)

Skills: reusable instructions in skills/

distill_skill(topic)

Gathers everything brain has on a topic (search hits, memories, sources) so the agent can write a skill from it with write_file. It doesn't write the skill itself

save_url(url, render_js?)

Scrapes, indexes and saves a URL (long pages also get a short abstract)

search_knowledge(query, top_k?)

Hybrid search over what you saved: semantic + exact keyword (names, IDs, dates), merged with reciprocal rank fusion

reindex_keyword_search()

Rebuilds the keyword index from the .md files in knowledge/ (for sources saved before hybrid search existed)

list_sources()

Every saved URL, with its abstract, when its content was downloaded and when it was last checked

refresh_sources(path?)

Re-downloads one saved source (or all); keeps the last good copy if it fails

read_url(url, max_chars?)

Reads a web page without saving it (e.g. an MCP server's docs)

fact_check(text, search_web?)

Verifies claims: brain first, the web if needed, a verdict by rules with sources and quotes. Saves nothing

propose_connection(name, url? | command?, args?, env?, headers?, note?)

Proposes adding an MCP server to Connections. It doesn't add it: you approve it with one click

list_connections()

Your connections, whether they're active, and their tools

refresh_connectors()

Re-discovers the tools of every active connection

<connection>__<tool>

Any tool from an active connection, proxied (and captured to memory if enabled)

Every write validates the note's YAML frontmatter. If an agent writes a value that breaks it (typically an unquoted : in a description), brain quotes it automatically; if it can't be repaired, the write is rejected with a clear error, so metadata never silently disappears from the graph.

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 (Settings → Update and restart does it from the dashboard)
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 by default. Embeddings are computed with Ollama on your machine. brain only goes online when you save or refresh a URL, use a connection that talks to a remote service, checks GitHub for a new version (it only reads the latest release number), runs a Fact check that needs the web (the claims go as queries to the search engine you chose, and the result pages are opened; never pages on your machine or local network), or keeps the Cloudflare tunnel open if you turn on remote access. Composio, if you use it, keeps your app tokens in its cloud.

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

  • Remote access is opt-in and locked with a token. The URL carries a secret token (regenerate it any time), can be set to read-only, and the server behind it listens only on 127.0.0.1. The token is in ~/.brain/data/remote.json (600).

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

  • Secrets stay out of the vault and the repo. Connection tokens and API keys are in ~/.brain/.env, and OAuth sign-ins in ~/.brain/data/oauth.json (both permissions 600, gitignored); the dashboard never shows them back, and backups leave them out unless you ask.

  • Agents can propose, not install. An agent (or the chat's /add-mcp) can only propose a new connection; nothing runs until you click Add and see the exact command or URL. The same goes for graph changes: nothing changes until you approve the image.

  • Everything can be undone. Any write can be reverted with file_history + restore_file, and Settings → Backup keeps full copies you can restore.

The website's privacy policy covers the site too (its chat assistant is provided by DokBot).

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.

Search finds nothing for a name you know is saved

Sources saved before v0.02.5 aren't in the keyword index yet: click Rebuild keyword index in the Knowledge tab (or ask an agent to run reindex_keyword_search).

Sources have no abstract / the graph has no entities

Those need a chat model in Ollama: ollama pull llama3.2. Then run Reflect in the Profile tab to see which notes are missing entities.

"The Chroma server isn't running"

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

Composio returns 401 Invalid API key

Check the key type: a consumer key (ck_…) only works with Save and connect, not with Choose apps (that's for project keys ak_…). If it's a fresh key, try regenerating it in Composio's dashboard.

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.

The chat says there's no chat model

Click Download llama3.2 in the Chat tab, or run ollama pull llama3.2 (any chat model works; models with tool support can also edit your vault).

The chat answers but can't save or edit anything

Open the actions under the answer to see what failed. Very small models sometimes don't follow the tool format; try a larger one (for example llama3.2, qwen2.5 or mistral).

"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 with the Commons Clause © 2026 Lautaro Silva.

You can use, study, modify and share brain for free, including at work. The Commons Clause adds one restriction: you may not sell it, meaning you can't charge third parties for a product or service (hosting, support or consulting included) whose value comes entirely or substantially from brain. It applies to every version of brain.

Both parts are in LICENSE: the Commons Clause condition first, then the MIT text. GitHub only auto-detects standard license templates, and MIT + Commons Clause isn't one, so the sidebar shows "View license" instead of a license name. That is expected: the only way to get an "MIT" label would be to drop the condition, and plain MIT would allow selling it.

Security

To report a vulnerability, see SECURITY.md. Please don't open a public issue for it.

Available Tools

28 tools
add_memoryA

Guarda un hecho duradero sobre el usuario en memory/.md (sin duplicar), con la fecha en que se guardó. Ej: add_memory("Prefiere respuestas cortas", "Preferencias"). Si este hecho reemplaza a uno anterior (cambió de dirección, de trabajo, etc.), pasá el texto del hecho viejo en supersede — no se borra, queda marcado como superado con fecha en el mismo archivo (sección ## Historial).

ParametersJSON Schema
NameRequiredDescriptionDefault
factYes
categoryNoGeneral
supersedeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it discloses the destination path, that duplicates are avoided, that a save date is attached, and that superseded facts are not deleted but marked with date under ## Historial. Missing only auth/permission prerequisites and error behavior, which leaves a small gap.

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?

Front-loads the core action and path, then the example, then the supersede rule. Every sentence adds value, though the supersede clause is somewhat dense and could be split for readability.

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

Completeness4/5

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

For a mutation tool with an output schema (so return values need not be described) and no annotations, the description covers storage location, dedup, dating, and supersede behavior. It is nearly complete, lacking only permission or failure-mode 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?

Schema coverage is 0%, so the description must compensate; it explains `supersede` semantics thoroughly (pass the old fact text, marked not deleted, stored in Historial) and contextualizes `category` via the path and example. `fact` is self-evident by name, though the category default ('General') and valid range are not stated.

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

Purpose5/5

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

States a specific verb (Guarda) and resource (un hecho duradero sobre el usuario) plus the storage target (memory/<category>.md), which distinguishes it from siblings like memory_history or write_file. The inline example makes the intent unambiguous.

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?

Gives a concrete usage example and, importantly, a conditional rule: use `supersede` when the new fact replaces an old one (changed address, job, etc.). It doesn't name sibling alternatives or state when NOT to use it, but the when-to-use guidance for the core parameter is explicit.

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.

distill_skillA

Junta todo lo que brain tiene sobre topic (fuentes, memoria, notas de conexiones) para que el agente redacte un skill a partir de esto y lo guarde con write_file en skills/.md. Esta tool NO escribe el skill sola — devuelve el material.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYes

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, the description carries the full behavioral burden, and it does disclose the single most important trait: it is non-mutating ('NO escribe el skill sola — devuelve el material'), preventing a false assumption that it creates the skill. It does not mention permissions/scope limits or rate behavior, but the return format is covered by the output schema.

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 tightly packed sentences: the first front-loads what it gathers and the downstream workflow, the second delivers the critical non-writing caveat. No filler.

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

Completeness5/5

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

For a single-parameter aggregation tool with an output schema, the description covers the source scope, the intended workflow, and the key caveat; return values are described by the output schema, so nothing essential is missing.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate. It gives `topic` concrete meaning by spelling out the three material classes it drives (fuentes, memoria, notas de conexiones), which goes beyond the bare string type 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?

States a specific verb (gather/aggregate) and resource (all material about `topic`: sources, memory, connection notes), plus the downstream purpose. It also explicitly distinguishes itself from the write siblings by declaring it does NOT write the skill, so an agent can tell it apart from write_file/save_url without opening any schema.

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 workflow is clear: call this to collect material, then the agent drafts the skill and persists it with write_file at skills/<topic-slug>.md. This routes the agent toward the correct downstream tool, though it stops short of explicit when-not-to-use or an alternative like search_knowledge/list_sources for narrower lookups.

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

fact_checkA

Verifica afirmaciones con un proceso visible: las separa, busca primero en brain y, si lo guardado no alcanza (y el usuario lo permite en Fact check), busca en internet con consultas a favor y en contra, lee cada página, agrupa las fuentes que no son independientes y da un veredicto por reglas (respaldada, probablemente respaldada, mixta, no concluyente, probablemente falsa, falsa, no verificable) con citas, fechas y limitaciones. No guarda nada en el vault. Tarda: usala cuando el usuario pida verificar algo o cuando haga falta comprobar un dato que no está en brain. Usa las preferencias de Fact check del usuario (nivel, actualidad, fuentes, buscador…). search_web=False: solo brain.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
search_webNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations present, the description carries the full burden and discharges it well: it discloses the multi-step process, that internet access requires user permission, that it uses user preferences, that it is slow, and crucially that it writes nothing to the vault ('No guarda nada en el vault'). That side-effect disclosure is exactly the kind of context annotations would otherwise supply.

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 paragraph is long but dense and front-loaded with the core process, then the no-write guarantee, the latency warning, usage condition, and parameter note. Nearly every sentence earns its place, though the verdict-category enumeration is somewhat verbose given an output schema exists.

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 structure need not be explained, yet the description still covers behavior, side effects, latency, permissions, and the parameter switch. For a complex multi-step tool with no annotations, this is nearly complete; only the 'text' parameter's exact role is left implicit.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It explains search_web clearly ('search_web=False: solo brain'), which is genuinely beyond the schema, but leaves 'text' undocumented (an agent must infer it is the claim to verify). Partial compensation for two parameters merits a 3.

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 and resource (verifies claims) and details the actual pipeline: separating claims, searching brain first, optionally searching the web, reading pages, grouping non-independent sources, and returning a rule-based verdict. This is clearly distinguishable from siblings like search_knowledge or read_url.

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 explicitly says when to use it ('cuando el usuario pida verificar algo o cuando haga falta comprobar un dato que no está en brain') and warns it is slow ('Tarda'). It does not name an alternative tool for the brain-only case, but the condition for use is unambiguous.

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.

inspect_graph_regionA

Solo lee: para cada nota pedida (nombre o ruta, hasta 10), sus vecinos en el grafo y por qué están unidos (link en el texto, related, tag, entidad…), además de su related y tags. Sirve para entender una zona del grafo antes de proponer un cambio con propose_graph_change.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodesYes

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 provided, so the description carries the full burden. It does disclose the key traits "Solo lee" (read-only, no mutation) and the hard limit of "hasta 10" notas, which is genuine behavioral context. However it says nothing about permissions/auth needs, rate limits, or behavior on unknown/missing node names.

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?

Effectively two sentences, both front-loaded with the most important fact ("Solo lee") and the usage context. Dense but every clause carries information; only the parenthetical reason list is slightly compressed.

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 format need not be explained, yet the description still outlines what comes back (neighbors, edge reasons, related, tags). Combined with the read-only statement, the parameter clarification, and the routing to propose_graph_change, an agent has enough to call it correctly without opening the schema.

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%, so the description must compensate for the single undocumented parameter. It does so meaningfully by clarifying that each entry is a "nombre o ruta" (name or path) and that the array is capped at 10 items — information absent from the schema, which only says "array of string".

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?

"Solo lee: para cada nota pedida (nombre o ruta, hasta 10), sus vecinos en el grafo y por qué están unidos..." states a specific read verb plus the resource (graph region/neighbors) and the payload (edges with reasons, related, tags). It is immediately distinguishable from mutating siblings like propose_graph_change and propose_connection, which it even names.

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 gives a clear when-to-use: "entender una zona del grafo antes de proponer un cambio con propose_graph_change" — naming the sibling alternative explicitly. It does not spell out a when-not-to-use case (e.g. use list_connections or vault_overview instead for global views), so it falls just short of a full 5.

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

list_connectionsA

Conexiones configuradas (otros servers MCP que brain re-expone): nombre, si están activas y sus tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 provided, so the description carries the burden, but a zero-parameter list operation has a low behavioral surface. It discloses the returned fields (name, active status, tools), which is helpful, though that partly duplicates the output schema; it does not state read-only safety or any side effects.

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 compact sentence that front-loads the resource and then the returned fields, with no filler or repetition.

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 zero parameters and an output schema present, the description need not explain return format, and it covers the essential identity of the resource. The only gap is the absence of when-to-use guidance relative to siblings.

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 zero parameters, so the baseline is 4. There is nothing parameter-related the description needs 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?

Names the resource (connections) and immediately defines it as other MCP servers that brain re-exposes, plus the fields returned (name, active status, tools). This distinguishes it from list_sources, list_skills, and list_vault, though the differentiation is by resource name rather than an explicit contrast.

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 use this tool versus alternatives such as list_sources, refresh_connectors, or propose_connection. The parenthetical definition implies a purpose, but no context or exclusion is given to route the agent.

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, cuándo se bajó el contenido actual, cuándo se revisó por última vez, el error de la última actualización si falló, path del .md, título y, si es larga, un resumen corto en 'abstract' para decidir si leerla entera con read_file).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.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 burden. 'Lista' implies a read-only operation and it transparently discloses the returned fields, including failure errors and the generation of a short abstract for long sources. It does not, however, state permissions, pagination, or ordering behavior, so behavioral coverage is only partial.

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 leads with the purpose before the parenthetical field list. The enumeration is somewhat long but every item is informative, so it earns its place with little waste.

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 re-explained, and the description still usefully clarifies the 'abstract' field's purpose and its connection to read_file. For a parameterless read tool this is nearly complete, with only minor gaps around ordering or scope limits.

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 zero parameters, so the baseline is 4. The description's field enumeration describes outputs rather than parameters, adding no parameter meaning beyond the empty schema, but no compensation is needed for a parameterless tool.

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

Purpose5/5

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

States a specific verb ('Lista') and resource ('todas las fuentes scrapeadas') with clear scope, and enumerates the returned fields (url, download/check timestamps, last error, .md path, title, abstract). This cleanly distinguishes it from siblings like list_vault, list_skills, and list_connections, which cover different resources.

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 a workflow by noting the 'abstract' field exists 'para decidir si leerla entera con read_file', effectively pointing to the read_file follow-up. However, it never states explicitly when to call this tool versus alternatives such as search_knowledge or list_vault, leaving usage to inference.

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.

memory_historyC

Hechos superados de una categoría de memoria (los que se reemplazaron con add_memory(..., supersede=...)), con la fecha en que dejaron de valer y qué los reemplazó.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoGeneral

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/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 of behavioral disclosure. It describes the data provenance (facts replaced via supersede) and output contents, but does not state that the operation is read-only, whether it has side effects, or any permission or rate-limit considerations.

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, front-loaded sentence that immediately identifies the resource, then adds the supersede context and return contents. It is appropriately sized with no redundant filler, though the parenthetical could be tightened.

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 low-complexity tool with one parameter and an output schema, the description covers the essential data concept (superseded facts with date and replacement). However, it leaves gaps in usage guidance and parameter behavior, and does not compensate for the missing annotation safety profile.

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% for the single 'category' parameter. The description mentions 'de una categoría de memoria', which loosely maps to that parameter, but it adds no syntax, allowed values, default behavior, or filtering semantics beyond the parameter's name and schema 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 names the resource ('Hechos superados de una categoría de memoria') and scope, and references the sibling operation add_memory(..., supersede=...), which distinguishes it from add_memory. It lacks an explicit retrieval verb like 'list' or 'get', but the noun phrase makes the purpose clear enough for an agent.

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 explains what the tool returns and how superseded facts originate, but it gives no explicit when-to-use guidance, no when-not-to-use conditions, and no alternative tools to prefer. An agent must infer that this is for inspecting historical replacements.

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

move_fileA

Mueve o renombra una nota del vault (ej. move_file("idea.md", "projects/idea.md")). Recuperable con file_history + restore_file. No mueve BRAIN.md, profile.md, memory/ ni knowledge/sources/ (los maneja brain). Si otras notas la linkean por path, actualizá esos links.

ParametersJSON Schema
NameRequiredDescriptionDefault
dstYes
srcYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does substantial work: it discloses reversibility, protected-path exclusions, and a link-integrity side effect. It does not cover overwrite/collision behavior if dst already exists, so it is not fully complete.

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 primary action and example are front-loaded, followed by tightly packed clauses on recovery, exclusions, and link caveats. Every sentence 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 2-param mutation tool, the description covers reversibility, protected resources, and link side effects, and an output schema exists so return values need not be explained. Only collision/overwrite handling is unaddressed.

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 coverage is 0% and neither parameter has a description, so the schema alone does not explain src/dst. The example ("idea.md" -> "projects/idea.md") usefully conveys path formatting and the source/destination roles, but overwrite behavior and whether dst is a full path or directory are left unspecified.

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

Purpose5/5

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

States a specific verb+resource ("Mueve o renombra una nota del vault") and backs it with a concrete example call, so the agent understands both move and rename semantics. It is clearly distinguishable from siblings like write_file, delete_file, and 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 Guidelines5/5

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

Explicitly names the recovery path (file_history + restore_file), lists protected paths that must NOT be moved (BRAIN.md, profile.md, memory/, knowledge/sources/), and adds a caveat about updating path-based links. It routes the agent to alternatives and states when-not conditions.

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

propose_connectionA

Propone agregar un server MCP a las Conexiones de brain. NO lo agrega: el usuario lo aprueba con un click (en el chat o en Conexiones) viendo el comando o la URL. - Server remoto: url="https://…/mcp" (si pide login, el usuario inicia sesión al aprobar). - Server local: command + args, ej. command="npx", args=["-y", "@modelcontextprotocol/server-github"] o command="uvx", args=["mcp-server-fetch"]. env/headers: claves que pide (ej. {"GITHUB_TOKEN": "…"}). note: una línea que explique qué hace. Si falta un dato (una API key), pediselo al usuario antes.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNo
urlNo
argsNo
nameYes
noteNo
commandNo
headersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it discloses the key non-mutating behavior (proposal pending user approval), the approval surface (chat/Conexiones), and auth handling (user logs in on approval for remote servers). Rate limits and return format are not covered, so not a 5.

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?

Front-loads the crucial 'does NOT add' fact, then uses tight bullets for remote vs local vs note. Dense but every line carries actionable information; minor redundancy between the note bullet and the closing instruction.

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 description covers the behavioral and parameter essentials for a 7-param, zero-coverage proposal tool. Remaining gaps (exact approval mechanics, error cases) are minor against that coverage.

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%, so the description must compensate, and it does — explaining url, command, args, env, headers, and note with concrete examples (npx/uvx invocations, {"GITHUB_TOKEN": "…"}). Only 'name' and some edge details are left unexplained, so strong but not exhaustive compensation for seven undocumented params.

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

Purpose5/5

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

States a specific verb (propose/add) and resource (MCP server to brain's Connections), and crucially clarifies that it does NOT actually add the connection — the user approves it. An agent can distinguish this from list_connections or refresh_connectors without opening a schema.

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?

Gives clear operational context: remote servers use url, local servers use command+args, and it tells the agent to ask the user when a value (e.g. an API key) is missing before proceeding. No explicit when-not or named alternatives, but the usage model is well defined.

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

propose_graph_changeA

Propone cambiar conexiones del grafo (el related de las notas). NO cambia nada: valida el pedido, arma una imagen con los cambios marcados y el usuario la aprueba o la rechaza con un click. changes: [{"type": "add_link" | "remove_link", "source": "", "target": "", "label"?: "usa"}] (nombre, ruta o nombre de archivo de cada nota; hasta 10 cambios). reason: una línea con el porqué. Usala en vez de set_frontmatter(related) cuando el usuario pida conectar o desconectar notas.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNo
changesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so: it discloses that nothing is changed, that the request is validated, that an image with marked changes is produced, and that the user approves or rejects with a click. This non-mutating preview/approval flow is exactly the behavioral context an agent cannot get from structured fields.

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?

Front-loads the core purpose and the non-mutating guarantee, then the payload format, then routing guidance. Every sentence earns its place, though the inline format specification for `changes` makes it denser than a purely prose description.

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 proposal tool with an output schema (the preview image) and no annotations, the description covers purpose, safety semantics, payload format, and sibling routing. Nothing an agent needs in order to call it correctly is missing.

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

Parameters5/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 and does: it enumerates the `changes` item shape (type with allowed values 'add_link'|'remove_link', source, target, optional label), the accepted note identifier forms (nombre, ruta o nombre de archivo), a limit of 10 changes, and that `reason` is a one-line rationale. This exceeds the bare schema, which types `changes` only as an unconstrained array of objects.

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

Purpose5/5

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

States a specific verb and resource ('propone cambiar conexiones del grafo, el `related` de las notas') and immediately distinguishes itself from sibling write operations by declaring it is a proposal, not a mutation. An agent can tell this apart from set_frontmatter or write_file without opening a schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: 'Usala en vez de set_frontmatter(related) cuando el usuario pida conectar o desconectar notas.' It names the alternative sibling and the triggering user intent, leaving nothing to inference.

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.

read_urlA

Lee una página web y devuelve su texto, SIN guardarla en el vault (para guardarla, save_url). Sirve para leer la documentación de un server MCP antes de proponerlo.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations, so the description carries full burden. It does disclose the key non-destructive trait (returns text without saving to the vault), which is valuable. However it omits failure modes an agent would need: non-HTML/JS-rendered pages, paywalls, network errors, and the fact that output is truncated at max_chars.

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 tight sentences with the primary distinction (read-only, no vault persistence) front-loaded before the use case. No filler.

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 format needn't be explained, and the non-persistence behavior is covered. But with 2 parameters at 0% schema coverage and no mention of truncation or retrieval failure modes, the definition is not complete enough for an agent to call it confidently.

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 says nothing about either parameter. In particular max_chars (default 8000) controls truncation of the returned text, a behaviorally significant detail that is documented nowhere.

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

Purpose5/5

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

States a specific verb and resource ('Lee una página web y devuelve su texto') plus the crucial scope boundary: it does NOT persist. It explicitly names the sibling save_url as the contrasting tool, so an agent can distinguish the two without opening either schema.

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

Usage Guidelines5/5

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

Gives both a when-to-use ('leer la documentación de un server MCP antes de proponerlo') and an explicit alternative with its selecting condition ('para guardarla, save_url'), which is the exact routing decision this tool competes with.

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

refresh_connectorsA

Vuelve a descubrir las tools de todas las conexiones activas (después de conectar una app nueva).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It implies a state-refreshing operation but never states whether it is safe/idempotent, whether it mutates stored state, what it costs, or what happens to tools from removed apps. For a refresh operation with zero annotation coverage this is a clear gap.

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 sentence that front-loads the action and appends the trigger in parentheses. Zero waste, nothing to trim.

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 an output schema present, return values need not be explained, and a zero-param tool has little surface to document. The trigger condition makes it usable. It nonetheless lacks any behavioral note (safety, side effects) that would fully close the loop in the absence of annotations.

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 zero parameters, so there is nothing to document and the schema coverage of 100% is trivially satisfied. The baseline for a 0-param tool applies, and the description correctly implies the operation applies to all active connections with no scoping input.

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+resource: re-discovering the tools of all active connections. An agent can grasp the operation immediately. However, it does not differentiate itself from the sibling refresh_sources, leaving the agent to infer the boundary.

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

Usage Guidelines4/5

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

Provides an explicit trigger condition — 'después de conectar una app nueva' (after connecting a new app) — which tells the agent when this is warranted. It does not name alternatives (e.g. refresh_sources) or exclusions, so it stops short of 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.

refresh_sourcesA

Vuelve a bajar una fuente guardada (path de knowledge/sources/…) o todas si no pasás path. Si la página cambió, actualiza el .md y los índices; si falla, conserva la última copia buena y anota el error. Puede tardar si son muchas.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo

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, the description carries the full burden and mostly succeeds: it discloses that changed pages update the .md and indexes, that failures preserve the last good copy and log an error, and that runs can be slow. It omits auth/permission requirements, which is the remaining gap.

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

Conciseness5/5

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

Three short sentences, each front-loaded with new information: scope, success/failure behavior, then timing. 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?

An output schema exists so return values need no explanation, and the description covers behavior, error handling, and timing for an annotation-free tool. The missing piece is explicit routing against sibling tools such as save_url.

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%, so the description must compensate, and it does: it names the path format (knowledge/sources/…) and explains the default ('todas si no pasás path') for the sole parameter, making the optionality meaningful.

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?

Starts with a specific verb+resource ('Vuelve a bajar una fuente guardada') and scopes it to saved sources under knowledge/sources/. This clearly distinguishes it from siblings like save_url (new URLs) and list_sources (enumeration).

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 states the two invocation modes (single path vs all when path is omitted), which implies when each applies. However, it never contrasts with alternatives like save_url or refresh_connectors, leaving the agent to infer routing.

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_knowledgeB

Búsqueda híbrida en las fuentes scrapeadas y lo capturado de conexiones: semántica (sentido) + por palabra exacta (nombres propios, IDs, fechas, números). Devuelve chunks con url, source_md_path, score (similitud semántica, None si solo matcheó por palabra) y match.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo

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?

No annotations are provided, so the description carries the full burden. It does disclose meaningful behavior: hybrid semantic/keyword retrieval and, valuably, the score semantics (None when only a keyword match occurred). However it omits operational constraints such as result limits, permissions, or how scoring/ranking is bounded.

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?

Two sentences, front-loaded with the core purpose and with the retrieval modes and return shape following. Dense but efficient, with essentially no filler; it could be tightened slightly but every clause carries information.

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 the return-value explanation is a bonus rather than a requirement. For a two-parameter search tool the description covers what it does and returns, but leaves out the when-to-use guidance and the top_k parameter, which is the main completeness gap.

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% and neither parameter is named in the description. The aside about exact-word matching for 'proper names, IDs, dates, numbers' indirectly hints at what query content works well, but top_k is entirely undocumented and there is no explicit query-format guidance, so the gap is not compensated.

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 action and resource: hybrid search over scraped sources plus captured connections, and names both retrieval modes (semantic + exact word). This is far more than a restatement of the name, though it does not explicitly differentiate itself from any sibling (none of the siblings are competing search tools, so the practical risk is low).

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 explains how the search works but never says when to reach for it versus alternatives like list_sources, read_file, or vault_overview. There are no exclusions, no prerequisites, and no guidance on choosing between this and other retrieval paths, so the agent must infer usage.

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

set_frontmatterA

Cambia campos del frontmatter (description, tags, related, name…) sin tocar el contenido. Ej: set_frontmatter("projects/brain.md", {"description": "App de memoria local"}). null borra el campo. Preferila a reescribir el archivo cuando solo cambia un metadato.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
fieldsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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. It usefully discloses that content is preserved and that a null value deletes the field, but says nothing about permissions, whether it merges vs overwrites frontmatter, or behavior on files without existing frontmatter.

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?

Front-loads the core action, then adds example, null semantics, and a preference hint. Every clause earns its place; slightly dense but no padding.

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 no explanation, and the two parameters are well covered. For a 2-param mutation tool the description is nearly complete, with only edge-case behaviors left unstated.

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 'fields' object is nested, yet the description compensates: it lists example keys (description, tags, related, name), shows a concrete call, and defines the null-deletes semantic that the schema does not. path is illustrated via the example.

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+resource ('Cambia campos del frontmatter') with an explicit scope note ('sin tocar el contenido') that separates it from whole-file rewrites. It is clear what it does, though it does not name a sibling like write_file directly.

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?

Explicitly recommends itself over rewriting the file 'cuando solo cambia un metadato', giving a clear condition that selects it against the write_file/append_file family. No when-not guidance beyond that, but the alternative is named.

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.

vault_overviewA

Panorama del vault para ordenarlo: carpetas, notas sueltas, sin conexiones o sin descripción, tags repetidos o con variantes y nombres parecidos. No cambia nada.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations at all, the description carries the full burden, and it discharges the most important part: 'No cambia nada' explicitly declares the operation is non-mutating and therefore safe to run at any time. It says nothing about cost, latency, or whether the scan can be large on a big vault, which is a minor remaining gap for a zero-parameter read tool.

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

Conciseness5/5

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

One tight sentence plus a one-clause safety statement. The diagnostic targets are front-loaded as a scannable list and no sentence is 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?

An output schema exists, so return values need not be described, and the description still previews the categories of findings. For a zero-param read-only tool this is nearly complete; only the relationship to list_vault is left unstated.

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 zero parameters, so there is no parameter semantics to communicate; baseline 4 applies. The enumeration of what the overview reports (folders, orphan notes, tag variants) partially stands in for describing the output shape.

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+resource in substance: it produces a diagnostic overview of the vault for organizing it, and enumerates exactly what it surfaces (folders, loose notes, unlinked/undescribed notes, duplicate or variant tags, similar names). It does not, however, distinguish itself from the sibling list_vault, which an agent could easily confuse it with.

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?

'Para ordenarlo' implies the cleanup/organization scenario, which is a reasonable usage cue. But there is no explicit when-to-use vs. when-not, and no pointer to list_vault or search_knowledge as alternatives, so the agent must infer the choice.

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. 3 tool updatesv0.1.3
    • Addedfact_check
    • Addedinspect_graph_region
    • Addedpropose_graph_change
  2. 12 tool updatesv0.1.1
    • Changedadd_memory1 field changed
      • addedInput schema / properties / supersede
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Supersede"
        +}
    • Addeddistill_skill
    • Addedlist_connections
    • Addedmemory_history
    • Addedmove_file
    • Addedpropose_connection
    • Addedread_url
    • Addedrefresh_connectors
    • Addedrefresh_sources
    • Addedreindex_keyword_search
    • Addedset_frontmatter
    • Addedvault_overview
  3. 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.6/5.0

Scored across 28 tools

Disambiguation4/5

Most tools target clearly distinct resources: file editing (append/str_replace/set_frontmatter/write), sources, memory, connections, graph and skills are well separated. The only mild overlaps are among the four write/edit tools and between list_vault and vault_overview, but descriptions make the boundaries clear enough.

Naming Consistency4/5

Names follow a consistent snake_case verb_noun pattern (append_file, save_url, add_memory, propose_connection). A few are noun-based rather than verb-based (file_history, memory_history, fact_check, vault_overview), but the convention is still predictable and readable.

Tool Count3/5

28 tools is on the heavy side, though the server covers several genuinely distinct sub-domains (files, sources, memory, skills, connections, graph, fact-check). It is borderline rather than bloated, but consolidating the write/edit variants could trim it.

Completeness4/5

File lifecycle is thoroughly covered (read/write/append/replace/frontmatter/delete/move/history/restore), plus sources, memory, connections and graph. Minor gaps remain: no direct memory read/list or full-text search over plain vault notes, though read_file and search_knowledge partially cover these.

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.
    439 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.
    213
    MIT