Metis
Metis is a personal research assistant MCP server that manages projects, tasks, literature, memory, and knowledge graphs, and provides specialist agent workflows.
Project & task management: create, update, archive, delete projects and tasks; track progress; load project context.
Literature & library: search your seeded library, archive/remove items, export knowledge as Markdown, semantic PDF search, connect folders.
Memory & knowledge graph: store episodic/semantic/procedural memories, search them, index a knowledge graph, find connections between notes/ideas.
Idea & journal capture: capture ideas, add journal entries, daily notes, recall decisions, manage glossary terms.
Agent orchestration: run the Metis pipeline (11-stage), route to specialist agents, log agent runs, propose/review skill improvements.
Data safety & security: check content for PII/injection, validate pipeline stages, enforce constitution layers.
Dashboard & automation: generate daily insights, save daily briefs, track files, list generated images, session bootstrap, spans/telemetry.
Supports importing references from Mendeley via BibTeX export, integrating the user's reference manager with the local literature database.
Monitors PubMed for recent publications matching configured research topics, fetching paper metadata and adding them to the news briefs for literature watch.
Fetches and aggregates news from RSS feeds (e.g., WHO outbreak news, CDC Emerging Infectious Diseases, PLOS Neglected Tropical Diseases) to keep the user informed of latest developments.
Synchronizes the user's Zotero library, importing paper metadata (titles, authors, abstracts) and linking them to the local PDF library for search and citation management.
๐ Knowledge layers are built, not bundled
Metis ships with the machinery to build a searchable knowledge layer and none of the content. Point it at a folder of your own papers, reports and guidance and it indexes them into a corpus you can ask grounded, cited questions against. Prefer to start with something? Install a background pack โ an index over public sources, distributed as vectors and a manifest, never as the source documents.
See it in action
Related MCP server: paperqa-mcp-server
Why researchers trust it
๐ It cites your own sources. Knowledge answers are anchored in your indexed library, with document- and page-level citations โ not the model's guesses. Your library grounds the answer; it doesn't fence it in. Metis still brings in recent literature, guidelines and wider knowledge where they matter, and tells you which is which โ so anything worth citing that you don't have yet becomes a paper you can add.
๐ It connects everything you know. Every paper, meeting transcript, idea, note, journal entry and task is linked to the rest of your work. The grant you write today surfaces a method paper from last year and a meeting note from March โ you never go looking; Metis brings it to you.
๐ง It routes to the right expert. Ask in plain language, and Metis hands the work to the right one of 30+ specialist skills โ Librarian, Methods Coach, Writing Partner, Meeting Memory, Epidemiologist, Course Builder, and more.
๐ It improves itself. After every task it logs what worked and what fell short; each week it drafts improvements to its own behaviour and waits for your approval. Most MCP servers are static โ Metis gets sharper the longer you use it.
๐ซ It refuses to invent. Ask about something that isn't in your library and Metis tells you so, instead of fabricating a plausible-sounding answer. (An automated test covers the retrieval half of this: that an in-corpus question returns the right document with its page, and that an out-of-corpus one scores markedly weaker. Whether the model then says so in words is not yet asserted by a test.)
๐ It stays on your machine. Local embeddings, local database, local files. Your papers, patient-adjacent data, and unpublished work never leave your computer.
๐ฅ See it in action above โ the dashboard, a tour of the tabs, the silent layer into Claude Desktop, and Metis improving its own work.
Easiest way to try it: install Claude Desktop and run the 3-step setup โ a demo workspace is pre-loaded, so you start with something to explore instead of a blank screen.
Who is this for?
๐ฌ I'm a researcher
No programming background needed. Install in minutes, start working immediately. Everything Metis does is explained in plain language.
โ๏ธ I'm a developer
Open-source, extensible, well-architected. Build domain packs, add agents, extend the MCP server, or deploy for your institution.
What is Metis?
Metis is a research companion built on top of Claude that keeps your data on your own machine. It gives every AI conversation a persistent memory of your domain, your papers, your projects, and your working history. It routes your requests to the right specialist, does the work, records the result, and returns a plain answer โ without requiring you to prompt or configure anything.
The app runs on your machine and your data stays there โ your documents, notes, embeddings and memory never leave it. The reasoning is powered by Claude, so the text you choose to send for analysis goes to the Anthropic API; everything else is local. (See Data Protection for exactly what leaves your machine, and when.)
The short version: imagine an AI that already knew your field and your literature, connected every paper, meeting, idea and note you've captured, sent each request to the right specialist โ and got sharper about your work, and about itself, the longer you used it. That's Metis.
How it works
Metis is not a separate app you log into. It's a small service that runs quietly in the background and connects Claude to your research โ your papers, your memory, your projects.
A background service (the "MCP server") starts with your computer. It's the bridge between Claude and your files โ you never interact with it directly.
You talk to Metis through Claude, two ways:
Claude Desktop (easiest): open it and pick a Metis prompt (e.g. Metis, Metis Doctor) from the prompt menu โ or just ask.
Claude Code (terminal): type
/metisfollowed by your request.
You ask in plain language. Metis works out which of its 33 specialists should handle it, does the work using your library and memory, and answers โ citing sources.
That's it. There's nothing to learn before you start; the dashboard is optional visibility on top of all this.
Design Philosophy
Every AI conversation starts from zero. You spend ten minutes re-explaining your context, and when the session ends, it's gone. Generic AI tools are powerful but stateless โ they know everything about the world and nothing about you.
Metis is built on one idea: the AI should know you. And it should keep getting better โ on its own.
Not just your name โ your domain, your literature, your projects, your preferred working style, your open questions, your meeting notes from last month, and the paper you added to your library yesterday. The longer you use Metis, the better every response gets. Not because the AI changes โ because Metis knows you better.
You don't need to follow developments in AI. Metis does that for you. Every week, Metis reviews its own performance across all your sessions, identifies where it could have done better, drafts improvements to its own behaviour, and waits for your approval before applying them. As better methods and models become available, those improvements are folded in the same way โ always proposed for your approval, never applied behind your back. As a researcher, you focus on your research. Metis handles keeping itself sharp.
The core mechanism is cross-pollination. Every time you capture an idea, add a paper, record a meeting, or complete a task, Metis connects it to everything else in your research universe. A paper you indexed a year ago surfaces when you're writing a grant today. A meeting note from March links to the idea you captured this morning. An open question from six months ago connects to a new paper that just came out. These connections happen automatically, in the background, without you having to search for them. This is what makes Metis a research companion rather than a search tool โ it thinks across your entire body of work so you don't have to hold it all in your head.
This is genuinely new ground. The individual components โ local language models, retrieval-augmented generation, agent routing, vector search โ all exist independently. What Metis presents is a coherent integration of all of them, purpose-built for the specific demands of research work: long timelines, sensitive data, deep literature, and knowledge that accumulates over years. A system that grows with you, and surfaces connections for you โ rather than starting from zero every session. To our knowledge, nothing quite like this exists as a unified, locally-running, researcher-facing system.
Three levels โ choose your entry point
Level | What it is | Best for |
โ๏ธ MCP server only | A background service that runs alongside Claude. Persistent memory, session awareness, 30+ specialist agents โ no dashboard, no visible app. | Researchers who use Claude already and want it to know their work |
๐ With the dashboard | Full visibility across your research life โ papers, ideas, meetings, tasks, projects, all connected. Built for cross-pollination (ideas linking to literature) and brain off-loading (tracking leaving your head, entering the system). | Researchers who want a complete research operating environment |
๐ Metis OS | Connects to email, calendar, data systems, and institutional infrastructure โ a unified intelligence layer for your entire working environment. | The longer vision. Still in development. |
Where things stand today: The MCP server, 34 agents, and the 9-tab dashboard are fully operational and used daily. The one-click installer and the pre-loaded domain knowledge layer are still being refined. This is a working system โ not vaporware โ but it is also not finished. If something breaks, please open an issue. That feedback shapes what gets built next.
For Researchers
No programming background needed. Everything below is point-and-click or copy-paste.
How Metis is powered โ you choose (you won't burn API tokens just by using it)
Metis runs two ways, and you pick:
On your Claude subscription โ no API key, no per-token bills. This is the everyday path: you talk to Metis through Claude Desktop or Claude Code, and the dashboard's "โฆ Update with Claude" / brainstorm buttons open Claude Desktop on your subscription. Most people use Metis entirely this way.
With an Anthropic API key โ only needed for things that run while you're not there: the scheduled morning scan and automated brief generation. Pay-per-token, typically a few cents a day.
With a local model (Ollama) โ optional, for fully-offline helper tasks (e.g. the data assistant).
The installer asks for an API key so automation can run, but you can skip it and use Metis on your subscription alone. Nothing in the interactive experience requires the API.
Install
Windows (most people)
Run it. Windows may say the app is from an unknown publisher (the installer is not code-signed yet): click More info โ Run anyway. No administrator rights, no Python and no WSL needed โ setup fetches what it needs.
Answer a few questions โ your name, role, what you work on and what you want to follow in the news. Choose Full (assistant + dashboard) or AI only. You can load a fictional sample workspace to explore first and remove it later with one click.
Open Claude Desktop with the Metis โ Open AI shortcut and say hello. Setup installs Claude Desktop if you do not have it, connects Metis to it โ and to Claude Code, VS Code and Cursor if you have them โ and offers to restart it if it was open. The Metis shortcut opens the dashboard, with a tour at
/tour.
You need: Windows 10 (1809) or later, an internet connection during setup, and a Claude account for Claude Desktop. An Anthropic API key is optional โ see below.
Linux (macOS should work the same way, but has not been tested yet)
git clone https://github.com/SVerITG/Metis.git
bash Metis/system/mcp-server/setup-mcp.shThe script asks two questions (Full or AI only, sample workspace) and does the rest: it fetches its own Python, connects Metis to Claude Desktop and Claude Code, and on a Linux desktop adds Metis to the app menu.
After installation
Is everything working? An install doctor checks everything Metis needs every
day โ your computer, Metis's own programs, each AI app it is connected to (and that
Metis starts from it), the dashboard and its morning scans, the background tasks
and your data โ and repairs what it can. The full list is
system/install/essentials.json. The result is on
the dashboard's Metis tab, with Run health check and Check and repair
buttons; in Claude, say "check that everything works".
A morning briefing every working day: ask Metis to set it up. Claude Desktop runs it as a scheduled task on your Claude subscription (paid plans), so no API key is needed; the computer must be on with Claude Desktop open at that time.
API key (optional, paid separately): Claude Desktop and Claude Code use your
Claude account, and that is all Metis needs. A key from
console.anthropic.com only adds background features
such as the automatic morning brief; add it on the dashboard when you want them.
It is stored on your computer, in system/.env.
Updating: on Windows, say "update Metis" in Claude Desktop (from 1.3 on), or
download the newest MetisSetup.exe and run it โ your answers, files and database
are kept. On Linux: git pull in the Metis
folder, then bash system/mcp-server/setup-mcp.sh --update.
MCP client configuration
The installer registers Metis with Claude Desktop and Claude Code automatically โ you normally don't need to edit any config by hand. The blocks below are for reference (and for MCP directories): they show how the metis-rc server is wired in.
Metis is not a one-line
npx/uvxserver. Run the installer first โ it builds the local virtual environment, initialises the database, and generates the launch script (run.sh) the configs below point to.
Step 0 โ install (builds the venv + DB, generates run.sh):
bash system/mcp-server/setup-mcp.shClaude Code (any OS) โ done for you by the installer, or add it manually:
claude mcp add metis-rc ~/.local/share/metis-mcp/run.shClaude Desktop โ macOS โ in ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"metis-rc": {
"command": "bash",
"args": ["/Users/<you>/.local/share/metis-mcp/run.sh"]
}
}
}Claude Desktop โ Linux (native) โ in ~/.config/Claude/claude_desktop_config.json:
{
"mcpServers": {
"metis-rc": {
"command": "bash",
"args": ["/home/<you>/.local/share/metis-mcp/run.sh"]
}
}
}Claude Desktop โ Windows + WSL โ in %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"metis-rc": {
"command": "wsl",
"args": ["-e", "/home/<you>/.local/share/metis-mcp/run.sh"]
}
}
}Replace
<you>with your username. The generatedrun.shresolvesMETIS_RC_ROOTfrom a marker file at runtime โ no hardcoded paths. No API key is required to run the server itself.
What you get on day one
Feature | What it does |
30+ specialist agents | Librarian, Epidemiologist, Methods Coach, Writing Partner, Meeting Memory, Course Builder, Career Coach, Critic, and more โ each an expert in their domain |
Grounded answers | Every knowledge question is automatically answered from your own indexed document library with page-level citations โ not AI guesses |
Library management | Import PDFs, sync Zotero or Mendeley, ask "what do my papers say about X?" โ cited answers from your own library |
Morning intelligence brief | Every morning: new papers on your exact research topics, field news, surveillance alerts, and a focus recommendation โ fully personalised |
Live meeting assistant | Follow along in real time, or paste a transcript โ get structured notes, action items, and project cross-references automatically |
Project tracking | Every project gets a tracking record, a context file in its folder, and integration with Claude Desktop. The Update button scans all your project folders for activity. |
Voice capture | Record anywhere, transcribe locally (no API, no upload), route to ideas, journal, or notes |
9-tab dashboard | Today ยท News ยท Knowledge ยท Meetings ยท Learning ยท Work ยท Reflection ยท Presentation ยท Metis โ all live, all local |
Data protection | Six security layers + the |
Cross-pollination | Every idea, paper, meeting, and task is automatically connected to everything else in your research universe. Metis surfaces links across time โ a paper from last year, a meeting note from March, a question you logged at a conference โ without you searching for any of it. |
Token tracking | Every agent run shows exactly what it cost โ which specialist was used, how many tokens, what model. The dashboard Today tab has a live token pulse so you always know your daily usage. Most daily tasks stay under a few cents. |
Tool subset loading | Metis registers 277 MCP tools, but exposing all of them to Claude on every session wastes context. By default, ~80 everyday tools load immediately; the rest are retrieved on demand via |
Metis evolves โ you don't have to | Every week, Metis reviews its own session logs, identifies where it underperformed, and drafts behaviour improvements. You approve or reject them โ nothing changes without your sign-off. New capabilities are folded in the same way. You focus on your research; Metis keeps itself sharp. |
Grows with you | Every agent run adds to your profile. A question asked after six months of use gets a meaningfully better answer than the same question on day one โ not because the AI changed, but because Metis knows you better. |
Key Workflows
Morning
Wake up
โโ Metis scanned overnight
โโ New papers on your configured research topics
โโ Surveillance alerts and field news
โโ Tasks due today, overdue items
โโ Suggested daily focus based on your open projects
โโ Open dashboard โ read morning brief โ start workLiterature
New paper (PDF / DOI / Zotero / Mendeley import)
โโ Librarian indexes it
โโ Added to knowledge graph
โโ Cross-pollinated with existing papers, past ideas, meeting notes
โโ Available for cited semantic search immediately
โโ Ask: "What do my papers say about X?"
โโ Answered with inline citations from your own libraryMeetings
Meeting ends
โโ Paste transcript (Teams / Zoom / any audio file)
โโ Meeting Memory agent processes it
โโ Structured notes with context
โโ Action items: who does what, by when
โโ Cross-references to your projects and open questions
โโ Follow-up tasks auto-added to Work tabIdeas and writing
Idea surfaces
โโ Ctrl+K โ capture instantly (i: idea ยท n: note ยท t: task ยท q: question)
โโ Metis cross-pollinates immediately
โโ Related papers + past ideas surfaced automatically
โโ Writing Partner โ draft ยท Librarian โ sources ยท Methods Coach โ check argumentTeaching and courses
Course topic defined
โโ Course Builder
โโ Generates lessons, slides, assessments, question banks
โโ Flags new papers relevant to your course automatically
โโ Gap analysis against current literature
โโ Spaced repetition for your own knowledge maintenanceThe Dashboard
The 9-tab dashboard runs on your own machine at http://127.0.0.1:8080 โ no hosted service, no third-party account, and your papers, notes and database stay on your disk. The thinking happens through Claude, so you bring your own Claude subscription or an API key (see How Metis is powered).

The Today tab โ morning briefing, active project, progress, news radar, and quick stats. Everything personalised to your research domain.
Tab | What it does |
Today | Morning brief, priority task queue, news rail, quick capture ( |
News | Field news, surveillance alerts and RSS signals relevant to your work |
Knowledge | Semantic PDF search, literature cards, knowledge graph, coverage gap analysis |
Meetings | Live assistant, transcript import, action items, cross-references |
Learning | Course progress, spaced repetition, competency map |
Work | Tasks, project cards, activity tracking, one-click open in VS Code / RStudio / Claude โ with a Board view (week ahead ยท intentions ยท project pipeline) |
Reflection | Three piles that are actually different โ ideas, a journal, and threads. A thread is a question you keep returning to; open one and the graph shows that thread and what it touches, one hop out. Plus an archive, because nothing here is deleted. |
Presentation | An index of the slide decks you have already delivered, grouped by collection โ and the lesson lineage on top: which talks you have given more than once, where, and what you changed each time. Master slides become named styles; the builder assembles a brief rather than slides. |
Metis | Agent run history, self-improvement proposals, system health, identity card |
How Metis Knows You
When you first install Metis, a setup wizard walks you through your profile:
research domain ยท specific interests ยท active projects ยท working style ยท tools you use ยท data sensitivity level
This creates your identity card โ a living profile that every agent reads before responding to you. It grows over time. Every session adds context. Every idea you capture tells Metis what you're thinking about.
A question asked after six months of use gets a meaningfully better answer than the same question on day one โ not because the AI changed, but because Metis knows you better.
Data Protection
Researchers handle sensitive data. Most AI tools don't take that seriously.
Patient data, embargoed results, unpublished findings โ these should never leave your machine. Metis was designed with this in mind from the start.
What leaves your machine (and when):
Service | What | When | Optional? |
Anthropic Claude API | Text you send for analysis | On demand | Required for AI |
PubMed / OpenAlex | Your research search keywords | Daily morning scan | Yes |
Zotero | Library metadata (titles, abstracts, tags) | Daily sync | Yes |
CrossRef | DOI queries | On demand | Yes |
HuggingFace | Model name only โ downloads embedding models | First run | Yes |
Everything else โ your documents, voice recordings, PDF text, meeting notes, patient-adjacent data โ stays on disk.
Security layers:
Layer | What it does |
Pre-tool hook | Checks every tool call for injection attempts and restricted paths; peeks at a data file's header locally before it's read and asks you to confirm before individual-level data is loaded into the conversation |
PII detection | 11 checks, 4-level classification. Sensitive data is classified and refused at pipeline entry |
Injection probe | Detects prompt injection in external content (papers, transcripts) |
Constitution | 14 machine-readable rules applied to every deep agent run |
Red lines | 5 non-overridable rules enforced at code level โ no override possible |
AES-256 encryption | All backups encrypted at rest |
The recommended pattern for sensitive data: send code, not data.
The strongest protection isn't a scanner โ it's never putting the raw data in a prompt at all. Metis is built for this. Ask it for an analysis script (R or Python); you run it on your own machine against your real data; and only the derived outputs โ variable names, value counts, summary tables, model coefficients, a data dictionary โ come back to Metis. Claude reasons over the shape of your data, never the records.
Your real dataset (patient rows) โโ stays on your machine, never sent โโโ
โ you run Metis's R/Python script locally โ
โผ โ
Derived metadata (column names, unique values, Table 1, model summary) โโ safe to share โโโบ Metis
โ โ
โผ โ
Metis builds the dashboard / writes the methods / interprets the model โโโโโโโโโโThis is exactly how the dashboards and analyses in our own work were built: the raw surveillance data never left the machine, yet Metis could profile it, name every variable, list unique values, and generate a full dashboard.
Just run /safe-analysis (Claude Code or Claude Desktop) and Metis walks you through it end-to-end โ it proposes the local script, tells you exactly which metadata to paste back, and never asks for raw rows. Two backstops sit underneath: the pre-tool hook peeks at a data file's header locally and asks before any individual-level data is read into the conversation, and the Data Guardian (PII scan + 4-level classification at pipeline entry) catches sensitive content that slips into a prompt anyway. With the pattern above, neither usually has to fire.
How Metis Stays Current โ So You Don't Have To
AI is moving fast. New models, new capabilities, new research tools appear every month. Most researchers don't have time to follow it. Metis is designed to handle this for you.
After every agent run, Metis logs a reflexion โ what went well, what fell short, what context was missing. Every week it aggregates these into themes. Every week it drafts behaviour improvements with a clear rationale. You review the proposals in the Metis tab โ one click to approve, reject, or edit โ and the approved changes are written to disk.
This means Metis gets better at working with you specifically, week after week. It also means that as new AI developments become available and get integrated into Metis, you receive the improvements without having to do anything. Your job is your research. Metis's job is to stay sharp.
The self-improvement loop in detail:
After every agent run โ reflexion logged: what went well, what could improve, what was missing
Weekly โ themes extracted across all sessions; patterns identified
Proposal drafted โ a concrete proposed change to agent behaviour, with reasoning
You review in the Metis tab โ approve, reject, or edit before anything applies
Applied with backup โ the update is written with a timestamped rollback point
No change to Metis's behaviour ever happens without your explicit approval. The system proposes; you decide.
For Developers
This section assumes familiarity with Python, Git, and the command line.
Architecture
flowchart LR
U([Researcher])
subgraph Harness["AI Harness (Claude Code / Desktop)"]
METIS[Metis\nrouter agent]
AGENTS[Specialist agents\n34 agents]
WATCHERS{{Watchers\nData Guardian ยท Cybersecurity}}
end
subgraph Platform
MCP[MCP Server\n278 tools\nFastMCP]
DASH[Dashboard\nFastAPI + HTMX]
DB[(SQLite\nWAL mode)]
end
subgraph Memory
EPIS[Episodic]
SEM[Semantic\nvector search]
REFLEX[Reflexion log]
end
Skills[/CLI Skills\n/metis ยท /metis-morning ยท โฆ/]
U -->|asks| METIS
U -->|clicks| DASH
METIS -->|routes to| AGENTS
AGENTS -->|uses| MCP
MCP --- DB
DASH --- DB
WATCHERS -.guards.-> AGENTS
AGENTS -->|writes| REFLEX
REFLEX -->|proposes edits to| AGENTS
MCP --- Memory
Skills --> METIS
style WATCHERS fill:#fff4e6,stroke:#9a7b3c
style REFLEX fill:#eef4f1,stroke:#2d4a3a,stroke-dasharray:3 3Stack
Layer | Technology |
AI harness | Claude Code, Claude Desktop (primary); Gemini (experimental) |
MCP server | Python 3.10+, FastMCP, runs in local venv |
Dashboard | FastAPI + HTMX + Jinja2 โ no JavaScript framework |
Database | SQLite WAL mode, 65 tables |
Vector memory | sqlite-vec + nomic-embed-text-v1.5-Q (768 dims, local ONNX) |
Semantic PDF search | sqlite-vec โ local PDF chunk index, no external API |
Host OS | Windows + WSL2 (Ubuntu 20/22/24) ยท macOS ยท Linux |
Memory โ 5 layers
Layer | What it stores |
Episodic | Session events and observations (discovery ยท decision ยท implementation ยท issue) |
Semantic | Vector-indexed content (sqlite-vec + nomic-embed-text-v1.5-Q, 768 dims) |
Procedural | Skill files and agent contracts โ the agent's persistent behaviour |
Working | Active session context and current project focus |
Reflexive | Reflexion log and improvement proposals |
Knowledge Layer & Grounded Answers (RAG)
When you ask a knowledge-intensive question, Metis retrieves relevant passages from your indexed document library before the specialist agent answers. The agent grounds its response in what it can read from your library โ not only what it was trained to recall.
You ask Methods Coach:
"Which variance estimator should I use for my Poisson MLM with overdispersion?"
Metis retrieves before routing:
โ Leyland (2020) Multilevel Modelling for Public Health, p.142 โ score 0.87
โ Bates lme4 vignette, p.28 โ score 0.71
Methods Coach answers grounded in those passages, citing both sources.Component | Details |
Embedding model |
|
Vector store |
|
Chunking | 3,200-character chunks, 400-character overlap |
Score threshold | Chunks below 0.4 similarity dropped before injection |
Build your field's knowledge layer. On first setup, the wizard's research-background questionnaire briefs the Background Maker, which harvests, scrubs, and indexes your discipline's literature into the local RAG store โ so every agent answers from your corpus, cited. Grow it anytime with /background build <topic>.
Pre-loaded knowledge layers (this edition):
Layer | Documents | Covers |
Public Health Background | 34 | WHO guidelines, global health reports, social determinants, NCDs, maternal & child health |
Epidemiology & Methods | 10 | STROBE, WHO Basic Epi, Leyland MLM, Bates lme4, PRISMA 2020, SaTScan, CIFOR |
Security Layers (detail)
pre-tool-use.mjsโ 13 injection patterns, domain allowlist, path restrictions (every tool call)guardrails.pyโ injection probe on all external content (papers, web, transcripts)safety.pyโ 11 PII checks, 4-level classification, sensitive data refused at pipeline entryconstitution.mdโ 14 machine-readable rules for deep and chained agent runsred-lines.mdโ 5 non-overridable rules enforced at code level
Token Efficiency
Model routing โ Haiku for triage/summaries, Sonnet for most work, Opus only for deep reasoning; most daily usage never touches Opus
Surgical context assembly โ each agent gets only the context relevant to its task, not full history
Max-turns guardrail โ stops at 20 turns, prompts
/clearSession handoff โ under 3 KB state capture at session end; no re-paying for context already established
Token pulse widget โ real-time usage visible in the dashboard
Cross-AI Support
Harness | Status |
Claude Code | โ Primary โ full MCP + skills + hooks |
Claude Desktop | โ Primary โ full MCP + memory; no CLI skills |
Gemini 2.0+ | ๐ฌ Experimental |
VS Code ยท Cursor | ๐ก Connected by setup and checked by the install doctor โ MCP tools and prompts; no skills or hooks |
OpenAI | ๐ก Partial โ MCP tools only |
Installation Options
Option 1 โ Single command (Linux, macOS, WSL)
bash <(curl -fsSL https://raw.githubusercontent.com/SVerITG/Metis/main/system/mcp-server/setup-mcp.sh)Detects Ubuntu 20/22/24, Debian, macOS Homebrew. Creates venv, installs all dependencies, registers with Claude Code and Claude Desktop. Idempotent โ safe to re-run.
# Profile overrides (skip the interactive menu):
METIS_PROFILE=light bash <(curl -fsSL ...) # MCP server only (~5 min)
METIS_PROFILE=standard bash <(curl -fsSL ...) # MCP + dashboard (~15 min)
METIS_PROFILE=full bash <(curl -fsSL ...) # Standard + scheduler (~25 min)Option 2 โ Clone and install (any platform)
git clone https://github.com/SVerITG/Metis.git
cd Metis/system/mcp-server
bash setup-mcp.shOption 3 โ Manual
git clone https://github.com/SVerITG/Metis.git
cd Metis/system/mcp-server
python3 -m venv .venv && source .venv/bin/activate
pip install -e "."
export METIS_RC_ROOT="$(pwd)/../.."
export ANTHROPIC_API_KEY="sk-ant-..."
python -m metis_mcp.server # MCP server
cd ../app-py && bash run.sh # Dashboard โ http://127.0.0.1:8080Option 4 โ Docker (platform test matrix)
# Full platform test โ Ubuntu 24/22 + Debian in parallel
docker compose -f system/install/docker/docker-compose.test.yml up --build
# Production stack
docker compose -f system/install/docker/docker-compose.yml up -dRegister with Claude Code
~/.claude/settings.json:
{
"mcpServers": {
"metis-rc": {
"command": "/home/<username>/.local/share/metis-mcp/run.sh"
}
}
}Register with Claude Desktop (Windows + WSL)
%APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"metis-rc": {
"command": "wsl.exe",
"args": ["-e", "bash", "/home/<username>/.local/share/metis-mcp/run.sh"]
}
}
}Configuration
File | Controls |
| Domain, interests, style โ generated by setup wizard |
| 14 rules applied to every deep/chain run |
| 5 non-overridable rules |
| Model routing, handoff thresholds |
| Behavioural contract per agent โ directly editable |
| Security gate on all tool calls |
Dependencies
Package | Purpose |
| MCP protocol |
| Dashboard |
| Local vector search |
| Local embeddings (no API) |
| RSS feed parsing |
| User config |
| Async HTTP |
| Data analyst tools |
| AES-256-GCM backup encryption |
| Zotero sync |
| Mendeley BibTeX import |
| Claude API |
Editions and Roadmap
Metis is one piece of software. Everything field-specific arrives as a background pack โ an index over sources, distributed as vectors and a manifest, never as the source documents themselves.
Status | What it is | |
Metis | โ Live (v1.0) | The system: MCP server, 33 specialists, dashboard, knowledge machinery. Ships with no domain content. |
Background packs | ๐ Open | Public Health, Biomedical, Clinical and any other field โ installed after setup, contributions welcome |
Institute deployment | ๐ Future | Multi-user, shared knowledge base |
What's in each domain edition: pre-configured journals + RSS feeds ยท specialist agents ยท domain ontology ยท curated background knowledge library
Want to build a domain pack? Fork
Metis, add your field's knowledge library, agents, and RSS feeds, and open a PR.
Course Packages
Standalone course packages you can drop into any Metis installation:
Package | What it covers |
Sampling Strategies | Probability and non-probability sampling, sample size, complex survey designs, weighted estimation |
Spatial Epidemiology | Spatial autocorrelation, kernel density, SaTScan, LISA, disease mapping in R and GeoDa |
Genomic Surveillance โ shipped | Pathogen sequencing in public health, phylogenetics, WGS pipelines, Nextstrain โ 22 lessons, built backwards from a flagship paper so the lessons decode something real |
Open an issue with label course-package to pilot or contribute.
Development Status
Area | Status |
MCP server (278 tools) | โ Operational, used daily โ ~80 load per session, the rest on demand |
34 specialist agents | โ Operational โ each a dispatchable subagent with its own bound model |
9-tab dashboard | โ Operational, some features in active development |
Windows .exe installer | ๐ง In refinement |
Docker images | โ Test matrix working |
Background packs | ๐ง Actively being expanded |
Automated daily tasks (APScheduler) | โ Operational โ 22 scheduled jobs |
Test suite | โ In place โ 54 files; a deterministic floor of promise, clickthrough, orchestration and security harnesses |
Telegram capture bot | ๐ Planned |
Metis OS (calendar, email integration) | ๐ Future vision |
Contributing
Metis is designed to grow beyond one domain and one researcher. Contributions are welcome โ especially from researchers who use it and know what's missing.
See CONTRIBUTING.md for detailed guidelines.
Most Wanted
Domain packs โ the most impactful contribution. A domain pack adds: key journals + RSS feeds ยท specialist agents ยท a domain ontology ยท a curated background library
Domain | Status |
Public Health & Epidemiology | โ Included |
Social Sciences | ๐ฌ Planned |
Biomedical / Clinical Research | ๐ฌ Planned |
Environmental Science | ๐ฌ Planned |
Economics and Development | ๐ฌ Planned |
Psychology and Behavioural Sciences | ๐ฌ Planned |
Education Research | ๐ฌ Planned |
Nursing and Allied Health | ๐ฌ Planned |
Other high-impact contributions:
Translations โ the wizard and skill files are English-only; translations into French, Dutch, Spanish, German would open Metis to many more researchers
Installer testing โ Windows
.exeand PowerShell on managed machines, corporate environments, and varied hardware; reports of what works and what breaks are valuableNew agents and skills โ specialist agents for use cases not yet covered
Security verification โ independent review of the data-stays-local guarantees (what's kept on the machine vs. sent to the Claude API), PII detection, hook behaviour, and constitution enforcement; if you find a gap, open a private issue
Multi-AI support โ better Gemini and local model (Ollama) support, especially for offline research environments
Bug reports and UX feedback โ if something doesn't work for your workflow, say so
Changelog
Metis is under active development โ see the latest below. (Recent: a month spent on the gap between rendered and working โ 172 controls that drew correctly and did nothing, a search that had never worked, a panel that spent money every time it was opened, and a test harness that reported the opposite of the truth.)
September 2026
A month spent almost entirely on the gap between rendered and working. Every item below looked fine on screen.
What changed |
172 controls drew perfectly and did nothing โ |
Semantic search had never worked from the dashboard โ queries were embedded with the document prefix and never normalised, so the ranking was noise wearing the costume of relevance. Duplicate literature records were collapsed in the same pass (3,084 rows down to 1,099 โ 64% were duplicates), and 2,282 papers that had never been triaged turned out to be unreachable from any screen. |
Every write in the system failed for five minutes after each restart โ the news scan at boot held a single write transaction open across every feed fetch, so no write anywhere in Metis could succeed until it finished. Diagnosed from kernel lock records rather than from the symptom, which had been misread for weeks. |
Two of the three Work views could never be shown โ the class hiding them was |
Four rival counts of one backlog, reduced to one author โ the same number was computed in four places and they disagreed; 34 cancelled tasks were being drawn as live work. A quantity computed in several places drifts, so the fix asserts one author, not one answer. |
A panel that spent money every time you opened it โ one surface made nine paid API calls and took 18.5 seconds on every view, because a themed summary was computed on the render path. It measured as instant in every test, because a test process has no API key and silently fell back to word-counting. Now cached, with the model pass moved behind a control that names its cost. A page that draws a panel must not spend money or block on a network round-trip. |
The test harness reported the opposite of the truth โ it announced "0 of 34 agents have ever run โ routing is broken" while its own report, four sections earlier, counted 733 runs. It was reading a database path retired three months before, and its loader degraded to an empty result instead of failing. 34 of 35 agents had in fact run. A check that cries wolf is worse than no check, so a harness now fails when its own inputs are missing. |
Unattended recovery never ran on battery โ the task that restarts the dashboard had been installed by a fallback path that defaults to do not start on batteries, with no command-line switch to change it. On a laptop that meant no supervision for most of its life, while every status field read healthy. The tell was the gap between last-run and the repetition interval, not any error. |
Plan a run of days on one row โ a project or a single task can be planned onto a day, and a multi-day commitment (a five-day training, a field week) is one entry that says which day of the run today is. A plan is an intention, so it never writes a deadline onto the work itself โ and re-planning extends the run instead of silently ignoring you. |
The Work list answers what you have actually touched โ the default view is ordered by most recent work, never-opened last, instead of by a manual order nobody had ever set. Manual arrangement moved to the per-category views, where it is visible; project categories became things you can create, rename, merge and reorder; and a project's launcher row now reflects what that project can actually open. |
A shelf is a reason for keeping, not a topic label โ library categories gained a kind (purpose, tracking, attachment) that changes what the shelf does, rather than being decoration. |
The zone pattern, and the surfaces rebuilt on it โ a box now says what it holds with a coloured bar and, where there is more than one view of the same material, a tab strip instead of a stack. Three surfaces were rebuilt on it. A subject shelf that stacked eleven panels down one page became five tabs, and finally grew the panel it had always promised: what is closest to your own work, ranked against your projects and courses rather than against the subject โ top N, never a floor, with the denominator printed above the list. |
The reflection surface was flat for a reason no layout could fix โ the thread rail and the centre panel both selected from the same table, so "thread" and "idea" were two renderings of one thing and could not mean anything different however they were labelled. A thread is now a distinct kind, with the sources it touches, and a graph scoped to it. Drawing the whole graph is what made the old one unreadable: a graph of everything is a picture of nothing. |
Eight hundred presentations the dashboard did not know existed โ the folders can say where a file is; they cannot say what you have already presented about this, to whom, and how you said it differently last time. A read-only index answers that, joining the same lesson across the collections it was delivered in. Author, audience and language register are written by hand because no file carries them โ and the scanner names the columns it owns, so re-indexing cannot erase them. |
An index that deleted itself on a short walk โ re-indexing removes what is no longer on disk, which is right until the walk is incomplete. An interrupted scan, an unmounted drive and a caller passing a subset all look identical to "everything was deleted", and the pruning is instant and total. A short walk is now refused and reported; a control confirms a genuine small deletion still applies. |
A hidden tab never loaded its own contents โ a panel deferred until first shown used a trigger that fires when an element scrolls into view, and an element hidden with the |
The test harness was looking for the database inside the repository โ a path retired mid-year because a synced folder eats the write-ahead sidecars. It had been reporting a healthy database as missing on every run since. Two other checks asserted an architecture the dashboard no longer uses and failed on every tab for it. Critical failures went from thirteen to zero; the checks now assert behaviour instead of shape. |
Release hygiene, twice โ the base-shell builder published the unstripped edition after its own identity scrub had failed, because a shell idiom hid a fatal error; and a branch pushed directly bypassed the scrub entirely. Both are closed. Identity was also removed from the working tree and from what two public repositories had already published. |
August 2026
What changed |
Fact-checking became a mechanism instead of a convention โ a claim is now checked, not trusted. Two layers: a deterministic one (is the cited document indexed, does the page exist, do the figures and quoted strings actually appear on it, does the DOI resolve, is the paper retracted) and a judgement one (does the literature agree, are there qualifiers and caveats the summary dropped, has newer evidence arrived since). Conversation gets annotated; artifacts get a hard gate โ |
Every report now carries its denominator โ the coverage line ("18 of 187 citation-shaped items were checkable as written") is printed whether or not it flatters the result. A verification report that omits what it did not cover reads as a clean bill of health, which is worse than no report. |
Fact-checking beyond citations โ ask about a specificity figure and Metis weighs the spread of reported values across your library, surfaces the qualifiers attached to each, notes what the abstract omitted, and checks whether more recent work has moved the number. |
Focus areas โ surfaces you add yourself โ a focus is a subject you want to stay current on ("AI in health and epidemiology"), and it composes one page out of the parts Metis already has: news, reading, your notes and ideas, and a running overview. It owns a query, never content โ so archiving one leaves every note, idea and paper exactly where it was. Its lens is a conjunction of keyword groups (OR within, AND across), which is what stops "Can AI ever be conscious?" from landing on a health surface. The shelf holds three, and it refuses a fourth rather than quietly evicting one: which subject loses your attention is your call, not the software's. |
The specialists got a memory โ routing to an expert is only worth doing if the expert remembers something. Standing decisions (how you want a dashboard built, how something should be written, what matters in your library) are now recorded once and threaded into that specialist's context on every request. 65 were mined out of past session summaries and attributed conservatively โ anything not confidently placeable becomes project-wide, because a wrong attribution hides a rule from the agent that needed it and clutters one that did not. |
All 33 specialists are dispatchable โ each is registered as a real subagent with its own bound model, so the work runs in an isolated context and the model choice actually takes effect instead of being advice in a config file. |
Ten silent faults from working across two computers โ the code syncs over OneDrive; the virtual environment, the database and the model cache do not. That gap produced ten failures with one cause: an embedding cache pinned to a path the model had never been copied to (fixed by treating a cache location as a search path, not a constant), a stale-install check that compared timestamps instead of contents, two owners of the same table definition, a |
A briefing that doesn't repeat itself โ the daily brief rotates instead of restating yesterday, News was rebuilt around what happened (papers belong in the library, never the news feed), and research interests split into separate axes so a feed can be specific without being narrow. |
The persona grows from what it knows โ presence now comes from recalled context rather than announced framing, plus a learned-lesson ledger and |
Backgrounds became portable packs โ see, switch, rebuild and finally remove a knowledge layer; point a layer at an external library (206 papers were unsearchable); pull institutional PDFs in through Zotero; and a new textbook-derived foundations layer, where the curriculum decides the pack rather than the reverse. Packs carry every folder their layer covers, and domain, methods and topic packs ship separately. |
Office and a plain JSON API โ a PowerPoint/Excel taskpane over an HTTPS bridge, decks that flow back into Metis on their own and honour your own template, and a JSON API over the brain for clients that are not Claude. |
Memory you can read and close โ procedural memory was a number on a card; it is now readable. Decisions can be closed instead of restated forever. Notes search reaches both note stores. A document that lands now indexes itself. Metis volunteers a recorded procedure and remembers your answer. |
A calendar you can plan in โ day, week and month views, with a course's remaining lessons layable into the plan. |
AI in Public Health โ a full course โ 16 lessons, 97 questions, 106 cards, built around six pattern-recognition shapes and one governing question: what happens when it's wrong, and who finds out? Shipped with two new gates, because both properties had been silently broken: |
Front-page and surface repairs โ 79 open tasks were invisible behind a missing column; four Today panels were blank; three Teach routes returned an empty div while 11 courses sat in the database; meetings had no primary key, so their action items could never surface; every news brief had a NULL primary key and half rendered raw HTML as text. |
Offline, updatable, and honest about dead code โ CDN assets vendored so the dashboard loads with no internet; update Metis from a button with a way back; and a standing detector for code that looks wired but never runs. |
July 2026
What changed |
The dashboard was never crashing โ it was deadlocked with no way back. A file-descriptor inheritance leak meant a child process held the lock file its parent had opened, so recovery was impossible rather than merely slow, and three separate silent faults meant nothing ever restarted it. This supersedes the earlier "it keeps crashing" story entirely. |
Cross-pollination became ambient โ the README had promised for months that related work surfaces on its own. It now does: on the Today cockpit, across the library, and without being asked. |
News is what happened; literature is what was published โ the two had been merged, so papers kept appearing in the news feed. It was a data-model problem (feeds carried no kind), not a display one, which is why relevance ranking had been amplifying it. |
Spaced repetition actually works โ the last unkept README promise. |
Action items from natural transcripts โ extraction from how people really talk, not from a structured template. |
Planner merged into Work as a Board view โ 10 tabs to 9. |
Zotero gained a write path โ push local papers up, not only pull down. |
The app finally uses the design system it already had. |
Mark-done and delete never worked โ task IDs were unquoted in the generated JavaScript. |
Late June 2026
What changed |
Learnable agent routing โ which specialist answers a request now comes from a routing database, not a hardcoded list: it reaches 21 of the specialist agents (was 10), matches on word boundaries (so a stray word can't drag a request to the wrong expert), and learns โ when something has no obvious owner, Metis can ask "should I always send this to the Epidemiologist, or just this once?" and remember your answer. |
Personalization layer (it grows with you) โ Metis now keeps a record of your standing preferences and decisions โ coding style, citation format, methodology defaults, the papers and datasets you keep returning to โ and applies them on every request instead of asking again. Tell it once ("always use tidyverse style"), and it threads that into the context every time. |
Living request loop โ every |
Security pass โ closed a reflected-XSS hole in search; broadened PII detection (international phone formats, household-precision GPS) and prompt-injection detection (more attack phrasings); all backed by repeatable probes. |
Today surface โ editorial redesign โ the morning view was rebuilt as a briefing, not a dashboard: an always-open morning paragraph, your warmest active threads, three customizable focus items, and notes from the assistant. |
Post-v1.0 โ June 2026
What changed |
Code Repository โ a reproducibility / code-reuse layer: register scripts, data dictionaries (variable names, types, unique values) and dataset treatments, then |
Projects in the registry + cross-pollination โ project listing now reads the project registry (every project, not just folders on disk); brainstorms and cross-pollination now draw on your registered projects and notes, not only library/news. |
Brainstorm + brief upgrades โ a brainstorm creativity dial (Grounded/Balanced/Bold) and a scoped menu (this work ยท a topic ยท mindmap ยท cluster) that hand off to Claude Desktop primed with your work; a Daily โ Weekly morning-brief toggle; an idea mindmap on the Reflection tab; and an "Improve Metis (OODA)" button on the Metis tab. |
Sensitive-data workflow ( |
Data Guardian hardening โ the pipeline PII scanner now runs all 11 patterns (names, DOB, passport, medical record numbers, national ID numbers, case/registry identifiers, + the original five) through one shared scanner used by both the tool and the pipeline, so they can't drift; covered by a unit-test suite. |
Pre-tool data-file guard โ before a |
Honest positioning โ dropped the "local-first/local AI" framing (reasoning runs on the Claude API); copy now states plainly that your data stays on your machine while reasoning uses Claude. |
Desktop project-tracking + file-tracking fixes โ the Desktop router now registers tracked projects; repaired a recursion bug that had broken file tracking. |
Post-v1.0 โ May 2026
What changed |
Unified project intelligence system โ unlimited projects with categories and folder paths in all installer paths; CLAUDE.md written to each project folder; Claude Desktop auto-registration; activity scanner detects git commits, modified files, and todo completions; Claude Code stop hook reports active project to dashboard |
Three-path intelligent setup wizard โ browser wizard (unlimited projects, categories), terminal wizard (Linux/macOS), and Inno Setup wizard (Windows .exe) all backed by Claude API persona generation |
Docker test matrix โ Ubuntu 24/22 + Debian + light profile running in parallel; mandatory pre-release gate in Release Coordinator |
Today surface restructure โ session handoff strip, 7-metric ledger, three-tier priority queue, 2ร2 research quadrant layout, time-of-day adaptive morning brief |
Metis real subagent orchestration โ Metis spawns real isolated subagents via the Agent tool, with independent token tracking |
Release Coordinator โ proactive git guardian with |
Scheduler fix โ library index job corrected (scan_literature_folder in content_scan module) |
Knowledge surface โ unified search, coverage gap analysis, knowledge layer browser |
v1.0 โ May 2026
First stable release. See system/config/release-notes-v1.0.md for full details.
What shipped |
FastAPI + HTMX dashboard โ 9 tabs |
34 specialist agents |
MCP server โ 170+ registered tools |
Windows installer (Inno Setup) |
Statistics for Epidemiology course โ 12 lessons with spaced repetition |
Startup eval suite + news freshness check |
Auto-handoff brief at 80% context |
AGPL-3.0 license |
Earlier development (Phases 0โ9b)
Phase | What shipped |
0โ5 | MCP server, 34 agents, CLI skills, config wizard, SQLite (46 tables), 5-layer memory, knowledge graph, Zotero/Mendeley sync |
6โ7 | FastAPI + HTMX dashboard โ 9 tabs, live partials |
8 | Morning brief, news rail, meeting assistant, voice capture, PaperQA2 PDF search, cross-pollination, token guardrails |
9 | CSS design overhaul โ editorial layout, responsive grid, animation |
9b | Self-improvement loop โ reflexion aggregation, proposal drafting, approval flow |
M | Conversation memory โ session summaries in episodic memory, semantic search across past sessions |
License
AGPL-3.0 for the codebase โ use, modify, and fork freely, but any version you run as a service or distribute must also be open-source under AGPL-3.0.
CC-BY-SA 4.0 for course content and learning materials.
Available Tools
283 toolsadd_glossary_termMetis โ Add Glossary TermA
Add a glossary term, or update its definition if it already exists.
Maintains a personal glossary of field-specific terms and acronyms so
Metis can give consistent definitions across sessions. Upserts on the
term (an existing term keeps its created_at but takes the new definition).
Retrieve entries with get_glossary.
Args:
term: The term, acronym, or phrase to define; serves as the unique key,
so reusing an existing term overwrites its definition.
definition: The definition text to store for this term.
Returns:
A confirmation message naming the term that was added or updated.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | ||
| definition | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: upsert semantics (keeps created_at, overwrites definition) and return type (confirmation message). This is comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a clear summary followed by detailed args and returns. Each sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 string params) and the presence of an output schema, the description covers all needed context: upsert behavior, use case, and retrieval sibling. It is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema by explaining that 'term' is the unique key and 'definition' is the stored text. With 0% schema coverage, this is essential.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it adds or updates a glossary term, specifying the action and resource. It distinguishes from the retrieval sibling 'get_glossary' by mentioning retrieval separately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use it (maintaining a personal glossary for consistent definitions) and explicitly describes the upsert behavior. It also directs to 'get_glossary' for retrieval, providing clear guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_journal_entryMetis โ Add Journal EntryA
Store a journal entry with auto-extracted mood and energy.
Args:
content: The journal entry text.
image_path: Optional path to an associated image.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| image_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description notes auto-extraction of mood and energy, but lacks details on side effects, idempotency, required permissions, or what the return value contains (output schema exists but not discussed).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with no wasted words, efficiently conveying the tool's purpose and parameters in two lines plus an Args list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the core function, it omits behavioral details like constraints on content length, persistence behavior, or post-storage results. Given the tool's simplicity, it is minimally adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description provides succinct but clear explanations for both parameters (content text, optional image path), adding value beyond the schema names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool stores a journal entry with auto-extracted mood and energy, distinguishing it from sibling add_* tools like add_memory_entry or add_glossary_term.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., add_memory_entry or other logging tools). There is no mention of prerequisites or constraints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_memory_entryMetis ยท Memory Curator โ Add Memory EntryA
Add a new memory entry to the memory palace.
Use this for a human-curated 'memory palace' note (title + summary + topics,
optionally saved as a markdown file). For machine/agent event logging use
store_episodic_memory; for a distilled concept/definition use
store_semantic_memory.
Inserts into the memory_entries table. If detail is provided, also writes
a markdown file under journal/{entry_type}s/.
Args:
title: Short title for the entry.
summary: One-paragraph summary, stored in the DB and shown in search.
topics: Comma-separated topic tags, e.g. "metis-setup,mcp-server".
entry_type: One of "session", "journal", "idea", "decision", or "topic".
detail: Full markdown content for the optional .md file.
computer: Hostname of the computer this entry is from (optional).
Returns:
A single TextContent confirming the saved entry (title, generated ID,
type, topics, and the markdown file path if one was written), or an
error message if the database is missing or the write fails.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| detail | No | ||
| topics | Yes | ||
| summary | Yes | ||
| computer | No | ||
| entry_type | No | journal |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It explains that the tool inserts into a database table and optionally writes a markdown file, and describes the return value. It lacks details on permissions or side effects, but is generally transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections (purpose, usage, args, returns) and is front-loaded. It is slightly long but every sentence is informative, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, 3 required) and the presence of an output schema, the description fully covers input semantics, behavior (database insert and optional file write), and return format. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds comprehensive meaning for each parameter, including allowed values for 'entry_type', comma-separated format for 'topics', and the role of 'detail' in creating a markdown file. This goes well beyond the basic schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Add a new memory entry to the memory palace' with a specific verb and resource, and explicitly distinguishes itself from sibling tools 'store_episodic_memory' and 'store_semantic_memory'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly guides when to use this tool ('human-curated memory palace note') and when to use alternatives ('For machine/agent event logging use store_episodic_memory; for a distilled concept/definition use store_semantic_memory').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_reminderMetis โ Add ReminderA
Put a reminder on the researcher's dashboard calendar.
Use this whenever they ask to be reminded of something, or whenever you agree
to come back to something later. It appears as a chip on the Work calendar on
the chosen day.
Args:
text: What to remind them of. Write it so it still makes sense in a week
with no other context โ "re-run the routing audit", not "check that".
date: When. Either YYYY-MM-DD, or a phrase: "tomorrow", "in a week",
"in 3 days", "in two weeks", "in a month".
project_id: Optional project slug to file it under (e.g. "metis-dashboard").
Leave empty for a reminder that belongs to no project โ that is a
normal case, not a fallback.
remind_at: Optional time of day, "HH:MM".
until: Optional end date, same formats as `date`. Its meaning depends on
`repeat`, and the two readings are mutually exclusive:
* without `repeat` โ a MULTI-DAY event. `date`..`until` is one
continuous block (a conference, a field trip, leave).
* with `repeat` โ when the SERIES stops. Leave empty for open-ended.
A recurring multi-day event is not supported; say so rather than
silently picking one of the two readings.
repeat: "" (default), "daily", "weekdays", "weekly", "monthly" or
"yearly". A repeating plan is stored as one row plus this rule and
expanded when the calendar is drawn, so changing it changes every
future occurrence at once.
duration_days: How many days ONE occurrence covers, default 1. Use it with
`repeat` for something like "the first three days of every month".
Without `repeat`, prefer `until` โ it says the same thing more clearly.
Returns:
Confirmation naming the date, span or schedule it was placed on.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| text | Yes | ||
| until | No | ||
| repeat | No | ||
| remind_at | No | ||
| project_id | No | ||
| duration_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the reminder appears as a chip on the Work calendar, explains that a repeating plan is stored as one row and expanded on render, notes that recurring multi-day events are unsupported and should be flagged rather than silently resolved, and describes the return confirmation. These details give the agent a complete behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear front-loaded purpose statement, then an Args section, and a Returns section. Every sentence adds value, and despite its length, the information is necessary given the 7 parameters and 0% schema coverage. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (7 parameters, recurring events, multi-day spans) and the absence of annotations, the description provides everything an agent needs: when to use, how to format each parameter, behavioral caveats, and what to expect on return. The existence of an output schema does not make the Returns note superfluous because the description confirms the confirmation content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully document all parameters. It does so thoroughly: it explains the purpose and format of each of the seven parameters, including examples for date phrases, the mutually exclusive interpretations of `until` depending on `repeat`, allowed values for `repeat`, default behavior for `duration_days`, and the optional nature of `project_id`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Put a reminder on the researcher's dashboard calendar.' It clearly distinguishes from tasks or notes by calling it a reminder and describing its appearance as a chip on the Work calendar. However, it does not explicitly name a sibling alternative or contrast itself with other scheduling tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: 'Use this whenever they ask to be reminded of something, or whenever you agree to come back to something later.' This tells the agent when to invoke the tool, but it does not state when not to use it or offer explicit alternatives for similar needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_specialist_contextMetis โ Add Specialist ContextA
Add a specialist context to the user profile, or update it if it exists.
Specialist contexts tell Metis which domains the user works in so routing
and search can be tailored. This appends to specialist_contexts in
user-config.yaml (creating the file with defaults if absent); if a context
with the same name already exists, its description is updated instead of
duplicated. Related tools: toggle_context, list_contexts.
Args:
name: Short label for the context, e.g. "Epidemiological dashboards";
also the key used to detect and update an existing context.
description: One or two sentences describing what this context covers.
active_by_default: If True (default), the context is added to
active_contexts immediately; if False, it is stored but left
inactive (and removed from active_contexts if already present).
Returns:
A confirmation message stating whether the context was added (and
activated) or an existing one was updated.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | Yes | ||
| active_by_default | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: it modifies user-config.yaml, creates the file with defaults if absent, updates instead of duplicating on name match, and explains the active_by_default parameter's effect on activation state. The return value type is also specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: opening sentence for purpose, explanatory paragraphs, a 'Related tools' line, then 'Args:' and 'Returns:' sections. Every sentence provides value, with no redundant or extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no annotations, and an output schema, the description covers all necessary aspects: purpose, behavioral details, parameter semantics, and return value. It enables an agent to correctly select and invoke the tool without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It thoroughly explains each parameter: name as short label and dedup key, description as one/two sentences, and active_by_default with behavior (immediate activation vs storage/inactivation). This adds critical meaning beyond the schema's title and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (add or update) and the resource (specialist context). It distinguishes between adding and updating, and the context of routing/search tailoring provides specificity. The sibling tools list includes toggle_context and list_contexts, which helps differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to add or update specialist contexts for tailoring) and mentions related tools (toggle_context, list_contexts). However, it does not explicitly state when not to use it or provide alternatives beyond listing related tools, leaving room for slight ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_tracked_fileMetis โ Add Tracked FileA
Add a single file to the tracked-files list and start watching it.
Registers one file so Metis notices when it changes and can read it later
via read_file; tracked files surface on the dashboard's Planning tab. The
file's current modification time is recorded and watch is set on. Re-adding
an existing path updates it (and keeps the old label unless a new one is
given). To register a whole project at once, use connect_project_folder.
Args:
path: Absolute path to the file to track; the file must exist or an
error is returned.
label: Optional category label for the file (default empty string);
on re-add, an empty label leaves the existing label unchanged.
Returns:
A confirmation message naming the tracked file (and its label, if any),
or a "file not found" / error message.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| label | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, but description covers key behaviors: records modification time, sets watch, re-add updates, file must exist, returns confirmation or error. No hidden side effects mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with summary, details, Args, Returns. Slightly verbose but adds necessary context. Efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description still clarifies return values. Covers prerequisites, re-add logic, alternative tool. Fully adequate for a simple file-tracking tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 0%, so description adds full meaning: path must be absolute and exist, label is optional with default empty and on re-add empty label leaves old unchanged. Outperforms basic schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Add a single file to the tracked-files list and start watching it.' Identifies specific verb, resource, and action. Distinguishes from sibling 'connect_project_folder' for bulk registration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (register one file) and when not ('To register a whole project at once, use connect_project_folder'). Also explains re-adding behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_user_topicMetis ยท News Radar โ Add User TopicC
Add a topic to track for new publications.
Args:
topic: Topic name (unique).
description: Optional description of what to look for.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states it adds a topic but does not mention whether duplicates are allowed (despite hinting at 'unique' in param doc), what side effects occur (e.g., triggers notifications), or what happens if the topic already exists. This lack of behavioral detail is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded with the purpose, but it uses Python docstring style with 'Args:' which is unnecessary for JSON. It is concise but could be more efficiently structured without the docstring formatting, potentially adding a return description or behavior note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not shown) and low complexity (2 params, no enums), the description is incomplete. It does not explain the return value, error conditions (e.g., duplicate topic), or the lifecycle of added topics. The tool's purpose is clear but operational details are missing for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add value. It only repeats parameter names with minimal context ('topic: Topic name (unique)', 'description: Optional description...'). The schema already contains required/default info; the description does not explain formats, constraints, or usage examples, adding little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Add a topic to track for new publications.' It uses a specific verb ('Add') and resource ('topic'), and distinguishes from similar sibling tools like add_glossary_term or add_memory_entry by specifying the context of tracking new publications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., search or list tools). There is no mention of prerequisites, usage context, or when not to use it. The description is purely operational without contextual decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aggregate_reflexionsMetis โ Aggregate Reflexions ToolA
Theme recent reflexions per agent (Phase 9b).
Reads ``reflexion_log`` entries from the last ``days`` days (default 14)
and returns the top recurring 'could improve', 'missing context', and
'tool wishes' themes, ordered by busiest agent.
Pass ``agent_slug`` to limit the scope; leave blank for all agents.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| agent_slug | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description clearly states it reads 'reflexion_log' entries (non-destructive) and returns aggregated themes. It does not contradict any annotations. Slight lack of mention of potential side effects, but none expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise (3 sentences) and front-loaded with the core purpose. It could be slightly tighter but is clearly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description covers the input parameters, data source, time window, and output categories sufficiently. It does not need to detail return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaning: 'days' is time window (default 14 days), 'agent_slug' scopes to one agent or all. This compensates for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Theme') and resource ('recent reflexions per agent') with clear scope (Phase 9b). It distinguishes from siblings like 'consolidate_reflexions' by focusing on aggregation and thematic grouping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to get top themes from recent reflexion logs) but does not explicitly mention when not to use or suggest alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_scriptMetis ยท Software Engineer โ Analyze ScriptA
Parse one R or Python script and extract structured metadata.
Returns packages, file reads/writes, variable names, source dependencies,
and transform patterns โ all from regex parsing (no execution, no AST,
no data access). The script's code is read but never sent to an LLM;
only the extracted metadata is returned.
Args:
path: Absolute path to the script file (.R, .Rmd, .qmd, or .py).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden. It discloses the regex-based nature, no execution, no data access, and no LLM exposure. It does not cover error handling or side effects, but the output schema covers return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short paragraphs plus an Args section. Every sentence adds value, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with an output schema, the description is complete. It explains the extraction method, limitations, and safety aspects, leaving no obvious gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'path' has 0% schema description coverage, but the description adds crucial context: 'Absolute path to the script file (.R, .Rmd, .qmd, or .py).' This specifies format and absolute path requirement, adding significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it parses R or Python scripts and extracts structured metadata. The verb 'parse' and resource 'script' are explicit, and it distinguishes itself from sibling tools by focusing on static analysis without execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains that parsing is regex-based with no execution, no AST, no data access, and code is not sent to an LLM. This provides clear guidance on when to use the tool safely, though it doesn't explicitly list alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
anonymize_textMetis ยท Data Guardian โ Anonymize TextA
Scrub PII from text and return anonymized version + replacement map.
Replaces:
- Patient/case IDs โ [PARTICIPANT_001]
- GPS coordinates โ [GPS_001]
- Belgian national IDs โ [NID_001]
- Email addresses โ [EMAIL_001]
- Phone numbers โ [PHONE_001]
- Name-like tokens (opt.) โ [NAME_001]
Args:
content: Text to anonymize.
mode: 'full' โ replace; 'preview' โ mark without replacing.
replace_names: Also replace CAPITALIZED name-like tokens (heuristic).
Returns JSON with keys 'anonymized' (str) and 'replacements' (dict).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | full | |
| content | Yes | ||
| replace_names | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully bears the burden. It details the replacement behavior (list of PII types), modes ('full' vs 'preview'), and the optional name replacement heuristic. It also describes the output JSON structure, leaving no ambiguity about the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive, using bullet points for replacements and clear sections for args. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, an output schema, and no nested objects, the description covers all necessary aspects: what it does, how to use it (args), and what to expect (output JSON with 'anonymized' and 'replacements'). It is fully complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (no descriptions in schema). The description compensates by explaining all three parameters: content (text to anonymize), mode (full/preview), and replace_names (heuristic for CAPITALIZED tokens). It also explains the output format, adding significant value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Scrub PII from text and return anonymized version + replacement map.' It lists specific PII types and their replacements, distinguishing it from sibling tools like redact_data_file or diff_anonymization.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool's purpose and parameters (mode, replace_names) but does not explicitly state when to use this tool versus alternatives like redact_data_file or diff_anonymization. However, the context is clear enough for an agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_proposalMetis โ Apply Proposal ToolA
Apply a self-improvement proposal: writes the proposed change to disk.
The previous skill.md content is backed up alongside as
``skill.md.bak.<timestamp>`` so a revert is always possible. Updates the
proposal row to status='applied' with the applied_at timestamp and the
backup path.
Args:
proposal_id: the id from skill_improvement_proposals.
| Name | Required | Description | Default |
|---|---|---|---|
| proposal_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the write-to-disk action, backup creation, and database update. However, it fails to mention whether the operation is reversible (backup implies some reversibility but not explicitly), required permissions, or behavior on invalid proposal_id. Some transparency, but gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences plus an Args line, front-loaded with the primary action. Every sentence adds value: what it does, backup detail, database update, parameter meaning. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (not shown), the description covers the main effects: write, backup, status update. It does not explain error handling or state prerequisites, but for a single-parameter tool with clear purpose, it is largely sufficient. Minor completeness gaps leave room for improvement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 0% description coverage, so the description must compensate. It explains the parameter 'proposal_id' as 'the id from skill_improvement_proposals', giving context beyond the schema's bare type and title. This is helpful for agent understanding, though additional detail on validity constraints would improve it further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Apply' and the resource 'self-improvement proposal', with specific actions: writes change to disk, backs up previous content, updates proposal row. This distinguishes it from sibling tools like 'propose_skill_improvement' (creation) and 'approve_proposal' (state change) by focusing on execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when a proposal is ready to be applied, but it does not explicitly state when to use it versus alternatives like 'approve_proposal' or 'reject_proposal'. No prerequisites or conditions for use are mentioned, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_proposalMetis โ Approve ProposalA
Approve a pending skill improvement proposal and apply it.
Writes the proposed content to the agent's skill.md file and marks
the proposal as approved. Creates a backup of the current skill file first.
Args:
proposal_id: The numeric ID from get_pending_proposals()
| Name | Required | Description | Default |
|---|---|---|---|
| proposal_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: writes to skill.md, marks as approved, creates backup. No annotations provided, so description carries full burden. Could mention failure modes or return value, but output schema exists to cover that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences plus an Args section. Every sentence provides necessary information without redundancy. Front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (single required parameter, output schema exists), the description covers the essential action and side effects. Could mention that the proposal must be pending, but this is implied by the purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description adds meaning to the sole parameter 'proposal_id' by specifying it is 'The numeric ID from get_pending_proposals()', guiding the agent on how to obtain the correct value. Schema only says integer, so this adds significant value despite 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'approve' and the resource 'pending skill improvement proposal'. Distinguishes from siblings like 'reject_proposal' and 'propose_skill_improvement' by specifying that it applies the proposal by writing to skill.md and marking as approved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description provides clear context that this tool is for approving proposals from get_pending_proposals() and mentions the backup creation. It doesn't explicitly say when to use vs alternatives, but the purpose is self-evident given the sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_library_itemMetis ยท Librarian โ Archive Library ItemA
Archive a library item (mark as no longer active but keep in DB).
Sets status='archived' in library_seeded table. Item stays available
for search and cross-pollination but disappears from default view.
Args:
relative_path: The relative_path primary key in library_seeded table.
| Name | Required | Description | Default |
|---|---|---|---|
| relative_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the core behavior: sets status='archived', keeps in DB, affects default view but not search. It does not mention permissions, reversibility, or side effects, but for a simple archive operation the transparency is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences plus an Args line. The first sentence states the core purpose, the second provides the SQL detail, and the third explains the effect. No wasted words; information is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (one parameter, simple action) and the presence of an output schema, the description covers the key aspects: what happens to the item, its visibility, and the parameter meaning. Minor gaps like reversibility or permissions are not critical for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must explain the parameter. It does so by stating that relative_path is the primary key in the library_seeded table, adding context beyond the parameter name. This is sufficient, though a format example could improve it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Archive' and the resource 'library item,' explaining that it marks an item as no longer active but keeps it in the database. It distinguishes this from deletion (e.g., remove_library_item) by noting the item remains searchable and cross-pollinated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the effect (disappears from default view, stays searchable) but does not explicitly state when to use this tool versus alternatives like remove_library_item or archive_project. The usage context is implied rather than directly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_projectMetis โ Archive ProjectA
Archive a project โ marks it inactive but keeps all data.
Sets status='archived' in projects table. Project disappears from
active view but remains available for brainstorm context and search.
Args:
project_id: The project_id to archive.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It transparently describes that the project's status is set to 'archived', data is kept, and visibility changes. It does not mention side effects or reversibility, but the 'unarchive_project' sibling partially addresses that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences plus a parameter listing. All information is relevant and front-loaded. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter and existence of an output schema, the description covers the essential aspects: what the tool does, the effect on data availability, and the parameter. It is fully adequate for an agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description includes an 'Args' section that explains the required 'project_id' parameter. This adds meaning beyond the schema, though it could provide more detail (e.g., format or example).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Archive a project โ marks it inactive but keeps all data.' It uses a specific verb ('archive') and resource ('project'), and distinguishes itself from siblings like 'remove_project' and 'unarchive_project' by clarifying that data is preserved and the project remains available for context and search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the effect ('disappears from active view but remains available for brainstorm context and search'), implying when to use it. However, it does not explicitly state when not to use it or compare with alternatives like 'remove_project'. The guidance is clear but could be more explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ask_libraryMetis ยท Librarian โ Ask LibraryA
Answer a question using the user's indexed PDF library via PaperQA2.
Searches the pre-built index (see index_library_pdfs()) and returns
a synthesised answer with citations from the source papers.
Args:
question: Natural language question to answer from the library.
top_k: Number of source passages to retrieve before synthesis (default 5).
scope: Which index to query. "default" = full library. "ph_library" = PH background only.
Build the index first with index_library_pdfs(scope=<scope>).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | default | |
| top_k | No | ||
| question | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It discloses that the tool searches a pre-built index and returns synthesized citations, implying non-destructive read-only behavior. However, it doesn't explicitly state no side effects or permissions needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and front-loaded: one sentence for purpose, minimal parameter list. No filler, but could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given sibling tools and presence of output schema, description covers primary use case, dependency on index, and scope variants. Lacks details on return format but output schema handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description's 'Args' section explains each parameter: question, top_k (default 5), and scope with concrete options (default, ph_library). Adds significant value beyond bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool answers a question using the user's indexed PDF library via PaperQA2, returning a synthesized answer with citations. It distinguishes from sibling tools like search_library by focusing on synthesis rather than raw retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on prerequisite (build index first with index_library_pdfs) and explains scope options. Could be stronger by explicitly listing when not to use, but gives adequate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assemble_brainstorm_contextMetis โ Assemble Brainstorm ContextA
Assemble context from multiple sources for brainstorming.
Gathers recent content from selected sources, respecting an 8000 char
limit per source. Returns assembled context string with source labels.
Args:
sources: List of sources to include: "library", "meetings", "news", "ideas", "journal".
date_filters: Optional dict with source-specific date filters, e.g. {"ideas": "2026-03-01"}.
| Name | Required | Description | Default |
|---|---|---|---|
| sources | Yes | ||
| date_filters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Mentions 8000 char limit per source and returns assembled string with source labels, but does not explain what 'recent content' means, behavior when sources are empty, or default behavior when date_filters is null. With no annotations, more detail would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured: one sentence for purpose, then clear details on char limit and output, then arg descriptions in docstring style. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two params, no annotations, and an output schema, the description covers essential aspects: sources, char limit, date filters example. However, it lacks definition of 'recent' and default filtering behavior, which slightly reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description compensates well by explaining that sources is a list from a set of allowed values (library, meetings, news, ideas, journal) and that date_filters is an optional dict with source-specific date filters, including an example. Adds significant meaning beyond the schema structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'assemble' and the resource 'context from multiple sources for brainstorming'. Distinguishes from sibling tools like brainstorm_turn or get_brainstorm_session by focusing on gathering context from specific sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for brainstorming context assembly but does not explicitly state when to use versus alternatives like load_project_context or get_agent_context. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_background_provenanceMetis โ Audit Background ProvenanceA
Where did the documents in the knowledge layers actually come from?
Sweeps `pdf_index_state` and records a DOI for every indexed document it can
identify, so a layer can state its own provenance. Matches against the local
reference library first โ that is free and covers most of the corpus โ and
only calls Crossref when `resolve_online` is set.
This is the "verify at ingest, trust at read" half of the verification layer.
A corpus of known-real documents makes answer-time checking a containment
problem rather than a truth problem, and the cost is paid once per document
instead of once per claim.
Args:
layer: Restrict to one layer slug (e.g. 'hat-specialist'); omit for all.
resolve_online: Also query Crossref by title for documents the local
library cannot identify. Metadata only; costs one request each.
limit: Maximum documents to process in one pass (default 400).
Returns:
Per-layer provenance counts and what changed in this pass.
| Name | Required | Description | Default |
|---|---|---|---|
| layer | No | ||
| limit | No | ||
| resolve_online | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full burden, and it does meaningful work: it discloses that the tool writes DOIs into `pdf_index_state`, that local matching is free, that Crossref is gated behind `resolve_online` and costs one request per unresolved document, and that metadata only is fetched. It stops short of stating idempotency on re-runs, failure handling for unmatched documents, or any auth/rate-limit ceiling on the Crossref path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The concrete mechanism sentence is well front-loaded in the second paragraph, but the description opens with a rhetorical question and spends a full paragraph on philosophy ('a containment problem rather than a truth problem') that an agent does not need in order to invoke the tool. The Args/Returns blocks are efficient, but the rationale prose should be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the description still summarizes the return shape (per-layer provenance counts and what changed), parameters are fully covered, and external-call costs are disclosed โ enough for correct invocation. Missing is any hint about prerequisites (Crossref credentials, enabled layers) or how this relates to adjacent stats/pending-index tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and largely does: `layer` gets a concrete example slug plus the omit-for-all semantics, `resolve_online` gets both behavior and cost, and `limit` gets its default of 400. It does not say how invalid layer slugs behave or how limit interacts with multi-pass runs, so it is strong rather than exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete mechanism ('Sweeps `pdf_index_state` and records a DOI for every indexed document') rather than restating the name, so the action and resource are unmistakable. It also positions itself relative to answer-time verification ('verify at ingest, trust at read'), which implicitly separates it from verify_claim/verify_text_citations, but it never names a sibling outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the cost rationale ('paid once per document instead of once per claim') and through the local-first/Crossref-later rule, which tells the agent how to run it cheaply. There is no explicit when-to-use trigger, no when-not-to-use, and no named alternative such as verify_doi, mine_references, or index_pending_layers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backup_dbMetis โ Backup DbA
Create a timestamped backup of the Metis SQLite database.
Uses SQLite's Online Backup API โ safe to run while the database is live.
Args:
destination: Directory path to write the backup into.
Defaults to metis/system/backups/.
label: Optional label appended to the filename, e.g. 'pre-upgrade'.
extra_destination: Optional second directory for off-site / secondary copy.
Returns JSON with backup_path, size_kb, checksum (SHA-256), and elapsed_ms.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| destination | No | ||
| extra_destination | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the use of SQLite's Online Backup API, safety for live databases, and return fields (backup_path, size_kb, checksum, elapsed_ms). This is more than basic transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with purpose, followed by a safety note and bulleted argument list. The return value description is included. Slightly verbose due to redundant argument list with schema, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 optional parameters and no required ones, the description fully covers purpose, safe usage, parameter details, and return format. No obvious gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides clear explanations for all three parameters: destination (default path), label (filename appendix), and extra_destination (secondary copy). This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the action (create), resource (timestamped backup), and context (Metis SQLite database). It clearly distinguishes from sibling tools like restore_db and verify_backup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states it is safe to run while the database is live, providing good context. However, it does not explicitly state when not to use or mention alternatives like encrypt_backup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brainstorm_turnMetis โ Brainstorm TurnA
Run one turn of a brainstorm session, returning relevant context.
Call this at the start of a brainstorm and after each steering action.
The tool fetches relevant ideas, notes, questions, and library notes so
you (the AI) can surface connections the user may not have considered.
Steering modes:
expand โ broaden; surface tangential connections
focus โ narrow; find the most relevant threads
challenge โ find counter-arguments and weaknesses
synthesize โ identify themes; propose a unifying framework
connect โ explicit cross-domain connections to library/literature
Args:
topic: The brainstorm topic or question.
steering: One of expand|focus|challenge|synthesize|connect.
session_uuid: Pass the UUID from the previous turn to continue a session.
Omit to start a new session.
turn_notes: Optional free-text notes from the previous turn to log.
Returns JSON with: session_uuid, turn_number, context (ideas/notes/
questions/library), steering_prompts, and instructions for the AI.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | ||
| steering | No | expand | |
| turn_notes | No | ||
| session_uuid | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 discloses that the tool fetches relevant ideas, notes, questions, and library notes, lists five steering modes with their meanings, explains session continuation via session_uuid, and describes the return format including session_uuid, turn_number, context, steering_prompts, and instructions. This is comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary sentence, usage instruction, enumerated steering modes, and a parameter list. Every sentence adds value, though the parameter list could be more concise. Overall, it's appropriately sized for a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (iterative brainstorming with multiple steering modes) and the presence of an output schema (mentioned in description), the description is complete. It covers purpose, when to use, all parameters with semantics, steering modes, session management, and return value fields. No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully explains each parameter: topic (the brainstorm topic), steering (with explicit list of allowed modes), session_uuid (continuation vs new session), and turn_notes (optional notes). This adds complete semantic meaning beyond the schema's minimal type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Run one turn of a brainstorm session, returning relevant context.' It specifies the verb and resource, and distinguishes from sibling tools like get_brainstorm_session and save_brainstorm_output by focusing on iterative turns with steering modes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance: 'Call this at the start of a brainstorm and after each steering action.' This clearly indicates when to use. While it doesn't explicitly list when not to use, the context makes it clear this is for iterative brainstorming, and siblings cover other phases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_pdf_knowledge_dbMetis ยท Librarian โ Build Pdf Knowledge DbB
Index a knowledge database layer from PDFs into the semantic knowledge base.
Uses local nomic-embed-text-v1.5-Q (fastembed, ONNX) โ no API key required.
Each database is a named layer: 'ph-background', 'hat-specialist', 'epi-methods',
or any custom database slug created via create_knowledge_database().
Args:
database: Slug of the knowledge database to build (default: 'ph-background').
force_rebuild: Re-index even files already indexed in this database.
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | ph-background | |
| force_rebuild | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavior. It discloses use of local embeddings and no API key, and explains the force_rebuild parameter. However, it omits whether the tool creates databases, the scope of files indexed, potential resource usage, or side effects on existing data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, well-structured. Begins with core purpose, then model details, layer examples, and a clear Args block. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values are not needed. However, important context is missing: how PDFs are associated with a database, whether the database must exist beforehand, and any time/resource implications. Adequate but with gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 0% but description compensates well: explains 'database' as a slug with defaults and examples, and 'force_rebuild' as re-indexing already indexed files. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it indexes a knowledge database layer from PDFs, using a local embedding model. It provides examples of database slugs and links to create_knowledge_database(), but does not explicitly differentiate from sibling tools like index_library_pdfs or index_pdf_library.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. The mention of local model implies offline use, but there is no comparison to alternatives or prerequisites for custom databases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_ideaMetis โ Capture IdeaA
Store an idea in the SQLite ideas table.
Auto-extracts tags from content. Links to domains/projects if keywords match.
Unless `auto_cross_pollinate=False`, automatically surfaces up to 5 cross-
pollination matches from library / meetings / news / older ideas in the same
response โ so the user sees connections without a second tool call.
Args:
content: The idea text.
source: Where the idea came from (default "manual").
image_path: Optional path to an associated image.
auto_cross_pollinate: When True (default), include connection matches in the response.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | manual | |
| content | Yes | ||
| image_path | No | ||
| auto_cross_pollinate | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description bears full burden. It discloses auto-tag extraction, domain/project linking, and cross-pollination behavior. Could mention if other tables are modified, but overall adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded with main action, and uses an Args section. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, return values need not be described. Covers core functionality, side effects, and parameter details. Could mention content length constraints but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description adds meaningful context for all 4 parameters: content as idea text, source with default, image_path optional, and auto_cross_pollinate with behavior explanation. Fully compensates for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Store an idea in the SQLite ideas table' with specific verb and resource. Distinguishes from siblings like add_memory_entry and capture_observation by mentioning auto-tagging and cross-pollination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for capturing ideas with automatic connections, but no explicit when-not-to-use or alternatives. The cross-pollination feature is highlighted, but no guidance on when to disable it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_observationMetis โ Capture ObservationA
Record a typed observation during an agent run.
Use this throughout a run to capture what you are learning so it can be
recalled in future sessions without re-reading history.
Args:
observation_type: One of: discovery, decision, implementation, issue, note.
- discovery: something new you found out
- decision: a choice made and the reasoning behind it
- implementation: what was built or changed
- issue: a bug, blocker, or failure found
- note: a general observation that doesn't fit above
content: The observation in 1โ3 sentences.
agent_slug: Which agent is recording (e.g. 'librarian').
session_id: Current pipeline session ID (optional).
concepts: Comma-separated concept tags โ auto-extracted if blank.
related_files: Comma-separated file paths this observation relates to.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| concepts | No | ||
| agent_slug | No | ||
| session_id | No | ||
| related_files | No | ||
| observation_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions recall in future sessions, implying persistence, but does not address side effects, mutability, authorization needs, or error behavior. This is a significant gap given the absence of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose, followed by parameter details. It is concise without fluff, though the parameter list is somewhat lengthy. Front-loading the purpose aids quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values are covered. The description explains what the tool does and its parameters adequately. However, it lacks details on error handling, rate limits, or required permissions, leaving some context gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining each parameter's purpose, expected format (e.g., content: 1โ3 sentences), and default behavior (e.g., concepts auto-extracted). This adds meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records typed observations during an agent run, with specific observation types (discovery, decision, etc.) and the purpose of enabling recall in future sessions. This distinguishes it from sibling tools like add_memory_entry or add_journal_entry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It advises using the tool throughout a run to capture learning, but does not explicitly state when not to use it or suggest alternatives like add_memory_entry or add_journal_entry. The guidance is implied but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_data_safetyMetis ยท Data Guardian โ Check Data SafetyA
Check pasted or shared data for personal identifiers โ call FIRST, before analysing it.
Call this as the very first step whenever the researcher pastes or shares
rows about individual people (a line list, patient or participant records,
a table with names, dates of birth, phone numbers, GPS points or IDs) โ
before any calculation or answer, even for a simple question. If the result
is not PUBLIC, do not analyse the raw rows: mask them with anonymize_text,
log the event with log_consent_event, and offer a script the researcher
runs locally.
Returns safety status, classification, specific warnings and the next steps.
Args:
content: Text content to scan.
file_path: Optional file path for context-based classification.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| file_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses what the tool returns (safety status, classification, warnings, next steps) and prescribes a conditional next action based on the result. It does not explicitly state whether the tool is read-only or whether it has side effects, but the 'check' framing and subsequent logging via a separate tool strongly imply it is non-mutating. A 4 reflects strong but not exhaustive disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the imperative 'call FIRST' and structured logically (purpose, when to call, what to do based on result, return values, args). Slightly verbose but every sentence adds useful information, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's safety-critical role, no annotations, and an existing output schema, the description provides everything an agent needs: precise triggering conditions, conditional next steps, return summary, and parameter meanings. No critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no parameter descriptions), so the description must compensate. It does: 'content: Text content to scan' and 'file_path: Optional file path for context-based classification' add meaning beyond the bare titles. It could specify expected file path format, but the core semantics are clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('check') and resource ('pasted or shared data for personal identifiers'), and explicitly distinguishes this tool from later steps in the workflow (anonymize_text, log_consent_event). An agent can immediately tell what the tool does and why it exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance ('call FIRST, before analysing', 'whenever the researcher pastes or shares rows about individual people'), when-not-to-analyse guidance ('if the result is not PUBLIC, do not analyse the raw rows'), and names alternatives ('mask them with anonymize_text, log the event with log_consent_event'). This is a complete usage recipe.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_for_newer_evidenceMetis โ Check For Newer EvidenceA
How old is the corpus on this topic, and what has been published since?
The second half of fact-checking a quantity. A spread computed from a library
whose newest paper on the topic is from 2014 is a 2014 answer โ possibly
correct, possibly superseded, and the corpus cannot tell you which because it
does not know what it lacks.
Recency is computed LOCALLY first and reported whether or not you go online,
because knowing how stale you are is what decides whether the search is worth
making. Set `search_online=True` to query PubMed and OpenAlex for work newer
than the corpus โ metadata only, nothing of the researcher's is transmitted.
Anything returned from a search is ATTRIBUTED, not quoted: a title and a DOI
that nobody has read. Never present it beside a corpus passage as if the two
were the same kind of evidence, and use `verify_doi` before citing one.
Args:
question: The question, e.g. "specificity of CATT in passive screening".
search_online: Query PubMed + OpenAlex for newer work. Ask first.
limit: Maximum results per source (default 8).
Returns:
The corpus date range for this topic and, if requested, newer candidate
sources with their years and DOIs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| question | Yes | ||
| search_online | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so well: it explains local computation, optional PubMed/OpenAlex querying, metadata-only transmission, and that returned search results are attributed rather than quoted. It also warns not to present search results as equivalent to corpus evidence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the core question and then structured into behavior, args, and returns. It is generally efficient, though the staleness illustration is slightly verbose and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations, the presence of an output schema, and only three parameters, the description is complete enough to call the tool correctly. It covers purpose, optional online behavior, parameter meanings, privacy constraints, and citation caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: `question` is illustrated with an example, `search_online` explains exactly what remote sources are queried, and `limit` is described as a per-source maximum with its default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: checking how old the topic corpus is and optionally finding newer publications. It distinguishes the local recency check from the online search and from downstream citation verification via `verify_doi`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: recency is computed locally first, and `search_online=True` is an optional escalation that should be asked about first. It also names `verify_doi` as the required follow-up before citing online results, though it does not explicitly list when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_news_feedsMetis ยท News Radar โ Check News FeedsA
Check every news feed and report which ones are actually working.
Why this exists: feedparser never raises on an HTTP error โ it returns an
object with zero entries. So a feed returning 404 or 403 was indistinguishable
from a quiet news day, and `scan_news_feeds` reported "0 new items" either way.
Measured 2026-08-19: 14 of 33 news feeds were HTTP-dead and had been
contributing nothing, silently. That is the real reason the News surface looked
thin โ not too few sources, but sources that never answered.
Requests are sequential and spaced, because hammering publishers in parallel
produces 403s that are rate limiting rather than real rejections.
Args:
kind: "news" (journalism, the News surface), "paper" (journal ToCs and
preprints, the Library), or "all". Default "news".
Returns:
Per feed: working (with entry count and newest publication date) or the
HTTP status that needs fixing.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | news |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: it discloses the feedparser silent-failure behavior, that requests are sequential and deliberately spaced to avoid false 403s (i.e., the call is slow and rate-limit-aware), and that per-feed results are either working status plus recency or an HTTP status to fix. These are exactly the traits an agent needs to interpret results and set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The operational content is front-loaded in the first sentence and the remaining paragraphs are structured (why / behavior / args / returns). The anecdotal 2026-08-19 measurement (14 of 33 feeds dead) is persuasive but longer than needed โ it earns partial place as motivation but could be one clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A one-parameter diagnostic tool with an output schema, yet the description still covers motivation, rate-limit behavior, parameter meanings, and the shape of results. Nothing an agent needs to invoke or interpret it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema exposes no enum, so the description must define `kind` โ and it does, mapping 'news' to the News surface, 'paper' to journal ToCs/preprints in the Library, and 'all' to both, plus the default. This fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a specific verb and resource โ check every feed and report which are working โ and the body contrasts it with `scan_news_feeds`, which reports item counts without distinguishing dead feeds. An agent can tell this is a diagnostic tool, not a content-fetch tool, without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Why this exists' section makes the selection condition clear in practice: when a scan reports 0 items and you need to know whether feeds are dead or merely quiet, use this instead of `scan_news_feeds`. It stops short of an explicit directive ('call this before/after scanning when X'), so it is strong context rather than a full when-to-use rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_viz_fitMetis โ Check Viz FitA
Check that a dataset can feed a saved recipe. YOU propose the mapping.
The tool that makes "reproduce this with other data" a check rather than a
hunch โ and it contains no cleverness on purpose. Reading that
`screening_mode` is the origin category in this dataset is semantics, which
is your job. Confirming that every role was accounted for, that each column
named actually exists, and that nothing was mapped which the recipe never
asked for is bookkeeping, which is this tool's job.
An earlier version guessed the mapping by comparing role names to column
names. It reported the same "0 matched" for a dataset built to fit and one
that could not fit at all, because roles are abstract precisely so they
carry no dataset's vocabulary. A check that cannot fail differently is
decoration, so it was removed.
Args:
recipe: viz_recipes.slug.
mapping: JSON object of role -> column in YOUR data, e.g.
'{"unit_id":"health_zone","start_class":"endemicity_2015",
"end_class":"endemicity_2025","group":"province"}'
columns: Optional comma-separated full column list. Supply it and the
check also catches a column you named that does not exist, plus
reports what is left unused.
Returns:
Ready or not-ready, what is missing, and the recipe's caveats โ reprinted
here because the moment of use is when a caveat is actually read.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe | Yes | ||
| columns | No | ||
| mapping | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, yet the description carries the full burden: it declares the tool does no inference, lists exactly what it validates (role coverage, column existence, extraneous mappings), explains the historical failure that motivated the design, and describes the ready/not-ready return plus caveat reprinting. The non-guessing behavior is precisely the trait an agent most needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the agent's responsibility are front-loaded, and the Args/Returns blocks are tight. The paragraph about the earlier heuristic version runs long for what it establishes, and the rhetorical framing ('a check rather than a hunch', 'decoration') costs more words than the point requires.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter validator with an output schema, every caller-facing question is answered: what to pass, what is validated, what the tool will not do, and what comes back. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and does: recipe is identified as a viz_recipes.slug, mapping is a JSON role->column object with a concrete example, and columns is an optional comma-separated list whose additive checking behavior is spelled out. All three parameters gain meaning not present in the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and scope: 'Check that a dataset can feed a saved recipe,' with the explicit division of labor that the agent proposes the mapping. The purpose is unmistakable, though it never names the sibling tools it borders on (find_viz, save_viz_recipe) to route the agent away from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly frames the use case ('reproduce this with other data') and tells the agent what it must supply versus what the tool checks, plus a conditional behavior for the optional columns argument. It stops short of explicit when-not guidance or naming alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
citation_debtMetis โ Citation DebtB
Which outputs rest on citations that were never verified?
Reads the ledger. This is the question the AI in Public Health course raised
and nothing could answer โ 16 lessons shipped with "every citation is an
unverified lead" because verification results had nowhere to accumulate.
Args:
limit: Maximum rows to list (default 25).
artifact: Restrict to one artifact path; omit for everything.
Returns:
Counts by verdict, and the worst offenders first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| artifact | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. 'Reads the ledger' implies a non-mutating operation and the return shape is described (counts by verdict, worst offenders first), but permissions, side effects, and what the ledger draws from are left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The rhetorical question and the '16 lessons shipped' backstory take up front-loaded space without operational content, so the definition is not front-loaded on what the tool does. The Args and Returns blocks themselves are tight and well-formed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and both parameters explained, an agent has what it needs to call this correctly; the description appropriately stops short of re-specifying return fields. Only the relationship to verification tools is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description documents both parameters meaningfully: limit as a row cap with default, and artifact as an optional path filter where omission means everything. That compensates well for the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening question plus 'Reads the ledger' conveys the gist โ surfacing outputs whose citations were never verified โ but the actual operation is never stated as a verb+resource (e.g., 'list citation-verification debt records'). Sibling tools like verify_text_citations, verify_doi, and library_coverage overlap in domain, and nothing distinguishes this one from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no routing to alternatives such as verify_text_citations or library_coverage. The reader must infer that this is a retrospective audit query rather than the tool that performs verification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clean_datasetMetis ยท Data Analyst โ Clean DatasetA
Apply cleaning operations to a dataset and write a new file.
NEVER modifies the original file. Always writes to output_path.
โ ๏ธ Writing a dataset requires authorization. This tool refuses to write
unless authorized=True (confirm with the user first) or the env var
METIS_ALLOW_DATA_WRITE=1 is set. This mirrors the Claude Code write-gate so
a rebuild can't bypass it via MCP.
Supported operations:
- "drop_duplicates" โ remove exact duplicate rows
- "drop_columns:[col1:col2:...]" โ remove specified columns
- "fill_na:[col:value]" โ fill nulls in col with value
- "rename_column:[old_name:new_name]" โ rename a column
- "strip_whitespace" โ strip leading/trailing spaces from all string columns
- "standardize_dates:[col:format]" โ parse col as date (format: 'auto' or strftime)
- "drop_na_rows:[col]" โ drop rows where col is null
- "drop_na_rows_any" โ drop rows with ANY null value
Args:
path: Absolute local path to the source dataset.
operations: List of operation strings (see above).
output_path: Where to write the cleaned file. If empty, appends '_cleaned'
before the extension (e.g. data.csv โ data_cleaned.csv).
Returns JSON with: output_path, original_shape, cleaned_shape, row_delta,
col_delta, operations_applied, operations_skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| authorized | No | ||
| operations | Yes | ||
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description carries full burden. It discloses no modification of original, authorization gate, and lists all supported operations with format examples. Returns expected output fields are noted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, uses bullet points for operations, clearly highlights authorization. Slightly verbose but every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema provided, description covers all necessary behavioral and operational details: never modifies original, authorization gate, all operations, parameter semantics. Fully equips agent to use tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description provides detailed meaning for each parameter: path (absolute path), authorized (boolean with auth flow explained), operations (list with examples), output_path (default behavior when empty).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Apply cleaning operations to a dataset and write a new file' with a specific verb and resource. It distinguishes from siblings by focusing on execution vs. suggestion (suggest_cleaning) and other data tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly explains never modifies original, always writes to output path, and authorization requirements. However, lacks explicit when-to-use vs. alternative tools like suggest_cleaning or profile_dataset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commit_session_decisionsMetis ยท Memory Curator โ Commit Session DecisionsA
Commit key decisions from this session to permanent memory.
This is the mandatory recording checkpoint โ call it at the end of every
agent-routed session, before delivering the final result to the user.
Unlike save_session_summary (which accepts any summary), this tool enforces
that at least one concrete decision is captured, and writes each decision
separately to episodic_memory for future retrieval.
Args:
decisions: 1-5 plain-English decisions made this session. Be specific:
"Chose logistic regression over mixed model due to data sparsity in
Zone de Santรฉ X" not "made a modelling decision".
summary: 1-3 sentence summary of the session context (optional but useful).
key_topics: Topic tags e.g. ["DHIS2", "domain surveillance", "tracker design"].
session_id: Optional session identifier.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | No | ||
| decisions | Yes | ||
| key_topics | No | ||
| session_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool enforces at least one decision, writes to episodic memory, and requires concrete decisions. It does not mention side effects or permissions, but provides adequate transparency for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a clear front-loaded purpose, usage note, and parameter list. It is slightly verbose but every sentence adds value. Could be slightly more concise, but still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no annotations, the description covers the tool's role, when to call, parameter details, and storage behavior. It provides sufficient context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. It explains the decisions parameter with examples, notes summary's optionality, describes key_topics as tags, and session_id as optional. This adds significant meaning beyond the schema structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'commit', the resource 'key decisions from this session', and explicitly distinguishes from the sibling tool 'save_session_summary' by noting its enforcement of at least one decision and separate episodic memory storage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when to use: 'at the end of every agent-routed session, before delivering the final result'. Also gives an alternative tool ('save_session_summary') and explains the difference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_profilesMetis ยท Data Analyst โ Compare ProfilesA
Compare two dataset profiles and produce a side-by-side diff.
Pass the JSON strings returned by profile_dataset() for the original
and cleaned files. Returns rows added/removed, columns added/removed,
null count changes per column, type changes, and a human-readable summary.
Args:
before_profile: JSON string from profile_dataset() on the original file.
after_profile: JSON string from profile_dataset() on the cleaned file.
Returns JSON with: row_delta, col_delta, column_diffs (nulls, dtypes),
duplicate_delta, and a human_summary string.
| Name | Required | Description | Default |
|---|---|---|---|
| after_profile | Yes | ||
| before_profile | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so description carries full burden. It explains the comparison operation and return format but does not disclose whether the tool is read-only, potential side effects, error conditions, or performance implications. Basic behavioral traits are covered but not comprehensively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise and well-structured: first sentence summarizes purpose, then explains inputs, then outputs. Uses clear formatting with bullet points for return fields. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists (not shown), description covers the key aspects: inputs, outputs, and usage. It could mention prerequisites (e.g., need to call profile_dataset first) but overall is adequate for a focused diff tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet description adds full context: each parameter (before_profile, after_profile) is described as a JSON string from profile_dataset() and explains their roles. This compensates entirely for the lack of schema detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool compares two dataset profiles and produces a side-by-side diff. It lists specific outputs like rows added/removed, columns added/removed, null count changes, type changes, and a human-readable summary. This distinguishes it from sibling tools such as profile_dataset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to pass JSON strings from profile_dataset() and describes the arguments and return value. While it doesn't explicitly state when not to use or list alternatives, the usage context is clear and specific enough for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_library_providerMetis ยท Librarian โ Configure Library ProviderA
Configure the library provider for this Metis installation.
Call this during setup or when switching reference managers.
Args:
provider: "zotero" or "mendeley". Mendeley uses BibTeX export.
api_key: Zotero API key (from https://www.zotero.org/settings/keys).
user_id: Zotero numeric user ID (shown on the same settings page).
bibtex_path: For Mendeley: full path to exported .bib file.
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | ||
| user_id | No | ||
| provider | Yes | ||
| bibtex_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 explains provider-specific parameters and that Mendeley uses BibTeX export. However, it does not disclose whether the operation overwrites existing config, requires specific permissions, or has side effects like restarting services. This is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise: two sentences describing purpose, then a bulleted list of argument explanations. Every sentence adds value; no fluff. Front-loaded with the key purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (not shown), the description doesn't need to explain return values. It covers usage scenarios (setup, switching) and parameter details. It could mention validation or success indicators, but is mostly complete for a configuration tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description compensates well. It explains that provider can be 'zotero' or 'mendeley', that api_key comes from a specific Zotero URL, user_id is numeric, and bibtex_path is for Mendeley. This adds meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it configures the library provider for the Metis installation, with a specific verb (configure) and resource (library provider). It distinguishes from sibling tools like import_bibtex_library and sync_zotero_library which are related but different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Call this during setup or when switching reference managers', providing clear context for when to use. It does not explicitly state when not to use it or list alternatives, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_project_folderMetis โ Connect Project FolderA
Register all relevant files in a project folder so Metis can read them.
Walks the folder recursively and adds every file with a recognised extension
(.R, .Rmd, .md, .py, .js, .ts, .sql, .json, .yaml, .qmd, .tex, .csv) to
the tracked_files table. Call this once per project; after that, use
read_file() to read any individual file.
Args:
folder_path: Absolute path to the project root folder.
label: Short label for all files from this project (e.g. "MLM Course").
max_files: Safety limit โ stop after registering this many files (default 200).
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| max_files | No | ||
| folder_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully carries the transparency burden. It explains that the tool walks the folder recursively, adds files with recognized extensions to a `tracked_files` table, and includes a safety limit (max_files). This is adequate disclosure for a registration operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with a clear separation of purpose, behavior, and parameter details. It is slightly repetitive in the first two sentences, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity, the description covers the tool's purpose, usage flow, parameter meanings, and behavioral constraints. An output schema exists, so return values are documented separately. It lacks error scenarios but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides detailed explanations for each parameter: folder_path (absolute path), label (short label with example), and max_files (safety limit with default). This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Register all relevant files in a project folder so Metis can read them.' It lists recognized extensions and distinguishes from the sibling tool `read_file()` by noting this is a one-time setup operation per project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this once per project; after that, use read_file() to read any individual file.' This gives clear usage context and suggests an alternative, though it does not explicitly mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consolidate_old_memoriesMetis ยท Memory Curator โ Consolidate Old MemoriesA
Consolidate old memories into monthly summaries and archive originals.
Tiered retention keeps recall() fast by compressing old raw entries into
distilled summaries while preserving the knowledge:
1. **Episodic decisions** older than decision_age_days (default 90) are
grouped by month and project, summarised into a single consolidated
entry per group, and the originals are marked archived=1 (excluded
from default recall but still queryable).
2. **Session summaries** older than session_age_days (default 180) are
marked archived=1 so they don't clutter keyword search.
3. **Reflexions** are consolidated monthly โ patterns are distilled
into a single "what we learned in month X" entry.
Run with dry_run=True first to see what would happen without changes.
Args:
decision_age_days: Archive episodic decisions older than this (default 90).
session_age_days: Archive session summaries older than this (default 180).
dry_run: If True, report what would be done without making changes.
Returns:
A report of consolidation actions taken (or planned if dry_run).
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | ||
| session_age_days | No | ||
| decision_age_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses behavior: how decisions are grouped and summarized, session summaries archived, reflexions consolidated monthly. It clarifies that originals are marked archived but still queryable, and that recall is kept fast. No contradictions with annotations (none provided).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bullet points and separate sections. Efficiently communicates three consolidation rules and parameter details without unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete coverage: explains what the tool does, how it works for each memory type, parameter details, and return value (a report of actions). No gaps given the tool's complexity and parameter count.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates fully by explaining each parameter's purpose and default values in the Args section. dry_run is clearly described as a preview mode, decision_age_days and session_age_days have clear functions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifically states it consolidates old memories into monthly summaries and archives originals, with clear breakdown of three memory types. It distinguishes from sibling tools like consolidate_reflexions and consolidate_session_memory by being the comprehensive consolidation tool for all old memories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to run with dry_run=True first to preview changes. Also provides default age thresholds and explains the tiered retention behavior, giving clear guidance on when to use this tool for memory maintenance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consolidate_reflexionsMetis โ Consolidate Reflexions ToolA
Distil recurring reflexion themes into semantic memory and prune working memory.
Runs the nightly self-improvement consolidation: every theme an agent raised
>= min_count times in the last `days` becomes a searchable semantic-memory
node (deduped), and working_memory older than 7 days is pruned. Idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| min_count | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses idempotency, deduplication, and the 7-day working memory pruning threshold. However, it omits authorization requirements or side effects like potential data loss, though the details given are substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences of functional explanation plus one for idempotence. No filler, key information front-loaded. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values are covered. The description explains the core transformation (reflexions to semantic nodes, pruning) and key constraints (count threshold, dedup, window). Missing minor details like error states or performance implications, but overall sufficient for a knowledgeable agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description explains both parameters: min_count and days are directly referenced in '>= min_count times in the last `days`'. This adds meaning beyond the bare schema, though it could be more explicit about default behaviors.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb-resource pair: 'distil recurring reflexion themes into semantic memory' and 'prune working memory'. It uses specific terms like 'min_count' and 'days' to define scope, distinguishing it from sibling consolidation tools like consolidate_old_memories and consolidate_session_memory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Runs the nightly self-improvement consolidation', indicating it's a periodic maintenance task. While it doesn't list when not to use it or alternative tools, the context is clear enough for an agent to infer appropriate scheduling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consolidate_session_memoryMetis ยท Memory Curator โ Consolidate Session MemoryA
Scan recent agent runs and write structured memory entries for high-value work.
Reads the n most recent agent_runs, identifies runs with output files and
substantive task summaries, deduplicates against existing memory_entries,
and writes new entries to the DB + markdown files.
Args:
n_runs: Number of recent agent runs to review (default 20).
min_quality: 'high' = only runs with output files; 'all' = include run-only entries.
| Name | Required | Description | Default |
|---|---|---|---|
| n_runs | No | ||
| min_quality | No | high |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: reading recent runs, filtering based on output files and summaries, deduplication against existing entries, and writing to DB and markdown files. It lacks details on side effects or permissions but provides sufficient transparency for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the main action. The Args section is integrated but could be more structured (e.g., bullet points). Overall efficient with no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two parameters, high coverage in description, and an output schema (not shown), the description sufficiently explains the process, inputs, and outputs. No major gaps apparent for agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description's Args section explains both parameters (n_runs default 20, min_quality with options 'high' and 'all'). This adds meaningful context beyond the schema, clarifying behavior and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool scans recent agent runs, identifies high-value work, deduplicates, and writes memory entries. It specifies verbs 'scan' and 'write' with resources, and contrasts with similar siblings like 'consolidate_old_memories' and 'add_memory_entry' through its explicit workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool reads recent runs and the meaning of parameters (n_runs, min_quality), implying use for consolidating session memory. However, it does not explicitly state when to use this vs alternatives like consolidate_old_memories or add_memory_entry, nor provides 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.
create_documentMetis โ Create DocumentA
Write a document to outputs/ โ Markdown or Word (.docx).
The general "save this properly" tool. Without it, anything Metis produces in
a chat client exists only in the transcript, which is not somewhere work can
be found again.
Args:
title: Document title; heads the file and derives its name.
content: Body text. Markdown headings and bullets are honoured in both
formats.
subdir: Folder under outputs/ (default "reviews").
fmt: "md" (default) or "docx".
Returns:
The path written.
| Name | Required | Description | Default |
|---|---|---|---|
| fmt | No | md | |
| title | Yes | ||
| subdir | No | reviews | |
| content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioural burden. It does useful work by disclosing the write target (outputs/), the surprising default subfolder ("reviews"), format support and the return value (the written path). But for a filesystem mutation it omits overwrite/collision behaviour, permission or trust-folder requirements, and whether the directory tree is created automatically โ all material for an agent writing files unattended.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and format in the first line, followed by a single motivating sentence and a compact args block; no filler. The "Returns: The path written" line is redundant with the output schema, a minor duplication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the one-line return note is sufficient and the four parameters are fully covered. The remaining gap is behavioural rather than parametric: overwrite semantics and directory-creation behaviour are unstated for a mutation tool with zero annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: each of the four parameters is explained with non-obvious detail โ title derives the filename, markdown headings and bullets are honoured in both formats, subdir is relative to outputs/ with default "reviews", and fmt defaults to "md" with "docx" as the alternative. An agent could not infer the filename-derivation rule or the docx markdown handling from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("Write a document to outputs/") plus the two supported formats, and the phrase "the general 'save this properly' tool" positions it against more specialised writers in the sibling set such as create_presentation, create_poster and fill_document_template. It stops short of naming those alternatives explicitly, so differentiation is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly establishes when to reach for this tool: any artefact produced in a chat client that should persist beyond the transcript. What's missing is the boundary condition โ nothing says when to use create_presentation/create_poster/save_review instead, or whether existing files at the same path are replaced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_focus_areaMetis โ Create Focus AreaA
Define a focus area โ a lens over news, literature and your own thinking.
A focus is for a subject you want to stay CURRENT on, as opposed to a course
you finish or a project you deliver. It owns no content: it is a saved query
plus a place to write, so removing it later cannot remove anything.
`keyword_groups` is the important argument, and it is groups rather than a
list on purpose: OR within a group, AND across groups. "AI in health" is a
conjunction of two axes, and a flat list returns "Can AI ever be conscious?".
Args:
title: Human name, e.g. "AI in Health & Epidemiology".
keyword_groups: JSON list of lists, e.g.
'[["artificial intelligence","machine learning","llm"],
["health","clinical","epidemi","surveillance"]]'
subtitle: One line on what this focus is for.
layers: Comma-separated knowledge-layer slugs to search for documents.
overview: The standing narrative โ what matters here and why.
activate: Put it on the shelf immediately (max 3 active).
Returns:
The created focus and its shelf state.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| layers | No | ||
| activate | No | ||
| overview | No | ||
| subtitle | No | ||
| keyword_groups | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does it well: it explains that a focus 'owns no content' and that removing it 'cannot remove anything,' which is non-obvious and directly addresses reversibility/safety. It also surfaces the 'max 3 active' constraint on activate and states what is returned. Missing only operational details like permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the key mental model, then cleanly organized into Args and Returns. Slightly discursive in the opening paragraphs, but each sentence contributes a distinct idea (scope, semantics, constraint) rather than restating the signature.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Six parameters, zero schema descriptions, no annotations โ the description covers every argument, the behavioral contract (no owned content, max 3 active), and briefly the return value even though an output schema exists. Nothing an agent needs 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.
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 documents all six parameters including the non-obvious one: keyword_groups is a string containing JSON, with the OR-within / AND-across semantics plus a concrete two-axis example explaining why groups rather than a flat list. That is meaning the raw schema cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (define/create) and a well-bounded resource (a focus area), then immediately differentiates it conceptually from sibling concepts: 'a subject you want to stay CURRENT on, as opposed to a course you finish or a project you deliver.' An agent can tell this apart from create_project or save_course_curriculum 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear selection criterion โ a focus is for ongoing subjects, not finished courses or delivered projects โ which implies when to reach for this rather than the project/course creation siblings. It does not explicitly name those sibling tools or say when NOT to create a focus (e.g., duplicates), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_knowledge_databaseMetis ยท Librarian โ Create Knowledge DatabaseA
Register a new custom knowledge database layer.
After creating, add PDFs to knowledge/library/<your-folder>/ and call
build_pdf_knowledge_db(database='<slug>') to index them.
Args:
slug: URL-safe identifier (e.g. 'dhis2-specialist', 'malaria-research').
name: Human-readable name (e.g. 'DHIS2 Specialist Knowledge').
description: What this database covers.
layer: Layer number (4+ for custom; built-ins use 1โ3).
folders: List of library subfolder paths to include
(e.g. ['open-access-books/Health Informatics & DHIS2']).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| slug | Yes | ||
| layer | No | ||
| folders | No | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses that it registers a database layer and that indexing requires a separate step. Does not mention idempotency, error behavior, or if overwriting occurs on duplicate slug. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Brief description followed by usage tip then parameter list. Each sentence adds value. Could be slightly more compact, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, and follow-up steps. Has output schema (not shown) so return values are handled. Missing error handling or behavior on duplicate slugs. Adequate for a creation tool with moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description provides detailed explanations for all 5 parameters. Explains slug as URL-safe identifier, layer as 4+ for custom, folders with example. Adds value beyond basic type info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Register' and resource 'custom knowledge database layer'. Distinguishes from siblings like build_pdf_knowledge_db which is a follow-up step, but not explicitly compared to other create tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides sequential workflow: create, then add PDFs, then call build_pdf_knowledge_db. Explains layer numbering (4+ custom). Does not specify when not to use or alternatives, but gives practical context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_posterMetis โ Create PosterA
Create a conference poster (.pptx) filled into the researcher's own template.
The poster template is stored in Metis (see list_templates) and used by
default โ never ask the researcher for the file or where it is.
The template (.potx or .pptx) is looked up in system/config/local/templates/,
knowledge/templates/, or $METIS_TEMPLATES_DIR โ or pass a path. Each layout's
section boxes are detected from its geometry, so any template with a title,
small section headers and large content boxes works.
Args:
title: Poster title.
sections: The poster body as plain text. Each section starts with a line
beginning "# " (its heading); following lines are its text. Lines
beginning "- " become points, "## " a block subtitle inside the box,
anything else plain prose. Sections fill the boxes down the first
column, then the next. Example:
# Background
- Why the question matters
# Methods
- Design, setting, data
# Results
- The main finding, with its number
authors: Authors line, shown under the title.
band: Optional text for the band below the title โ affiliations, or a
one-sentence key message.
template: Template file name (or part of it) or a path. Empty = the first
template found; the result says which one was used.
layout: "auto" (smallest layout with enough boxes), or part of a layout
name such as "one column" / "two column".
filename: Optional output filename; derived from the title when omitted.
Returns:
The path written, the template and layout used, and any section whose text
is likely to overflow its box.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | ||
| title | Yes | ||
| layout | No | auto | |
| authors | No | ||
| filename | No | ||
| sections | Yes | ||
| template | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden, and it does substantial work: it discloses the template search order (config dirs, knowledge/templates, $METIS_TEMPLATES_DIR), geometry-based layout detection, column-fill order, and that the result reports possible overflow. It omits overwrite behavior when the output filename already exists, which matters for a file-writing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then structured Args/Returns blocks that keep it navigable despite its length. The example under `sections` is justified by the custom syntax, though the template-location sentence partially repeats the opening 'never ask' instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 7-param file-generating tool with no annotations and no schema descriptions, yet the description covers source resolution, section formatting, layout selection, output naming, and return contents (path, template used, overflow warnings โ also backed by the output schema). Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 params, and the description documents every one, including a worked mini-language grammar for `sections` (# headings, - bullets, ## sub-blocks, column fill order), 'auto' layout semantics, and template substring-or-path matching. This fully compensates for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and artifact: 'Create a conference poster (.pptx) filled into the researcher's own template.' The template-insertion framing distinguishes it from create_presentation (blank deck) and fill_document_template (non-poster docs) in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: templates come from Metis via list_templates, and 'never ask the researcher for the file or where it is' is a clear when-not instruction. However, it never contrasts with create_presentation or fill_document_template, which are the most likely confusable siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_presentationMetis โ Create PresentationA
Create a PowerPoint (.pptx) file from a simple text outline.
The tool that closes the largest gap in Claude Desktop: Metis could read
presentations but never produce one, so any "make me a deck" request had no
way to land as a file.
Args:
title: Deck title, used on the title slide and in the filename.
slides: The deck as plain text. Each slide starts with a line beginning
"# " (the slide title); every following line becomes a bullet.
A line beginning "> " becomes speaker notes for that slide.
Blank lines are ignored. Example:
# Why passive surveillance underperforms
Health-facility detection depends on care-seeking
Median delay to diagnosis exceeds 12 months
> Open with the Mitashi 2014 figure
# What changes with RDTs at the periphery
Sensitivity holds at lower prevalence
A line beginning "## " starts a section-divider slide instead.
subtitle: Optional subtitle for the title slide.
filename: Optional filename; derived from the title when omitted.
template: The researcher's slide template stored in Metis (name or part
of it). Empty = their default deck template if one is stored (see
list_templates) โ never ask them for the file. "none" = plain deck.
closing: Text for the template's closing slide under "Thank you!" โ
e.g. presenter name, e-mail, website. Empty = no closing slide.
Returns:
The path written and a slide count.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| slides | Yes | ||
| closing | No | ||
| filename | No | ||
| subtitle | No | ||
| template | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and largely meets it: it declares the tool writes a .pptx file, explains filename derivation from title, spells out template resolution (empty = stored default, "none" = plain deck) and that empty closing produces no closing slide. It omits what happens if the filename already exists, where on disk the file lands, and whether writing is reversible โ real gaps for a filesystem-mutating tool, but the defaults disclosure is well above average.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is correctly front-loaded and the Args section is dense with load-bearing detail. However, the two-sentence aside about "the largest gap in Claude Desktop" and Metis being unable to produce decks is promotional narrative that does not help an agent decide or invoke, and it sits between the purpose and the actual spec.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the brief "Returns" line is sufficient. All six parameters, including optional ones and their empty-string defaults, are covered, and the non-obvious free-text format is fully specified with an example โ nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description had to compensate fully and does: all six parameters are documented, and the slides mini-language (# title, ## section divider, > speaker notes, blank lines ignored) is specified precisely enough to author input correctly, with a worked example. The template semantics (name or partial name, empty vs "none") are the kind of detail no schema could carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact: "Create a PowerPoint (.pptx) file from a simple text outline." That artifact-level specificity distinguishes it from siblings like create_poster and create_document without naming them, and the second half of the sentence tells the agent what input it needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is one genuine usage directive buried in a parameter: template of empty means use the stored default and "never ask them for the file," plus a pointer to list_templates. But there is no explicit when-to-use guidance relative to create_poster/create_document, and the second paragraph explains why the tool exists rather than when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectMetis โ Create ProjectA
Register a new project in the Metis platform.
Called when a researcher confirms they want a Claude conversation or project
tracked permanently in Metis. Creates the project record in the DB so it
appears in the Work tab and is available for task linking and memory search.
Args:
title: Human-readable project name, e.g. "Statistics Course".
description: What this project is about (one sentence).
domain: Research domain, e.g. "education", "epidemiology". Optional.
source: Origin โ "claude_project" (default), "claude_cowork", or "manual".
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| domain | No | ||
| source | No | claude_project | |
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool creates a DB record and makes the project available for linking and memory search, but does not mention error handling (e.g., duplicate titles), permissions, or side effects. This is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence overview, a usage context sentence, an effect sentence, and a clear 'Args' list. No unnecessary words, and critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (4 parameters, 1 required) and the presence of an output schema, the description adequately covers the behavior (record creation, UI appearance, linking capability). No major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates fully by explaining each parameter: title (human-readable name with example), description (one sentence), domain (with examples), and source (with allowed values). This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('register a new project'), the resource (Metis platform), and the effect (creates DB record, appears in Work tab). It distinguishes from siblings like create_project_full by implying this is the standard project creation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear scenario for when to call the tool ('when a researcher confirms they want a Claude conversation or project tracked permanently'). It does not explicitly mention when not to use or alternatives like create_project_full, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_project_fullMetis โ Create Project FullB
Create a project with full Metis integration: DB record, CLAUDE.md, Claude Desktop.
This is the unified project creation tool used by all installers and the dashboard.
Args:
title: Project name.
folder_path: Absolute path to the project folder on disk.
category: User-defined category (e.g. 'Article', 'Grant', 'Teaching').
description: What this project is about. If empty and scan_type != 'none',
auto-detected from folder.
scan_type: 'names' | 'content' | 'none' โ how to infer description from folder.
link_claude_desktop_auto: Write project to Claude Desktop config automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| category | No | ||
| scan_type | No | names | |
| description | No | ||
| folder_path | No | ||
| link_claude_desktop_auto | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must fully disclose behavioral traits. It does not mention idempotency, error handling on existing project, permissions, or side effects beyond creation. The listing of integrations is informative but insufficient for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise: two short sentences plus a clean arg list. All content adds value without redundancy. Front-loaded purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return value is covered. However, with 6 parameters and no behavioral context (e.g., overwrite behavior, folder requirements), the description lacks completeness for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions are absent (0% coverage), so the description carries the full burden. Each parameter has a concise explanation, with useful details like auto-detection for description and scan_type options. Title explanation is minimal but acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it creates a project with full Metis integration including DB record, CLAUDE.md, and Claude Desktop. It also notes it is the unified tool used by installers and dashboard, but does not explicitly differentiate from sibling 'create_project'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes intended use as the unified project creation tool, implying it is the standard path. However, no explicit guidance on when to use alternatives (e.g., simpler create_project) or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskMetis โ Create TaskA
Create a new task in the SQLite database.
Args:
title: Short task description.
project_id: Which project this task belongs to.
owner: Who is responsible (default "Metis").
notes: Additional details or context.
due_date: Optional due date in YYYY-MM-DD format.
recurrence: Optional repeat โ "daily", "weekly", "monthly", or "yearly".
When a recurring task is completed, the next occurrence is created automatically.
parent_task_id: Optional parent task โ set this to make this a subtask.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| owner | No | Metis | |
| title | Yes | ||
| due_date | No | ||
| project_id | Yes | ||
| recurrence | No | ||
| parent_task_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses key behaviors: default values for owner, recurrence auto-creation on completion, and subtask creation via parent_task_id. Does not discuss error conditions or side effects beyond creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with a clear header and bulleted parameter list. It is reasonably concise, though some lines are slightly verbose. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters (2 required) and an existing output schema, the description covers all parameters with meaningful explanations. It lacks discussion of edge cases or error handling, but for a create operation, the essential context is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, meaning parameters have no descriptions in the schema itself. The description compensates fully by providing clear explanations for each parameter, including formats (e.g., YYYY-MM-DD for due_date), allowed values (e.g., recurrence options), and usage context (e.g., parent_task_id makes it a subtask).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Create a new task in the SQLite database' with a specific verb and resource. It lists all parameters with explanations, distinguishing it from sibling tools like update_task and delete_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating tasks but does not explicitly state when to use this tool vs alternatives like update_task or delete_task. No guidance on when not to use it or context-specific recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cross_pollinateMetis โ Cross PollinateA
Find cross-domain connections for given text.
Searches library_seeded, meetings, news_briefs, and ideas tables
for related items. Returns top 5 with source type, title, and snippet.
Args:
content: Text to find cross-domain connections for.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden of behavioral disclosure. It explains that the tool searches multiple tables and returns top results, but does not mention side effects, permissions, or response structure beyond the stated fields. The behavior is transparent enough for a read-only search.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a single-sentence purpose followed by a bullet-like explanation of sources and return format, with one parameter. Every sentence is essential and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the tool's straightforward search nature, the description adequately covers the tool's behavior, sources, and return structure. More guidance on when to use it among many similar siblings would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'content' is described as 'Text to find cross-domain connections for,' which adds value over the name alone. However, with 0% schema description coverage, the description does not fully compensate by specifying format or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: finding cross-domain connections for given text, specifying the tables it searches and the structure of the result (top 5 with source type, title, snippet). This clearly distinguishes it from generic search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (for cross-domain connections) but does not explicitly state when not to use it or provide alternatives among the many sibling search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_noteMetis โ Daily NoteA
Append to (or read) today's daily note โ one rolling note per day.
Unlike add_journal_entry (which creates a new row each time), daily_note
keeps a single entry per calendar day and appends timestamped lines to it โ
the Reflect/Tana "daily note" pattern for fast, low-friction capture.
Args:
text: Line to append. Leave empty to just read today's note so far.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: appends timestamped lines, can read when text is empty, single entry per calendar day. No annotations provided, so description bears full burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise: two short paragraphs plus an Args section. Every sentence adds value โ no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and existing output schema, the description covers purpose, usage, behavior, param semantics, and sibling differentiation completely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description fully explains the single parameter 'text' โ its role in appending vs reading, and the default empty meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb ('append to or read') and resource ('today's daily note') and distinguishes from sibling 'add_journal_entry' by noting the single-entry-per-day pattern.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context for when to use ('for fast, low-friction capture') and contrasts with the sibling 'add_journal_entry', though no explicit when-not-to-use is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decrypt_backupMetis โ Decrypt BackupA
Decrypt a .enc backup produced by encrypt_backup().
Reverses the format [8B magic][16B salt][12B nonce][ciphertext+tag]. Writes the
recovered .sqlite next to the .enc file (dropping the .enc suffix) unless
output_path is given. The passphrase is never stored. This is the counterpart
to encrypt_backup โ without it, encrypted backups could not be restored.
Args:
enc_path: Path to the .enc encrypted backup.
passphrase: The passphrase used at encryption time.
output_path: Optional explicit destination for the decrypted file.
Returns JSON with out_path and the method used.
| Name | Required | Description | Default |
|---|---|---|---|
| enc_path | Yes | ||
| passphrase | Yes | ||
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
In the absence of annotations, the description adequately discloses key behaviors: output file location (next to .enc or explicit output_path), that the passphrase is never stored, the format reversal, and the return structure. It could mention potential overwrite behavior or error conditions, but what is provided is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-organized: a one-sentence purpose, format details, output behavior, parameter listing, and return format. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema that likely details the return structure, the description adequately covers the tool's purpose, behavior, parameters, and output. It fully addresses the needs of a decryption tool in this context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It provides clear, informative descriptions for all three parameters (enc_path, passphrase, output_path), explaining their roles in the decryption process. This fully compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states that the tool decrypts a .enc backup produced by encrypt_backup(), and explains the format it reverses. It clearly distinguishes itself from the sibling encrypt_backup by being its counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description identifies the tool as the counterpart to encrypt_backup, establishing when it should be used (to decrypt backups). While it doesn't explicitly list exclusion criteria, the context of being the decryption complement provides clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_knowledge_databaseMetis ยท Librarian โ Delete Knowledge DatabaseA
Remove a knowledge background layer and everything indexed under it.
Deletes the layer's registry row, its indexed passages and its vectors. Your
PDFs on disk are NOT touched โ only the search index built from them, so the
layer can always be rebuilt by pointing at the same folders again.
Args:
database: The layer's slug (e.g. 'my-custom-layer').
confirm: Must be True to proceed. Without it, this reports what WOULD be
deleted and changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| database | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it names exactly what is deleted (registry row, passages, vectors), what is not (PDFs on disk), that the layer is rebuildable, and that confirm=False produces a dry-run report with no changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and scope, then the safety semantics, then parameter notes. It is slightly verbose with the Args section, but every sentence adds useful information and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a destructive two-parameter tool with no annotations, the description covers impact, safety, rebuildability, and parameter meaning completely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: 'database' is defined as the layer's slug with an example, and 'confirm' is explained as required for actual deletion, with the safe default behavior spelled out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove a knowledge background layer') and immediately clarifies scope: the registry row, indexed passages and vectors. This clearly distinguishes it from create_knowledge_database and list_knowledge_databases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the destructive 'Remove' wording and the confirm flag, but there is no explicit comparison to alternatives such as set_knowledge_layer_enabled or archive-type siblings, and no statement of when deletion is preferred over disabling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskMetis โ Delete TaskA
Permanently delete a task from the database.
The destructive complement to create_task โ removes the task row entirely.
Use this for tasks created in error or no longer relevant; to instead mark
work finished (and continue a recurring series), use update_task with
status="done". Find the task_id with get_tasks. This cannot be undone.
Args:
task_id: ID of the task to delete (as shown by get_tasks). Required.
Returns:
A confirmation that the task was deleted, or a note if no task with that
id exists.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that deletion is permanent and cannot be undone, and describes return values (confirmation or note if task not found). No annotations provided, so description fully carries the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections but slightly verbose. The 'Args' and 'Returns' format is helpful but could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary aspects: purpose, usage context, parameter detail, return value, and irreversibility. Appropriate for a simple tool with output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond schema by explaining task_id is obtained from get_tasks and is required. Schema coverage is 0%, so description compensates well. Could include format hint but sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Permanently delete a task from the database' with a specific verb and resource. Distinguishes itself from siblings by contrasting with create_task and update_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use (tasks created in error or no longer relevant) and when not (use update_task with status='done'). Also tells how to obtain task_id via get_tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_projectsMetis โ Detect ProjectsA
Scan a folder for unregistered git repos and article folders.
Useful for onboarding โ finds existing project folders that are not yet
tracked in Metis. Call create_project() for each item you want to register.
Args:
scan_path: Absolute path to scan. Defaults to the parent of METIS_RC_ROOT.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 implies a read-only scan (detecting repos and folders), but does not explicitly state that no modifications occur. A direct statement would be better.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences: purpose, context, and parameter detail. Every sentence provides essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality and parameter. Since an output schema exists (not shown), the absence of return value explanation is acceptable. It is adequate for the tool's simple nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter scan_path is described with its purpose ('absolute path to scan') and default behavior ('parent of METIS_RC_ROOT'). This adds significant value beyond the schema, which only has a default and title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it scans for 'unregistered git repos and article folders', which is a specific verb-resource combination. This clearly distinguishes it from sibling scanning tools like scan_folder_for_intent or scan_inbox.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly mentions onboarding as the use case and directs to call create_project() for registration. While it doesn't list when not to use, the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dhis2_metadataMetis ยท DHIS2 Expert โ DHIS2 MetadataA
Query DHIS2 metadata with a simplified interface.
Convenience wrapper around dhis2_query() for common metadata lookups.
Args:
resource: Metadata resource type โ e.g. "dataElements", "indicators",
"organisationUnits", "programs", "dataSets", "trackedEntityTypes".
filters: Filter expressions in DHIS2 format, e.g. ["name:ilike:malaria", "valueType:eq:NUMBER"].
fields: Comma-separated field list (default: "id,name,shortName").
paging: Set True to get only the first page (faster for large resources).
Examples:
dhis2_metadata("dataElements", ["name:ilike:HAT", "valueType:eq:INTEGER"])
dhis2_metadata("programs", fields="id,name,programType,trackedEntityType[id,name]")
dhis2_metadata("organisationUnits", ["level:eq:3"], fields="id,name,level,parent[id,name]")
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | id,name,shortName | |
| paging | No | ||
| filters | No | ||
| resource | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral transparency burden. It explains the paging parameter behavior ('get only the first page (faster for large resources)') and provides examples showing typical usage. It does not contradict any annotations (none present). However, it could explicitly state idempotency or read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections (Args, Examples) and uses bullet points for parameter descriptions. It is concise yet informative, though the examples could be slightly trimmed without loss of clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters (1 required), no enums, and an existing output schema, the description is complete. It covers all parameters, provides usage examples, and references the sibling tool dhis2_query. No gaps are left for an agent to misinterpret.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning. It does so by explaining each parameter: resource (with examples), filters (format with example), fields (default value), and paging (behavior). This goes beyond the raw schema, though it could provide more exhaustive resource examples or filter syntax details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Query DHIS2 metadata with a simplified interface' and identifies itself as a 'Convenience wrapper around dhis2_query()', using specific verbs and resource types. It distinguishes itself from its sibling tool dhis2_query by emphasizing simplicity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for common metadata lookups (as a wrapper) but does not explicitly state when to use this tool versus dhis2_query or other alternatives. It lacks explicit when-to-use or when-not-to-use guidance, leaving the agent to infer from 'simplified interface'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dhis2_queryMetis ยท DHIS2 Expert โ DHIS2 QueryA
Make an authenticated API call to the configured DHIS2 instance.
Returns the JSON response as formatted text. Use for live metadata
validation, data element lookup, indicator queries, and data quality checks.
Args:
endpoint: API path relative to /api/, e.g. "dataElements" or "organisationUnits.json".
If it does not start with "/api/", that prefix is added automatically.
params: Query parameters as a dict, e.g. {"fields": "id,name", "paging": "false"}.
method: HTTP method โ "GET" (default), "POST", or "PUT".
body: Request body for POST/PUT (serialised to JSON).
Examples:
dhis2_query("dataElements", {"fields": "id,name,valueType", "paging": "false"})
dhis2_query("system/info")
dhis2_query("organisationUnits", {"filter": "level:eq:2", "fields": "id,name,level"})
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| method | No | GET | |
| params | No | ||
| endpoint | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the call is authenticated, automatically prefixes '/api/', and allows GET/POST/PUT with a body. This clarifies the tool's behavior beyond a simple query, including mutation potential. However, it does not mention rate limits or error handling, which would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Examples) and a concise first sentence that captures the core purpose. While slightly longer than minimal, every sentence adds value. No redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (implied), the description need not detail return values. It covers parameter details, usage context, and provides examples, making it self-contained for an agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully with detailed parameter explanations and examples. It explains 'endpoint' format, 'params' as a dict with examples, 'method' default and options, and 'body' usage. The examples further clarify common usage patterns, making parameter semantics very clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool makes an authenticated API call to a DHIS2 instance and returns JSON. It lists specific use cases (metadata validation, data element lookup, etc.), which distinguishes it from generic API tools. The verb 'Make' and resource 'API call to the configured DHIS2 instance' make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description suggests appropriate use cases ('Use for live metadata validation...') but does not explicitly state when to avoid this tool or compare it to alternatives like the sibling tool 'dhis2_metadata'. This lack of exclusion criteria or alternative guidance limits its usefulness for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_anonymizationMetis ยท Data Guardian โ Diff AnonymizationA
Return a unified diff comparing original and anonymized text.
Args:
original: Original (pre-anonymization) text.
anonymized: Anonymized text from anonymize_text().
Returns a plain unified-diff string suitable for display.
| Name | Required | Description | Default |
|---|---|---|---|
| original | Yes | ||
| anonymized | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool returns a 'plain unified-diff string suitable for display,' but does not discuss side effects, permissions, or safety. The behavior is simple and non-destructive, but more detail would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with a single-sentence summary followed by terse parameter definitions. Every sentence adds value, and the structure front-loads the core purpose. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description adequately covers inputs and return type. It specifies the return is a unified-diff string for display. Minor gaps exist in error handling, but overall complete for the task.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds brief clarifications: 'Original (pre-anonymization) text' and 'Anonymized text from anonymize_text().' This adds some meaning beyond the schema, but lacks details on constraints or formatting expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Return a unified diff comparing original and anonymized text,' which clearly identifies the verb (Return) and resource (unified diff). It distinguishes itself from the sibling 'anonymize_text' by focusing on the comparison output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after anonymize_text by referencing 'anonymized text from anonymize_text().' This gives clear context for when to use the tool, though it does not explicitly state when not to use or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discovery_introMetis โ Discovery IntroA
Return the tiny first-run orientation โ the 3-5 highest-value capabilities.
Use ONCE for a brand-new user (or when they ask 'what can you do?'). After this,
rely on `next_discovery_tip` for the long tail. No-op (returns '') if the intro was
already given or tips are off.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it returns 3-5 capabilities, is a no-op (returns empty string) if already given or tips are off, and implies idempotency. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each essential. Front-loaded with main purpose, then usage rules, then edge conditions. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema, the description explains the output (3-5 capabilities, empty string in some cases) and references the sibling tool. Fully adequate for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description adds value by explaining the return behavior and conditions for empty string, which goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns 'the 3-5 highest-value capabilities' for a first-run orientation, and distinguishes itself from sibling 'next_discovery_tip' by specifying that after this intro, that tool should be used.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly defines when to use: 'Use ONCE for a brand-new user (or when they ask what can you do?)' and specifies post-use behavior: 'After this, rely on next_discovery_tip for the long tail.' Also notes no-op conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discovery_statusMetis โ Discovery StatusA
Report the discovery-tips state and a simple adoption read.
Tells you whether the just-in-time feature tips are on or off, the current
mode, any active snooze, and how many tips have been shown versus how many
of those features the user has since started using (adoption). Use it to
answer "are tips on?" or to sanity-check before changing them with
set_discovery_tips. Pairs with discovery_intro and next_discovery_tip.
Takes no arguments.
Returns:
A one-line text summary: on/off, mode, snooze note, shown count, and
how many shown features are now adopted.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description discloses that the tool takes no arguments and returns a text summary describing multiple metrics. It does not explicitly state it is read-only or non-destructive, but the reporting nature implies it. The behavioral summary is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (5 sentences), front-loaded with the primary action, and structured logically: purpose, detailed output, usage hints, and no extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite zero parameters and existing output schema, the description fully covers the tool's purpose, invocation context, and return value format, making it self-contained for an agent to understand and use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with no parameters, so the description's statement 'Takes no arguments' adds clarity beyond the schema, achieving the baseline of 4 for no-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reports the discovery-tips state and adoption read, with specific details (on/off, mode, snooze, counts). It distinguishes from siblings by naming them and explaining the tool's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly suggests use cases ('answer are tips on?', 'sanity-check before changing') and mentions sibling tools for alternative actions (discovery_intro, next_discovery_tip, set_discovery_tips). Provides clear context for when to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_self_improvement_proposalMetis โ Draft Self Improvement Proposal ToolA
Draft a skill-improvement proposal from recent reflexions (Phase 9b).
Reads themed reflexions for ``agent_slug``, appends a 'Self-improvement
notes' section to the agent's current skill.md, and queues the result in
``skill_improvement_proposals`` with status='draft'.
The draft is NOT applied. Use ``apply_proposal(id)`` to write it to disk.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| agent_slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses it reads reflexions, appends to skill.md, queues as draft, and does not apply. With no annotations, description adequately covers main behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences front-loaded with essential info. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return format is covered. Missing explanation of 'days' param and any edge cases or side effects, but overall adequate for a 2-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 0%, description only explains agent_slug but not 'days' parameter (default 14). Days likely controls reflexion timeframe but is left implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'draft', resource 'skill-improvement proposal', and source 'recent reflexions'. Distinguishes from siblings like apply_proposal and propose_skill_improvement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says draft is NOT applied and points to apply_proposal as alternative. Lacks context on when to choose over propose_skill_improvement or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encrypt_backupMetis โ Encrypt BackupA
AES-256-GCM encrypt a backup file.
Produces <backup_path>.enc. The passphrase is never stored.
Uses Python stdlib only (hashlib for key derivation, os.urandom for salt/nonce).
NOTE: This uses a simple PBKDF2+AES-GCM implementation.
For production-grade encryption, use a proper secrets manager.
Args:
backup_path: Full path to the .sqlite backup file.
passphrase: Encryption passphrase.
Returns JSON with enc_path and whether original was removed.
| Name | Required | Description | Default |
|---|---|---|---|
| passphrase | Yes | ||
| backup_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It states the passphrase is never stored and describes the output and return value, but does not mention overwriting behavior, error handling, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with essential information front-loaded. Every sentence adds value, and the argument section is succinct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers key aspects: algorithm, output file, security note, and return JSON. It could mention potential errors or edge cases, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters. It provides brief but clear definitions for `backup_path` and `passphrase`, adding meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool encrypts a backup file using AES-256-GCM and produces an output file with '.enc' extension. It distinguishes itself from sibling tools like `decrypt_backup`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It notes that the implementation uses Python stdlib and is simple, advising against production-grade use without a secrets manager. However, it does not explicitly contrast with other tools or specify conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
end_spanMetis โ End SpanA
Close an open span. Computes duration from start_ms to now.
Args:
span_id: The span_id returned by start_span().
status: 'ok' | 'error'. Default: 'ok'.
error: Error message if status='error'. Optional.
Returns a summary line: '{name} โ {duration_ms}ms [{status}]'
| Name | Required | Description | Default |
|---|---|---|---|
| error | No | ||
| status | No | ok | |
| span_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the computation (duration from start_ms to now) and return format. However, it does not mention side effects on a span store or error handling for invalid span_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with a bullet list for args. Front-loaded purpose. No redundant information; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given moderate complexity and presence of output schema, the description explains return format and parameter usage. Minor gap: no mention of error handling or behavior when span_id is invalid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides complete descriptions for all three parameters, including use of span_id from start_span(), valid status values and default, and error condition. This fully adds meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Close an open span' and 'Computes duration from start_ms to now', specifying the verb and resource. It distinguishes from siblings like 'start_span' and 'log_span' by focusing on closing and timing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after 'start_span' but does not provide explicit when-to-use or when-not-to-use guidance. No alternatives are mentioned, leaving the agent to infer context from sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enrich_meeting_with_crossrefsMetis ยท Meeting Memory โ Enrich Meeting With CrossrefsA
Find cross-references for a saved meeting: open tasks, related papers, active projects.
Call this after saving a meeting transcript (via Meetings tab or
transcribe_recording()). It extracts key topics from the transcript,
matches them against tasks, library papers, and active projects, and
returns a structured cross-reference brief.
The result is also written to the meeting's notes field in the database
so it appears in the Meetings tab.
Args:
meeting_id: The meeting_id from the meetings table.
Returns:
Formatted cross-reference brief listing matched tasks, papers, and projects.
| Name | Required | Description | Default |
|---|---|---|---|
| meeting_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It discloses that the result is written to the meeting's notes field in the database, which is a side effect. However, it doesn't discuss permissions, rate limits, or other behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a short summary, followed by usage context, behavior, and args/returns sections. No unnecessary sentences, but could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter and existing output schema, the description covers the tool's purpose, usage context, side effects, and return value. It is complete enough for a tool with this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (meeting_id) with 0% schema description coverage. Description adds 'The meeting_id from the meetings table', providing context beyond the schema's 'Meeting Id' title, but could offer more detail like format or example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'find cross-references' and the resource 'saved meeting', specifying the types of cross-references (open tasks, related papers, active projects). It distinguishes from siblings by focusing on enriching a meeting after saving its transcript.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call this after saving a meeting transcript' and mentions the normal flow via Meetings tab or transcribe_recording(). Does not provide when-not-to-use or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_against_layersMetis โ Evaluate Against LayersA
Stage 6 โ the evaluate gate. BEFORE you reply to the user, pass your drafted answer here. It checks the answer against the user's layers โ recorded preferences, persona voice, institutional facts โ and surfaces any conflict to fix first.
Returns a verdict (OK / REVIEW), the preferences this answer must honor, and any
detected conflicts (e.g. a 'never use base apply' preference when the answer shows
`apply(`). Resolve REVIEW items before replying.
Args:
answer: your drafted answer text.
session_id: current session (optional).
task_type: optional routing task_type for narrower preference recall.
| Name | Required | Description | Default |
|---|---|---|---|
| answer | Yes | ||
| task_type | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses that the tool returns a verdict (OK/REVIEW), the preferences to honor, and detected conflicts. It explains how to handle REVIEW results. With no annotations, the description carries full burden and does well, but could elaborate on edge cases (e.g., missing layers).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured: first sentence states purpose and timing, second explains output, third defines args. Every sentence adds value, no fluff, and front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (implied by context signals), the description appropriately omits return value details. It covers what the tool does, when to use it, how to handle output, and parameter purposes. Could mention prerequisites (e.g., existing layers) but implicit in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description adds meaning to each parameter: 'answer: your drafted answer text', 'session_id: current session (optional)', 'task_type: optional routing task_type for narrower preference recall'. This compensates well for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Stage 6 โ the evaluate gate' that 'checks the answer against the user's layers'. It specifies the verb (evaluate/check) and the resource (drafted answer against layers). Distinct from sibling tools by being a specific pipeline stage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'BEFORE you reply to the user, pass your drafted answer here' and 'Resolve REVIEW items before replying'. Provides clear context for when to use and what action to take on output, though no explicit alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_background_packMetis โ Export Background PackA
Write a pack manifest for one of your installed background layers.
Produces the `pack.json` another machine (or another person) can install from.
It records the layer's identity and the documents it contains BY NAME; it does
not copy the PDFs, and it cannot invent a download URL for a file that came off
your own disk โ those entries are written with an empty url and must be filled
in before the pack can be installed elsewhere. Saying so is the point: a
manifest that silently omitted them would look complete and install empty.
Args:
database: The layer's slug (e.g. 'ntd').
out_dir: Where to write it. Defaults to backgrounds/<slug>/ in the repo.
| Name | Required | Description | Default |
|---|---|---|---|
| out_dir | No | ||
| database | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: it discloses that this is a write operation, that documents are recorded by name only, that PDFs are not copied, and that url fields are left empty and must be filled before install. It omits overwrite behavior, permission requirements, and error conditions for an unknown slug.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and artifact, then the important caveat. The sentence 'Saying so is the point: a manifest that silently omitted them would look complete and install empty' is slightly editorial but does communicate a real failure mode, so it mostly earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the key non-obvious behavior (name-only entries, empty urls) for a mutation tool with zero annotations. Missing only secondary details like overwrite semantics and failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: database is identified as the layer slug with a concrete example ('ntd'), and out_dir is described with its default location (backgrounds/<slug>/ in the repo). Neither parameter's format is fully specified beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Write a pack manifest for one of your installed background layers') and clarifies the artifact produced (pack.json). It implicitly separates itself from install_background_pack by framing the output as something 'another machine can install from', though it never names that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scenario is implied โ export when you want to move a layer to another machine or person โ but there is no explicit when-to-use/when-not guidance and no named alternatives among the many siblings (install_background_pack, list_background_packs, audit_background_provenance). The agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_citationsMetis ยท Librarian โ Export CitationsA
Export library references as a citation file (BibTeX).
Closes the "no citation-style export" gap: produces a .bib you can import
into Word (via Zotero/Mendeley), LaTeX/Overleaf, or any reference manager,
and use for cite-while-you-write.
Args:
query: Optional keyword filter over title/authors/journal. Empty = all.
tag: Optional tag filter (substring match on the tags field).
collection: Optional collection-name filter.
fmt: Output format โ currently "bibtex" (RIS available via mine_references).
limit: Max records to export (default 500).
Writes the file to outputs/exports/ and returns its path + a preview.
| Name | Required | Description | Default |
|---|---|---|---|
| fmt | No | bibtex | |
| tag | No | ||
| limit | No | ||
| query | No | ||
| collection | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses file output to outputs/exports/, return of path and preview, and all parameter defaults. It does not mention idempotency or side effects, but the behavior is well-covered for a read/export tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph with a clear opening statement followed by a bullet-like list of arguments. Every sentence adds value, and the structure front-loads the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no annotations and 0% schema coverage, the description covers purpose, usage, parameters, output (path + preview), and provides an explicit alternative. It is complete for the tool's complexity, and an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description provides detailed explanations for all 5 parameters (query, tag, collection, fmt, limit), including default values and behavior. This fully compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports library references as a citation file (BibTeX) and uses specific verbs like 'Export library references as a citation file'. It differentiates from sibling 'mine_references' by noting RIS format is available there.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context for use (cite-while-you-write) and explicitly names an alternative tool for RIS format. It does not explicitly state when not to use, but the alternative implies the exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_knowledge_markdownMetis ยท Librarian โ Export Knowledge MarkdownA
Export the library as a cross-linked Obsidian-style Markdown vault.
Writes one Markdown note per library item (YAML frontmatter + abstract) plus
an index, with [[wikilinks]] between items that share a tag โ the
claude-obsidian / LLM-Wiki pattern. Gives you a portable, human-readable,
git-diffable view of the knowledge graph you can open in Obsidian. Read-only
on the database; writes only Markdown.
Args:
out_dir: Destination folder. Default: outputs/knowledge-export/ under the RC root.
| Name | Required | Description | Default |
|---|---|---|---|
| out_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Read-only on the database; writes only Markdown', which clarifies safety and side effects. It also describes the output format. However, it does not mention potential issues like overwrite behavior or performance with large libraries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (about 120 words) and well-structured: purpose, format, portability, safety, and parameter. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description covers all critical aspects: what it does, output format, side effects, and parameter description. No missing essential information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description compensates by explaining the single parameter 'out_dir' with a default path. It adds meaning beyond the schema, though it could elaborate on what 'RC root' means and behavior when omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports the library as a cross-linked Markdown vault with specific details (YAML frontmatter, index, wikilinks). However, it does not explicitly differentiate from the sibling tool '_obsidian_vault', which may have similar functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating a portable Markdown export but lacks explicit guidance on when to use this tool vs alternatives, such as other export or search tools. No 'when not to use' or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_structuredMetis ยท Librarian โ Extract StructuredA
Extract a structured, cited evidence brief on a topic from the PDF library.
Elicit-style structured extraction: runs a fixed question set over the indexed
library (PaperQA2) and assembles a markdown table โ one row per field, each
answer carrying its citations. Useful for systematic-review scaffolding.
Args:
topic: The subject to extract on (e.g. "HAT passive screening sensitivity").
fields: Optional comma-separated fields to extract. Default set covers
population, design, sample size, outcome, finding, limitations.
scope: Which index to query ("default" or "ph_library"). Build it first
with index_library_pdfs().
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | default | |
| topic | Yes | ||
| fields | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full transparency burden. It discloses that the tool runs a fixed question set over the indexed library (PaperQA2) and assembles a markdown table with citations. It does not mention any destructive actions, which is appropriate for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (6 sentences), front-loaded with the main purpose, and each sentence adds value. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has three parameters (one required) and an output schema exists, the description covers the core functionality, parameter details, prerequisite, and use case. It is complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description richly documents all three parameters: topic with example, fields with default set, and scope with valid values and prerequisite instruction. It adds significant meaning beyond the schema's bare titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool extracts a structured, cited evidence brief from the PDF library using Elicit-style extraction, producing a markdown table. It distinguishes itself from sibling search tools by specifying the structured nature and fixed question set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the tool is useful for systematic-review scaffolding and implies prerequisite indexing via scope mention. It lacks explicit when-not-to-use guidance but provides sufficient context relative to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fill_document_templateMetis โ Fill Document TemplateA
Fill a stored Word template (e.g. an ethics-committee cover letter) and save a copy.
Call read_document_template first to get the paragraph keys. The template's
letterhead, styles and fixed wording are kept; only the listed paragraphs change.
Args:
edits: JSON object mapping paragraph keys to their new text, e.g.
{"p5": "Antwerp, 14 October 2026", "p19": "This study ...", "h0": ""}.
An empty string empties that paragraph; null deletes it.
template: Template name or part of it. Empty = the first stored document template.
filename: Output name; derived from the template when omitted.
Returns:
Where the filled document was saved, including a path that opens from Windows.
| Name | Required | Description | Default |
|---|---|---|---|
| edits | Yes | ||
| filename | No | ||
| template | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioural burden and does much of it: it discloses that letterhead, styles and fixed wording are kept and only listed paragraphs change, and defines destructive semantics (empty string empties, null deletes). It stops short of stating overwrite behaviour, permissions, or what happens with an unrecognised key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Action and payoff come first, the prerequisite follows, and the Args/Returns block is scan-friendly. Every line adds information; nothing is padding, even though Args partly restates the schema, which is necessary at 0% coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete enough to call correctly, and the return description is a bonus given an output schema already exists. What's missing is failure-mode context: unknown paragraph key, no matching template, and whether the output filename collides with an existing file.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description has to document all three parameters and it does: the edits key-to-text mapping with a worked example and null/empty-string rules, template as a partial-name match with the empty-means-first-document default, and filename derivation when omitted. This fully compensates for the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Fill a stored Word template') with a clarifying example (ethics-committee cover letter) and a save-copy outcome. It is clearly distinguishable from the sibling read_document_template, which is positioned as the inspection step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The prerequisite 'Call read_document_template first to get the paragraph keys' gives an explicit ordering rule that an agent would otherwise get wrong. However, no when-not guidance or alternative (e.g. create_document) is offered for the case where no template exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_connectionsMetis โ Find ConnectionsA
Search library, meetings, and news for items related to given text.
Searches library_seeded, meetings, and news_briefs tables for related
content using keyword matching.
Args:
content: Text snippet to find connections for.
limit: Maximum results per source (default 5).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must convey behavioral traits. It specifies keyword matching and the three tables, but omits details about result grouping, pagination, or ordering. Some behavioral context is provided, but not comprehensively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: one sentence for purpose, one for method and tables, then parameter explanations. It is front-loaded with the primary action and contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and the existence of an output schema, the description covers the key aspects: what is searched, how, and parameters. It lacks detail on result structure (e.g., grouped by source) but is largely sufficient for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully explains both parameters: 'content' as the text to find connections and 'limit' with default 5 as max results per source. This adds meaning beyond the raw schema, compensating for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches library, meetings, and news for items related to given text, using keyword matching. This distinguishes it from sibling single-source search tools like search_library, scan_news, etc., by specifying the combined scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for cross-source keyword searches but does not explicitly state when to use this tool versus alternatives like search_library or search_fulltext. No when-not-to-use or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_toolsMetis โ Find ToolsA
Search Metis's full tool catalogue and load the matching tools on demand.
Most Metis tools are kept out of the active set to save context; this finds the
ones you need by keyword (e.g. "dhis2 tracker", "clean dataset", "backup",
"knowledge graph", "transcribe"), makes them callable, and returns their names.
After calling this, call the returned tools directly as normal.
Args:
query: Keywords describing what you want to do.
limit: Max tools to return/load (default 8).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. States that tools are made callable and returns names, but does not disclose if it adds to or replaces existing active tools, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is mostly concise but includes an 'Args' section that duplicates schema information. The main action is front-loaded, but the redundancy reduces conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the tool's purpose, usage, and parameters. Output schema exists so return values need not be detailed. Explains why tools are kept out of active set. Missing details on persistence of loaded tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description adds meaning beyond schema: defines query as 'keywords describing what you want to do' and limit as 'max tools to return/load'. Schema had no descriptions, so this is helpful. Could be more specific about query format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches the full tool catalogue and loads matching tools on demand, which is a unique purpose distinct from sibling tools. It provides specific examples of query keywords.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when to use: to find tools by keyword to save context. It tells the agent to call returned tools directly. Does not explicitly state when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_vizMetis โ Find VizA
Find saved recipes and styles before building anything. Call this FIRST.
This is the tool the whole library exists to serve. Eleven agent context
files were once written and never read once โ a store nothing queries is
worse than no store, because it looks like progress. So: consult this before
designing a figure, not after.
Each recipe prints a **Needs** line: the roles its data contract demands. To
check a specific dataset against one, propose a role -> column mapping and
confirm it with `check_viz_fit`. This tool deliberately will not guess that
mapping โ a name-similarity guess was tried here and could not tell a
fitting dataset from an unfitting one.
Args:
kind: chart | map | diagram | flow | table | layout. Blank = all.
intent: Free text matched against names, one-liners, encodings and
media, e.g. "show dispersion not averages", "for a paper".
limit: Max recipes to return.
Returns:
Matching recipes with their contracts and track records, plus candidate
styles ranked by how often they were loved.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No | ||
| intent | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden, and it does disclose a real behavioral limit: it deliberately will not guess role->column mappings because a name-similarity heuristic proved unreliable. It also describes the 'Needs' line each recipe emits. It does not state read-only status explicitly, though 'find' implies retrieval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and 'Call this FIRST' are correctly front-loaded, but the middle paragraph ('This is the tool the whole library exists to serve... Eleven agent context files were once written and never read once...') is motivational filler that delays the operational content an agent needs. The Args and Returns blocks are tight and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be detailed, params are fully covered, and the mapping limitation plus the check_viz_fit handoff close the main gap. Missing: whether results are ordered or capped in ways beyond limit, and no mention of what tracks/contracts are shown beyond a brief phrase.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does: it enumerates the full kind vocabulary with blank meaning 'all', explains intent is free text matched against names, one-liners, encodings and media with concrete example queries, and defines limit as max recipes returned. This is more than the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find saved recipes and styles') and scopes retrieval versus authoring siblings like save_viz_recipe/save_viz_style. It also draws an explicit boundary with check_viz_fit, saying this tool will not resolve role->column mappings itself, so an agent can pick between them 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Find ... before building anything. Call this FIRST' gives a clear trigger condition, and the mapping note routes the follow-up step to check_viz_fit. The only gap is that viz_library_overview is a plausible alternative for a high-level view and is never mentioned or excluded.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
focus_briefMetis โ Focus BriefC
Everything on one focus area: what is saved, what is new, what is open.
The text form of the surface โ for Claude Desktop, which has no dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it hints that this is a textual rendering of a surface, which is useful behavioral context. However, it does not explicitly state that the operation is read-only, nor does it describe side effects or prerequisites beyond the Desktop/dashboard contrast.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is short and front-loads the key content: saved, new, and open items. The second sentence adds context about the text form and Desktop, though the phrasing is slightly cryptic and could be clearer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists and reduces the need to explain return values, the description leaves important gaps: it does not clarify the slug parameter, does not distinguish this brief from related focus tools, and does not state read-only behavior. For a tool with several focus-oriented siblings, this is notably incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'slug' has 0% schema description coverage, and the description never explains what the slug identifies or its expected format. 'One focus area' weakly implies the slug selects a focus area, but the description does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says the tool covers 'everything on one focus area' and enumerates saved/new/open content, but it lacks a precise verb and does not distinguish itself from siblings like preview_focus_lens or show_focus_areas. It conveys the general idea of a focused brief without fully pinning down the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The note 'for Claude Desktop, which has no dashboard' implies a usage context, but there is no explicit guidance on when to use this instead of preview_focus_lens, show_focus_areas, or update_focus_overview. Any guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
focus_declineMetis โ Focus DeclineB
Say an item does not interest you, so similar ones rank lower in future.
Lower, not gone: declining demotes and folds, it never deletes. Nothing stops
being shown, or you could never audit what you were no longer being offered.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | news | |
| note | No | ||
| slug | Yes | ||
| title | Yes | ||
| item_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does real work: it states the effect is demotion/folding, never deletion, and explains why (auditability). That is exactly the kind of 'what actually happens' context an agent needs for a preference-mutating tool. It still omits reversibility (can focus_keep undo it?), scope of the ranking effect, and idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in sentence one, which is good. However, sentences two and three restate the same single idea (not deleted / still shown) twice, so the definition spends roughly half its length on one point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. But for a five-parameter mutation tool with zero annotation coverage and zero schema descriptions, the description leaves the most failure-prone part โ how to identify the item โ completely unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters (slug, title, kind, note, item_id), and the description names none of them. It never explains whether the item is identified by slug+title vs item_id, what 'kind' defaults to beyond the schema's default, or what 'note' is for. An agent must guess at the identifier contract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
First sentence gives a concrete verb + resource + consequence: 'say an item does not interest you, so similar ones rank lower in future.' That is unambiguous. It does not name the sibling it is the inverse of (focus_keep) or distinguish itself from focus_safe/focus_explore, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trigger condition is clear enough ('say an item does not interest you'), which implies when to call it. But there is no explicit routing to alternatives โ nothing says 'use focus_keep to reverse this' or when to prefer focus_safe vs focus_decline, despite several closely related focus_* siblings in the same group.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
focus_exploreMetis โ Focus ExploreA
Answer a question against a focus area's own corpus, notes and ideas.
Retrieval only โ this returns the material, it does not compose the answer.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| question | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does usefully disclose that the tool is read-only retrieval and does not synthesize an answer. It says nothing about scope limits, what happens if the focus area's corpus is empty, permissions, or whether the corpus is bounded to the focus area only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, and the retrieval-only constraint is front-loaded immediately after the purpose so it cannot be missed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the two params are self-describing in name. The essential behavioral fact an agent needs โ that this gathers rather than answers โ is stated explicitly. Only minor gaps around slug acquisition remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It implicitly clarifies that slug identifies a focus area and that question is posed against that area's corpus, which is real added meaning, but it gives no format guidance, no indication of how to obtain a slug, and no sense of question phrasing expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource pairing: answer a question against a focus area's own corpus, notes and ideas. It is meaningfully more precise than the name alone, though it never names the sibling it differs from (run_metis, focus_brief, preview_focus_lens) so the boundary is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Retrieval only โ this returns the material, it does not compose the answer' implicitly tells the agent to pick this over a composing tool when raw material is wanted, but no sibling is named and no prerequisites (e.g. that the focus area must already exist, or that a slug comes from show_focus_areas) are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
focus_keepMetis โ Focus KeepC
Save an item to a focus area's safe, for further reflection.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| kind | No | news | |
| note | No | ||
| slug | Yes | ||
| title | Yes | ||
| item_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 conveys only that an item is saved; it says nothing about required permissions, whether it creates or overwrites, deduplication by item_id, or what 'further reflection' triggers. For a mutation tool with zero annotation coverage this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the core action is stated first. It is appropriately terse, though given the tool's complexity the terseness borders on under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters, no annotations, and 0% schema coverage, the description is too thin to let an agent call this correctly. The presence of an output schema means return values need not be explained, but required distinctions between the focus_* siblings and the meaning of key inputs are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across six parameters (slug, title, url, kind, note, item_id). The description loosely maps 'item' and 'focus area' but never explains slug vs title vs url, the meaning of kind, or how item_id dedupes. It does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Save') and resource ('an item to a focus area's safe'), and the phrase 'for further reflection' hints at intent. However, the metaphorical term 'safe' is undefined and it does not differentiate itself from near-namesakes like focus_safe, focus_decline, or focus_explore, leaving an agent to guess at the boundary between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no when-not-to-use, and no mention of alternative sibling tools such as focus_safe, focus_decline, or focus_explore. The only clue is the vague 'for further reflection', which is not enough to route an agent among this dense sisterhood of focus_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
focus_safeMetis โ Focus SafeC
What is in a focus area's safe, and what it has learned to cool on.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, yet it only obliquely implies a read ('What is in...'). It never states whether the operation mutates state, what permissions are needed, or any rate/behavioral traits. Return details are omitted, though an output schema exists to cover them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single, front-loaded sentence with no waste, which is structurally fine. However, the brevity comes at the cost of the metaphor standing in for real meaning, so the sentence does not fully earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool sitting in a large focus-area family, the definition is too thin to orient an agent: purpose, parameters, and read/write nature are all left implicit. The presence of an output schema covers return values but not the core ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single required 'slug' parameter is undocumented in both schema and description. The description never explains what the slug identifies or its format, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gestures at a resource (a focus area's 'safe' and what it has 'cooled on') but supplies no verb, so it is unclear whether this reads, lists, or mutates state. The metaphors 'safe' and 'cool on' are Metis-specific jargon an agent cannot resolve from the text, and nothing distinguishes it from the dozen siblings like focus_brief, show_focus_areas, or focus_decline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to call this versus the many neighboring focus tools (focus_brief, preview_focus_lens, focus_keep, focus_decline). No prerequisites, no state conditions, no alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
full_scanMetis ยท News Radar โ Full ScanA
Run all Metis update scans in sequence and return a combined report.
Runs:
1. News feeds (RSS) โ new items added to news_briefs
2. Literature folder โ new PDFs registered in literature_metadata
3. Inbox โ unprocessed items flagged
4. Tracked files โ changed files reported
No LLM calls. Safe to run at any time.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool makes no LLM calls and is safe, but it does not detail potential latency or side effects. The step breakdown adds trust.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two short paragraphs. The numbered list of steps is well-structured and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and the presence of an output schema, the description adequately covers the tool's purpose and behavior. It could mention error handling or time expectations but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description need not explain any. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it runs all Metis update scans in sequence and returns a combined report, listing four specific scan types. This distinguishes it from individual scan tools like scan_news and scan_literature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes it is safe to run at any time and makes no LLM calls, implying it can be used freely. However, it does not explicitly contrast with separate scan tools or state when to use the full scan vs. individual scans.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_daily_insightMetis ยท News Radar โ Generate Daily InsightA
Prepare everything needed to write a brief: the writing recipe and the context.
The session half of the daily-brief round-trip, for machines whose dashboard
cannot call the API itself. Returns the SAME instructions and the SAME
context the dashboard's own generator uses (metis_mcp.tools.brief_prompt and
assemble_*_context), so a brief written here reads like one written there:
continuous prose, the freshness contract, and a coverage footer that keeps
tomorrow's brief from repeating today's lead. Write the brief by following
the instructions exactly, then pass it, footer included, to save_daily_brief
with the date key this returns.
Args:
period: "daily" (default), "weekly", or "catchup".
Returns:
The writing instructions, the context, and the exact save call to make.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | daily |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it states that the tool returns writing instructions, context, and the exact save call, and clarifies that it prepares rather than saves. It also discloses that the output mirrors the dashboard generator so the brief reads consistently. Auth and rate-limit behavior are not disclosed, but the essential behavioral contract is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and structured as a workflow from generation to save. It is somewhat verbose, especially the parenthetical implementation module names, but the detail is mostly useful for a non-trivial round-trip tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a one-parameter tool with an output schema. The description covers purpose, usage context, return contents, and the exact next step, so an agent has enough to invoke it and understand the resulting artifacts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does by documenting the single period parameter's default ("daily") and allowed values ("weekly", "catchup"), though it does not explain the semantic difference between weekly and catchup.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Prepare everything needed to write a brief: the writing recipe and the context." It distinguishes itself as the "session half" of the daily-brief round-trip and names save_daily_brief as the downstream tool, so an agent can tell it apart from save_daily_brief and get_daily_insight.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the context for use: machines whose dashboard cannot call the API itself, and gives the exact next step of passing the written brief to save_daily_brief with the returned date key. It does not explicitly contrast with get_daily_insight or get_briefing_coverage, but the workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_handoff_briefMetis โ Generate Handoff Brief ToolA
Generate a portable session handoff brief.
Captures: tokens used today, active projects, open tasks, recent agent
runs, and the most recent journal entry. Writes to
`metis/journal/YYYY-MM-DD_session_handoff_auto.md` and returns the brief.
Use this when a session is approaching its end, before `/clear`, or when
switching to another AI / device.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description details what is captured and where it writes, and that it returns the brief. No hidden side effects disclosed, but sufficient for a generation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences: purpose, details, usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes captured data and output, but missing explanation of session_id parameter. Output schema exists but parameter gap hurts completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter session_id is optional with default '' but the description does not explain its purpose or effect. Schema coverage is 0%, so description fails to add meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates a portable session handoff brief, listing specific captured data and output location. This distinguishes it from siblings like add_journal_entry or save_session_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: before session end, /clear, or device switch. Does not mention when to avoid or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_imageMetis โ Generate ImageA
Generate an image using AI and save it to the PKM.
Saves to {pkm_root}/outputs/images/YYYY-MM-DD_[slug].png
Args:
prompt: Description of the image to generate.
backend: "gemini" (default) or "huggingface"
model: "flash" (gemini-3.1-flash-preview-image-generation),
"imagen" (imagen-4.0-generate-001),
"flux" (FLUX.1-schnell via HuggingFace)
width: Image width in pixels (default 1024).
height: Image height in pixels (default 1024).
output_filename: Optional custom filename (without extension).
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | flash | |
| width | No | ||
| height | No | ||
| prompt | Yes | ||
| backend | No | gemini | |
| output_filename | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the save behavior (path format) and parameter options, but lacks details on potential side effects (e.g., overwriting, costs, rate limits, authentication needs). The transparency is adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-line summary and save path, followed by a structured Args block. It is clear and efficient, though the Args formatting is slightly verbose. Overall, good balance of detail and brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, 1 required, and no annotations, the description covers all parameters and the output location. An output schema exists, so return value documentation is not needed. However, missing usage guidelines and potential side effects prevent a perfect score. Still, it is largely complete for a generation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is 0%, the description provides an 'Args' section that explains each parameter with defaults, allowed values, and example usage. This adds substantial meaning beyond the raw input schema, making parameter selection clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Generate an image using AI and save it to the PKM,' specifying a verb (generate), resource (image), and destination. The title 'Generate Image' aligns with the purpose, and among siblings there is a distinct 'list_generated_images' tool, so there is no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives, nor does it mention when not to use it. No prerequisites or contextual conditions are stated, leaving the agent to infer usage from the parameter description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_profiling_scriptMetis ยท Software Engineer โ Generate Profiling ScriptA
Generate a safe profiling script tailored to a specific dataset.
The generated script runs on the user's machine and reports ONLY
aggregates: variable names, types, unique counts, ranges, missingness,
and value frequencies (capped at 30 levels). No row-level data leaves
the machine. Output is structured JSON matching the register_data_dictionary
schema, ready for ingest_profiling_output().
If data_dictionary entries already exist for this dataset, the script
includes checks for those specific variables.
Args:
dataset_name: Name of the dataset (used in filenames and DB).
project_id: Project ID for looking up existing variable info.
language: "r" or "python" (default "r").
dataset_path: Path to the data file on disk. If empty, a placeholder is used.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | r | |
| project_id | No | ||
| dataset_name | Yes | ||
| dataset_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, description fully discloses key behaviors: no row-level data leaves the machine, only aggregates reported, output format matches register_data_dictionary schema. Safety promise is explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise yet complete: one-line summary, behavioral notes, and args section. No redundant sentences; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers output format and safety guarantees. Lacks mention of prerequisites (e.g., R/Python installed) and error scenarios, but given output schema is present, description does not need to explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Args section explains each parameter beyond schema metadata (e.g., dataset_path usage, language options). Schema had 0% coverage, so description fully compensates with clear semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb ('Generate'), resource ('profiling script'), and tailoring ('tailored to a specific dataset'). It distinguishes from sibling 'profile_dataset' by emphasizing safety and aggregate-only output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use, including optional checks for existing data dictionary entries. Lacks explicit when-not-to-use or alternative tools, but purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agent_contextMetis โ Get Agent ContextA
Load an agent's system prompt, contract, skill and project contexts from the RC.
Reads system-prompt.md, contract.md, skill.md and every *-context.md from
agents/{agent_slug}/. The context files carry the project-specific detail โ
methodology parameters, pipeline inventories, past decisions โ that turns a
generic specialist into one that knows this researcher's actual work.
If the agent is not found, lists all available agents.
Args:
agent_slug: Folder name of the agent (e.g. "archivist", "librarian").
| Name | Required | Description | Default |
|---|---|---|---|
| agent_slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does well: it names the concrete files read (system-prompt.md, contract.md, skill.md, every *-context.md), describes what that content contains (methodology parameters, pipeline inventories, past decisions), and discloses the not-found fallback behavior. It does not explicitly state read-only semantics or permissions, but reads are strongly implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The what and where are front-loaded in the first two sentences, the fallback behavior is stated before any parameter detail, and the Args block is short. The one expository sentence about turning a generic specialist into a knowledgeable one is mildly promotional but short and adds rationale rather than noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A single-param read tool with an output schema, so return-value explanation is unnecessary and the definition covers inputs and file semantics well. What is missing for a tool nestled among many similarly named context loaders is sibling disambiguation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter is a bare string with no description, so the description must compensate โ and it does, defining agent_slug as the folder name of the agent and giving concrete examples ("archivist", "librarian"). The path template agents/{agent_slug}/ further clarifies format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (load) and resource (an agent's system prompt, contract, skill and project contexts) and enumerates the exact files read from agents/{agent_slug}/. This distinguishes it from nearby siblings like get_context, load_project_context and get_research_context, which operate on different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when this applies (you have an agent slug and want its full context) and usefully documents the failure path โ a missing agent returns a listing of all available agents. However, it never explicitly tells the agent when to prefer this over load_project_context or get_context, so routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agent_runsMetis โ Get Agent RunsA
Retrieve recent agent run history from the database.
Returns the log of past agent work โ what ran, when, its status, and token
usage โ for the dashboard or for reviewing recent activity. These rows are
written by log_agent_run. Results come back newest first.
Args:
limit: Maximum number of runs to return, newest first (default 10).
since: ISO date or datetime string; only runs at or after this time are
returned. Empty string (default) returns runs from all dates.
agent_slug: Filter to a single agent by slug, e.g. "librarian" or
"metis". Empty string (default) returns all agents.
Returns:
A text block listing the matching runs (run_id, agent, task summary,
status, timestamp, token counts, model).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| agent_slug | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations provided, description carries full burden. Clearly indicates read-only behavior (retrieve, returns log). Describes output format and ordering (newest first). Lacks explicit safety or authorization notes, but for a get tool the behavior is transparent enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured. First sentence states purpose, second explains what it returns, third gives relationship to log_agent_run, then bullet-style args. No redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key aspects: what it does, parameters, return format (text block with fields). Output schema exists but description still lists fields. Could mention pagination or error cases, but for a simple retrieval it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema provides only titles and defaults (0% coverage), but description includes an 'Args' section explaining each parameter in detail: limit (max count, default 10), since (ISO date/datetime, empty for all), agent_slug (filter by slug, empty for all). This adds significant meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it retrieves recent agent run history from the database. Uses specific verb 'Retrieve' and resource 'agent run history'. Distinguishes from sibling tools like log_agent_run (write) and other get_* tools by focusing on runs and specifying results order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions usage 'for the dashboard or for reviewing recent activity' but does not explicitly state when not to use or compare with alternative tools. No exclusion criteria or guidance on selecting this over similar tools like search_memory or list_recent_sessions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_backup_scheduleMetis โ Get Backup ScheduleA
Return the current backup schedule configuration.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must convey behavioral traits. It states a read operation but omits details like required permissions, rate limits, or whether the schedule is stored persistently. Adequate for a simple getter but could be more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 8 words, no fluff. Every word adds value. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an output schema present, the description is complete for a simple retrieval tool. It sufficiently describes what the tool does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, schema coverage is 100% vacuously. Description adds no parameter info, but baseline is 4 for 0-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Verb 'Return' clearly indicates retrieval, resource 'backup schedule configuration' is specific. Distinguishes from sibling tools like set_backup_schedule (write) and list_backups (list backups, not schedule).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies read-only usage but does not explicitly state when to use vs alternatives (e.g., set_backup_schedule, list_backups). No when-not-to-use advice is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brainstorm_sessionMetis โ Get Brainstorm SessionA
Retrieve all turns in a brainstorm session.
Args:
session_uuid: The session identifier returned by brainstorm_turn().
| Name | Required | Description | Default |
|---|---|---|---|
| session_uuid | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description relies on 'Retrieve' to imply read-only behavior. It does not disclose any side effects, idempotency, or failure conditions, which is minimal for a retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, including a structured args section. Every sentence serves a purpose with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema exists), the description sufficiently covers retrieval and parameter purpose. No additional content needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description explicitly explains 'session_uuid' as 'The session identifier returned by brainstorm_turn()', adding source context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Retrieve' and resource 'all turns in a brainstorm session', clearly distinguishing it from siblings like 'brainstorm_turn' which creates turns, and 'list_brainstorm_sessions' which lists sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as 'brainstorm_turn' or 'list_brainstorm_sessions'. The description lacks context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_briefing_coverageMetis ยท News Radar โ Get Briefing CoverageA
Show which news stories the briefings have covered, and what is on cooldown.
Answers "why didn't today's brief mention X?" and "what has Metis been
holding back?". Story threads group many news items into one running story
(an epidemic, a funding shift), so a long-running event can be surfaced once
and then held quiet instead of leading every single morning.
Args:
days: Window of news activity to consider. Default 7.
show_all: Include threads with only one item. Default False (recurring only).
Returns:
Per thread: size, age, whether it may lead, how long it stays quiet, and
which analytical angles have already been used on it.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| show_all | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full disclosure burden. It does explain the meaningful hidden behavior โ that threads persist across days, can be surfaced once and then deliberately held quiet (cooldown), which is non-obvious and valuable. However, it never states that this is a read-only, side-effect-free listing (an agent must infer it from 'Show'), nor anything about result volume or cost despite potentially returning many threads.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The primary capability is front-loaded in sentence one, with motivation and mechanism following in a sensible order, and the Args/Returns blocks are scannable. The middle paragraph explaining story threads is a touch discursive for a tool that already has an output schema documenting the per-thread fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter, non-destructive read tool with an output schema, the description covers intent, both parameters, and the conceptual model of threads and cooldowns. It even previews the return payload (size, age, may-lead, quiet duration, angles used) despite the output schema existing. The remaining gap is the absence of any explicit read-only / no-side-effect statement given that no annotations are supplied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% โ both parameters carry only a title and default โ so the description must compensate, and it largely does: `days` is defined as the window of news activity, and `show_all` is clarified as including single-item threads with the default state described as 'recurring only'. What is missing is any note on how the two interact (e.g. whether show_all widens beyond the days window).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a concrete verb and resource ('Show which news stories the briefings have covered, and what is on cooldown') and the 'why didn't today's brief mention X?' framing pins down the intent precisely. It also defines the underlying unit (story threads grouping items into a running story), so the agent knows what a row represents. It stops short of naming a sibling (e.g. get_missed_news, get_news_briefs) as the contrasting tool, which keeps it at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Two explicit user-questions are given as the calls this tool answers, which is clear usage context for an agent deciding whether to invoke it. There is no statement of when *not* to use it and no named alternative among the many news/brief siblings, so it lands just below the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_consent_ledgerMetis ยท Data Guardian โ Get Consent LedgerA
Retrieve recent consent events from the audit ledger.
Returns the data-handling consent trail โ what data was approved or
classified, by which agent, and when โ so you can review or report on how
sensitive data has been treated. Reads the consent_ledger that
log_consent_event writes to.
Args:
limit: Number of most recent ledger rows to return, newest first
(default 30).
Returns:
A JSON text block listing the consent events (id, timestamp, action,
data_classification, agent_slug, notes).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It indicates read-only behavior through 'Retrieve' and 'Reads the consent_ledger', but does not explicitly state that no data is modified. It also does not disclose potential limitations (e.g., rate limits, size of ledger). The behavior is adequately but not exhaustively described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a brief intro, a context sentence, a clear Args section, and a Returns section. Every sentence adds value without redundancy. Front-loads the key action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one optional parameter, clear read-only purpose, output description provided), the description is complete. It covers what the tool does, what it returns, and the parameter role. No additional context seems necessary for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter (limit) has 0% schema description coverage, but the description fully compensates by explaining its meaning ('Number of most recent ledger rows to return, newest first') and default value (30). This provides complete semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves recent consent events from the audit ledger, specifying the resource (consent events) and action (retrieve). It mentions the source (consent_ledger written by log_consent_event) and the fields returned, providing a specific purpose. However, it does not differentiate itself from other 'get' sibling tools beyond linking to its write counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reviewing or reporting on sensitive data treatment, providing context. It also notes the relationship with log_consent_event, but does not explicitly state when to use this tool versus alternatives or when not to use it. No exclusions or comparisons to other audit or logging tools are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_constitutionMetis ยท Data Guardian โ Get ConstitutionA
M5.7.3 โ Load the Metis constitutional policy for agent context.
Returns a compact summary of behavioral rules appropriate for the
complexity level. Prepend to any agent's system context to enforce
shared policy across all agent types.
Args:
level: 'quick' | 'standard' | 'deep' | 'chain'
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | deep |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It only states it loads and returns a summary, but omits details on idempotency, authorization requirements, rate limits, or any side effects. For a read operation, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: three sentences plus an argument list, each sentence adding unique value. It is front-loaded with the version and purpose, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema (not shown but present), the description adequately covers the tool's role and expected output. It could be slightly more specific about the return format, but is generally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'level' has no schema description (0% coverage), but the description lists explicit values ('quick', 'standard', 'deep', 'chain') and explains that it controls the complexity of returned behavioral rules. This compensates for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool loads the Metis constitutional policy for agent context, returning a summary of behavioral rules. It distinguishes itself from sibling get_* tools by specifying it enforces shared policy across all agent types, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to prepend the policy to any agent's system context to enforce shared policy. This provides clear context for when to use the tool, though it does not explicitly mention alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactsMetis โ Get ContactsA
Retrieve all contacts from the contacts table.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavioral traits. It only states that the tool retrieves data without any details on side effects, permissions, or data size limits. The description is insufficient for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundancy. It is appropriately concise, though slightly sparse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with no parameters and an output schema present, the description is sufficient. It explains the core action, but lacks additional context about data freshness or ordering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters with 100% coverage, so the description does not need to add parameter meaning. Baseline for no parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Retrieve' and resource 'contacts from the contacts table', clearly indicating the action and scope. It distinguishes itself from sibling tools by precisely naming the data source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'search_memory' or 'search_library'. There is no mention of prerequisites or context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contextMetis โ Get ContextA
Recall relevant prior context within a token budget.
Progressive disclosure: returns more detail when budget allows.
โค 500 tokens โ index only (type + first 12 words per entry)
โค 2000 tokens โ preview (type + first 40 words)
> 2000 tokens โ full (complete content)
Combines semantic vector search (if fastembed available) with keyword
fallback, filtered to the last `days` days.
Args:
query: What you are looking for โ natural language.
budget_tokens: How many tokens you can spend on context (default 2000).
agent_slug: Restrict to a specific agent's observations (optional).
days: How far back to search (default 90 days).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| query | Yes | ||
| agent_slug | No | ||
| budget_tokens | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses progressive disclosure behavior, search method (semantic+keyword fallback), and time filtering. Without annotations, description carries burden; it covers key traits but omits side effects or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise overall, uses bullet and list for clarity, front-loaded with main purpose. Minor redundancy in threshold examples could be trimmed but generally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully explains behavior, input semantics, output format (progressive disclosure), and fallback logic. With output schema present, return values need no further detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage; description explains all 4 parameters in detail (natural language query, token budget, agent restriction, time window), adding significant meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'Recall' and resource 'prior context within a token budget'. Unique progressive disclosure feature distinguishes it from sibling memory tools like search_memory or recall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context for token budget and progressive disclosure thresholds, but does not directly contrast with sibling tools or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_continuity_contextMetis โ Get Continuity ContextA
Find what the researcher has already done that bears on the current question.
Call this before answering anything substantive, so the reply can be framed in
their own prior work instead of starting from nothing. This is what makes Metis
read as a second brain rather than a fresh chat: "this is your fifth session on
the dashboard since May" is only sayable if something counted.
Returns, where each exists:
- overall span โ recorded sessions, how long Metis has been running, and how
much is stored (memories, concepts, procedures, papers)
- this project โ age, session count, current next step
- prior sessions on the same topic, newest first
- decisions already taken (so a settled question is not reopened)
- procedures that already cover this (follow them rather than improvising)
- library items and news threads on the topic
- the most recent briefing and whether it was read
USE IT HONESTLY. Weave one or two genuine references into the answer; do not
recite the whole payload, and never invent continuity. Empty fields mean there
is nothing to say โ say nothing rather than padding. A fabricated link makes
the memory layer feel decorative, which defeats the purpose.
Args:
topic: The question or subject being worked on. Free text; salient terms
are extracted for matching.
project_id: Project slug to scope to (e.g. "metis-dashboard"), if known.
limit: How many prior sessions to return. Default 4.
Returns:
A compact readable digest, plus a ready-made one-line continuity summary.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | No | ||
| project_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does so well: it enumerates what the payload contains, explains that topic terms are extracted for matching, gives the default limit, and pre-empts the empty-result case. It never states explicitly that the call is read-only/side-effect-free, which leaves a small gap for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and trigger are front-loaded before the payload enumeration and honesty coaching, so scanning works. Some bulk is avoidable: the seven-bullet returns list largely restates the output schema, and the honesty paragraph runs longer than the actual instruction requires.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter retrieval tool with 0% schema coverage, the description covers arguments, invocation timing, payload composition, and failure semantics; the output schema exists but the digest description still helps the agent decide whether to call it. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% โ parameters are bare titles with defaults โ so the description must compensate, and it does: topic is described as free text whose salient terms drive matching, project_id gives a concrete slug example, and limit is tied to prior-session count with its default. No parameter meaning is left to guesswork.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line gives a specific verb and resource โ find what the researcher has already done that bears on the current question โ and the returns list scopes it further (sessions, decisions, procedures, library items, briefings). It does not, however, name or distinguish itself from close siblings like surface_relevant_context, get_research_context, or load_project_context, so an agent must infer the split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Call this before answering anything substantive" is an explicit, actionable trigger, and the honesty paragraph adds a clear negative constraint (don't recite the payload, don't invent continuity, say nothing on empty fields). It stops short of naming alternatives or stating when not to call it in favor of another context tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_course_statusMetis ยท Course Builder โ Get Course StatusA
Return the current status of a course build (or all active builds).
Args:
slug: Course slug. Leave empty to list all active builds.
Returns:
Status summary including current step, modules, and next action.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains that parameters are optional and lists the return fields (status, steps, modules, next action), but does not disclose potential side effects, authentication needs, or rate limits. Adds some value but could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with no wasted words. It front-loads the main action in the first sentence and then uses a clean Args/Returns structure. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (as per context signals), the description adequately covers the tool's purpose and return structure. The single optional parameter is fully explained, making the tool complete for its intended use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'slug' is explained in the description as 'Course slug. Leave empty to list all active builds', which adds meaning beyond the minimal schema (just a string with default). Compensates for the 0% schema description coverage well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the current status of a course build, with the ability to list all active builds when slug is empty. This distinguishes it from sibling tools like start_course_build, publish_course, and review_course.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage tip (leave slug empty for all active builds) and implies the tool is for checking status. However, it does not explicitly mention when not to use it or alternatives, but for a simple query tool, this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_insightMetis ยท News Radar โ Get Daily InsightB
Retrieve a stored daily insight.
Args:
date: Date in YYYY-MM-DD format. Empty = today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states 'retrieve a stored daily insight' but does not clarify side effects (likely none), error handling for missing dates, or whether it is read-only. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: a single purpose sentence plus a parameter definition. Every sentence is essential, and the structure front-loads the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple retrieval tool with an output schema, the description is largely adequate. However, it could be more complete by noting that the insight must exist for the date, or what happens if it doesn't. Still, it covers the core functionality.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by documenting the 'date' parameter with format and default behavior ('Empty = today'). This adds meaningful semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Retrieve a stored daily insight' which clearly identifies the verb and resource. However, it does not explicitly differentiate from the sibling tool 'generate_daily_insight', though the distinction is implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'generate_daily_insight' or other retrieval tools. Prerequisites (e.g., insight must exist) are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_glossaryMetis โ Get GlossaryA
Retrieve all glossary terms.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states it retrieves terms. It does not disclose any behavioral traits such as read-only nature, rate limits, or side effects. The minimal description fails to compensate for the lack of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It is concise and front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, clear return of all glossary terms) and the presence of an output schema, the description is complete and sufficient for an agent to understand the tool's output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, and schema coverage is 100%. According to guidelines, a baseline of 4 is appropriate as the description cannot add more parameter meaning beyond what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Retrieve' and resource 'all glossary terms', clearly stating the action and scope. It also distinguishes from sibling 'add_glossary_term'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool or when to avoid it. Usage is implied by the name and sibling context, but no direct guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ideasMetis โ Get IdeasA
List captured ideas from your knowledge base, newest first.
Use this to review what you've been thinking about over a chosen time
window โ the ideas you logged with capture_idea โ so you can revisit,
connect, or act on them. Pairs with capture_idea (to add) and
cross_pollinate (to surface related work).
Args:
scope: Time window to retrieve. One of "today", "week" (last 7 days),
"month" (last 30 days), or "all". Defaults to "week".
limit: Maximum number of ideas to return, newest first. Defaults to 20.
Returns:
A formatted list of matching ideas with their timestamps and tags, or a
friendly note if none were found in that window.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| scope | No | week |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses ordering (newest first), default parameters, and return format ('formatted list' or 'friendly note'). Minor gap: doesn't specify pagination limits beyond limit parameter, but adequate for simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: one sentence for purpose, one for usage context, then structured Args and Returns sections. Every sentence adds value, with no repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers everything an agent needs: purpose, parameters, expected output, and usage context. It references sibling tools and explains the scope options, making it self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no parameter descriptions in schema), but description compensates fully. It explains scope enum values with defaults and limit max, adding essential meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List captured ideas') and resource ('from your knowledge base, newest first'). It distinguishes itself from sibling tools by naming capture_idea and cross_pollinate, which are nearby in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'review what you've been thinking about over a chosen time window.' Provides context: 'ideas you logged with capture_idea.' Mentions sibling tools for adding and connecting, giving clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_journalMetis โ Get JournalA
List journal entries from your knowledge base, newest first.
Use this to look back over your dated journal/log entries โ reflections,
progress notes, and session handoffs โ optionally from a given start date.
Helpful for "what was I working on lately?" and for rebuilding context at
the start of a session.
Args:
date_from: Earliest entry date to include, as "YYYY-MM-DD". Empty
string (the default) applies no date filter and returns the most
recent entries.
limit: Maximum number of entries to return, newest first. Defaults to 10.
Returns:
A formatted list of journal entries with their dates, or a note if none
match.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| date_from | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It states tools lists entries newest first, optionally filtered by date, and returns a formatted list or note. Does not disclose potential side effects or permissions, but as a read operation the behavior is sufficiently transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear one-line summary, usage paragraph, parameter list, and return note. It is slightly verbose (e.g., 'Use this to' repeats the first sentence) but overall efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not shown) and no annotations, the description adequately covers behavior, parameters, and return format. It explains default behavior and edge case (no entries). For a simple read tool, it is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clearly explains 'date_from' format ('YYYY-MM-DD') and default behavior (no filter returns most recent), and 'limit' maximum count with default 10. This adds essential meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists journal entries from the knowledge base, newest first, and distinguishes it from other get_* tools by specifying it's for dated journal/log entries. The phrasing 'reflections, progress notes, and session handoffs' clarifies the content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides good usage context: 'look back over your dated journal/log entries' and 'rebuilding context at the start of a session.' It does not explicitly compare to alternatives but the use case is clear. Could be improved with direct exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_statsMetis ยท Librarian โ Get Library StatsA
Summarise your literature library at a glance.
Use this to see how big and how current your reference collection is before
searching or citing: it reports the total number of papers, a breakdown by
source (e.g. Zotero, Mendeley, manual) and by item type, the most recently
added references, and โ if you sync Zotero โ when the library was last
synced. A quick "what's in my library right now?" overview. Takes no
arguments. Pairs with search_library and sync_zotero_library.
Returns:
A formatted summary: total papers, counts by source and item type, the
five most recent references, and Zotero sync state if available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the read-only nature of the tool (no side effects implied) and details the returned information. With no annotations, the description carries the full burden, and it adequately describes what the tool does and returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear introduction, usage context, and return summary. While somewhat lengthy, every sentence adds value and it is front-loaded with the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no annotations, and presence of an output schema, the description fully explains what the tool returns and when to use it. It is complete for a simple stat retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the schema provides no info. The description implicitly states it takes no arguments, which adds value beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it summarises the literature library, reporting total papers, breakdown by source and type, recent references, and sync status. It uses a specific verb ('summarise') and distinguishes itself from siblings like search_library and sync_zotero_library.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use: 'before searching or citing' to know library size and currency. It also notes it pairs with search_library and sync_zotero_library, providing clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_memory_healthMetis ยท Memory Curator โ Memory Health ReportA
Generate a health report for the memory palace.
Returns: entry counts by type, topic coverage map, coverage gaps vs active
projects, duplicate candidates, and entries without output file provenance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the output composition (entry counts, coverage map, etc.), implying a read-only operation. However, it does not explicitly state that no side effects occur or mention any required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one sentence for purpose and a compact list of outputs. Every sentence earns its place, and critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema (not visible but signaled), the description fully explains what the tool returns. There is no missing information for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, earning a baseline of 4. The description adds value by detailing the return structure, which goes beyond the minimal schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates a 'health report for the memory palace' and lists the specific outputs (entry counts, coverage map, gaps, duplicates, provenance). This distinctively differentiates it from sibling tools that add, search, or manage individual memories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for obtaining a health overview but does not explicitly state when to use this tool versus alternatives like search_memory or get_related_memories. No when-not or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_missed_newsMetis ยท News Radar โ Get Missed NewsA
Show news that never reached you in a briefing you read.
"Missed" means never delivered โ not merely old. A brief that was generated
but never marked read delivered nothing, so its stories still count as
missed. This is what a catch-up briefing should be built from.
Args:
days: How far back to look. Default 14.
min_signal: Minimum signal strength โ "high", "medium" or "low". Default "medium".
Returns:
Story threads with recent activity that no read briefing ever carried.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| min_signal | No | medium |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden, and it does meaningful work: it explains the delivery rule (generated-but-unread briefs delivered nothing, so their stories still count as missed) and states the return shape (story threads with recent activity). It could still add auth or scope notes, but the core logic an agent needs to trust the result is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded definition of 'missed' followed by the Args and Returns blocks; nearly every sentence earns its place. The Returns block is partly redundant given an output schema exists, a minor efficiency cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter read tool with an output schema, the description covers semantics, defaults, allowed values, and the delivery model. Nothing essential to correct invocation is missing, though a pointer to the related mark_brief_read/get_news_briefs workflow would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it defines both parameters including defaults ('days: default 14') and the allowed values for min_signal ('high', 'medium', 'low', default 'medium') โ the latter is critical since the enum is absent from the schema. It does not clarify whether days is calendar or rolling, but coverage is far better than the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (show news never reached you via a read briefing) and defines the key discriminator up front: 'Missed' means never delivered โ not merely old. This clearly separates it from siblings like get_new_publications, get_briefing_coverage, or get_news_briefs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit usage context โ 'This is what a catch-up briefing should be built from' โ and an exclusion ('not merely old'). It does not name named sibling alternatives, so an agent must infer that get_news_briefs/get_briefing_coverage cover the delivered side, but the when-to-use signal is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_policyMetis ยท Data Guardian โ Get Network PolicyA
Return the current network access policy.
Returns 'normal' if no policy file exists (default).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses the default return value ('normal') when no policy file exists, which is useful behavioral context. However, it does not mention side effects or permissions, which are minimal given the read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the purpose with no extraneous information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, no parameters, and existence of an output schema, the description sufficiently covers what the tool does and its default case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters (schema coverage 100%), the baseline is 4. The description adds no parameter info because there are none, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the current network access policy, with a verb ('Return') and specific resource, distinguishing it from the sibling 'set_network_policy'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies read-only usage but does not explicitly state when to use it over alternatives or provide exclusions. The context is clear but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_new_publicationsMetis ยท News Radar โ Get New PublicationsA
Retrieve new publications, optionally filtered by topic.
Args:
topic: Filter by topic tag. Empty = all topics.
limit: Maximum results (default 20).
unread_only: If True, only return unread publications (default True).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | No | ||
| unread_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It states 'Retrieve' implying read-only, but does not disclose any behavioral traits like authentication requirements, rate limits, or side effects. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear two-line purpose followed by structured argument descriptions. No wasted words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description covers all parameters with defaults and behavior. Complete enough for an agent to use correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the raw schema: explains the default values, that empty topic means all topics, and the filtering behavior of 'unread_only'. Schema coverage is 0%, so description fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve' and resource 'new publications', with optional topic filtering. This distinguishes it from sibling tools like 'search_literature' which may retrieve all publications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'scan_news' or 'search_literature'. The purpose implies it's for recent publications but does not provide exclusions or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_news_briefsMetis ยท News Radar โ Get News BriefsA
Retrieve recent news briefs from the database.
Args:
limit: Maximum number of briefs to return (default 10).
source_type: Filter by type โ "news" for RSS items, "article" for scientific papers. Empty = all.
domain: Filter by domain tag (e.g. "HAT", "AI", "public-health"). Empty = all.
since: ISO date string โ only return briefs created after this date. Empty = all.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| domain | No | ||
| source_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 adequately describes the read operation but does not disclose potential side effects, permissions, or rate limits. It is clear but not deeply transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a one-sentence purpose followed by a clean bullet-list of parameter details. No extraneous information or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (no need to describe return values) and 4 parameters, the description adequately covers parameter usage. It misses typical use cases or examples, but is sufficient for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining each parameter's purpose, default values, and allowed values (e.g., 'news' vs 'article' for source_type). It adds meaning beyond the schema's raw title fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve recent news briefs from the database' with a specific verb and resource. However, it does not explicitly distinguish from sibling tools like 'scan_news' or 'get_new_publications', which could cause ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., scan_news for RSS, search_literature for articles). There is no mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pdf_index_statsMetis ยท Librarian โ Get Pdf Index StatsA
Report indexing status and coverage for your PDF knowledge bases.
Use this to check how complete your RAG (retrieval) corpus is before
relying on grounded answers: it shows, per knowledge database, the document
and chunk counts, when it was last built, a domain breakdown, and which PDFs
are still un-indexed. A quick "is my library ready to answer questions?"
health check. Pairs with index_pdf_library (to index) and
search_pdf_knowledge (to query).
Args:
database: Slug of a single knowledge database to report on (e.g.
"ph-background"). Empty string (the default) reports on every
database.
Returns:
A formatted status report covering each database's counts, last-built
time, domain breakdown, and any un-indexed PDFs.
| Name | Required | Description | Default |
|---|---|---|---|
| database | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes the tool as a reporting function with no side effects, which is clear. However, it does not explicitly state that it is read-only or non-destructive, though implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: a concise purpose sentence, a usage paragraph, and then explicit Args and Returns sections. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, input, output contents, and sibling relationships. With output schema present, the return description is sufficient. Complete for a single-parameter reporting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'database' has no schema description (0% coverage), but the description explains its default behavior (empty string reports all databases), provides an example slug, and clarifies its optional nature. This fully compensates for the lack of schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Report indexing status and coverage for your PDF knowledge bases' and specifies the data shown (counts, last built, domain breakdown, un-indexed PDFs). It explicitly distinguishes from sibling tools index_pdf_library and search_pdf_knowledge.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use: 'check how complete your RAG corpus is before relying on grounded answers' and pairs with related tools for indexing and querying. This provides clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pending_proposalsMetis โ Get Pending ProposalsA
List all skill improvement proposals awaiting review.
Returns proposals sorted by most recent first, with agent slug, rationale, and a diff summary (first 200 chars of proposed content).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes sorting order (most recent first), returned fields (agent slug, rationale, diff summary), and truncation of diff summary to 200 chars. No annotations provided, so description carries burden; it covers key behaviors but omits potential details like pagination or limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states purpose, second adds sorting and field details. No redundant information, well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a simple list tool with output schema (return values documented there). Covers sorting, fields, truncation, and scope. No missing critical details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description correctly implies no parameters needed. With 0 params, baseline is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists skill improvement proposals awaiting review, with specific verb 'list' and resource 'pending proposals'. It distinguishes from sibling tools like approve_proposal and reject_proposal by focusing on listing pending ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. Does not mention when not to use it or suggest alternative tools for creating or approving proposals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_persona_learningsMetis โ Get Persona LearningsA
Show what Metis has learned about how to behave.
Read this at the start of a session, alongside `metis-persona.md`, so
corrections the researcher made previously actually apply. Also useful when he asks what
Metis has learned, or to audit whether a rule still holds.
Args:
category: Optionally filter โ voice, workflow, preference, avoid, domain.
Returns:
The recorded lessons with their evidence and dates.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. "Show" and "Returns" strongly imply a pure read with no mutation, and the return contents (lessons with evidence and dates) are described, but there is no explicit statement of safety, side effects, empty-result behavior, or cost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, purpose front-loaded, then usage, then Args and Returns headers. Nothing redundant and structure maps directly onto what an agent needs to decide and call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, when to invoke, parameter values, and return contents; with an output schema present it need not document return shape in more detail. The only real gap is behavioral disclosure left unfilled by the absent annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema has no enum, so the description is the only place the valid `category` values (voice, workflow, preference, avoid, domain) appear โ that is genuinely load-bearing information. It also marks the parameter optional but does not state the default effect of omitting it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Show what Metis has learned about how to behave" states a concrete verb and resource, and the Args/Returns block makes the object of the read unambiguous. It is clearly the read counterpart to `record_persona_learning`, though it never names that sibling to sharpen the contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives three explicit triggering contexts: at session start alongside `metis-persona.md`, when the researcher asks what Metis has learned, and when auditing whether a rule still holds. That is strong positive guidance, but there is no stated exclusion or named alternative for any situation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_categoriesMetis โ Get Project CategoriesA
Return all distinct project categories currently in use.
Lists the user-defined categories (e.g. "Article", "Grant", "Teaching")
that have been assigned to projects, so you can group projects or offer
an existing category before set_project_category invents a new one.
Takes no arguments.
Returns:
A text line listing the distinct non-empty categories in alphabetical
order, or a message that none are defined yet.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes output format (text line with categories) and fallback message. No annotations provided, so description carries full burden, which it does adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise paragraphs plus a 'Returns' section. Front-loaded with purpose, no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully describes input (none), output format, and usage context for a simple tool with no parameters and an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; schema coverage is 100%. Description adds value by explaining why no parameters are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool returns all distinct project categories, with examples. Distinguishes from sibling set_project_category by noting it avoids inventing a new category.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage when you need existing categories; mentions sibling set_project_category. No explicit when-not-to-use but context is clear given no parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_statusMetis โ Get Project StatusA
Status of your registered projects.
Reads the project REGISTRY (the `projects` table โ the source of truth that
the dashboard Work tab shows), not just the folders on disk, and adds task
completion counts. Empty project_id lists ALL active projects; a specific
project_id (exact or partial) shows that one, enriched from its folder card
if a `projects/active/<name>/` folder exists.
Args:
project_id: Project id (or part of one). Empty string = all active projects.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It correctly states it reads the registry and enriches from folder cards if available. It also clarifies it is not just looking at folders on disk. Missing explicit mention of side effects (though it's read-only) or permissions, but sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then details, and an Args section. Every sentence adds value without fluff. Perfectly sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional param, read-only). The description, combined with the output schema (which exists), covers all necessary context for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter project_id is fully explained: empty string lists all active projects, specific (exact or partial) shows that one. This adds significant meaning beyond the schema, which only shows a default value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads the project REGISTRY table, which is the source of truth for the dashboard, and adds task completion counts. This sets it apart from sibling tools that might scan folders or manage projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains when to use an empty project_id (all active) vs a specific one, and mentions partial matching. However, it does not explicitly contrast with sibling tools like get_project_categories or list_contexts, but the scope is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_research_contextMetis โ Get Research ContextA
Retrieve research project context from the PKM.
Gathers information about the research structure, articles, milestones,
and methods to help with research planning and writing.
Args:
section: What to retrieve -- "overview", "articles", "milestones", "methods".
max_chars: Maximum characters to return for file-based sections (default 8000).
Pass 0 for no limit.
| Name | Required | Description | Default |
|---|---|---|---|
| section | No | overview | |
| max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions what information is retrieved but does not state that it is read-only, whether it requires authentication, or what happens if the context is missing. The safety profile is unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a concise summary followed by parameter documentation. It is front-loaded with purpose. The 'Args' section adds value but could be slightly more concise. Overall efficient with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the availability of an output schema, the description adequately covers the tool's purpose and parameter semantics. It does not describe the return value structure, but this is handled by the output schema. The description is complete enough for effective usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the schema for both parameters. For 'section', it enumerates valid values ('overview', 'articles', 'milestones', 'methods'). For 'max_chars', it explains the default, purpose, and special value 0 for no limit. This compensates for the schema's zero description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves research project context from the PKM and lists specific information types (structure, articles, milestones, methods). The name and title align, and it distinguishes itself from siblings like 'get_context' or 'get_project_status' by focusing on research context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for research planning and writing but does not explicitly state when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. Given the large number of sibling tools, explicit guidance would be beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spansMetis โ Get SpansB
Fetch recent agent spans, optionally filtered by session or run.
Args:
session_id: Filter to this session. Optional.
run_id: Filter to this agent_runs.run_id. Optional.
limit: Max rows to return. Default: 50.
Returns a JSON array of span objects.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| run_id | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not state that this is a read-only operation, does not mention idempotency, rate limits, or the definition of 'recent'. Only states it returns a JSON array of span objects with a default limit of 50.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a clear purpose statement, structured Args block, and a brief return note. No unnecessary sentences or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 optional parameters and an output schema, the description covers parameter semantics and return type. However, it lacks explanation of what a 'span' is, how 'recent' is defined, and any behavioral context like sorted order or pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 0%, the description adds meaningful interpretations for all three parameters: session_id filters by session, run_id filters by run, limit sets max rows with default 50. This compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Fetch' and resource 'spans', with optional filters. It hints at recency but doesn't define it, and no explicit differentiation from sibling span tools like start_span or log_span, but the read intent is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like get_agent_runs or other get_* tools. It mentions optional filters but doesn't specify scenarios where filtering by session vs run is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tasksMetis โ Get TasksA
Query tasks from the SQLite database with optional filters.
Args:
status: Filter by status -- "open", "done", "blocked", or "" for all.
project_id: Filter by project. Empty = all projects.
owner: Filter by owner. Empty = all owners.
limit: Maximum results (default 25).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| owner | No | ||
| status | No | open | |
| project_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the tool's read-only nature implicitly (querying) and mentions optional filters and a default limit. However, it lacks details on pagination (e.g., offset/cursor support), ordering, and any potential errors. The output schema exists, so return format is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: one summary line followed by a structured list of parameters with clear explanations. Every sentence is relevant and adds value. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple query tool with 4 optional parameters, an existing output schema, and no required fields, the description adequately covers the filtering behavior. It lacks information on sorting order or default ordering, but the tool appears straightforward. Overall, it is comprehensive enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It does so for all four params: status (with allowed values), project_id, owner, and limit (with default). This adds meaning beyond the schema's title and default values. Minor ambiguity: description says '' for status means all, but default is 'open', which is clear enough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Query') and resource ('tasks'), clearly distinguishing it from sibling tools like create_task, update_task, and delete_task. It states that the tool queries tasks from a SQLite database with optional filters, which is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the primary task listing tool via the phrase 'Query tasks from the SQLite database', but it does not explicitly specify when to use it versus other search or memory tools (e.g., search_memory, list_recent_sessions) or provide exclusion criteria. No alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_thinking_profileMetis โ Get Thinking ProfileA
Read and return the current thinking profile from system/thinking-profile.yaml.
Falls back to default structure if the file does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It clearly states it reads from a YAML file and falls back to a default structure if the file does not exist, which is an important behavioral detail. No mention of idempotency or side effects, but the read-only nature is implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy. The main action is front-loaded, and the fallback behavior is provided in a separate sentence. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with an output schema, the description is adequate. It specifies the source path and fallback behavior. Could be improved by explicitly stating idempotency or read-only nature, but the current info is sufficient for an agent to understand what happens.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so there is nothing to explain. The schema coverage is 100%, meeting the baseline expectation. The description correctly avoids inventing unnecessary parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Title and description clearly state it reads the thinking profile from a specific file. The verb 'Read and return' plus resource path makes purpose unambiguous. Siblings like reset_thinking_profile and update_thinking_profile confirm this as the read operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is minimalโonly describes what the tool does, not when to use it versus alternatives. No explicit when-not-to-use or mention of sibling tools. For a zero-parameter getter, the need is obvious, but explicit guidance could improve differentiation from related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_topic_memoryMetis ยท Memory Curator โ Get Topic MemoryA
Return all memory entries tagged with a specific topic, newest first.
Args:
topic: Topic tag to filter by (e.g. "metis-setup", "phd-research").
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for behavioral disclosure. It states ordering and filtering but does not mention side effects, safety (read-only assumption), pagination, or limits. The read-only nature is not explicitly stated, and potential size of returned data is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences plus an args listing, with the main action front-loaded. Every word contributes essential information, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter) and the presence of an output schema, the description is mostly adequate. However, it lacks context on what constitutes a 'memory entry' (e.g., fields included) and how this tool differs from other memory retrieval tools, which is relevant due to many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'topic' has 0% schema description coverage. The description adds a clear explanation and concrete examples (e.g., 'metis-setup', 'phd-research'), which compensates well. Could be improved by specifying allowed characters or format, but it suffices.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Return' and the resource 'memory entries tagged with a specific topic', with ordering 'newest first'. This distinctively identifies its function among siblings like search_memory or list_recent_memory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the description (use when you need all entries for a topic, newest first), but there is no explicit guidance on when not to use or alternatives. The description does not differentiate from similar tools like search_memory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_configMetis โ Get User ConfigA
Return the full Metis user configuration from user-config.yaml.
Returns the complete YAML content (research interests, data sensitivity,
specialist contexts, etc.). For a lightweight profile summary (name,
interests, news_topics), use get_user_profile() instead.
Creates the config file with defaults if it does not exist yet.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description alone discloses that it creates the config file with defaults if missingโan important side effect beyond a simple read. No other behavioral claims are made, but the disclosure is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the key action, no redundant words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless tool with an output schema, the description fully explains returns and side effects. It is complete given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description adds value by explaining the output content (YAML with research interests, etc.), which is beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the full Metis user configuration from user-config.yaml, specifying the source and content (research interests, data sensitivity, etc.). It distinguishes from the sibling tool get_user_profile, so purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: it recommends get_user_profile for a lightweight summary, implying when to use this tool for the full config. It also notes the file creation behavior. No explicit when-not-to-use, but the alternative is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_profileMetis โ Get User ProfileA
Return the user's identity, interests, style, and model preference.
Call this at the start of any personalised run to understand the user's
topics, news signals, and communication preferences.
Returns JSON with:
- display_name: user's display name (set via /metis_config)
- role: professional role (e.g. "Senior researcher")
- news_interests: what they want to know is HAPPENING โ drives the News
surface and the briefings. May include things outside their work.
- library_interests: what they want a scientific BACKGROUND on โ drives
literature collection and the knowledge layer. Also may sit outside their
current projects.
- has_declared_interests: False if neither list is set. A new user may have
no projects, articles or interests yet; that is a normal starting point,
and `start_interest_interview()` is how to fill it in.
- interests: DEPRECATED โ the union of both lists, kept for older callers
- news_topics: DEPRECATED โ mirrors news_interests
- active_model: current default model slug (haiku / sonnet / opus)
- style: dict of communication preferences:
- response_length: "concise" | "moderate" | "detailed"
- feedback_style: "gentle" | "direct" | "challenging"
- challenge_level: "supportive" | "balanced" | "rigorous"
- warmth: "warm" | "neutral" | "formal" (default: "warm")
- detail_level: "brief" | "balanced" | "thorough" (default: "balanced")
- routing_verbosity: "silent" | "natural" | "detailed" (default: "natural")
Usage pattern:
profile = json.loads((await get_user_profile())[0].text)
interests = profile['interests']
style = profile['style'] # โ {"response_length": "concise", "warmth": "warm", ...}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does so well: it documents field-level semantics, marks deprecated fields (interests, news_topics) so callers aren't misled, and states defaults for warmth, detail_level and routing_verbosity. It omits anything about permissions, caching, or cost, but for a zero-argument read this is close to sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and organized, but it is long for a nullary tool and much of the return-field enumeration duplicates the existing output schema โ including the full enum lists and defaults. The end-of-description code snippet adds little for a call with no arguments, so not every line earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, an output schema, and no annotations, the description covers everything an agent needs: when to call it, what the fields mean operationally (news_interests drives News, library_interests drives literature), how to detect an unconfigured user, and how to remedy that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description does not waste effort inventing parameter semantics and instead spends its budget on return-value semantics and a concrete call pattern.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return the user's identity, interests, style, and model preference') and enumerates the exact contents, so an agent knows precisely what it gets. It does not, however, distinguish itself from close siblings like get_user_topics or get_user_config, which overlap in subject matter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear triggering condition ('Call this at the start of any personalised run') and names the follow-up tool start_interest_interview() for the empty-profile case, which is genuinely actionable guidance. There is no explicit when-not guidance relative to get_user_config or get_user_topics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_topicsMetis ยท News Radar โ Get User TopicsB
Return all active topics from user_topics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read-only operation ('Return') with no side effects, which is transparent for a simple list. However, it does not clarify what 'active' means, or whether results are paginated or sorted. Without annotations, more detail would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no unnecessary words. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description is minimally adequate. However, it could benefit from explaining what 'active' means or providing an example of the return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides complete coverage. The description adds no parameter information, but none is needed. Baseline score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Return') and resource ('active topics from user_topics'), making the tool's purpose clear. However, it does not differentiate from sibling tools like add_user_topic or get_topic_memory, limiting its distinctiveness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of context, prerequisites, or exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_working_memoryMetis ยท Memory Curator โ Get Working MemoryA
Retrieve working memory for a session, or the most recent entries if no session given.
Args:
session_id: Pipeline session ID. Leave empty to get the 20 most recent entries
across all sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses retrieval behavior and quantifies result limit (20 entries) for the no-session case. Could mention side-effect free nature more explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus an Args section, front-loaded with main functionality. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (1 optional param, output schema exists), the description fully covers behavior and parameter usage without omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter session_id is explained in detail: 'Pipeline session ID. Leave empty to get the 20 most recent entries across all sessions.' This compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it retrieves working memory for a session, with conditional behavior based on session_id. This differentiates it from siblings like get_agent_context or get_related_memories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use with or without a session_id, but does not explicitly mention when not to use or list alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_bibtex_libraryMetis ยท Librarian โ Import Bibtex LibraryA
Import papers from a BibTeX file into literature_metadata.
Use this for Mendeley users: export your library from Mendeley as BibTeX,
then point this tool at the file.
Args:
bibtex_path: Full path to the .bib file (e.g. from Mendeley export).
| Name | Required | Description | Default |
|---|---|---|---|
| bibtex_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only states the basic import operation without discussing side effects (e.g., duplication handling, overwrite behavior, validation). A user or AI agent would not know if this action is destructive or idempotent, or if it requires specific file permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences for purpose and usage, plus a two-line args section. Every sentence contributes useful information, and there is no redundancy or fluff. The structure is clear and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with an output schema, the description is adequate but incomplete. It lacks guidance on error cases (e.g., invalid BibTeX, file not found), expected output format (though output schema exists), and whether the tool validates entries before importing. The description meets minimum viability but misses behavioral and error-handling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description adds meaning beyond the schema. It describes the sole parameter 'bibtex_path' as 'Full path to the .bib file (e.g. from Mendeley export).' This clarifies that it expects a file path and gives an example. However, it does not specify whether relative paths or remote paths are allowed, nor does it mention file encoding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Import papers from a BibTeX file') and resource ('into literature_metadata'). The verb 'import' and target 'literature_metadata' are specific. Among siblings like other import/search tools, this one uniquely handles BibTeX import, so it is well-distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete use case ('Use this for Mendeley users: export your library from Mendeley as BibTeX, then point this tool at the file.'). This provides clear context for when to use it, but it does not explicitly state when not to use it or mention alternatives. Other import tools exist (e.g., import_citations) but are not referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_zotero_pdfsMetis ยท Librarian โ Import Zotero PdfsA
Copy the PDFs from a Zotero collection into a knowledge layer, so they get indexed.
For texts a background pack cannot download โ anything behind a publisher's
browser check or your institution's subscription. Save them in Zotero with the
browser connector (logged in through your library), then point this at the
collection. No Zotero API key needed; it reads your local Zotero database.
The files are COPIED, so your Zotero library is left untouched. Indexing is not
run here โ press Rebuild on the Library surface, or wait for the nightly index.
Args:
collection: Zotero collection name, exactly as it appears in Zotero.
database: Slug of the knowledge layer to add them to (e.g. 'ph-foundations').
confirm: True to actually copy. Without it you get the list only.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| database | Yes | ||
| collection | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well: files are copied, not moved; the Zotero library is untouched; no API key is needed; the local Zotero database is read; indexing must happen elsewhere; and confirm=False returns only a list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then explains usage context, behavior, and parameters in that order. Every sentence adds useful information and the Args block is compact and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter copy/import tool with no annotations and an output schema present, the description covers the essential context: when to use it, what it does and does not do, how the Zotero side is handled, and how confirm changes behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: collection is the exact Zotero collection name, database is the knowledge-layer slug, and confirm=True is required to actually perform the copy while omitting it yields only a list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: copying PDFs from a named Zotero collection into a knowledge layer so they can be indexed. This clearly distinguishes the tool from indexing siblings such as index_pdf_library or sync_zotero_local by clarifying that it copies local files and does not run indexing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use it: for texts a background pack cannot download because of publisher browser checks or institutional subscriptions. It also gives the prerequisite workflow (save in Zotero via the browser connector), states that indexing is not run here, and explains the confirm=False preview behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_library_pdfsMetis ยท Librarian โ Index Library PdfsA
Build or rebuild a PaperQA2 index over the user's PDF library.
Walks knowledge/library/ (all subdirectories), collects PDFs, and indexes
them with PaperQA2 + Claude Haiku. The index is persisted so that
ask_library() can query it without re-reading every PDF.
Run once after adding new papers, or with force_reindex=True to rebuild.
Args:
force_reindex: Rebuild from scratch even if an index already exists.
topic_filter: If given, only index PDFs whose parent folder name
contains this string (e.g. "NTD", "Epidemiology", "Methods").
scope: Which library to index. "default" = knowledge/library/ (all PDFs).
"ph_library" = knowledge/library/ph-background/ (public health background).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | default | |
| topic_filter | No | ||
| force_reindex | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, but the description details the indexing process (walks directories, uses PaperQA2 + Claude Haiku) and explains persistence for subsequent queries via ask_library(), providing solid behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (9 sentences), front-loads the main action, and introduces parameters in a clear list. Every sentence adds unique value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 optional params and an output schema, the description covers purpose, usage, behavior, and parameter details completely, leaving no significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining each parameter's meaning and effect: force_reindex (rebuild), topic_filter (folder name filter), scope (which library directory).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Build or rebuild a PaperQA2 index over the user's PDF library') and distinguishes the tool from siblings like ask_library which queries the index, making its purpose very clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: 'Run once after adding new papers, or with force_reindex=True to rebuild.' This clearly states when to use the tool, though it does not directly exclude alternatives like index_pdf_library.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_pdf_libraryMetis ยท Librarian โ Index Pdf LibraryA
Extract and index full text from all PDFs in the Metis library.
Reads PDFs from inputs/literature/ and Zotero storage.
Stores first 4000 characters per paper in library_fulltext table.
Also updates literature_metadata.abstract for any matched papers.
Incremental โ only processes files not yet indexed.
Args:
scope: "literature" = inputs/literature/ only | "zotero" = Zotero storage only | "all" = both
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and discloses key behaviors: reads PDFs, stores first 4000 characters, updates abstracts, and is incremental. It does not mention destructive actions, but the mutation of metadata is transparently described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear bullet points and an Args section. It is front-loaded with the main purpose. Could be slightly more concise, but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but indicated), the description does not need to explain return values. It sufficiently covers inputs, behavior, and incremental nature. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an 'Args' section that explains the possible values for the single parameter 'scope' (literature, zotero, all), which the schema only defines as a string with no enums or description. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool extracts and indexes full text from PDFs in the Metis library, specifying sources (inputs/literature/, Zotero storage) and storage destinations. It differentiates itself by mentioning incremental processing and scope parameter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for indexing PDFs but does not provide explicit guidance on when to use this tool versus alternatives like 'index_library_pdfs' or 'scan_literature'. No when-not-to-use or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_pending_layersMetis ยท Librarian โ Index Pending LayersA
Index every knowledge layer that has documents waiting (Keystone M6).
The sweep behind "I dropped a PDF into the folder". Pack installs and Zotero
imports schedule their own indexing, but a file copied in by hand โ which is
what _TO-OBTAIN.md asks for โ has no code path to notice it. This closes that
gap, and is what the nightly job should call.
Runs detached and single-flight: a layer already indexing is left alone rather
than started twice.
Args:
confirm: False to report what is pending without starting anything.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does well: it discloses detached/background execution (no inline result), single-flight semantics (an already-indexing layer is skipped rather than double-started), and a dry-run mode. It omits failure behaviour and required permissions, which keeps it short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then rationale, then behaviour, then the argument. Minor waste remains in the internal markers '(Keystone M6)' and the reference to a private file convention, which add no decision-relevant information for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter background sweep with an output schema, the agent has what it needs: scope, exclusion, idempotency and dry-run. Only error/handling detail is absent, which is a small gap given the tool returns via an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden, and it defines confirm as a dry-run switch: false reports what is pending without starting anything, implying true actually indexes. That fully disambiguates the single boolean, though it could state the default-True behaviour explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Index every knowledge layer that has documents waiting') and scopes it to the hand-copied-file case, explicitly excluding the cases already handled by pack installs and Zotero imports. An agent can tell it apart from index_library_pdfs, index_pdf_library or sync_zotero_local 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the triggering situation ('I dropped a PDF into the folder'), the caller that should use it (the nightly job), and the conditions under which it is not needed (pack installs and Zotero imports schedule their own indexing). That is an explicit when and when-not with alternatives identified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_ideas_documentMetis โ Ingest Ideas DocumentA
Import an ideas document (Word/text/markdown) and capture each idea.
Reads the file, splits it into discrete items (paragraphs, bullet points,
or numbered items), and calls capture_idea() for each non-empty item.
Supports .txt, .md, and .docx files.
Args:
file_path: Absolute or METIS_RC_ROOT-relative path to the ideas file.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the reading, splitting, and calling of capture_idea() per item. It does not mention error handling, duplicate detection, or limits. No annotations are present to supplement, so it carries the full burden but is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: three sentences plus a single bullet for the argument. It is front-loaded with the purpose, and every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (assumed to document return values), the description covers input, process, and file types adequately. It lacks details on edge cases like empty files or duplicates, but is sufficient for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, file_path, is described as absolute or relative to METIS_RC_ROOT. This adds meaning beyond the schema property name. Since schema description coverage is 0%, the description compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool imports an ideas document and captures each idea by splitting into discrete items and calling capture_idea(). It specifies supported file formats (.txt, .md, .docx). This distinguishes it from the sibling tool capture_idea which handles single ideas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for bulk import of ideas from a document, but does not explicitly state when to use this tool versus capture_idea for individual entries. No exclusion or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_office_documentMetis โ Ingest Office DocumentA
Read a PowerPoint deck into Metis's memory, with provenance back to the file.
Stores the deck's content so it can be recalled and cross-referenced later โ
which is what closes the round trip: a deck edited in PowerPoint becomes
something Metis knows about again.
Excel files are NOT ingested. Their structure can be read (see
read_office_document) but their contents must not enter memory โ they are data,
not authored content, and may hold patient records.
Args:
path: Path to a .pptx file.
project_id: Optional project to attach it to.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| project_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the key behavioral trait: this is a persistent write into memory, storing content plus provenance for later recall. It also flags a hard safety boundary (patient-record data must never be ingested). It stops short of stating idempotency, what happens on re-ingesting the same deck, or failure behavior for non-.pptx input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the Excel exclusion placed before the Args block where it matters most. The middle paragraph ("which is what closes the round tripโฆ") is mildly rhetorical and could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations and an output schema already documenting returns, the description supplies the storage semantics, the provenance guarantee, and the data-safety restriction an agent needs. Remaining gaps (duplicate handling, path resolution, error cases) are real but secondary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: path is constrained to a ".pptx file" (a format restriction absent from the schema) and project_id is explained as an optional project attachment. It does not clarify whether path is absolute, relative, or workspace-scoped.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("Read a PowerPoint deck into Metis's memory") and immediately disambiguates the misleadingly broad tool name by restricting scope to PowerPoint decks only. It also names the sibling it is not (read_office_document) so an agent can route 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not ("Excel files are NOT ingested"), the reason (data not authored content, may hold patient records), and the named alternative to use instead (read_office_document). Nothing about tool selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_profiling_outputMetis ยท Software Engineer โ Ingest Profiling OutputA
Read JSON profiling output and register it as a data dictionary.
The user runs the profiling script locally (generated by
generate_profiling_script), which produces a JSON file. This tool
reads that JSON and calls register_data_dictionary logic to insert/replace
the variable definitions.
Args:
json_path: Absolute path to the profiling JSON output file.
dataset_name: Override the dataset name (default: read from JSON).
project_id: Project to associate the dictionary with.
| Name | Required | Description | Default |
|---|---|---|---|
| json_path | Yes | ||
| project_id | No | ||
| dataset_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must bear the full burden. It mentions 'insert/replace' indicating potential overwriting, but does not specify effects on existing data, error handling, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line summary, followed by a short workflow explanation, then an Args block. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the workflow and parameters adequately. Given the existence of an output schema, return values are not required. It could mention prerequisites (e.g., JSON must be from profiling script) but already implies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates well by explaining each parameter: json_path, dataset_name, and project_id. It provides usage details like 'absolute path', 'override the dataset name', and 'project to associate'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads JSON profiling output and registers it as a data dictionary. This distinguishes it from siblings like 'generate_profiling_script' (which produces the JSON) and 'register_data_dictionary' (which might have a different input).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that the tool is used after running a profiling script locally, which generates a JSON file. It sets the context for when to use it, but does not explicitly list alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_background_packMetis โ Install Background PackA
Install a knowledge background pack: fetch its documents and register the layer.
Without confirm=True this only reports what WOULD be downloaded โ a pack fetches
files from the internet, so the researcher should see the list and the hosts
before it runs.
Indexing is NOT run here; it happens on the next nightly background index, or
immediately via the Rebuild button on the Library surface.
Args:
slug: The pack's slug, from list_background_packs().
confirm: True to actually download and register.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses the network egress ('fetches files from the internet'), the dry-run-by-default semantics, and critically that indexing is NOT performed here but deferred to the nightly job or the Rebuild button. That deferred-side-effect disclosure is exactly the kind of behavioral context an agent cannot infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then the dry-run warning, then the indexing caveat, then an Args block. Every sentence is substantive, though the meaning of confirm is stated both in the body and in the Args entry, which is mild redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter install tool with no annotations, it covers what happens on each confirm value, where the slug comes from, where data originates (network), and what is deferred (indexing). An output schema exists so return values need no explanation, and nothing an agent needs to call this safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for both parameters: slug is identified as coming from list_background_packs(), and confirm is given precise semantics ('True to actually download and register', with the false branch described in the body). Nothing about the two parameters is left undetermined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ('Install a knowledge background pack') and immediately unpacks it into the two effects: fetching documents and registering the layer. It also names where the slug comes from (list_background_packs). It does not distinguish itself from the sibling export_background_pack, which is the only remaining ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit operating context: without confirm=True it is a dry run, and the researcher should review the list and hosts first because files come from the internet. That is a clear when-to-use rule plus a prerequisite. It does not discuss alternatives (e.g. list_background_packs or export_background_pack) beyond as a slug source, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kg_communityMetis โ KG CommunityA
Return the connected cluster around a given knowledge library note.
Performs BFS flood-fill from the given note up to `depth` hops,
returning all reachable notes grouped by distance. Useful for surfacing
related concepts when working on a specific topic.
Args:
note_path: Relative path from knowledge/library/ (e.g. 'disease-areas/[condition].md')
depth: Maximum hop distance to explore (default 2).
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| note_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It explains the BFS algorithm, depth parameter behavior, and output grouping by distance, but omits side effects or safety guarantees. This is sufficient for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a bold first line, followed by an algorithm explanation and clear parameter docs. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (context signal) and only two simple parameters, the description fully covers behavior and parameter usage, making it complete for practical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description provides comprehensive parameter documentation, including file path format and default depth value, adding essential meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Return the connected cluster around a given knowledge library note' with a specific verb and resource. It distinguishes from sibling tools like kg_paths and kg_memory_connections by its BFS flood-fill approach for community detection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context ('Useful for surfacing related concepts when working on a specific topic') but does not explicitly state when not to use or mention alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kg_index_memoryMetis โ KG Index MemoryA
Build a knowledge graph from memory entries, linking items by shared topics.
Scans memory_entries, episodic_memory, semantic_memory, and ideas,
extracts their topic tags, and creates bidirectional edges between
items that share topics. This makes cross-pollination between memory
layers discoverable via kg_memory_connections().
Takes no arguments. Safe to re-run (uses REPLACE semantics).
Returns:
Summary of nodes and edges indexed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description fully compensates by disclosing key behaviors: it takes no arguments, creates bidirectional edges, uses REPLACE semantics (safe to re-run), and returns a summary. It also explains the outcome (cross-pollination discoverable). No behavioral traits are hidden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences front-loaded with the main action, followed by specifics, safety note, and return value. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, an existing output schema (mentioned as summary), and no annotations, the description provides a complete picture of what the tool does, what it scans, its idempotency, and its purpose within the knowledge graph workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%. The description confirms 'Takes no arguments,' which is sufficient. Baseline 4 is appropriate since no additional parameter meaning is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool builds a knowledge graph from memory entries by linking shared topics. It lists the specific memory resources scanned and the output (bidirectional edges). This distinguishes it from sibling tools like kg_memory_connections and kg_paths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description notes that it is safe to re-run with REPLACE semantics, implying idempotent usage. However, it does not explicitly state when to use this tool over alternatives or when not to use it, though the purpose is clear enough in context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kg_index_notesMetis โ KG Index NotesA
Index .md notes into the knowledge graph: knowledge/library/ plus, if
configured, an external Obsidian vault. Parses YAML frontmatter related:
and [[wikilinks]] from note bodies into bidirectional note_links edges.
Configure a vault via METIS_OBSIDIAN_VAULT env var or `obsidian_vault:` in
user-config.yaml. Re-running is safe (REPLACE semantics).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does substantial work: it discloses what gets written (bidirectional note_links edges from YAML `related:` and `[[wikilinks]]`), where configuration comes from (METIS_OBSIDIAN_VAULT env var or `obsidian_vault:` in user-config.yaml), and that re-runs use REPLACE semantics. It stops short of saying whether notes removed from disk lose their edges, which would be the next useful disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with what is indexed, then the parsing behavior, then the configuration instructions. Nothing is padded, though the trailing comma/clause formatting is slightly disjointed rather than a single tight paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the description covers scope, side effects, configuration prerequisites, and idempotency โ enough for an agent to call it correctly. The only gap is lifecycle behavior for notes that disappear from disk after a prior index run.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero input parameters, so the baseline is 4. The description usefully explains the de facto configuration inputs (env var and user-config.yaml key) that a caller must set before invoking, which is real value beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ("Index") plus specific resource (".md notes") and destination (the knowledge graph), with the exact scopes named (knowledge/library/ and an optional Obsidian vault). It is clearly distinct from kg_index_memory by resource type, though it never names that sibling explicitly to rule it out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the operation itself and by the note that re-running is safe, but there is no explicit statement of when an agent should run this versus kg_index_memory, index_pending_layers, or scan_library, and no stated preconditions beyond vault configuration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kg_memory_connectionsMetis โ KG Memory ConnectionsA
Find memory entries connected to a given entry via shared topics.
Uses the memory_links graph built by kg_index_memory(). BFS flood-fill
from the given entry up to `depth` hops.
Args:
entry_type: Type of the starting entry: 'memory', 'episodic', 'semantic', or 'idea'.
entry_id: ID of the entry (entry_id for memory, numeric id for others).
depth: Maximum hop distance (default 2).
Returns:
Connected entries grouped by distance, with their shared topics.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| entry_id | Yes | ||
| entry_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the algorithm (BFS flood-fill from a starting entry up to depth hops) and the return format (entries grouped by distance with shared topics). It implies a read-only operation. While it omits performance characteristics or potential side effects, the provided details are sufficient for a query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence purpose, a sentence on the underlying graph and algorithm, then a bullet-point Args section. Every sentence adds value, and the critical purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and no annotations, the description covers the algorithm, all parameter semantics, and the return format (grouped by distance with shared topics). It is complete enough for a tool that traverses a memory graph, requiring no additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an Args section that explains the meaning and allowed values for entry_type ('memory', 'episodic', 'semantic', or 'idea'), entry_id, and depth (default 2). This adds crucial meaning beyond the schema, which only has names and types. With 0% schema description coverage, the description fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds memory entries connected via shared topics using BFS flood-fill. It identifies the starting entry and depth but does not explicitly differentiate from sibling tools like 'find_connections' or 'get_related_memories', though the algorithm mention (BFS, graph) provides implicit distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: when you need connected memories via shared topics, using the graph built by kg_index_memory(). However, it does not provide explicit guidance on when to use this tool over alternatives, nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kg_pathsMetis โ KG PathsA
Find connection paths between two knowledge library notes via BFS.
Args:
from_path: Relative path from knowledge/library/ (e.g. 'concepts/elimination-framework.md')
to_path: Target note path.
max_hops: Maximum path length (default 4).
Returns all paths found up to max_hops, ranked by length.
| Name | Required | Description | Default |
|---|---|---|---|
| to_path | Yes | ||
| max_hops | No | ||
| from_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the algorithm (BFS), the max_hops parameter, and that results are ranked by length. With no annotations, this provides useful behavioral context. It does not mention performance characteristics or what happens when no path exists, but the core behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences plus parameter list. The main purpose is front-loaded, and every sentence adds value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists (though not detailed), the description adequately covers input parameters and behavior. It mentions the returned result (paths ranked by length). Minor gaps: no mention of error handling or path format, but sufficient for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description fully compensates for the 0% schema coverage by explaining each parameter: from_path includes an example relative path, to_path is described concisely, and max_hops states its default and purpose. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool finds connection paths between two knowledge library notes using BFS. The verb 'find' and resource 'connection paths' are specific. However, it does not differentiate from similar sibling tools like 'find_connections' or 'kg_memory_connections', which could cause confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as 'search_library' or 'find_connections'. The description lacks context about prerequisites or typical use cases, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
library_coverageMetis โ Library CoverageA
What fraction of the library can Metis actually QUOTE?
The honest denominator for every grounding claim. There are three states, not
two: verified against text, known-but-unquotable (metadata only, no indexed
full text), and genuinely absent. Without this number, "not found in your
corpus" reads as "not in your literature" when it may only mean "not indexed"
โ and a verification rate reported against an unknown denominator is itself
the kind of overclaim this whole layer exists to prevent.
Returns:
Per-layer document and chunk counts, plus the quotable fraction of the
reference library.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does so well conceptually: it explains the three coverage states and warns that an unknown denominator can cause overclaiming. It also summarizes the return shape, though it does not explicitly state that the operation is read-only or whether it has 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core question and then explains why the denominator matters before listing return contents. It is slightly narrative and could be tightened, but the framing earns its place by preventing a common misinterpretation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter coverage tool with an output schema, the description provides enough conceptual context to call it correctly and interpret the quotable fraction. It does not need to explain every return field, and the output schema covers structural details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics to clarify. The baseline for a zero-parameter tool is 4, and the description appropriately spends no time on non-existent arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as the library's quotable coverage, framed as 'what fraction of the library can Metis actually QUOTE?' and 'the honest denominator for every grounding claim.' It is specific about the metric's meaning but does not explicitly differentiate it from sibling tools like get_library_stats or get_pdf_index_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when the number matters: before making grounding or 'not found' claims, so an agent avoids treating 'not indexed' as 'not in the literature.' It does not name alternatives or state when not to use this tool, leaving some routing inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_claude_desktopMetis โ Link Claude DesktopA
Register a Metis project in Claude Desktop's project list.
Args:
project_id: The Metis project ID to register.
write_config: If True, write directly to Claude Desktop config.
If False, return instructions for manual setup.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| write_config | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the core behavior (registering a project) and conditional behavior based on the 'write_config' parameter (write directly vs. return instructions). However, it does not mention potential side effects, permissions required, or what happens if the project ID already exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise with no filler. It opens with a clear purpose statement followed by a structured argument list. Every sentence adds value, and the formatting is easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two parameters and an output schema (not shown but present), the description is mostly complete. It explains both parameters and the conditional output. Missing minor details like error states or idempotency, but adequate for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the schema provides no parameter descriptions. The description adds complete semantics: 'project_id' is identified as 'The Metis project ID to register' and 'write_config' is explained with its conditional effect. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Register a Metis project in Claude Desktop's project list.' The verb 'register' combined with the resource 'Metis project' and target 'Claude Desktop's project list' provides a specific and unambiguous purpose, distinguishing it from other project-related tools like create or load.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool over alternatives like 'connect_project_folder' or 'create_project'. It provides basic parameter explanations but lacks context on prerequisites, expected usage scenarios, or conditions where manual setup is preferred. Usage is implied but not clearly differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_memoriesMetis ยท Memory Curator โ Link MemoriesA
Create a typed relationship between two memory entries.
Links two entries across any memory layers โ episodic, semantic, procedural,
memory (palace), or knowledge. This builds a lightweight knowledge graph on
top of the existing memory layers, enabling graph traversal during recall.
Example relations: 'informed_by', 'contradicts', 'elaborates', 'derived_from',
'supersedes', 'related_to', 'supports', 'led_to'.
Args:
source_layer: Layer of the source entry ('episodic', 'semantic',
'procedural', 'memory', 'knowledge').
source_id: Row ID of the source entry in its layer.
target_layer: Layer of the target entry.
target_id: Row ID of the target entry in its layer.
relation: Relationship type (e.g. 'informed_by', 'contradicts').
note: Optional free-text note explaining the relationship.
Returns:
Confirmation of the created link, or an error if it already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| relation | Yes | ||
| source_id | Yes | ||
| target_id | Yes | ||
| source_layer | Yes | ||
| target_layer | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool creates a link, returns confirmation or error if the link already exists, and builds a knowledge graph. It does not specify permission requirements, existence checks on source/target, or directionality, but these are relatively minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a concise purpose statement, context about layers and knowledge graph, example relations, then a clean Args list, and finally return value. Every sentence adds value, and it is front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, no annotations, has output schema), the description covers essential aspects: layers, relation types, parameter explanations, return behavior. No further details (e.g., rate limits) are necessary for a simple link creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the tool description provides a detailed Args section explaining each parameter (source_layer, source_id, etc.), including example relation types. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a typed relationship between two memory entries,' specifying the verb (Create), resource (typed relationship), and context (memory entries across episodic, semantic, etc., layers). It distinguishes from siblings like 'remember' or 'store_episodic_memory' by focusing on linking rather than storing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool's purpose and the layers involved, but does not explicitly state when to use it vs. alternatives or when not to use it. No exclusions or alternative tools are mentioned, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsMetis โ List AccountsB
All accounts (work, personal), every project with the account it uses, and accounts or sites still to be retired.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does add real content context โ that results span accounts, project-to-account mappings, and retirement candidates โ which is beyond the title. It does not explicitly confirm read-only behavior or state permissions/scope, though 'list' strongly implies a safe read and an output schema documents the return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence that front-loads the primary resource and then enumerates secondary content. The phrase 'accounts or sites still to be retired' is slightly oblique but earns its place by explaining a non-obvious return category.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with an output schema, the description covers the content envelope well enough to invoke correctly. The one gap is sibling differentiation against which_account, which matters given the crowded toolset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema coverage is 100%, so there is nothing for the description to disambiguate. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the concrete contents returned: all accounts (work and personal), each project paired with the account it uses, and accounts/sites pending retirement. That is more than the name 'list_accounts' conveys, so an agent understands it is an inventory/overview tool. It stops short of distinguishing itself from the sibling 'which_account', leaving the boundary unclear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to call this versus alternatives such as which_account or get_user_profile, and no prerequisites mentioned. The agent must infer from the name alone that this is the 'see everything at once' call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_background_packsMetis โ List Background PacksA
List the knowledge background packs available to install, and what is already installed.
A pack is a curated set of open-access documents for a subject area. Installing one downloads those documents to your machine and indexes them so questions can be grounded in them.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does disclose meaningful behavioral context โ that packs are curated open-access document sets and that installation downloads and indexes files locally โ but that side-effect disclosure pertains mostly to the install sibling; it never states that this tool itself is a safe read-only listing or how results are ordered/limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and result sets. The pack-definition and install-explanation sentences earn their place by helping an agent decide between listing and installing, though the install mechanics are slightly tangential for a list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with an output schema, the description supplies the one thing the schema cannot: what a pack actually is. Nothing critical seems missing, though noting that installed vs available are distinguished in the response would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and there is no parameter semantics to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (knowledge background packs) and clarifies the two result categories: available to install and already installed. It does not name the closely related sibling install_background_packs or export_background_pack, so differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the second paragraph explains what installing a pack does, which suggests calling this before install_background_packs, but there is no explicit 'use this when' or 'call install_background_packs to install' statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_backupsMetis โ List BackupsA
List all backup files with size, age, and checksum availability.
Args:
backup_dir: Directory to scan. Defaults to metis/system/backups/.
Returns JSON array, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| backup_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must stand alone. It discloses return format (JSON array, newest first) and default directory, but lacks explicit statements about safety (e.g., read-only) or potential side effects, which is acceptable for a simple list operation but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus argument breakdown. No fluff, front-loaded with purpose. Efficient use of space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter) and presence of an output schema, the description adequately covers purpose, parameters, and return structure (JSON array, newest first).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description adds meaning by explaining the purpose of backup_dir and its default value. This compensates well for the sparse schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists backup files with size, age, and checksum availability. The verb 'list' and resource 'backup files' are specific and distinct from sibling list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus other list tools or alternatives. The description only states what it does without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_basketMetis โ List BasketA
List files in the Metis basket (legacy & inspiration documents).
The basket is a flat holding area for any document kept as a reference for future work. The private/ subfolder is NEVER listed โ it contains personal or patient data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that private/ subfolder is never listed, adding behavioral context beyond a basic read operation. No annotations exist, so description carries full burden; it could mention read-only nature explicitly but does not mislead.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, each purposeful: first states core function, second adds critical exclusion. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completely describes a simple list tool with no params and an output schema; explains the basket concept and privacy constraint, sufficient for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist in the schema, and schema coverage is 100%. Baseline of 4 applies; description adds no param info as none required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states specific verb+resource ('List files in the Metis basket') and distinguishes from sibling tools like 'list_folder' by defining the basket's role (legacy & inspiration documents) and explicitly excluding the private/ subfolder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for listing basket files and notes the exclusion of private data, but does not explicitly compare to other list tools or provide when-not scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_brainstorm_sessionsMetis โ List Brainstorm SessionsB
List recent brainstorm sessions with title, turn count, and status.
Args:
limit: Maximum sessions to return (default 20).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not state whether the tool is read-only, has side effects, or any behavioral constraints. Minimal information beyond the basic listing action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences plus parameter doc. No wasted words, front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with an output schema, the description adequately covers the return fields and parameter. Could mention what 'recent' means or edge cases (e.g., empty list), but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by explaining the 'limit' parameter (maximum sessions, default 20). This adds meaningful context beyond the schema's type/default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'brainstorm sessions', and specifies the fields returned (title, turn count, status). It distinguishes from siblings like 'get_brainstorm_session' but doesn't explicitly differentiate from 'list_recent_sessions'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'list_recent_sessions' or 'get_brainstorm_session'. Lacks context on prerequisites or filtering scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contextsMetis โ List ContextsA
List all user contexts (general + specialist) with active status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It only states the action and result (list contexts with active status) but does not disclose that this is a read-only, idempotent operation, or any potential side effects, rate limits, or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 8 words, front-loading the key information. Every word is purposeful with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a zero-parameter tool with an output schema, the description is complete. It states the action and the result (list all contexts with active status), which is sufficient for an agent to understand invocation and basic expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters, so baseline is 4. Description correctly implies no parameters are needed and adds no superfluous parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'List' and the resource 'user contexts', specifying both general and specialist types and that active status is included. This distinguishes it from sibling tools like 'get_context' or 'toggle_context' by implying a full listing rather than a single context or toggling action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. There is no mention of when not to use it or when to prefer sibling tools like 'get_context' or 'toggle_context'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_folderMetis โ List FolderA
List files in a folder.
Args:
folder_path: Absolute path to the folder.
pattern: Glob pattern to filter files (e.g. "*.R", "*.md"). Default: all files.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | * | |
| folder_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It only states the action without disclosing side effects, limitations (e.g., recursion, size limits), permissions, or read-only nature. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with a clear purpose statement. The 'Args' section is minimal and directly adds value. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool purpose and the existence of an output schema, the description covers input parameters adequately. However, it lacks behavioral details like recursion behavior, but is otherwise complete for a basic file-listing operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description provides explicit descriptions for both parameters (folder_path and pattern), including the pattern format with examples. This adds meaningful context beyond the schema's default value and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List files in a folder' with a specific verb and resource. Among many sibling tools like list_backups or list_basket, list_folder is distinct in its purpose of listing files in a file system folder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. No exclusions, prerequisites, or context for when it is appropriate to call list_folder over other listing or scanning tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_generated_imagesMetis โ List Generated ImagesA
List recently generated images in the PKM.
Reads from {pkm_root}/outputs/images/ directory.
Returns filename, date, and prompt (from JSON sidecar if present).
Args:
limit: Maximum number of images to return (default 20, newest first).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavior. It indicates a read operation (reads from directory) and briefly describes the output (filename, date, prompt). However, it does not disclose sorting order beyond 'newest first' in the param, pagination, or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with three sentences, each adding value. It front-loads the purpose and efficiently covers directory, output fields, and parameter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with one parameter and an output schema, the description covers the main points. However, it could mention sorting order explicitly and whether results are paginated beyond the limit. It is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the limit parameter; the description adds essential meaning: 'Maximum number of images to return (default 20, newest first).' This fully compensates for the lack of parameter documentation in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List recently generated images in the PKM' and specifies the directory path, making the purpose unambiguous. It is distinct from sibling listing tools like list_folder by focusing on generated images.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving recently generated images, but does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_knowledge_databasesMetis ยท Librarian โ List Knowledge DatabasesA
List all knowledge databases (layers) registered in Metis.
Shows built-in databases (PH background, HAT specialist, Epi methods) and any custom databases the user has created. Reports layer, document count, chunk count, and last build date.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It adequately describes what the tool returns (built-in and custom databases, fields like layer, document count, etc.), but does not mention any potential side effects, authentication needs, or rate limits. For a listing tool, this is sufficient but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short paragraphs. It front-loads the main action and resource, and every sentence adds necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an output schema present, the description provides sufficient context about what databases are listed and what fields are included. It is complete for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so schema coverage is 100%. The description adds meaning by detailing the types of databases included and the specific fields reported, which is valuable beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all knowledge databases (layers) in Metis, mentioning specific built-in and custom databases. It distinguishes from sibling tools like create_knowledge_database and build_pdf_knowledge_db by focusing on listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the purpose is clear, there is no explicit guidance on when to use this tool versus alternatives. The description implies its use for viewing the list, but no when-not or alternative tool mentions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_outputsMetis โ List OutputsC
List what Metis has produced, newest first.
Exists because a file written by a tool is invisible to a chat client โ the researcher has no way to see what was created without going to the folder.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| subdir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses only ordering (newest first); it says nothing about scope (which folder/output area is listed), whether subdirectories are traversed, caps on results, or permissions. That leaves the mutating/read nature and limits unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded verb statement followed by a brief motivating sentence โ nothing is padded. The second sentence is justification rather than operational detail, but it is short and does add context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, but for a two-parameter listing tool with no annotations the description omits the scope of the listing and all parameter meaning. An agent can call it, but cannot predict what limit/subdir do or which outputs appear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for two parameters (limit, subdir) and the description mentions neither. 'Newest first' hints at recency ordering but does not explain that limit truncates the list or that subdir scopes it, so the schema gap is not compensated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb (list) plus the resource (what Metis has produced, i.e. files written by tools) and specifies ordering (newest first). The second sentence clarifies what 'outputs' means, though it does not distinguish this from nearby siblings such as list_generated_images, list_folder, or list_basket.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The rationale sentence implies the use case โ surfacing tool-created files that a chat client cannot otherwise see โ but there is no explicit when-to-use/when-not guidance and no sibling alternative named. An agent must infer that open_output reads a listed item and list_folder covers general folders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_memoryMetis ยท Memory Curator โ List Recent MemoryA
Return the n most recent memory entries (default 10).
Useful at the start of a session to recall what was last worked on.
Args:
n: Number of entries to return (default 10).
| Name | Required | Description | Default |
|---|---|---|---|
| n | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It implies a read-only operation and recency ordering, but does not explicitly state read-only nature, permissions, or memory scope (global vs session). Adequate but could be more thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus arg detail. Every sentence adds value. Purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, and parameter. Output schema exists to define return structure. Lacks specificity on memory scope (e.g., session vs persistent), but sufficient for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage for parameter 'n'. Tool description fully explains 'Number of entries to return (default 10)', adding essential meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Return the n most recent memory entries' with a clear verb and resource. The use case 'start of a session' distinguishes it from search or topic-specific siblings like search_memory or get_topic_memory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly suggests use 'at the start of a session to recall what was last worked on'. However, no explicit when-not-to-use or alternatives are mentioned, though sibling differentiation is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_sessionsMetis ยท Memory Curator โ List Recent SessionsA
List the most recent session summaries, newest first.
Returns the rolling history of saved session summaries so you can pick up
where a previous conversation left off or review recent decisions and
topics. Each entry carries its summary, key topics, and decisions.
Complements search_session_memory (keyword search) and
save_session_summary (which writes these rows).
Args:
limit: Maximum number of summaries to return, most recent first
(default 20).
Returns:
A list of session-summary dicts (id, session_id, summary, key_topics,
decisions, created_at); a single-item list with an "error" key on failure.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the return format (list of dicts with specific keys) and error case (single-item error list). However, it does not mention any additional behavioral traits like rate limits, authorization requirements, or side effects. For a simple list operation, this is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at around 150 words, with clear sections (purpose, usage, args, returns). Every sentence adds value, and there is no repetition of schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (one optional parameter), no annotations, and an output schema, the description is complete. It covers purpose, usage context, parameter semantics, return structure, and error handling. It also references sibling tools for comparison.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter is 'limit,' with type integer, default 20. The description adds meaning: 'Maximum number of summaries to return, most recent first (default 20).' Since schema description coverage is 0%, the description fully compensates by explaining default behavior and ordering.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List the most recent session summaries, newest first.' It specifies the verb (list), resource (session summaries), and ordering (newest first). It distinguishes from sibling tools by mentioning complementary tools like search_session_memory and save_session_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool, such as 'to pick up where a previous conversation left off or review recent decisions and topics.' It also notes that it complements search_session_memory and save_session_summary, providing context for selection. While it lacks explicit when-not-to-use guidance, the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_research_entitiesMetis โ List Research EntitiesA
List all entities in the research timeline with their claim count and last update.
Use this to get an overview of what topics have tracked beliefs, before
drilling into a specific entity with query_research_timeline().
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that it lists entities with claim count and last update, which is appropriate for a read-only list operation. However, it does not mention potential traits like pagination, performance, or safety, but given the simplicity of the tool, it is still transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with no waste. The first sentence states the core functionality, and the second provides usage guidance. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (0 params, output schema exists), the description provides enough context: what it lists (entities, claim count, last update) and how it fits into a workflow (overview before drilling). No additional information is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so schema coverage is 100%. The description does not add parameter info because none exist. According to guidelines, 0 parameters yields a baseline of 4, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'list', the resource 'entities in the research timeline', and the included fields 'claim count and last update'. It clearly distinguishes itself from the sibling tool 'query_research_timeline' by positioning as an overview tool before drilling into specifics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use this to get an overview of what topics have tracked beliefs, before drilling into a specific entity with query_research_timeline()'. It names an alternative and implies when not to use (when you need detail on a specific entity).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_supported_formatsMetis ยท Data Analyst โ List Supported FormatsA
List supported dataset formats and installed library versions.
Returns a JSON object with supported extensions, read/write capabilities, and the versions of pandas, openpyxl, and pyreadstat installed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adequately discloses behavior: it returns a JSON object with specified fields. It does not mention side effects, but none are expected for a read-only list tool. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no unnecessary words. The first sentence front-loads the action and subject, making it efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description covers all essential aspects: what is listed and the return structure. No further context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and schema coverage is 100%. The description adds value by detailing the return format (extensions, capabilities, versions), which is absent from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists supported dataset formats and library versions, with specific verb 'List' and resource. It differentiates from sibling tools like get_library_stats by focusing on formats and versions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide when to use this tool versus alternatives or any exclusions. Usage is implied as a straightforward informational listing, but explicit context is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesMetis โ List TemplatesA
List the researcher's own templates stored in Metis โ posters, slide decks, letters.
Call this before making a poster, a presentation or a formal document. The
templates are kept inside Metis (a private, machine-local folder), so never
ask the researcher where a template is or to attach it: it is already here,
and create_poster / create_presentation / fill_document_template find it by
name or use the right one by default.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses that templates are private and machine-local, and that downstream tools find them by name or use defaults; this is useful context. It does not describe ordering or empty-list behavior, but the output schema covers return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by when-to-use and important local-storage context. Every sentence adds useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter list tool with an output schema, the description gives enough context to invoke it correctly: what it returns, when to call it, where templates live, and how downstream tools consume them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. There are no parameter meanings to clarify beyond the schema, which correctly has an empty object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: list the researcher's own templates stored in Metis, with concrete examples (posters, slide decks, letters). It is clearly distinguishable from downstream creation tools like create_poster and create_presentation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call it before making a poster, presentation, or formal document. It also clarifies that templates are already local and should not be requested from the researcher, which is a strong usage-boundary instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tool_groupsMetis โ List Tool GroupsA
List the tool groups that can be loaded on demand, with how many are parked.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the tool lists tool groups and includes a count of parked ones, adding behavioral context beyond a simple 'list'. It does not mention side effects, but for a read-only list this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that conveys the core functionality without any unnecessary words. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an existing output schema, the description fully captures what the tool does: listing tool groups with parked counts. No further context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, and schema description coverage is 100%. The baseline for zero parameters is 4; the description adds no additional parameter info, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'list' and the resource 'tool groups that can be loaded on demand'. It adds a specific detail about counting parked groups, which distinguishes it from siblings like 'load_tool_group'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives (e.g., load_tool_group). While the purpose is clear, no guidance on conditions or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_project_contextMetis โ Load Project ContextA
Load the full context block for a project โ ready to paste into Claude.
Returns the project's context_doc, recent session history, and next step
formatted as a structured brief. Use this at the start of any work session
on a specific project so Claude has full background.
Args:
project_id: The project slug (e.g. "hat-dashboard", "article-1").
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the tool returns context_doc, session history, and next step. However, it does not disclose whether the tool is read-only, requires permissions, or has side effects. The description is truthful but lacks depth regarding behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: two sentences of purpose and one for the parameter. Every sentence adds value, and critical info is front-loaded. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema, the description covers all necessary aspects: purpose, return values, usage timing, and parameter details. It is complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds a meaningful docstring for the single parameter, including a format example. Schema coverage is 0%, so the description compensates well by explaining the parameter's purpose and expected value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool loads the full context block for a project, specifying the verb 'load', the resource 'project context', and the purpose 'ready to paste into Claude'. It distinguishes from sibling context tools by focusing on project-specific context with a structured brief.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends use at the start of any work session on a specific project. Provides clear context but does not mention when not to use or list alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_tool_groupMetis โ Load Tool GroupA
Load every tool in a named group at once (see list_tool_groups for names).
Use this when you know you'll do several related operations โ e.g. group
"data" for a full dataset-cleaning session, "specialist" for DHIS2 work.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the entire burden. It states 'Load every tool' but does not explain what 'load' entails (e.g., side effects, resource usage, reversibility). This is insufficient for behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both essential. The first sentence states the core action, the second provides usage guidance and examples. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema (not shown), the description is minimally complete. It covers purpose and usage, but lacks details on what happens after loading. Adequate but could be improved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It describes the 'group' parameter as a 'named group' and points to list_tool_groups for possible values, but does not specify format or constraints. Adequate but not comprehensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Load every tool in a named group at once') and provides concrete examples (group 'data', 'specialist'). It references sibling tool 'list_tool_groups' for finding group names, aiding differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises use for multiple related operations and gives concrete example scenarios. It does not explicitly state when not to use, but the context and reference to list_tool_groups provide sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_agent_runMetis โ Log Agent RunA
Log a completed agent run to the database for audit and dashboard tracking.
Records that an agent did a piece of work so it appears in the dashboard's
Agents view and in get_agent_runs. Call it after writing an output file, per
the output contract. When a session_id is supplied it also writes a "result"
event to session_events, closing the loop for /metis pipeline calls.
Args:
agent_slug: Slug of the agent that performed the work (e.g. "librarian").
task_summary: Brief description of what the agent did.
input_path: Path to the input file(s), if any (default empty string).
output_path: Path to the output file(s) produced, if any (default empty).
complexity: The run status stored in the `status` column โ typically
"completed", "partial", or "failed" (default "standard").
input_tokens: Input tokens consumed, for cost tracking (default 0).
output_tokens: Output tokens produced, for cost tracking (default 0).
model: Model identifier used, e.g. "claude-sonnet-4-6" (default empty).
session_id: Pipeline session ID from session_bootstrap(); when set, also
records a result event in session_events (default empty string).
Returns:
A confirmation message naming the agent and task that were logged.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | ||
| agent_slug | Yes | ||
| complexity | No | standard | |
| input_path | No | ||
| session_id | No | ||
| output_path | No | ||
| input_tokens | No | ||
| task_summary | Yes | ||
| output_tokens | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It discloses the logging action, dashboard appearance, and side effect of writing a session event when session_id is present. However, it does not specify idempotency, error behavior, or authentication requirements, leaving some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with separate sections for purpose, usage, parameters, and returns. Each sentence contributes value, though slightly wordy. Front-loaded with the main action and purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (9 params, no annotations, output schema present), the description covers purpose, when to call, parameter details, return value, and side effects. It lacks error conditions and exact return format, but the output schema may fill those gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the documentation-style parameter explanations add significant meaning, such as clarifying that 'complexity' maps to status values and that 'session_id' triggers an additional event. Some defaults (e.g., 'standard' for complexity) are slightly inconsistent with the listed statuses, but overall adds value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool logs a completed agent run for audit and dashboard tracking, with a specific verb ('Log') and resource ('agent run'). It distinguishes from siblings like get_agent_runs and other logging tools by emphasizing the 'completed run' context and integration with the dashboard and session events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to call it 'after writing an output file, per the output contract' and explains the conditional behavior when session_id is supplied. No explicit exclusions or alternatives are provided, but the context is clear enough for proper use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_consent_eventMetis ยท Data Guardian โ Log Consent EventA
Append a row to the consent_ledger table.
Call this whenever an agent processes data so there is an audit trail
of what was processed, when, and under what classification.
Args:
action: Short description โ e.g. 'scan_document', 'anonymize_patient_data'.
data_classification: 'PUBLIC' | 'INTERNAL' | 'CONFIDENTIAL' | 'SENSITIVE'.
agent_slug: Which agent performed the action.
notes: Free-text context.
session_id: Current session identifier.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| action | Yes | ||
| agent_slug | No | ||
| session_id | No | ||
| data_classification | No | PUBLIC |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It states it appends a row (write operation) and lists parameters, but lacks details on side effects, idempotency, permissions, or error handling. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: one sentence for purpose, one for usage, and a clear Args block. No wasted words, front-loaded, and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, the description needn't detail return values. It covers purpose, usage, and all parameters. Slight gap: no mention of success/failure response, but overall complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no descriptions in schema properties), but the description includes an Args block explaining each parameter: action, data_classification (with enum list), agent_slug, notes, session_id. This adds significant value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool appends a row to the consent_ledger table, providing an audit trail for agent data processing. It uses specific verbs and resource, distinguishing it from siblings like get_consent_ledger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this whenever an agent processes data so there is an audit trail,' giving clear when-to-use guidance. It doesn't mention alternatives or when-not-to-use, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_spanMetis โ Log SpanA
Record a completed span in one call (no separate start/end needed).
Useful for logging retrospective timing data (e.g. 'that DB query took 42ms').
Args:
name: Span label.
duration_ms: How long the work took in milliseconds.
kind: 'internal' | 'tool' | 'agent' | 'llm'. Default: 'internal'.
session_id: Session identifier. Optional.
run_id: FK to agent_runs. Optional.
parent_id: Parent span_id. Optional.
status: 'ok' | 'error'. Default: 'ok'.
tags: JSON string of metadata. Optional.
Returns the new span_id.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | internal | |
| name | Yes | ||
| tags | No | ||
| run_id | No | ||
| status | No | ok | |
| parent_id | No | ||
| session_id | No | ||
| duration_ms | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses that it records a span and returns a span_id. Does not cover side effects, idempotency, or storage behavior. Adequate but could be more comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured. Starts with a clear summary sentence, then lists parameters in a readable format. No unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the main use case and parameter details. Mentions return value (span_id) despite output schema existing. Could discuss error handling or constraints, but overall complete for a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by listing all 8 parameters with clear one-line explanations. Adds significant meaning beyond the schema's titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it records a completed span in one call, distinguishing from a start/end two-call approach. The sibling tools include start_span and end_span, so the description effectively differentiates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context for when to use (retrospective timing data) and implies alternative of separate start/end calls. Does not explicitly list when not to use, but the single-call distinction is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_brief_readMetis ยท News Radar โ Mark Brief ReadA
Mark a briefing as read, so its story threads go quiet in the next ones.
This is what stops the same long-running story leading every morning. Metis
only puts a thread on cooldown once the brief that carried it was actually
marked read โ a brief that was generated but never read delivered nothing, so
it must not silence anything. Call this when you have delivered a briefing to
the researcher in conversation, or when they say they have read it.
Args:
date: YYYY-MM-DD of the brief. Empty = today.
period: "daily", "weekly" or "catchup". Default "daily".
Returns:
Confirmation, plus which threads that brief had covered.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| period | No | daily |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load and does disclose the meaningful side effect: story threads go on cooldown for the *next* briefs, and this is the only mechanism that silences them. It does not cover idempotency (calling twice) or what happens if no brief exists for the given date, so it falls short of a full behavioral contract.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its effect, then the rationale, then params. The middle paragraph is slightly redundant with the first line, but it carries the non-obvious invariant about unread briefs, so it earns most of its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Both parameters, the default behaviors, and the return value ('confirmation, plus which threads that brief had covered') are documented, so an agent can call it and interpret the result. Missing only edge-case behavior such as an unknown date or an already-read brief.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates: date is 'YYYY-MM-DD of the brief. Empty = today' and period is 'daily, weekly or catchup. Default daily.' That is exactly the enum values and default semantics the schema leaves undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Mark a briefing as read') plus the downstream effect ('its story threads go quiet'). The resource is clearly the brief itself, which separates it from the sibling mark_publications_read and from get_news_briefs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit trigger conditions: 'when you have delivered a briefing to the researcher in conversation, or when they say they have read it.' It also supplies the inverse constraint โ a brief that was generated but never read must not silence anything โ which tells the agent when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_publications_readMetis ยท News Radar โ Mark Publications ReadA
Mark new publications as read by their IDs.
Clears items from the "new publications" queue once the user has seen them,
stamping each with a read time so they stop resurfacing. Use the IDs
returned by get_new_publications.
Args:
ids: List of new_publications row IDs to mark as read; an empty list is
a no-op.
Returns:
A confirmation message with the count of publications marked as read.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool clears items from the 'new publications' queue, stamps a read time, and that an empty list is a no-op. These behavioral insights are valuable beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a single sentence plus structured Args and Returns sections. Every sentence adds value. It front-loads the core purpose and efficiently covers necessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (1 required param, output schema exists), the description covers purpose, usage context, parameter semantics, and return value. It ties to the sibling tool 'get_new_publications' and explains the effect. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 1 parameter 'ids' with no description (0% coverage). The description adds meaning: 'List of new_publications row IDs to mark as read; an empty list is a no-op.' This explains source of IDs and special behavior, compensating for the schema's lack of documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Mark' and resource 'new publications', and specifies it operates by IDs. It explains the effect: clearing from the queue and stamping read time. It distinguishes from sibling 'get_new_publications' by being the counterpart to mark items as read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explicitly says 'Use the IDs returned by get_new_publications', providing clear context for when to use this tool. It implies the workflow: get new publications then mark them read. It doesn't mention when not to use or alternatives, but the context is sufficient for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
metis_doctorMetis โ Metis DoctorA
Check everything Metis needs on this computer, without changing anything.
The install doctor's report: the computer (version, disk, internet), Metis's
own programs (Python, tools, search engine, search model), each AI app it
connects to (Claude Desktop, Claude Code, VS Code, Cursor) and whether
Metis starts from that app's settings, the dashboard and its morning scans,
the scheduled tasks, and the data (database, specialists, profile, updates).
To also repair, use verify_install. Tell the person the result in plain words.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 clearly discloses the read-only, non-mutating nature ('without changing anything') and enumerates the diagnostic surface (OS, Python, integrations, scheduled tasks, data). It does not disclose runtime cost, network access, or failure behavior, but the key safety trait is explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the read-only guarantee, then a compact inventory of what is checked. The final sentence ('Tell the person the result in plain words') is useful output guidance but slightly extraneous to tool selection; the whole thing is still tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers scope, safety, and the repair alternative. It could add what an unhealthy result looks like or whether scans are slow, but for a zero-parameter diagnostic it is substantially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description correctly implies a no-argument invocation and requires no parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Check everything Metis needs on this computer') and immediately scopes the check with 'without changing anything'. It enumerates the exact areas inspected and names the sibling it is not: 'To also repair, use verify_install'. An agent can distinguish it from verify_install 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use this for the install doctor's report and use verify_install when repair is also needed. It does not state when-not-to-use or preconditions (e.g., first-run only), which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mine_referencesMetis ยท Librarian โ Mine ReferencesA
Mine reference lists of specific articles.
Fetches references for one or more DOIs (comma-separated) via CrossRef,
checks against your Zotero library, and reports what's missing.
Args:
dois: Comma-separated list of DOIs to mine.
label: Optional label for the output file.
| Name | Required | Description | Default |
|---|---|---|---|
| dois | Yes | ||
| label | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 discloses that it fetches references via CrossRef, checks against Zotero, and reports missing items. However, it does not mention potential side effects, rate limits, authentication requirements, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with only four lines. It is front-loaded with the main purpose, and each subsequent sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description does not need to explain return values. It covers inputs and process adequately. A brief mention of output content could enhance completeness but is not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning. It describes 'dois' as a comma-separated list of DOIs and 'label' as an optional output file label, adding practical context beyond the schema's type and title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (mine/fetches/checks/reports), resource (reference lists of specific articles), and specific actions (via CrossRef, against Zotero library). It distinguishes this tool from siblings like search_library or scan_literature by focusing on mining references from DOIs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching references from DOIs and checking against Zotero, but does not explicitly state when to use this tool vs alternatives or provide exclusions. No guidance on when not to use it is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nature_briefingMetis โ Nature BriefingB
The latest Nature Briefing edition, as text.
kind: nature-daily ยท nature-ai ยท nature-transl ยท nature-anthro ยท nature-cancer
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | nature-daily |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden, and it discloses only that the result is 'as text'. It says nothing about whether the briefing comes from a remote fetch, what happens when no edition exists for a kind, or whether results are cached โ all relevant for a network-backed read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short blocks, with the core purpose front-loaded and the enum values immediately after. The 'kind:' line is slightly raw in formatting but every token earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape needn't be explained, and the parameter values are covered. What's missing is failure behavior and edition-availability semantics, which matter for a tool whose whole point is returning 'the latest' of something.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the single parameter is undocumented in the schema, so the description has to compensate โ and it does by enumerating all five valid `kind` values (nature-daily, nature-ai, nature-transl, nature-anthro, nature-cancer). It misses the default ('nature-daily') and any note on case or fallback, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: 'The latest Nature Briefing edition, as text.' The verb is implicit ('fetch/return') but the resource and recency ('latest') are unambiguous. It does not explicitly distinguish itself from the closest sibling, scan_nature_briefings, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus scan_nature_briefings or get_news_briefs, and no noted prerequisites. Usage must be inferred from the name and the 'latest' qualifier alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
next_discovery_tipMetis โ Next Discovery TipA
Return ONE earned, not-yet-shown feature tip for the current moment (or '').
Call at natural trigger moments (user starts a project, writes R code, builds a
library, asks a knowledge question, handles a datasetโฆ). Pass `context` as
comma-separated trigger tags. Returns at most one tip โ and ONLY for a feature the
user does NOT already use (earned discovery), respecting the off/snooze/power-user
settings and a frequency cap (โค1 tip / 20 min, โค3 / day). Records it so it never
repeats. Returns '' when nothing should be shown. Weave the tip in naturally.
Args:
context: comma-separated trigger tags describing what the user is doing.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses rate limiting (โค1 tip/20 min, โค3/day), respects user settings (off/snooze/power-user), records to avoid repeats, and returns empty string when nothing to show. Does not mention side effects but operation is read-like and non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is about 120 words, front-loads purpose, and every sentence adds value. Minor redundancy in emphasizing 'earned discovery' but overall efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 optional param, no required, output schema exists), the description covers behavior, return values, when to call, and constraints. No additional information needed; output schema handles return value details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one optional parameter 'context' with no description in schema (0% coverage). Description explains it as 'comma-separated trigger tags describing what the user is doing', adding essential meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states that it returns one earned, not-yet-shown feature tip or empty string. Verb 'return' and resource 'feature tip' are specific. No sibling tools with similar purpose exist, so it is well-distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description lists explicit natural trigger moments (e.g., user starts a project, writes R code) and instructs to pass context as comma-separated tags. Does not explicitly state when not to use, but the context implies limited applicability. No alternative tool is mentioned, but no sibling tool serves a similar function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_outputMetis โ Open OutputA
Open files Metis created (decks, posters, letters, figures) on the researcher's screen.
Call this at the end when the researcher asks to see, show or open what was
made. Each file opens in its own Windows application (PowerPoint, Word, the
browser). Only files under outputs/ can be opened.
Args:
paths_to_open: One or more paths as returned by the tool that wrote them
(e.g. "outputs/presentations/2026-10-14_x.pptx"), separated by
newlines or commas. Windows paths are accepted too.
| Name | Required | Description | Default |
|---|---|---|---|
| paths_to_open | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses the side effect (each file launches in its own Windows application such as PowerPoint, Word, or the browser) and a path restriction. It omits failure behavior for missing or non-existent paths and whether the call blocks until the app opens.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first line, and the args block adds only information the schema lacks. The parameter name is restated in the args header, a small redundancy, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation; the description covers what the tool does, when to call it, where paths come from, and the outputs/ restriction. Edge cases (invalid path, partial failure across multiple files) are the one gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema only declares a bare string, so the description must compensate โ and it does: one or more paths, newline or comma separated, taken verbatim from the writing tool, with a concrete example and the note that Windows paths are also accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open files Metis created') plus concrete examples of the artifacts (decks, posters, letters, figures) and the destination (researcher's screen). It is clearly distinguishable from list_outputs, which only enumerates what exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call this at the end when the researcher asks to see, show or open what was made' gives an explicit trigger, and 'Only files under outputs/ can be opened' sets a hard eligibility boundary. It does not name alternatives (e.g. read_file for reading contents rather than launching), so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_focus_lensMetis โ Preview Focus LensA
Try a lens before creating a focus โ how much does it catch, and where does it fail?
Lens tuning was otherwise blind: the only way to learn a lens returned nothing
was to build the focus, open it and find it empty. Worse, a conjunction that
returns zero says nothing about WHICH group is at fault.
So this reports each group's matches ALONE as well as combined. If group 1
matches 400 and group 2 matches 3 and together they match 0, group 2 is the
problem and no judgement is required to see it.
Args:
keyword_groups: JSON list of lists โ OR within a group, AND across groups.
e.g. '[["dhis2","hmis"],["surveillance","district"]]'
Returns:
Per-group and combined counts, sample matches, and a plain verdict.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword_groups | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: "try" and "reports" signal a non-mutating preview, and it explains the payoff (isolating which group kills a conjunction). It stops short of stating explicitly that nothing is saved or how much computational cost a preview incurs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the Args/Returns blocks are scannable. The middle narrative (blind tuning, the 400/3/0 worked example) is longer than strictly necessary, though it does justify why per-group counts are reported.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only preview with an output schema already describing returns, this is nearly sufficient: input encoding is spelled out and output shape is summarized. Minor gaps remain around malformed JSON input and any limits on keyword-group size.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% โ the lone parameter is a bare string with no description โ so the description must compensate, and it does: it defines keyword_groups as a JSON list of lists with OR semantics within a group and AND across groups, plus a concrete bracketed example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (preview/try a lens) against a specific resource (a focus lens built from keyword groups), and frames it against the sibling operation of creating a focus. The opening line distinguishes it from create_focus_area without the agent needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly places use before creating a focus ("Try a lens before creating a focus") and explains the tuning/diagnostic scenario it serves. It gives clear context but never states an exclusion, e.g. that it does not persist anything and should not be used as a substitute for create_focus_area.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
probe_tool_resultMetis ยท Data Guardian โ Probe Tool ResultA
M5.7.1 โ Probe external tool result for injection patterns.
Call this before inserting any externally-sourced content into agent context:
web scrapes, RSS items, PDF extracts, YouTube transcripts, GitHub readmes.
Args:
content: The external content to probe.
source_label: Human-readable label for logging (e.g., "PubMed abstract", "RSS item").
Returns:
JSON with {probed_content, flagged, patterns_found}.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| source_label | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description is the sole source. It describes a non-destructive probe (returns flagged/patterns_found) but does not explicitly state it is read-only or safe. Lacks detail on logging side effects or performance implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with version header, purpose, usage, args, and returns. Concise with no extra fluff. Could be slightly more streamlined but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides enough context given the simple nature of the tool: clear what it does, when to use, and what to expect in returns (probed_content, flagged, patterns_found). No missing critical information for an AI agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description explains both parameters: 'content' as the external content to probe and 'source_label' for logging. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool probes external content for injection patterns and gives specific use cases (web scrapes, RSS, etc.), making the purpose distinct from many sibling tools. However, it doesn't explicitly differentiate from close siblings like 'check_data_safety'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call this before inserting externally-sourced content into agent context, with concrete examples. Does not mention when not to use or alternatives, but the usage guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profile_datasetMetis ยท Data Analyst โ Profile DatasetA
Profile a tabular dataset: shape, dtypes, null %, unique counts, distributions.
Supports CSV, TSV, Excel (.xlsx/.xls), SPSS (.sav), Stata (.dta).
Performs PII column name scan before profiling (non-blocking, annotated).
Never modifies the source file.
Args:
path: Absolute local path to the dataset file.
sample_rows: If > 0, include this many rows as a data sample in the output.
Returns JSON with: path, rows, columns, null stats, duplicate count,
per-column profile (dtype, nulls, distributions or top values),
and any flagged PII column names.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| sample_rows | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully carries transparency. It discloses the tool never modifies the source file, performs a non-blocking PII column name scan, and returns a JSON structure with specific fields. This provides good insight into behavior, though no mention of permissions or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (about 10 lines), with a clear structure: purpose statement, supported formats, behavioral notes, and an Args section. Every sentence adds value; no fluff. Front-loaded with main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (though not shown) and only two simple parameters, the description covers essential aspects: supported formats, safety, PII scan, and return structure. It does not elaborate on every output field but that is acceptable with an output schema present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so parameter descriptions in the tool description are critical. The description provides clear explanations: 'path' as absolute local path, 'sample_rows' as including rows in output if > 0. This adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states the verb 'Profile' and the resource 'tabular dataset', detailing specific outputs (shape, dtypes, null %, unique counts, distributions). It also lists supported formats and a PII scan, clearly differentiating from sibling tools like clean_dataset (which modifies) and compare_profiles (which compares).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description indicates when to use by specifying supported file formats and emphasizing it never modifies the source file, implying safe profiling. While it does not explicitly contrast with alternatives, the context of sibling tools makes the tool's role clear. No explicit 'when not to use' statement, but the guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
promote_basket_itemMetis โ Promote Basket ItemB
Move a basket item to a stable project folder (promote from basket to active storage).
Refuses to touch basket/private/ items.
Args:
source_path: Absolute path to the file in basket/ to promote.
target_path: Absolute destination path (file or folder).
| Name | Required | Description | Default |
|---|---|---|---|
| source_path | Yes | ||
| target_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It only discloses one behavioral trait (refuses private items). Missing details such as permissions, reversibility, and overwrite behavior, leaving significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three sentences plus arg list, front-loaded with the action verb, and no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and 0% schema coverage, the description provides the core action and a key constraint. However, it lacks details on error handling, return values, and collision behavior, assuming the output schema covers return. Adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds clear meaning beyond schema titles: defines source as 'absolute path to the file in basket/' and target as 'absolute destination path (file or folder).' This compensates for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('move') and the resource ('basket item to stable project folder'). It differentiates from sibling tools like list_basket and scan_folder_for_intent by focusing on promotion, but does not explicitly distinguish itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes that it refuses to touch basket/private/ items, providing a usage constraint. However, it does not specify when to use this tool over alternatives or give explicit prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
promote_session_decisionsMetis โ Promote Session DecisionsA
Pull decisions out of session summaries into the open-decisions ledger.
Deduplicates by normalised fingerprint, so a decision restated across many
sessions becomes ONE row with a times_seen count rather than many rows. Rows
already resolved are left alone โ re-running this never reopens a closed call.
Args:
limit: How many recent session summaries to scan.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it discloses fingerprint deduplication, the resulting times_seen aggregation, and that resolved rows are untouched so reruns are safe. It omits cost/latency implications of scanning up to 2000 summaries and any permission or write-scope detail for the ledger mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action in the first sentence, followed by the two behavioral facts that matter most for safe reruns. The args block is minimal and nothing is padded, though the dedup explanation runs slightly long for what it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the mutation's key semantics (dedup, idempotency, resolved rows untouched). For a one-parameter tool with zero annotations it is nearly complete; what is missing is scale/cost guidance and its relationship to the sibling decision tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema only says integer with default 2000, so the description's 'how many recent session summaries to scan' is the sole source of meaning and genuinely compensates. It still gives no sense of the tradeoff at the default value or what a lower limit sacrifices.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: pulling decisions out of session summaries into the open-decisions ledger. That is concrete and distinguishable in substance, but the description never names or contrasts the very similar siblings commit_session_decisions, review_open_decisions, or resolve_decision, so the agent must infer the division of labor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent must already know it has session summaries worth mining. The line about re-running never reopening a closed call is useful rerun guidance, but there is no explicit when-to-use versus when-not, and no pointer to the closely related decision-ledger tools despite a crowded sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_library_organizationMetis ยท Librarian โ Propose Library OrganizationA
Cluster papers by topic and propose an AI-generated collection structure.
Uses abstracts and titles to embed papers, then clusters them with k-means.
Returns a proposed collection structure with suggested names and paper counts.
Args:
n_clusters: Number of topic clusters. 0 = auto-detect (sqrt of library size).
min_papers: Minimum papers per cluster to report (default 3).
| Name | Required | Description | Default |
|---|---|---|---|
| min_papers | No | ||
| n_clusters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses the algorithm and parameter effects but omits side effects, permissions, or whether it is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: three short paragraphs covering purpose, method, and parameters without extraneous details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately covers the tool's behavior and parameters, though it could mention prerequisites or safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to both parameters (n_clusters auto-detect at 0, min_papers default 3) beyond the schema, which has 0% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it clusters papers and proposes a collection structure, distinguishing it from sibling tools like search or list operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how the tool works (k-means on embeddings) but does not explicitly state when to use it or when to prefer alternatives like search_library.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_skill_improvementMetis โ Propose Skill ImprovementA
An agent proposes a change to its own skill file.
The proposal is queued for human review. The skill file is NOT modified
until the user calls approve_proposal().
Args:
agent_slug: The agent's slug (e.g. 'librarian', 'writing-partner')
proposed_content: The full proposed replacement content of the skill file
rationale: Why this change is being proposed (1โ3 sentences)
Returns:
Confirmation with the proposal ID for the user to review
| Name | Required | Description | Default |
|---|---|---|---|
| rationale | No | ||
| agent_slug | Yes | ||
| proposed_content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the proposal is queued and not directly applied, and returns a proposal ID for review. However, it does not mention any side effects, required permissions, or limits on pending proposals, which would enhance transparency for a mutation-like tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (6 lines), well-structured with a brief statement of purpose followed by Args and Returns sections. Every sentence adds value without repetition or fluff. Front-loaded with the key point about queuing and human review.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 parameters, no nested objects, output schema exists), the description adequately covers the workflow and return value. It could mention what happens after approval or rejection, or how to retrieve the proposal ID later, but it is complete enough for an AI agent to understand the proposal cycle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description includes an Args section that explains each parameter: agent_slug with examples, proposed_content as full replacement, and rationale with length guidance. This adds significant meaning beyond the schema's type/title, especially for rationale (schema has only default empty string).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'proposes' and the resource 'change to its own skill file', and distinguishes it from direct modification by explicitly referencing approve_proposal(). The title includes 'Metis โ Propose Skill Improvement', further clarifying the domain and action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that the proposal is queued for human review and not applied until approve_proposal() is called. This provides clear guidance on when to use this tool (to propose changes) and when not (for immediate effect, use approve_proposal). It references the approval step but does not explicitly compare with other sibling tools like draft_self_improvement_proposal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_courseMetis ยท Course Builder โ Publish CourseA
Finalise and publish a completed course build.
Marks the learning_courses row as 'active', sets progress to 0,
and writes a completion note. Call after all 7 steps are done.
Args:
slug: The course slug to publish.
Returns:
Confirmation with the course path and Learning tab link.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes key side effects: setting row to active, resetting progress, and writing a note. However, it does not mention permissions needed, reversibility, or error conditions. Adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief, front-loaded with purpose, followed by implementation details, then parameter and return info. Every sentence is meaningful with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter and presence of an output schema, the description covers the essential usage. It provides context about being after 7 steps. Missing details about what '7 steps' are or prerequisites, but still complete enough for an experienced user.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description compensates by listing the parameter and its purpose: 'slug: The course slug to publish.' This adds meaning beyond the schema's type-only definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Finalise and publish' and identifies the resource as 'completed course build'. It clearly states the actions performed: marks as active, sets progress to 0, writes completion note. This distinguishes it from sibling tools like 'get_course_status' or 'review_course'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Call after all 7 steps are done', providing clear guidance on when to use. It also implies the course must be completed. However, it does not explicitly state when not to use, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
push_to_zoteroMetis ยท Librarian โ Push To ZoteroA
Push local library papers that aren't in Zotero yet UP to your Zotero library.
The complement to sync_zotero_library (which only pulls DOWN). Finds
literature_metadata rows that did not come from Zotero (no zotero_key) and
creates them as items in your Zotero library, so papers Metis ingested โ e.g.
open-access reports added to a knowledge layer โ end up in Zotero too.
Args:
dry_run: When True (default), report exactly what WOULD be created without
writing anything. Always review the dry run before a real push.
limit: Max items to push in one call.
Returns:
A summary: how many candidates, and either the dry-run preview or the
create result. Requires a WRITE-enabled ZOTERO_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dry_run | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden well: it discloses that this is a write operation, that dry_run defaults to True, and that a WRITE-enabled ZOTERO_API_KEY is required. It does not discuss idempotency or partial-failure behavior, but the core safety and auth context is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core push behavior and then adds arguments and return context. It is well structured and mostly free of waste, though the Returns paragraph is somewhat redundant given the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description does not need to detail return values, but it still provides a useful summary. It covers the write safety, credential requirement, and parameter effects; only advanced behaviors such as duplicate handling or batch-failure semantics are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema description coverage is 0%, the description explains both parameters meaningfully: dry_run controls preview-vs-write and defaults to True, and limit caps items per call. The only minor gap is that it does not restate the limit default of 50, which is already visible in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: pushing local library papers into Zotero. It explicitly distinguishes this from sync_zotero_library by saying that tool only pulls DOWN and this one pushes UP.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the complementary sibling tool and states the selection condition: use this to push local papers that lack a zotero_key, not to pull Zotero items. It also instructs the agent to review a dry run before a real push.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_research_timelineMetis โ Query Research TimelineA
Query the temporal evolution of research beliefs.
Returns all claims for an entity ordered by date, showing how thinking
evolved. Superseded claims (older beliefs you updated) are hidden by default
but can be shown to trace the full reasoning chain.
Args:
entity: Filter by entity name (partial match). Leave empty to see all
recent entries across all entities.
since_date: ISO date string (YYYY-MM-DD). Only show entries on or after
this date. Leave empty for all time.
show_superseded: If True, include claims that have been replaced by newer
ones. Default False โ shows only the current belief for each topic.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | No | ||
| since_date | No | ||
| show_superseded | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It covers filtering behavior and defaults but does not explicitly state that the tool is non-destructive or read-only. The behavioral traits are mostly clear, but some aspects (like side effects) are implied rather than stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a concise one-sentence summary, followed by a brief behavioral paragraph, then parameter documentation. No unnecessary words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (returns not needed), the description covers purpose, parameters, and behavior completely. It explains the superseded concept and filtering options, leaving no obvious gaps for an agent to select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It provides clear, detailed semantics for all three parameters: entity (partial match), since_date (ISO format), show_superseded (boolean, defaults to False). This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'query' and resource 'research beliefs', highlighting temporal evolution and superseded claims. It clearly distinguishes this tool from siblings like search_memory or get_research_context by focusing on chronological ordering and belief history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains default behavior (superseded hidden) and when to show them (to trace reasoning). It implies context for usage but does not explicitly state when to prefer alternatives. Good but could be more thorough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_document_templateMetis โ Read Document TemplateA
Show a stored Word template paragraph by paragraph, so it can be filled in.
The researcher's templates (e.g. an ethics-committee cover letter) are kept in
Metis โ see list_templates; never ask them for the file. Returns each
non-empty paragraph with its key (p12, h0 for the header). Then call
fill_document_template with the keys whose text should change.
Args:
template: Template name or part of it. Empty = the first stored document template.
| Name | Required | Description | Default |
|---|---|---|---|
| template | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that only non-empty paragraphs are returned, the key scheme (p12, h0 for header), and that templates live in Metis rather than on the user's disk. It stops short of stating error behavior when a template name matches nothing or multiple templates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short paragraphs, front-loaded with the action, followed by workflow routing and the single argument. No redundant restatement of the title or name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with an output schema, this covers the essentials: source, output shape, keys, and the follow-up call. The only gap is not-found or ambiguous-name behavior, which an agent would otherwise have to discover by trial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must define the parameter and it does: 'Template name or part of it. Empty = the first stored document template.' This adds fuzzy-match and default semantics absent from the schema, though it doesn't say how ambiguity between partial matches is resolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Show a stored Word template paragraph by paragraph') plus the purpose ('so it can be filled in'). It distinguishes itself from list_templates and fill_document_template by naming both siblings and their roles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: use list_templates to find templates, never ask the user for the file, and then call fill_document_template with the returned keys. When-to-use and next-step alternatives are both spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileMetis โ Read FileA
Read the content of a file and return it as text.
Works for any text file: R scripts, markdown, Python, JSON, CSV, etc.
The file does not need to be pre-registered in tracked_files.
Args:
path: Absolute path to the file to read.
max_chars: Maximum characters to return (default 8000). For large files,
increase this or ask for a specific section.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 discloses that it returns text and has a max_chars default, but lacks details on error handling, encoding, or behavior for binary files. The description adds moderate value beyond what the schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly concise with a clear two-line summary and an Args section. The first sentence could be combined with the second, but overall it is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool and the presence of an output schema, the description covers purpose, file types, and parameter defaults. It does not mention output format explicitly, but that is likely defined in the output schema. It is mostly complete for a read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It provides prose explanations for both parameters (path and max_chars), including usage guidance for large files. This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads file content and returns text, lists supported text file types, and notes that files need not be pre-registered. This differentiates it from sibling tools like scan_tracked_files or list_folder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies it works for any text file and that the file doesn't need pre-registration, giving clear context. However, it does not explicitly state when not to use it (e.g., for binary files or metadata), and no alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reading_stack_addMetis โ Reading Stack AddC
Put something in the reading stack, or change what state it is in.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| kind | No | news | |
| tags | No | ||
| state | No | later | |
| title | Yes | ||
| item_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 does not disclose whether this is an upsert (does passing an existing title/url update instead of duplicating?), whether item_id is required to change state, what the legal state values are, or whether anything is destroyed or overwritten. For a mutation with zero annotation coverage this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no filler, which is structurally clean. But the brevity is achieved by omission rather than precision โ the dual-mode behavior (create vs. state change) is compressed into one vague clause, leaving the reader to infer the actual contract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. Everything else is missing: with 6 parameters, 0% schema description coverage, and no annotations, an agent has no guidance on the state machine, the upsert semantics, or parameter roles. The description is far too thin for a mutate-and-add tool of this shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, so the description must compensate and does not. It alludes to a 'state' parameter without enumerating values (schema merely defaults it to 'later'), and never mentions kind, tags, url, or item_id โ notably not explaining that item_id is presumably what selects the record to mutate. Only 'title' is implicitly referenced by 'something'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb+resource ('put something in the reading stack') and adds a second mode ('change what state it is in'), which is more than a tautology. However, it never names or distinguishes itself from the obvious sibling reading_stack_show, and 'something' is left undefined rather than naming an article/link/item. An agent can guess the domain but not the exact object being added.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus reading_stack_show (read) or any library-tracking tool, and no prerequisites or conditions. The second clause hints that the tool also handles state transitions, but it never says when to prefer a state change over a fresh add. No exclusions or alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reading_stack_showMetis โ Reading Stack ShowC
What is in the reading stack: saved, later, declined or read.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| state | No | later |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and largely drops it: it does not say the operation is read-only, whether results are paginated or ordered, or what happens when the stack is empty. It does at least convey that the tool is a query over a defined set of stack states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the resource being fetched. It is efficient, though the terseness is what leaves the state/tag semantics only half-explained.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return shape needn't be described, but with zero annotation coverage, no param descriptions, and an unexplained `tag` filter, the definition is not sufficient for an agent to know how to scope the call. It should say what tags mean here and what the default state retrieves.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does add real value for `state` by enumerating the plausible values (saved, later, declined, read), which match no enum in the schema, but it says nothing about `tag` or the default of "later".
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (the reading stack) and enumerates the states it reports on (saved, later, declined, read), which pairs with the tool name. It is clearly a read/list tool distinct from reading_stack_add, though it never names that sibling or says the two are complements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus reading_stack_add, search_library, or the focus_* tools. The only usage hint is implicit in the list of states, leaving the agent to infer that this is the retrieval half of a stack workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_office_documentMetis โ Read Office DocumentA
Read a PowerPoint or Excel file into Metis.
PowerPoint: returns the slides โ titles, body text and speaker notes โ because
a deck is the researcher's own authored content.
Excel: returns STRUCTURE ONLY โ sheet names, row/column counts, column headers
and inferred types. Never cell values. If you need the data analysed, use the
safe-analysis procedure: Metis writes a script, the researcher runs it locally,
and only aggregates come back.
Args:
path: Path to a .pptx or .xlsx file, absolute or relative to the Metis folder.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does the most important work: it discloses that Excel returns STRUCTURE ONLY and never cell values, which is a non-obvious and safety-critical constraint an agent could not infer. It also describes exactly what each format returns. It omits error behavior for unsupported formats, size limits, and whether the path must already exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then organized per format and finally the argument, so an agent can stop reading as soon as it has what it needs. The safe-analysis explanation runs slightly long but is justified because it prevents an incorrect follow-up call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-path read tool, this covers everything an agent needs: accepted formats, return payload per format, the data-safety boundary, and where to go for actual analysis. An output schema exists, so the description did not have to explain return values, yet its format description is still accurate and adds routing value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it names the accepted extensions (.pptx, .xlsx) and defines the path resolution base ('absolute or relative to the Metis folder'). That is meaning the bare string schema does not convey. It stops short of clarifying behavior for other extensions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read a PowerPoint or Excel file into Metis') and then splits the behavior by format, so the agent knows exactly what comes back in each case. It is clearly distinguishable from file-reading siblings like read_file or ingest_office_document because the per-format payload is spelled out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete routing rule for the analysis case: if the data needs analysing, use the safe-analysis procedure rather than this tool. That is real when-not guidance. It does not, however, say when to prefer this over read_file, ingest_office_document, or extract_structured, so the sibling differentiation is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallMetis ยท Memory Curator โ RecallA
Search across ALL memory layers in one call.
The unified front door to everything Metis remembers โ personal notes,
agent findings, project decisions, PDF knowledge, ideas, and session
history. Returns ranked results with source attribution.
Searches up to 6 layers and merges results using Reciprocal Rank Fusion:
1. Memory palace (memory_entries โ keyword)
2. Episodic memory (events โ vector + keyword)
3. Semantic memory (concepts โ vector + keyword)
4. Procedural memory (workflows โ vector + keyword)
5. Knowledge databases (PDF chunks โ vector)
6. Ideas (ideas table โ keyword)
Use scope/agent_id/project_id to narrow results:
recall("HAT diagnostics") โ everything
recall("search patterns", agent_id="librarian") โ librarian's wisdom
recall("elimination", project_id="article-1") โ Article 1 decisions
recall("mixed models", scope="global") โ cross-cutting knowledge
Args:
query: Natural language search query.
scope: Filter by scope: 'global', 'agent', 'project', 'session'.
Empty string (default) searches all scopes.
agent_id: Filter to memories from a specific agent (e.g. 'librarian').
project_id: Filter to memories linked to a specific project.
layers: Comma-separated layers to search. Options: 'memory', 'episodic',
'semantic', 'procedural', 'knowledge', 'ideas', or 'all' (default).
top_k: Number of results to return (default 10).
recency_half_life: Days until recency boost halves (default 90). Set to 0
to disable recency weighting. A 90-day-old entry gets ~37% of a
fresh entry's time bonus; 180-day ~14%.
Returns:
Ranked results from across all matching layers, each with its source
layer, relevance score, timestamp, and content preview.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| scope | No | ||
| top_k | No | ||
| layers | No | all | |
| agent_id | No | ||
| project_id | No | ||
| recency_half_life | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers behavioral traits: it searches 6 memory layers, uses Reciprocal Rank Fusion, returns ranked results with source attribution, and explains recency weighting with a half-life parameter. There is no destructive action implied, and the merging mechanism is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary line, explanation, examples, and parameter list. It is longer than minimal but every sentence adds value; the examples and parameter details are necessary for clarity. Slightly less than perfect conciseness due to length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, no annotations, an output schema exists but description still covers return values), the description is complete. It explains all parameters, behavior, merging strategy, and return format, leaving no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description compensates fully by detailing each parameter: query, scope, agent_id, project_id, layers, top_k, and recency_half_life, including default values and examples. This provides rich semantic meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description immediately states 'Search across ALL memory layers in one call' with a clear verb and resource. It distinguishes itself from sibling search tools (e.g., search_memory, search_session_memory) by positioning as the unified front door that covers 6 specific layers, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage examples showing how to narrow results using scope, agent_id, and project_id, and implies broad vs. narrowed use. It does not explicitly mention when not to use it or list alternative tools, but the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recall_decisionsMetis โ Recall DecisionsA
Recall the user's recorded preferences/decisions to personalize a response. Called during context assembly (and any time Metis is about to act in a way a preference might govern). Empty category returns all categories.
Args:
category: filter to one category, or '' for all.
limit: max rows.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It mentions that an empty category returns all categories, which is a useful behavioral detail. However, it does not disclose whether the operation is read-only, any required permissions, or what the response contains beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded: it states the purpose, then usage context, then parameter descriptions. Every sentence is necessary, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description does not need to detail return values. It covers purpose, usage, and parameters adequately. However, it could mention that it returns only user-recorded decisions, which is implied but not explicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully explains both parameters: category ('filter to one category, or \'\' for all') and limit ('max rows'). This adds essential meaning beyond the schema's type and default values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool recalls recorded preferences/decisions for personalization, using the specific verb 'recall' and resource 'preferences/decisions'. It also notes it is called during context assembly, distinguishing it from sibling tools like 'remember' or 'write_user_preferences'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use: 'during context assembly (and any time Metis is about to act in a way a preference might govern)'. It does not provide exclusions or alternatives, but the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_dataset_treatmentMetis ยท Software Engineer โ Record Dataset TreatmentA
Record one cleaning/transformation step for a dataset (its lineage).
Build a traceable chain raw โ cleaned โ analysis dataset, so any result can
be reproduced. Call once per step (recode, filter, join, derive, โฆ).
Args:
dataset_name: The dataset being transformed.
description: What this step does (e.g. "drop records with missing age").
project_id: Project this belongs to. Optional.
step_type: recode | filter | join | derive | clean | other.
code: The code for this step, if any.
input_dataset: Dataset(s) this step consumes.
output_dataset: Dataset this step produces.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ||
| step_type | No | ||
| project_id | No | ||
| description | Yes | ||
| dataset_name | Yes | ||
| input_dataset | No | ||
| output_dataset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It explains the purpose (building a traceable chain) and that it should be called per step, implying additive and non-destructive behavior. However, it does not state idempotency, error handling, or whether it modifies existing data. The traceability context provides moderate transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief (about 7 lines) and front-loaded with the core purpose. Every sentence contributes meaning: purpose, traceability rationale, usage hint, parameter explanations. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (recording a step), the description covers purpose, usage pattern, and parameter meanings. An output schema exists (so return values need not be explained), and the description does not cover error scenarios or prerequisites, but those are less critical for a recording tool. It adequately equips an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description is essential. The 'Args' section (in the description text, not the schema) explains each parameter's role, including an example for 'description' and valid values for 'step_type'. This adds significant meaning beyond the schema's parameter names, though more constraints (e.g., format for 'code') could be added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool records a cleaning/transformation step for dataset lineage. It uses a specific verb ('Record'), identifies the resource ('one cleaning/transformation step for a dataset'), and distinguishes itself from sibling tools like 'clean_dataset' (which performs cleaning) by emphasizing traceability and reproducibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises 'Call once per step' and provides examples of step types (recode, filter, join, derive, โฆ). It implies this tool is for recording rather than executing steps, but lacks explicit guidance on when not to use it or alternatives among siblings (e.g., 'clean_dataset', 'profile_dataset'). Clear but could be more explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_decisionMetis โ Record DecisionA
Record a user preference or decision so Metis adapts to the user over time.
Use this whenever the user states (or confirms) a standing preference or makes a
decision worth remembering โ coding style, citation format, a methods default, an
article/dataset they keep returning to, a naming convention, a workflow choice.
These are recalled into context on future requests (recall_decisions), so Metis
personalizes instead of asking again.
Args:
decision: the preference/decision in plain language (e.g. "Always use tidyverse style in R, never base apply").
category: preference | coding | citation | methodology | writing | article-ref | dataset | routing | other.
context: optional โ when/why it applies (e.g. "for HAT spatial analyses").
scope: 'always' (persist) or 'once'.
agent_slug: the specialist that should APPLY this decision โ e.g.
"frontend-designer-builder" for a layout rule, "writing-partner" for
a prose rule, "librarian" for what matters in the library. Leave
empty for a project-wide rule that every agent should carry.
Attribution is what makes the decision reachable. `get_agent_context`
injects an agent's own decisions plus the project-wide ones, and a
flat list of every preference injected into every agent is noise that
gets ignored. Measured 2026-08-24: user_decisions held 2 rows while
session summaries held 7,578 decision entries โ so invoking a
specialist returned a persona and nothing about how the researcher
wants things done, which is why routing to one stopped being worth it.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | always | |
| context | No | ||
| category | No | preference | |
| decision | Yes | ||
| agent_slug | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does disclose real behavioral context: entries persist and are re-injected into future context, and agent_slug attribution determines which specialist receives the rule via get_agent_context. However, it never covers deduplication, conflict/overwrite behavior when a preference changes, or permissions, and much of the agent_slug rationale is anecdotal justification rather than operational guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and usage trigger are front-loaded and tight, but the agent_slug entry balloons into a multi-paragraph essay with a dated measurement ('Measured 2026-08-24: ... 7,578 decision entries') that is persuasion, not invocation guidance. Roughly a third of the text does not help an agent call the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, the description adequately covers what is written, that it persists, and how it resurfaces through recall_decisions and get_agent_context; an output schema exists so return values need no explanation. The remaining gap is lifecycle behavior โ whether repeat recordings dedupe or supersede prior decisions โ which matters for a memory-writing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description documents all five parameters with meaning beyond the schema: category enumerates nine values the schema does not list, scope explains 'always' vs 'once' as persist vs one-shot, decision includes a worked example, and agent_slug explains the attribution semantics and the empty-string default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+object (record a user preference or decision) and its purpose (Metis adapts over time), and names recall_decisions as the counterpart tool. It does not distinguish itself from near-siblings like record_routing_preference, commit_session_decisions, or add_memory_entry, so an agent must infer which write path to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger condition ('whenever the user states or confirms a standing preference') backed by concrete examples of qualifying content, plus the recall_decisions pairing that explains downstream use. It omits when NOT to use it โ no exclusion versus routing preferences, session-summary decisions, or one-off session events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_persona_learningMetis โ Record Persona LearningA
Record a lasting lesson about how Metis should behave, so it survives the session.
Use this when the researcher corrects how something should be done, states a preference
between real alternatives, or confirms an approach โ anything that should change
Metis' behaviour in FUTURE sessions rather than only this one.
This is what makes the persona grow. Metis' memory already accumulates facts
about the work; without this, none of it changed how she behaves. A correction
that is only remembered as having happened is not learned.
WHAT BELONGS HERE:
- "Prefers the explicit mark-read button over auto-marking" (a real choice)
- "Wants feed URLs verified live before being added" (a workflow rule)
- "Do not use ANSI colour; emoji survive copy-paste" (an avoid)
WHAT DOES NOT:
- Facts about the research or the code โ that is memory (`remember`,
`save_session_summary`).
- One-off task details that will not recur.
- Anything the researcher has not actually confirmed. Do not record an inference as a
lesson; if unsure whether it is durable, ask, or leave it.
Args:
lesson: The behavioural rule, stated imperatively and briefly โ how Metis
should act from now on. One or two sentences.
category: One of voice, workflow, preference, avoid, domain.
evidence: Why this is believed โ quote or paraphrase what the researcher said, and
when. An unexplained rule cannot be audited later.
supersedes: Optional. Text from an earlier lesson this replaces, so the
older one is marked rather than silently contradicted.
Returns:
Confirmation, and how many lessons are now on record.
| Name | Required | Description | Default |
|---|---|---|---|
| lesson | Yes | ||
| category | No | preference | |
| evidence | No | ||
| supersedes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well: it explains that the record persists across sessions, grows the persona, requires researcher confirmation, and marks superseded lessons rather than silently contradicting them. It does not describe permissions, retention/deletion behavior, or failure modes, so it is strong but not fully exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the action and persistence rule, then structured into triggers, inclusions, exclusions, and parameter guidance. Although detailed, the length is justified by the tool's behavioral complexity and the examples earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter, no-annotation, persistent-memory mutation tool, the description covers purpose, when to use it, when not to use it, parameter meaning, evidence requirements, superseding behavior, and return shape. The output schema covers the return format, so no critical context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates fully: it documents lesson, category, evidence, and supersedes. It supplies the category enum values (voice, workflow, preference, avoid, domain), explains the imperative style of lesson, and describes evidence as an auditable quote or paraphrase with timing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Record a lasting lesson about how Metis should behave.' It distinguishes this from ordinary memory by saying the lesson must survive the session and change future behavior, which an agent can use to tell it apart from siblings like remember or save_session_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit triggers: corrections, stated preferences between real alternatives, and confirmed approaches. It also states exclusions under 'WHAT DOES NOT' and names the sibling memory tools that should be used for research/code facts instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_research_findingMetis โ Record Research FindingA
Record a timestamped research belief or finding about an entity.
Use this whenever you reach a conclusion, update a previous belief, or
encounter evidence that changes your view. The timeline preserves the full
chain of reasoning across sessions.
Args:
entity: What this claim is about. Use a consistent name across sessions
(e.g. "RDT sensitivity in low-burden areas", "Disease X elimination study",
"DHIS2 tracker performance").
claim: Your current belief or finding in 1-3 sentences.
evidence: What supports this claim โ paper citation, data result, meeting
discussion. Brief reference is enough.
confidence: "low", "medium", or "high".
source_type: "session", "paper", "meeting", "data_analysis", "literature_review".
source_ref: Specific reference โ DOI, file path, meeting date.
supersedes_id: If this replaces a previous claim, pass that claim's id.
Set to 0 if this is a new claim with no predecessor.
| Name | Required | Description | Default |
|---|---|---|---|
| claim | Yes | ||
| entity | Yes | ||
| evidence | No | ||
| confidence | No | medium | |
| source_ref | No | ||
| source_type | No | session | |
| supersedes_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers behavior: records timestamped beliefs, preserves a timeline, and explains the supersedes_id mechanism. It lacks details on permissions or error handling but discloses the core traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a summary and usage context, followed by a structured parameter list. It is slightly long but each sentence adds value; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters and no annotations, the description covers all inputs comprehensively, explains the timeline feature, and mentions superseding. It does not discuss output format, but an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides detailed explanations for all 7 parameters, including usage guidance (e.g., consistent entity names, confidence values, source types). This compensates for the 0% schema coverage, adding significant meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Record a timestamped research belief or finding about an entity,' using a specific verb and resource. It distinguishes from siblings like 'record_decision' and 'capture_idea' by focusing on research findings and the timeline of reasoning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'Use this whenever you reach a conclusion, update a previous belief, or encounter evidence that changes your view.' It does not explicitly contrast with siblings, but the purpose is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_routing_preferenceMetis โ Record Routing PreferenceA
Active-learning routing. After Metis asks the user 'should I always route requests like this to , or just this once?', call this with their answer.
scope='always' writes a permanent, high-priority rule (beats the built-in seeds)
into the routing DB โ part of institutional memory, persists across Metis updates.
scope='once' is acknowledged but not stored.
Args:
phrase: the trigger word/phrase the user wants routed (e.g. "spatial scan").
agent_slug: which agent to route it to (e.g. "epidemiologist").
scope: 'always' (persist) or 'once' (don't store).
priority: lower = more specific / checked first (default 5 beats all seeds).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | always | |
| phrase | Yes | ||
| priority | No | ||
| agent_slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description effectively discloses key behaviors: scope='always' persists permanently with high priority, scope='once' is acknowledged but not stored, and the priority default beats seeds. It does not mention what happens with conflicting rules, but is transparent enough for the tool's simplicity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, around 100 words, with a clear introductory sentence followed by a structured Args list. Every sentence contributes meaningful information, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema (not shown but noted), the description provides sufficient context. It covers the core behavior and parameters, though some edge cases (e.g., duplicate rules) are left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must add meaning. It explains each parameter: phrase (trigger word), agent_slug (target agent), scope ('always' vs 'once'), and priority (lower = more specific, default 5 beats seeds). This adds significant value beyond the schema's type/default information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: recording the user's answer to Metis' routing preference question. It specifies the verb ('call this with their answer') and the resource (the routing preference). This distinguishes it from sibling tools, which are mostly unrelated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: after Metis asks the routing question. While it doesn't list alternatives or when not to use it, the context is very specific and leaves little ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_thinking_eventMetis โ Record Thinking EventA
Record one signal about how you think and work, to personalise Metis.
Each event is a small piece of evidence โ you acted on a brainstorm, rated
an idea highly, flagged an agent's output โ that feeds your evolving
"thinking profile". Over time these signals let Metis tailor its routing,
suggestions, and tone to your preferences. Call it whenever a meaningful
preference moment occurs; read the accumulated profile with
get_thinking_profile.
Args:
event_type: The kind of signal. Must be one of: "brainstorm_acted_on",
"brainstorm_ignored", "idea_rated_high", "idea_linked_project",
"journal_revisited", "agent_output_accepted", "agent_output_flagged".
source_type: Domain or category the signal belongs to (e.g. "biology").
Optional; defaults to empty.
content_id: ID of the related content record (idea, journal entry, etc.)
if applicable. Optional; defaults to 0 (none).
agent_slug: Agent identifier this signal relates to, used for the
"agent_output_*" event types. Optional.
context: Free-text note giving context for the event. Optional.
Returns:
A confirmation that the signal was recorded, or an error listing the
valid event types if an invalid one was supplied.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | ||
| agent_slug | No | ||
| content_id | No | ||
| event_type | Yes | ||
| source_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully covers behavior: it records a signal, returns confirmation or error for invalid event_type, and explains the long-term effect. This is transparent and complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an intro, purpose, usage guidance, parameter list, and return info. Every sentence adds value, making it informative without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the parameter count (5), one required, and an output schema, the description covers behavior, parameters, return values, and usage. It is complete for a recording tool with clear context and no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description includes an 'Args' section explaining each parameter, defaults, and constraints. This adds significant value beyond the schema, especially for event_type with its explicit list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records a signal about thinking and working to personalize Metis. It lists specific event types and explains how it feeds a thinking profile, distinguishing it from related tools like get_thinking_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to call it 'whenever a meaningful preference moment occurs' and points to get_thinking_profile for reading the profile. It does not explicitly state when not to use alternatives, but the examples and context provide clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_viz_useMetis โ Record Viz UseA
Log that a recipe was rendered โ and what the researcher thought of it.
The table that answers "styles that we used". Without it the library holds
intentions and no evidence, so nothing can be ranked and every session
re-argues which style to reach for.
Args:
recipe: viz_recipes.slug.
style: viz_styles.slug.
dataset: What it was rendered against, in plain words.
project_id: e.g. "angola-hat-analysis".
output_path: Local file written.
artifact_url: If it was published as an Artifact.
verdict: loved | fine | wrong. Leave blank until he has actually said โ
a guessed verdict poisons the ranking it feeds.
note: What worked, or what went wrong.
Returns:
Confirmation plus the recipe's running track record.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| style | No | ||
| recipe | Yes | ||
| dataset | No | ||
| verdict | No | ||
| project_id | No | ||
| output_path | No | ||
| artifact_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden and does a reasonable job: it warns that a guessed verdict 'poisons the ranking it feeds' (a data-integrity side effect) and briefly describes the return value as 'confirmation plus the recipe's running track record.' It omits permissions, duplicate-log behavior, and whether existing records are mutated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then a short rationale, then a clean Args block. The middle paragraph is slightly rhetorical ('every session re-argues which style to reach for') but it earns its place by justifying why the log matters. Minor trimming possible, no real waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be spelled out, and all 8 inputs are explained. What is missing is edge-case behavior โ deduplication on repeated calls, whether a later call can overwrite verdict/note, and any permission requirements for writing to the ranking table.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with 8 parameters, yet the description documents every one: recipe and style are named as slug references into specific tables, project_id gets a concrete example format, and verdict is given an enum (loved | fine | wrong) that the schema itself lacks. This fully compensates for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Log that a recipe was rendered') plus the secondary payload (the researcher's verdict). This clearly separates it from siblings like save_viz_recipe (authoring a recipe) or save_viz_style (authoring a style) โ this is the evidence/usage-record tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger context: use it when a recipe has actually been rendered, because without it 'nothing can be ranked.' It does not explicitly name the adjacent tools (save_viz_recipe, find_viz, check_viz_fit) or state exclusions, so an agent must infer the boundary rather than read it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redact_data_fileMetis ยท Data Guardian โ Redact Data FileA
Read a sensitive data file and return a REDACTED preview (masked values).
The redaction half of /safe-analysis: where check_data_safety only *detects*
sensitive data and the read-hook *asks*, this returns a masked version so an
approved read shares no raw identifiers. Sensitive columns (patient/case IDs,
names, GPS, etc.) are pseudonymised consistently โ the same value always maps
to the same placeholder, so record linkage survives while identity does not.
PII patterns (emails, phones, IDs) are scrubbed from all remaining cells.
Local I/O only โ nothing leaves the machine except the masked preview you see.
Args:
path: Absolute local path to a CSV/TSV/text data file.
max_rows: Rows to include in the masked preview (default 20).
Returns JSON: redacted preview rows, the columns masked, and a per-type count.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| max_rows | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It discloses pseudonymisation, consistent mapping for record linkage, PII scrubbing, and local I/O. Could add error handling or file size limits, but current detail is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections and bullet points. Some slight redundancy (e.g., 'masked preview' repeated), but overall efficiently communicates key points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema described (returns JSON with rows, masked columns, counts). Parameter semantics covered. Could mention file size limits or permissions, but given complexity, it's adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 0%, but description adds meaningful detail: 'path' is absolute local path to CSV/TSV/text, 'max_rows' has default 20. This goes well beyond the schema's bare type info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Read' and resource 'sensitive data file', returning a 'REDACTED preview' with specific output. Distinguishes from sibling check_data_safety by contrasting 'detects' vs 'returns a masked version'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions tool as 'the redaction half of /safe-analysis' and explains when to use it versus check_data_safety and the read-hook. Also notes local-only operation for privacy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_code_artifactMetis ยท Software Engineer โ Register Code ArtifactA
Save a script, snippet, reusable function or template to the Code Repository.
Use this whenever the user writes or shares code worth reusing, so it can be
found and rebuilt later. Capture as much reproducibility context as you can.
Args:
title: Short descriptive name (e.g. "INLA BYM2 spatial model setup").
code: The actual code.
language: r | python | sql | stata | shell | โฆ (lowercase).
project_id: The project this belongs to (links it for reuse). Optional.
kind: script | snippet | function | template.
purpose: One line on what it does / when to use it.
tags: Comma-separated tags (e.g. "spatial,INLA,mapping").
file_path: Where the script lives on disk, if any.
packages: Dependencies / environment (e.g. "INLA 24.9, sf, dplyr").
params: Seeds, thresholds, hyperparameters used (for exact reproduction).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| kind | No | script | |
| tags | No | ||
| title | Yes | ||
| params | No | ||
| purpose | No | ||
| language | No | ||
| packages | No | ||
| file_path | No | ||
| project_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'Capture as much reproducibility context as you can' but lacks information on side effects, permissions, rate limits, or what happens if the code already exists. This is insufficient for a save operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and usage guidance before listing parameters. Each sentence serves a purpose, though the parameter list is lengthy but necessary given the lack of schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high parameter count (10) and zero schema description coverage, the description provides minimal coverage for each parameter. It does not explain default values, validation rules, or return value format (though an output schema exists). The description is adequate but leaves gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It lists each parameter with a brief semantic hint (e.g., 'Short descriptive name' for title, 'r | python | sql | ...' for language). While not exhaustive, it adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Save') and resource ('Code Repository'). It enumerates the types of code artifacts (script, snippet, reusable function, template) and distinguishes itself from siblings like 'search_code_repository' which retrieves code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage context: 'Use this whenever the user writes or shares code worth reusing.' It does not, however, explicitly state when not to use the tool or mention alternatives, which would be helpful for agents deciding between this and other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_data_dictionaryMetis ยท Software Engineer โ Register Data DictionaryA
Record a dataset's data dictionary โ one stored entry per variable.
Captures each variable's name, type, label, unique values / factor levels,
and units so future analysis scripts reuse the exact same names and
treatments. Re-registering the same dataset is idempotent: it replaces the
previous dictionary for that dataset (matched on dataset_name + project_id).
Args:
dataset_name: Name of the dataset, e.g. "hat_cases_2015_2023".
variables: List of variable entries. Each entry may be a plain string
(the variable name) or an object with any of: name (required),
type, label, unique_values, units, notes. Entries without a name
are skipped.
project_id: Project this dataset belongs to (default empty string);
also part of the key used when replacing an existing dictionary.
dataset_path: Where the dataset lives on disk (default empty string).
Returns:
A confirmation message with the count of variables recorded for the
dataset, or an error if none were provided.
| Name | Required | Description | Default |
|---|---|---|---|
| variables | Yes | ||
| project_id | No | ||
| dataset_name | Yes | ||
| dataset_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses that the tool stores per-variable entries, is idempotent (matching on dataset_name+project_id), and returns a confirmation with count or an error. This provides sufficient behavioral insight for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a brief paragraph explaining purpose and behavior, followed by a clear bulleted list of arguments. Every sentence adds value without repetition. No unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters (2 required), no annotations, and an output schema (described as returning confirmation or error), the description is complete. It explains what the tool does, how each parameter works, and what to expect as output. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description's 'Args' section adds detailed semantics for each parameter: dataset_name with example, variables with structure (strings or objects with optional fields like name, type, etc.), project_id and dataset_path with defaults and roles. This far exceeds the schema's minimal info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records a data dictionary for a dataset, listing specific variable attributes (name, type, label, etc.). It distinguishes from sibling tools like 'register_code_artifact' or 'record_dataset_treatment' by focusing on variable metadata. The verb 'Record' is specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use it (to capture variable definitions for reproducibility) and notes idempotency (re-registering replaces). It doesn't explicitly state when not to use it or name alternatives, but the context is clear enough for an agent to infer appropriate use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reindex_memoryMetis ยท Memory Curator โ Reindex MemoryA
Re-embed memory entries that are missing vector indexes.
Scans each requested layer for rows without a corresponding vector in the
vec_* table, generates embeddings, and inserts them. Safe to run repeatedly
โ only processes gaps, never overwrites existing vectors.
Use this to recover from embedding failures, or after importing memories
via raw SQL. Can be scheduled nightly via APScheduler.
Args:
layers: Comma-separated layers to reindex: 'episodic', 'semantic',
'procedural' (default: all three).
batch_size: How many entries to embed per batch (default 50).
Lower values use less memory; higher values are faster.
Returns:
Summary of how many entries were reindexed per layer.
| Name | Required | Description | Default |
|---|---|---|---|
| layers | No | episodic,semantic,procedural | |
| batch_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. States 'Safe to run repeatedly โ only processes gaps, never overwrites existing vectors.' Discloses non-destructive, idempotent behavior. Could add more on performance impact or locking, but sufficient for a recovery tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: concise purpose, behavioral detail, usage scenarios, Args, Returns. No superfluous sentences. Each element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given it's a maintenance tool with two parameters and an output schema, the description covers purpose, behavior, usage, parameters, and return value. Complete enough for an agent to decide and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description includes an Args section explaining both parameters: layers (comma-separated, defaults, valid values) and batch_size (memory vs speed trade-off). Adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Re-embed memory entries that are missing vector indexes.' It specifies the action (re-embed) and resource (memory entries). Distinguishes from siblings by focusing on missing vector indexes, and differs from tools like kg_index_memory or consolidate_old_memories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage scenarios: 'Use this to recover from embedding failures, or after importing memories via raw SQL.' Also mentions it 'can be scheduled nightly via APScheduler.' Lacks explicit when-not-to-use or alternatives, but offers clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_proposalMetis โ Reject ProposalA
Reject a pending skill improvement proposal without applying it.
The skill file is not changed. The proposal is marked rejected with an
optional reason.
Args:
proposal_id: The numeric ID from get_pending_proposals()
reason: Optional note explaining why the proposal was rejected
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | ||
| proposal_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must stand alone. It clearly states the behavior: the skill file is not changed, the proposal is marked rejected with an optional reason. This is sufficient for a simple non-destructive action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, starting with the core purpose, then explaining effects, then listing parameters in a clear structure. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality and parameters, but given that an output schema exists (though not shown), it does not describe the return value or any confirmation message. For a simple action, this is adequate but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining both parameters: proposal_id is 'the numeric ID from get_pending_proposals()' and reason is 'optional note explaining why the proposal was rejected', adding significant context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('reject') and resource ('pending skill improvement proposal'), clearly distinguishing it from siblings like apply_proposal and approve_proposal by stating 'without applying it'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use the tool (to reject a pending proposal) and implies alternatives by contrasting with applying, but does not explicitly name sibling tools or provide 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.
rememberMetis ยท Memory Curator โ RememberA
Store something in memory with automatic classification and scope tagging.
The unified write interface to Metis's memory system. Classifies the content
into the appropriate memory layer and stores it with scope tags for later
retrieval via recall().
Memory types:
- 'episodic': A time-stamped event (something that happened)
- 'semantic': A distilled concept or definition (timeless knowledge)
- 'procedural': A workflow or how-to pattern
- 'note': A human-curated memory palace entry (saved to DB + markdown)
- 'auto': Let Metis classify based on content (default)
Scope tags determine visibility:
- scope='global': Visible to all agents and projects
- scope='agent': Visible only when agent_id matches
- scope='project': Visible only when project_id matches
- scope='session': Visible only in this session
Args:
content: The text to remember. Can be a finding, concept, workflow,
decision, or any text worth preserving.
memory_type: How to classify this memory. One of 'episodic', 'semantic',
'procedural', 'note', or 'auto' (default โ Metis decides).
agent_id: Tag this memory as belonging to a specific agent (e.g. 'librarian').
project_id: Tag this memory as belonging to a specific project.
scope: Visibility scope: 'global' (default), 'agent', 'project', or 'session'.
title: Optional short title. Auto-generated from content if empty.
tags: Comma-separated topic tags (e.g. 'hat,diagnostics,rdts').
session_id: Current pipeline session ID (optional).
Returns:
Confirmation of what was stored, in which layer, with what scope.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| scope | No | global | |
| title | No | ||
| content | Yes | ||
| agent_id | No | ||
| project_id | No | ||
| session_id | No | ||
| memory_type | No | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It transparently explains that content is classified into layers, stored with scope tags, and returns a confirmation message. It covers auto-classification and default behaviors, but lacks details on potential side effects or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for memory types and scope tags, making it easy to scan. It is slightly verbose but every sentence adds value. The main purpose is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, no annotations, existing output schema), the description covers all necessary aspects: purpose, parameter details, memory classification, scope rules, and return value. It leaves no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must fully document parameters. It explains all 8 parameters, including their types, defaults, and purposes. For example, it lists memory types with examples, scope options with visibility rules, and mentions auto-generated titles and comma-separated tags.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it stores content in memory with automatic classification and scope tagging. It uses specific verbs ('store', 'classify', 'tag') and distinguishes itself from retrieval tools like `recall()` by being 'the unified write interface to Metis's memory system'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use this tool (to store memories) and implicitly distinguishes from alternatives like `recall()` for retrieval. It details memory types and scope tags, helping the agent choose appropriate parameters. However, it doesn't explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_first_run_markerMetis โ Remove First Run MarkerA
Delete the .first-run marker file to signal that the config wizard is complete.
Called at the end of the first-run wizard after all config files are written. Safe to call even if the marker does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description covers the key behavioral trait: it deletes a marker file and is idempotent. It does not mention side effects or auth requirements, but for a simple file deletion, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences. It front-loads the action, then provides context and safety information. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter tool with an output schema (context indicates exists), the description provides complete context: purpose, timing, and safety. Minimal risk of misuse.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the schema already fully defines inputs. The description adds context about the action but does not need to elaborate on parameters. Baseline score of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete', the resource '.first-run marker file', and the purpose 'to signal that the config wizard is complete'. It distinguishes itself from sibling tools, none of which are similar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies when to call it ('at the end of the first-run wizard after all config files are written') and notes idempotency ('Safe to call even if the marker does not exist'). It does not explicitly mention when not to use it, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_library_itemMetis ยท Librarian โ Remove Library ItemA
Remove a library item from the Metis index, optionally deleting the file.
De-indexes a paper or document by deleting its row from library_seeded. By
default the file on disk is left untouched (index-only removal); set
delete_file=True to also delete the file, which is guarded so only paths
inside the PKM root can be removed. To hide rather than remove an item, use
archive_library_item instead.
Args:
relative_path: The relative_path primary key identifying the row in the
library_seeded table.
delete_file: If True, also delete the underlying file from disk (subject
to the within-PKM-root safety check); if False (default), only the
index row is removed.
Returns:
A confirmation message of what was removed, or a not-found / error
message if the item or table is missing.
| Name | Required | Description | Default |
|---|---|---|---|
| delete_file | No | ||
| relative_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it deletes a row from library_seeded, default file left untouched, delete_file guarded to PKM root only, and returns confirmation or error. No hidden traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a short summary followed by detailed Args and Returns sections. Every sentence adds value without redundancy. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers return values (confirmation/error), behavior, safety mechanism, and alternative tool. Given the presence of an output schema (implied by return description), no gaps remain for a removal operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% parameter description coverage, but the description provides thorough explanations for both parameters: relative_path as primary key, delete_file with default and safety condition. This fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it removes a library item from the Metis index with optional file deletion, and explicitly contrasts with archive_library_item for hiding. The verb 'remove' and resource 'library item' are specific and distinct from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the alternative (archive_library_item instead of remove), and explains the two modes (index-only vs file deletion) with a safety guard. Provides clear guidance on setting delete_file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_projectMetis โ Remove ProjectA
Remove a project from Metis entirely.
Deletes project record and associated tasks from DB.
If delete_files=True, also deletes the external_path folder from disk
(only if path is within RC root โ safety check enforced).
Args:
project_id: The project_id to remove.
delete_files: If True, delete the project folder from disk. Default False.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| delete_files | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes what gets deleted (record, tasks, optionally folder) and the safety check. No annotations provided, so burden is on description. Lacks disclosure of irreversibility, required permissions, or response format. Output schema exists but not detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise with a clear structure: brief intro, bulleted effects, Args section. No wasted words or redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key behavioral aspects (deletion scope, file safety check) and parameter details. Could add irreversibility warning or permission requirements, but output schema likely covers return structure. Effective given tool complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but description adds meaningful context for both parameters: project_id identifies the project, delete_files explains behavior and default value. Adds safety constraint for file path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool removes a project entirely, deleting the project record and associated tasks, with an option to delete files. Distinguishes from siblings like archive_project and delete_task by specifying destructive action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes when to use (permanent removal) and includes a safety check for file deletion. Does not explicitly state when not to use or compare to alternatives like archive_project, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_tracked_fileMetis โ Remove Tracked FileA
Stop tracking a file so Metis no longer watches it for changes.
Removes a single file from the tracked-files list (the files the dashboard
Planning tab scans for activity). Use this when a file is no longer relevant
or was added by mistake. The file on disk is never touched โ only its
tracking record is deleted. The inverse of add_tracked_file.
Args:
path: Absolute path of the file to stop tracking. Must match the path
exactly as it was registered.
Returns:
A confirmation that tracking stopped, or a note if the path was not in
the tracking list.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: the file on disk is never touched, only the tracking record is deleted. It also explains what the tracking record is for and what the return value will be, leaving no ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at ~150 words, well-structured with a clear opening sentence, a paragraph on usage, and a bulleted Args/Returns section. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single parameter, no annotations, referenced output schema), the description is fully sufficient. It covers purpose, usage, behavior, parameter details, and return value. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description adds key semantics for the 'path' parameter: it must be an absolute path exactly as registered. This is essential information. Could also mention that it's the only parameter, but schema already indicates one required param.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'remove' (or 'stop tracking') and the resource 'tracked file', and distinguishes it from sibling 'add_tracked_file' by labeling it as the inverse. It also specifies the context of the tracked-files list in the Planning tab.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('file no longer relevant or added by mistake'), and implies when not to use (do not want to delete the file on disk). It also references the sibling 'add_tracked_file' as the opposite operation. Could mention 'scan_tracked_files' to find paths, but it's not essential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_thinking_profileMetis โ Reset Thinking ProfileA
Clear all thinking_profile_events and reset thinking-profile.yaml to defaults.
This erases all recorded preference signals and restores the default profile.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses destructive behavior ('erases all recorded preference signals') but could be more explicit about irreversibility or side effects. No annotations exist to shift the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action, no fluff. Every word is necessary and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no annotations, the description covers the essential effects. Could mention whether the action is reversible or if any confirmation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters (0 params, baseline 4). The description adds context about what resources are affected (events and yaml), compensating for the absence of parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action ('clear all thinking_profile_events and reset thinking-profile.yaml to defaults') and resource, distinguishing it from siblings like 'update_thinking_profile' or 'record_thinking_event'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for resetting to defaults but lacks explicit guidance on when to use vs. alternatives (e.g., 'update_thinking_profile') or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_decisionMetis โ Resolve DecisionA
Close an open decision: agreed, rejected, deferred or dropped.
An agreed decision that reads as a standing rule is also copied into
user_decisions, so it starts being honoured rather than merely recorded.
Args:
od_id: From review_open_decisions().
state: agreed | rejected | deferred | dropped
why: One line on the reasoning โ this is the part you cannot reconstruct later.
| Name | Required | Description | Default |
|---|---|---|---|
| why | No | ||
| od_id | Yes | ||
| state | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 does real work: it discloses the non-obvious side effect that an agreed standing-rule decision is copied into user_decisions and starts being honoured. It also flags that 'why' is the part you cannot reconstruct later. It stops short of saying whether a resolution can be reversed or re-opened.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation and its state vocabulary, then a single side-effect sentence, then a compact Args block. No filler; each line adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and the parameter and side-effect coverage are strong for an unannotated mutation tool. The remaining gap is failure/reversibility behaviour (invalid od_id, re-resolution of an already-closed decision).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description fully compensates: od_id gets provenance ('From review_open_decisions()'), state gets the four legal values that the schema does not encode as an enum, and why gets a purpose note. All three parameters gain meaning not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Close an open decision') plus the four terminal states, which pins down the operation exactly. It also implies the counterpart tool by naming review_open_decisions() as the source of od_id, so the agent can separate it from the wider decision-tool family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage flow is implied rather than stated: od_id 'From review_open_decisions()' tells the agent to review first. But there is no explicit guidance on how this differs from sibling decision tools such as commit_session_decisions, promote_session_decisions or record_decision, nor any when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_dbMetis โ Restore DbA
Restore the Metis database from a backup.
Renames the current live database to <db>.pre-restore.<timestamp>
before overwriting, so you can recover if something goes wrong.
IMPORTANT: This overwrites the live database. All changes since the backup
was taken will be lost. The dashboard must be restarted after restore.
Args:
backup_path: Full path to the .sqlite backup to restore from.
confirm: Must be the string 'YES' to proceed.
Returns JSON with status and paths.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| backup_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavior: it renames the current database, overwrites the live database, loses all changes since backup, and requires a restart after restore.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for purpose, important warnings, and args. It is slightly verbose but front-loads critical information efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the destructive nature and existence of an output schema, the description adequately covers prerequisites, behavioral details, and post-action requirements, making it complete for an agent to use safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds crucial meaning: backup_path is described as a full path to .sqlite backup, and confirm must be the string 'YES' to proceed, which is not clear from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Restore the Metis database from a backup' with a specific verb and resource. It distinguishes itself from the sibling 'backup_db' by being the restore counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for restoring from a backup and warns about overwriting and restart, but does not explicitly guide when to use this tool versus alternatives like backup_db or list_backups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_courseMetis ยท Course Builder โ Review CourseA
Step 6 โ Run quality checks on a drafted course before publishing.
Checks:
- All lessons in lessons.json have a corresponding file on disk
- Each lesson file contains the required section headers
- No lessons are empty (< 200 chars)
- lessons.json is valid JSON with modules and lessons arrays
Returns a pass/fail report. Fix any failures before calling publish_course().
Args:
slug: The course slug to review.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, description lists checks performed but does not state side effects (read-only, no modifications), error conditions, or permissions needed. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-organized with step number, purpose, bulleted checks, instruction, and parameter. No redundant sentences, all content earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Mentions return of pass/fail report, but with output schema present, description need not detail return structure. Lacks prerequisites and report interpretation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter 'slug' described as 'The course slug to review.' Schema coverage is 0%, so description adds basic meaning but not detailed syntax or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Run quality checks on a drafted course before publishing' and lists specific checks, distinguishing it from sibling tools like publish_course.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells to fix failures before calling publish_course, implying usage timing. Does not mention alternatives or when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_open_decisionsMetis โ Review Open DecisionsA
Walk the decisions waiting on you, most-repeated first.
Ordered by how often a decision has been restated, because the one you keep
circling is the one costing you most.
Args:
limit: How many to show.
state: open | agreed | rejected | deferred | dropped | all
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| state | No | open |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose a non-obvious behavioral trait โ results are sorted by how often a decision was restated โ but never states that this is a read-only operation with no side effects, nor what happens when state is set to 'all' versus a specific state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the ordering rule, and the rationale sentence for the ordering earns its place by explaining why ordering is by repetition. The Args block is compact. Slight cost from the poetic framing, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and both parameters are covered. What is missing is whether the repetition ordering applies across all state values or only 'open', and confirmation that the call is non-mutating โ a gap that matters given zero annotation coverage on a decision-related tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for the important case: it enumerates the six valid state values (open | agreed | rejected | deferred | dropped | all) that the schema only types as a bare string. 'limit: How many to show' is thin but serviceable for an integer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('walk the decisions waiting on you') plus the distinctive ordering rule ('most-repeated first'), which an agent cannot infer from the name. It stops short of naming how it differs from sibling decision tools like recall_decisions, show_agent_decisions, or resolve_decision, so sibling differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Decisions waiting on you' implies a review workflow, and the default state of 'open' reinforces that this is for pending items. However, there is no explicit when-to-use versus recall_decisions (retrieval) or resolve_decision (mutation), and no statement of exclusions or preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_maintenanceMetis โ Run MaintenanceA
Run a safe Metis maintenance operation without needing a terminal.
For researchers working in a chat client, where there is no shell. Every
operation is idempotent, reversible and destroys nothing; there is no way to
pass an arbitrary command.
Args:
operation: One of โ
status what is running, what ran last, how big the corpus is
restart-dashboard restart the Metis dashboard
scan-library search every literature source now
scan-news refresh the news feeds now
pickup-downloads file papers downloaded through the browser
rebuild-index index PDFs added to a knowledge layer
health-check run the self-test
Returns:
What happened, in plain language.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | status |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 does well: it explicitly guarantees idempotency, reversibility, that nothing is destroyed, and that no arbitrary command can be passed โ the key safety facts for a maintenance/ops tool. It omits whether any operation is disruptive (e.g. whether restart-dashboard interrupts in-flight work) or how long operations take.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The safety guarantee is front-loaded and the operation list is dense and useful rather than padded. The "Args:"/"Returns:" docstring scaffolding is slightly mechanical and the Returns block duplicates the output schema, but the content justifies most of the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema, the description covers the two things that matter most: the complete operation vocabulary and the safety contract. Minor gaps remain around side effects of individual operations and whether any are long-running or blocking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single `operation` parameter has no description and no enum constraint, so the description is the only source of allowed values โ and it enumerates all seven with a one-line meaning each (status, restart-dashboard, scan-library, etc.). This is essential information found nowhere else.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Run a safe Metis maintenance operation") and enumerates the seven operations, so the agent knows exactly what the tool does. It does not, however, distinguish itself from siblings with overlapping operations such as scan_library, scan_news, index_library_pdfs, or metis_doctor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"For researchers working in a chat client, where there is no shell" gives a clear situational context for use, which is better than nothing. But it never says when to prefer this tool over the many siblings that perform the same actions (scan_news, scan_library, metis_doctor), leaving the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_metisMetis โ Run MetisA
Master /metis entry point โ runs the 11-stage pipeline and returns a routing decision.
Every /metis invocation passes through here. The pipeline:
1. Bootstraps or resumes the session
2. Classifies content (PUBLIC/INTERNAL/CONFIDENTIAL/SENSITIVE)
3. Data Guardian: blocks SENSITIVE requests outright
4. Cybersecurity: blocks prompt injection and suspicious URLs
5. Parses intent and selects the appropriate agent(s)
6. Allocates model and token budget
7. Assembles minimum surgical context from memory
8. Persists the turn to session_events
9. Returns routing decision โ agents execute and then call:
save_session_event(..., 'result', output)
log_agent_run(..., session_id=session_id)
write_reflexion(session_id, agent_slug, ...)
Stages 10 (logging) and 11 (reflexion) are called by the executing agent
after completing their work.
Args:
request: The researcher's request text.
session_id: Existing session ID if resuming. Leave empty to auto-bootstrap.
client: Which Claude client is calling ('code'|'chat'|'cowork'|'dashboard').
max_turns: Maximum pipeline turns before graceful truncation (default 20).
| Name | Required | Description | Default |
|---|---|---|---|
| client | No | code | |
| request | Yes | ||
| max_turns | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It reveals key behaviors: content classification, blocking sensitive requests, persistence to session_events, and returning a routing decision. However, it omits details on error handling, idempotency, or side effects beyond the pipeline steps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose at over 250 words, including a detailed bullet list of the 11 pipeline stages. While well-structured and informative, it could be more concise by summarizing the pipeline without enumerating every step.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 params, output schema exists), the description covers the pipeline flow, parameter semantics, and subsequent agent actions. It lacks details on error scenarios or return format, but the output schema (not shown) likely handles return clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides an 'Args' section with brief but meaningful explanations for each of the 4 parameters (e.g., 'Existing session ID if resuming. Leave empty to auto-bootstrap.'). This adds value beyond the schema's type and name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it is the 'Master /metis entry point' that runs an 11-stage pipeline and returns a routing decision. This clearly distinguishes it from sibling tools like 'metis_doctor' or 'session_bootstrap' by defining its central orchestrating role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes that 'Every /metis invocation passes through here' and details which stages are executed by the tool versus called by the agent later. This provides clear context for when to use it, though it does not explicitly list alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_brainstorm_outputMetis โ Save Brainstorm OutputA
Freeze a brainstorm session as a saved Markdown output.
Writes to outputs/brainstorms/<date>_<slug>.md and updates the
brainstorm_sessions table status to 'saved'.
Args:
session_uuid: The session identifier.
title: Short descriptive title for the brainstorm.
synthesis: The key insights and connections (Markdown-formatted).
action_items: Bullet-point action items or follow-up questions.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| synthesis | Yes | ||
| action_items | No | ||
| session_uuid | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description carries the burden of behavioral disclosure. It transparently states side effects: writes a file to 'outputs/brainstorms/' and updates the 'brainstorm_sessions' table status to 'saved'. This is good, though it could mention if the operation is idempotent or destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. It front-loads the main action, then lists side effects, and finally documents parameters in a clear list. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters and an output schema (not shown), the description adequately covers the tool's behavior, side effects, and parameter semantics. It does not explain return values, but the output schema likely covers that. The side effects (file write, table update) are explicitly stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description includes an Args section that adds brief descriptions for all four parameters (e.g., 'The session identifier', 'Short descriptive title'). These add meaning beyond the raw schema, though they are minimal. The baseline for low coverage is higher, so a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to save/freeze a brainstorm session as Markdown output. It specifies the action ('Freeze') and the resource ('brainstorm session'). While it distinguishes from siblings like 'brainstorm_turn' by focusing on final saving, it does not explicitly differentiate itself from other related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not indicate when to use this tool versus alternative tools (e.g., 'brainstorm_turn' for ongoing sessions, 'get_brainstorm_session' for retrieval). It lacks context on prerequisites or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_course_curriculumMetis ยท Course Builder โ Save Course CurriculumA
Step 4 โ Save the approved curriculum design for a course.
Call this after the Learning Architect has produced the curriculum.
Pass a JSON object with ``modules`` (array) and ``lessons`` (array).
Writes to `knowledge/courses/{slug}/course.json` and advances to Step 5.
Args:
slug: The course slug.
curriculum_json: JSON object with ``modules`` and ``lessons`` arrays.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| curriculum_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It discloses file write destination (`knowledge/courses/{slug}/course.json`) and state advancement (to Step 5). However, it omits side effects, error handling, permissions, or validation behavior. For a mutation tool with no annotations, this is adequate but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus argument list. Front-loaded with purpose and step. No redundant information. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists (though not shown) so return value documentation is not needed. Description explains the step context and file writing. Lacks details on error cases or input validation, but is sufficient for a simple 2-param tool within a larger workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description adds essential meaning: slug as course identifier, curriculum_json as JSON with modules and lessons arrays. This compensates for empty schema descriptions. Could be strengthened by detailing the structure of modules and lessons.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Save' and resource 'approved curriculum design for a course'. Identifies as Step 4 in a workflow, distinguishing it from sibling tools like save_course_outline (earlier step) and save_course_sources (different content).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance: 'Call this after the Learning Architect has produced the curriculum.' Provides context on when to use, but lacks when-not-to-use or alternatives. Workflow context (Step 4) helps agents understand ordering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_course_outlineMetis ยท Course Builder โ Save Course OutlineA
Save an approved course outline after Step 2 (Scope Plan).
Call this once the user has reviewed and approved the module outline.
Pass outline_json as a JSON array of module objects:
[{"module": 1, "title": "...", "bloom_level": "...", "hours": 2}, ...]
Args:
slug: The course slug returned by start_course_build()
outline_json: JSON array of module definitions
approved: Must be True to advance the build to Step 3 (Harvest)
Returns:
Confirmation and next-step instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| approved | No | ||
| outline_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It states the tool saves the outline and advances if approved is True. However, it does not explain side effects (e.g., overwriting), validation of input, or error conditions. The behavior is adequately described but lacks detail on 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an initial sentence, then 'Args:' and 'Returns:' sections. It is concise overall, though the parameter details could be slightly trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, parameters, and its place in a multi-step process. It mentions a return value ('Confirmation and next-step instructions'), but does not detail validation or error handling. Given the output schema exists, this is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning to each parameter: slug is linked to start_course_build, outline_json format is exemplified with module structure, and approved is explained with its effect. Since schema descriptions are absent (0% coverage), this compensates fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Save' and the resource 'course outline'. It specifies the step context ('after Step 2 (Scope Plan)') and that it advances to Step 3. This distinguishes it from sibling tools like save_course_curriculum and save_course_sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to call the tool 'once the user has reviewed and approved the module outline' and that 'approved must be True to advance'. This provides clear context, but it does not mention when not to use it or alternative tools for earlier/later steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_course_sourcesMetis ยท Course Builder โ Save Course SourcesA
Step 3 โ Save harvested source metadata for a course.
Call this after the Content Harvester has collected materials. Pass a
JSON array of source objects. Each source is written as a YAML file in
`knowledge/courses/{slug}/sources/` and the build advances to Step 4.
Args:
slug: The course slug.
sources: JSON array of source dicts โ each must have at least a
``title`` and one of ``url``, ``file_path``, or ``doi``.
Example: '[{"title": "OpenIntro Stats", "url": "https://openintro.org/book/os/", "type": "textbook"}]'
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| sources | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses behavioral effects (writes YAML files, advances build) but does not cover error handling, idempotency, or prerequisite steps. Adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with front-loaded purpose, clear structure, and no unnecessary words. Each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 parameters, no annotations, and presence of output schema, description explains input format, effect, and pipeline position. Lacks error scenarios but is otherwise complete for a simple save tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description adds meaning: explains slug as course slug and sources as JSON array with required fields and an example. Significantly compensates for schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Step 3 โ Save harvested source metadata for a course' with a specific verb and resource, and clearly distinguishes from sibling tools like save_course_curriculum and save_course_outline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Call this after the Content Harvester has collected materials', providing a clear precondition, and mentions that the build advances to Step 4, indicating sequence. Does not explicitly say when not to use, but the pipeline context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_daily_briefMetis ยท News Radar โ Save Daily BriefA
Save a composed brief so the dashboard widget shows it.
The write-back half of the brief round-trip: Claude Desktop or Claude Code
writes the brief from generate_daily_insight(), then calls this. It stores
the brief exactly as the dashboard's own generator would โ the coverage
footer is stripped and recorded (so tomorrow's brief does not repeat
today's lead), and the source links shown under the brief are filled in.
Args:
content: The finished brief, ending with its <<THREADS: ...>> line. Required.
sources: Leave empty โ the source links are filled in from the news table.
date: The key generate_daily_insight returned: YYYY-MM-DD, or with a
-weekly / -catchup suffix. Empty = today's daily brief.
model: Provenance tag. Empty = desktop-brief / desktop-weekly /
desktop-catchup, matching the suffix, which is what the dashboard reads.
Returns:
Confirmation with the key saved and what was recorded.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| model | No | ||
| content | Yes | ||
| sources | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the coverage footer is stripped and recorded so tomorrow's brief won't repeat today's lead, and that source links are auto-filled from the news table. It also says the brief is stored 'exactly as the dashboard's own generator would,' which tells the agent the stored form may differ from the input. It does not mention permissions, whether an existing brief for the same date is overwritten, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and workflow before the per-argument detail, and every sentence carries information. The Returns block is slightly redundant given a real output schema exists, and the docstring scaffolding adds a little length, but nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter write-back tool with an output schema, this covers purpose, sequencing, side effects on stored data, and every parameter's format and defaults. The remaining gap is write semantics: whether saving the same date twice overwrites, and what errors look like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it documents all four parameters: content's required format ending in the <<THREADS: ...>> line, sources should be left empty because it is filled in, date as the exact key generate_daily_insight returned including the -weekly/-catchup suffixes and the empty-means-today default, and model as a provenance tag with derived defaults. This is meaning the bare schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb, resource and observable effect ('Save a composed brief so the dashboard widget shows it'). The following paragraph makes clear this is the write-back counterpart to generate_daily_insight, so an agent can separate it from the sibling generators without reading either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly places the call in a sequence: generate_daily_insight() produces the brief, this tool stores it. That rules out most misuse. What's missing is an explicit exclusion or prerequisite statement (e.g. whether it can be called before generation, or what happens if a brief for that date already exists).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_lesson_draftMetis ยท Course Builder โ Save Lesson DraftA
Step 5 of the course build โ save one drafted lesson to disk.
Writes a single lesson's markdown into the course's lessons folder; call it
once per lesson during drafting. The content is validated and rejected
unless it contains all required sections, in order:
## Learning objectives, ## Prerequisites, ## Content (with ### Section N:
subsections), ## Summary, ## Exercises, ## Further reading. The filename is
derived from the lesson number and its title in lessons.json.
Args:
slug: The course slug; selects the
knowledge/courses/<slug>/lessons/ folder to write into.
lesson_id: The lesson id, which must match an id in lessons.json
(e.g. "lesson-01"); used to look up the title and build the filename.
content: The full markdown body of the lesson, including all required
sections listed above.
Returns:
A confirmation with the written file path, or a rejection message
listing the required sections that are missing.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| content | Yes | ||
| lesson_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description details validation requirements (required sections in order), filename derivation, and return types (confirmation or rejection). Does not mention overwrite behavior or permissions, but adequately covers key behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with purpose and context, then validation rules, then parameters. Every sentence adds value; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simple function (save a lesson draft), the description covers purpose, usage, validation, and return values. An output schema exists, so return explanation is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no descriptions in input schema), but the description includes a full Args section explaining each parameter's purpose and usage, fully compensating for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Step 5 of the course build โ save one drafted lesson to disk', specifying verb (save), resource (drafted lesson), and context, distinguishing it from sibling tools like save_course_curriculum or publish_course.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'call it once per lesson during drafting', providing clear context and expected frequency. Does not explicitly exclude alternatives, but sibling tools are distinct operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_project_figureMetis โ Save Project FigureA
Save a finished chart or visual (HTML) to a project so it shows on the dashboard.
Use after drawing a figure as an artifact: pass the same self-contained HTML
(inline SVG, or a chart library loaded from a CDN). It is stored under the
project and appears in the Figures section of that project's panel on the
Work tab, where it renders live. Saving again with the same title replaces it.
Args:
project_id: The project slug (as returned when the project was created).
title: Short figure title, shown above it on the dashboard.
html: The figure as HTML โ a full page, or a fragment that will be wrapped.
caption: One or two sentences on what the figure shows, including the
denominator and data source.
Returns:
Where it was saved and the dashboard link that shows it.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | ||
| title | Yes | ||
| caption | No | ||
| project_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses storage location, that the figure renders live in the Work tab, and the important overwrite semantic ('Saving again with the same title replaces it') โ an idempotency fact not inferable from the schema. It omits permissions, size limits, and failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the usage trigger before the parameter detail, and each section is scannable. The explicit Returns block is somewhat redundant given an output schema exists, and the prose is a touch longer than strictly needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter write tool with zero annotation coverage and no schema descriptions, the definition covers purpose, input format, storage, overwrite behavior, and destination. It lacks preconditions (does the project need to exist / be unarchived?) and any error or size-limit guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the Args block compensates fully: project_id is identified as the project slug returned at creation, title as the dashboard label, html as accepting a full page or a fragment that gets wrapped, and caption as needing denominator and data source โ real guidance, not restatement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Save a finished chart or visual (HTML) to a project') plus the observable effect ('shows on the dashboard', 'Figures section of that project's panel'). An agent can distinguish it from artifact/registration siblings like save_viz_exemplar or register_code_artifact from the text alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger ('Use after drawing a figure as an artifact') and describes the input contract (same self-contained HTML, inline SVG or CDN-loaded library). It does not name an alternative or a when-not-to-use case, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_reviewMetis โ Save ReviewA
Save an agent's output as a review file and record the run.
This is the standard way a Metis agent persists its work: it writes the
markdown to outputs/reviews/{agent_slug}/{date}_{task_slug}.md and, by
default, logs the run so the dashboard's Agents tab tracks it. Use it at the
end of any substantive agent task so the result is filed and discoverable.
Args:
agent_slug: Slug of the agent that produced the review
(e.g. "epidemiologist", "writing-partner").
task_slug: Short kebab-case slug identifying the task; becomes part of
the filename (e.g. "article1-methodology").
content: The full review content as markdown.
log_run: Whether to also record this as an agent run for the dashboard.
Defaults to True.
Returns:
A confirmation with the path of the saved review file.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| log_run | No | ||
| task_slug | Yes | ||
| agent_slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses file writing to specific path, default logging behavior, and confirmation return. With no annotations, this adequately informs about side effects and outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-organized with paragraphs then structured Args and Returns. Front-loaded with purpose, every sentence adds value, concise without missing key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All 4 parameters documented, output described, tool behavior fully explained. No gaps given the presence of output schema and sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description includes Args section with clear explanations for each parameter, including examples (e.g., 'epidemiologist') and default behavior for log_run, fully compensating for zero schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Save an agent's output as a review file and record the run.' Specific verb and resource, with context of standard persistence method, distinguishing it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use it at the end of any substantive agent task so the result is filed and discoverable.' Provides clear context but does not name specific alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_session_eventMetis โ Save Session EventA
Stage 8: Persist one atomic event to session_events (write-through guarantee).
Call this after every tool call, file write, and classification decision.
Event types: 'turn' | 'tool_call' | 'result' | 'file_write' | 'redline' | 'classification'
Args:
session_id: Session ID from session_bootstrap().
event_type: Category of event being recorded.
content: Event content (truncated to 2000 chars).
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| event_type | Yes | ||
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It mentions 'write-through guarantee' and 'content (truncated to 2000 chars)', adding useful context. However, it does not describe success/failure behavior, idempotency, or what happens on duplicate events.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line purpose, followed by usage guidance, event types, and parameter explanations. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (not shown), the description provides adequate context for a simple logging tool: when to use, what to provide, and truncation. It could mention error handling or return value, but the output schema likely covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains each parameter: session_id comes from session_bootstrap(), event_type is a category, and content is truncated. It also enumerates valid event types. While it lacks format constraints, it adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Persist one atomic event to session_events (write-through guarantee)'. It provides a specific verb and resource, and distinguishes itself from siblings by specifying it is for atomic event persistence and should be called after every tool call, file write, and classification decision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Call this after every tool call, file write, and classification decision.' This provides clear context, but it does not mention when not to use it or offer alternatives among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_session_summaryMetis ยท Memory Curator โ Save Session SummaryA
Save a summary of the current session to persistent memory.
Call this at the end of any substantive session so future sessions can
recall what was discussed, decided, or built โ the core of Metis's
cross-session continuity. The saved summary is searchable later via
search_session_memory and surfaces when you resume related work.
Args:
summary: A 2โ5 sentence, plain-English summary of what happened this
session. Required.
key_topics: Optional list of short topic tags for retrieval
(e.g. ["phase-10", "APScheduler"]).
decisions: Optional list of key decisions made
(e.g. ["switched to AGPL-3.0"]).
session_id: Optional identifier used to group related summaries; if
omitted, the summary is stored on its own.
client: Which Claude client this session ran in โ 'code' (Claude Code),
'chat' (Claude Desktop), or 'dashboard'. Lets the dashboard show a
Code-vs-Desktop breakdown. Optional; defaults to unset.
Returns:
A dict with the saved record's id and a confirmation status.
| Name | Required | Description | Default |
|---|---|---|---|
| client | No | ||
| summary | Yes | ||
| decisions | No | ||
| key_topics | No | ||
| session_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a fair job: it discloses that the write is persistent, that the record is searchable later and resurfaces on related work, and what the call returns (id plus confirmation status). It omits whether repeat saves duplicate or overwrite, and any permission or retention considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: purpose and timing first, then structured Args and Returns sections. A few phrases, notably "the core of Metis's cross-session continuity", are promotional filler rather than operational information, but the parameter block earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Five parameters with zero schema documentation and no output schema, yet every parameter is described with semantics and examples and the return value is summarized. An agent has enough to invoke it correctly on the first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must supply everything, and it does: summary is constrained to 2โ5 plain-English sentences, key_topics and decisions get concrete example values and purpose, session_id's grouping behaviour is explained including the omission case, and client enumerates code/chat/dashboard with the dashboard breakdown rationale.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Save a summary of the current session to persistent memory") and ties it to a named retrieval counterpart, search_session_memory. It does not differentiate from adjacent writers in the sibling list such as save_session_event, store_episodic_memory, or consolidate_session_memory, so an agent must infer the boundary from the noun 'summary'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger โ "Call this at the end of any substantive session" โ and describes the downstream payoff (later recall via search_session_memory). No exclusion or 'do not use when' guidance against the other session-memory writers is offered, which is the one gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_viz_exemplarMetis โ Save Viz ExemplarA
Record a visualization you admired, and why. The provenance layer.
Call this the moment the researcher says they like something. It is the cheapest of the
three writes and the one that makes the other two honest: a recipe whose
origin is unrecorded cannot be checked against the thing it came from.
Args:
title: What the piece is called.
what_you_liked: In his own words where possible. The most valuable field
in the row โ "I like it" is not reusable, "the labels sit on the
marks instead of in a legend" is.
url: Where it lives.
source: Publication, team or author.
published: Date of the ORIGINAL, not of saving.
kind: chart | map | diagram | flow | table | layout.
screenshot_path: Local image, if the page cannot be refetched later.
unverified: Anything in this row written from memory rather than a read.
Say so here; a library that launders recollection into fact is worse
than an empty one.
Returns:
The stored exemplar and its slug โ use that slug verbatim as
`derived_from`, since slugs are truncated to 60 characters.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| kind | No | ||
| title | Yes | ||
| source | No | ||
| published | No | ||
| unverified | No | ||
| what_you_liked | Yes | ||
| screenshot_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses that this is a write and the cheapest of three, and explains why provenance matters, but says nothing about permissions, duplicate handling, overwrite/update semantics, or what happens on invalid input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The Args/Returns layout is clean and the key constraint (slug truncated to 60 chars) is actionable, but several sentences are philosophical rather than operational ("a library that launders recollection into fact is worse than an empty one"). It is longer than needed for eight parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, yet the description still adds the critical cross-tool fact that the returned slug must be used verbatim as derived_from. Combined with full param coverage, the only real gap for a write tool is failure/permission behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description does the entire job: it explains all eight params with intent, including the non-obvious ones ("published: Date of the ORIGINAL, not of saving", the unverified field's purpose, and what makes what_you_liked reusable). This is material meaning the schema cannot supply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Record a visualization you admired, and why") and frames the tool's role as "the provenance layer," which distinguishes it conceptually from sibling write tools like save_viz_recipe and save_viz_style. An agent knows exactly what artifact this produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ("Call this the moment the researcher says they like something") and positions it against the other two writes. It never names the alternatives explicitly (save_viz_recipe, save_viz_style), so the routing is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_viz_recipeMetis โ Save Viz RecipeA
Store the METHOD of a visualization โ the half that survives a restyle.
A recipe is what makes a figure work: what the mark represents, what maps to
which channel, and what data shape it demands. Not the colours.
Args:
name: Descriptive, e.g. "unit-dot transition flow".
kind: chart | map | diagram | flow | table | layout.
one_liner: What it shows, and why that framing beats the obvious one.
encoding: What maps to position, colour, size, order.
mark_unit: What ONE mark is. Usually the decisive choice โ "one dot =
one person" and "one bar = a percentage" are different arguments
about the same numbers.
data_contract: JSON object of role -> meaning, e.g.
'{"unit_id":"one row per person","start_class":"origin group",
"end_class":"destination group"}'
The field that makes reuse mechanical. Without it the recipe is a
description; with it, a dataset can be checked against it.
interaction: static | hover | scroll-step | click-filter | animated.
medium: html/d3 | ggplot2 | plotly | svg | leaflet.
code: Working code if there is any. Never required โ a recipe with a
precise contract and no code is still reusable.
caveats: How this figure can mislead. Please fill this in; a stored
method with no stored failure mode is a way to be wrong faster.
default_style: viz_styles.slug to use unless told otherwise.
derived_from: viz_exemplars.slug this came from, copied verbatim.
Returns:
The stored recipe, plus warnings for anything left dangling.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ||
| kind | Yes | ||
| name | Yes | ||
| medium | No | ||
| caveats | No | ||
| encoding | No | ||
| mark_unit | No | ||
| one_liner | No | ||
| interaction | No | ||
| derived_from | No | ||
| data_contract | No | ||
| default_style | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and mostly does: it discloses that code is optional ('Never required'), that derived_from must be copied verbatim, that caveats is strongly expected, and that the write returns the stored recipe plus 'warnings for anything left dangling'. It stops short of saying whether a name collision overwrites or errors, or what permissions are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line thesis, then a clean Args block where each line earns its place. The opening framing prose ('the half that survives a restyle') is slightly literary for a tool spec but short enough not to be waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 12-param, annotation-free write tool is high-complexity and the description covers all parameters, the required-vs-optional intent, and the return behavior (reinforced by an output schema). The one real gap is idempotency/upsert behavior on duplicate names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 12 parameters, so the description must compensate and does: every field gets a semantic definition plus an inline example (mark_unit: 'one dot = one person'; data_contract: role -> meaning with a literal JSON sample). This is meaning an agent cannot get anywhere else.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('store the METHOD of a visualization') and immediately scopes it against the sibling concern it is not โ 'Not the colours' โ which separates it from save_viz_style without opening either schema. The noun is then defined concretely as mark/channel/data-shape rather than styling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: it says what to put in and that caveats should be filled, and implicitly distinguishes itself from the style tool. But there is no explicit 'call this when capturing a reusable method, use find_viz instead when retrieving' and no mention of siblings like save_viz_exemplar or check_viz_fit, which an agent could plausibly confuse it with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_viz_styleMetis โ Save Viz StyleA
Store the LOOK of a visualization, reusable across recipes.
Styles are rows here rather than prose in an agent prompt for one reason:
prose cannot be added to by saying "I like this". Before this table, the
seven styles Visualization Maker claimed were hand-edited markdown, and no
eighth was ever added.
Args:
name: e.g. "Upshot editorial", "paper austere".
one_liner: The feel, in one sentence.
good_for: paper | briefing | dashboard | talk | poster.
palette: Hex values AND what each one means. A palette whose roles are
unrecorded gets reused wrongly.
type_scale: Families, weights, sizes.
axis_treatment: Grid, ticks, spines โ usually how much to erase.
annotation_rule: Direct labels vs legend, and title voice. Often the
most transferable single rule a style has.
motion: none | transition | scroll-driven.
theme_pair: Light/dark token pairs, if the style has both.
notes: Anything else worth carrying.
derived_from: viz_exemplars.slug, copied verbatim.
unverified: Fields written from memory rather than measured off the
original. Exact hex values are the usual case.
Returns:
The stored style.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| notes | No | ||
| motion | No | ||
| palette | No | ||
| good_for | No | ||
| one_liner | No | ||
| theme_pair | No | ||
| type_scale | No | ||
| unverified | No | ||
| derived_from | No | ||
| axis_treatment | No | ||
| annotation_rule | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses useful semantics (derived_from copied verbatim, unverified marks memory-derived fields), but does not say what happens on a name collision (overwrite vs error), whether saving is reversible, or what the caller gets back beyond 'the stored style.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a clear one-line purpose and the parameter docs are tight. However, the middle paragraph about the history of seven hand-edited markdown styles is narrative justification aimed at a human reader and consumes space without changing how an agent calls the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so the brief 'Returns: The stored style' is sufficient. With 12 params and no annotations, the description supplies almost all needed field guidance; what's missing is only the duplicate-name/validation behavior an agent would want before writing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there are 12 parameters, so the description must compensate entirely โ and it does, documenting every field with meaning plus examples ('Upshot editorial', 'paper austere'), allowed values for good_for and motion, and the rationale for why palette roles and unverified flags matter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource: 'Store the LOOK of a visualization, reusable across recipes.' The `derived_from` reference to viz_exemplars.slug and the 'reusable across recipes' phrasing implicitly separates it from save_viz_recipe/save_viz_exemplar, but the differentiation is inferential rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains why styles live as rows rather than prompt prose (additive, not hand-edited), which implies when to call it โ when you have observed a style worth reusing. But it never names the sibling tools save_viz_recipe or save_viz_exemplar, nor states when a style should be saved here versus sketched as a recipe.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaffold_scriptMetis ยท Software Engineer โ Scaffold ScriptA
Assemble the raw material to write a NEW script from previous work.
Pulls the most relevant prior code, the project's dataset variables/paths,
and the cleaning steps โ so you can write a new script in the user's own
conventions (same names, paths, packages). Call this, then write the script.
Args:
goal: What the new script should do.
project_id: The project to scaffold for (prioritised, then cross-project).
language: Target language (r, python, โฆ).
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | ||
| language | No | r | |
| project_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details that the tool pulls prior code, variables, paths, and cleaning steps, and does not indicate any destructive actions. Though no annotations are provided, it conveys a readโonly assembly behavior. It could be more explicit about nonโmutability, but overall it is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short paragraphs and a bulletโstyle argument list. It frontโloads the core purpose and provides all essential information without extraneous text. Every sentence is purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's straightforward purpose (scaffolding a new script), the description adequately covers what it does, what inputs are needed, and how to use it in sequence. An output schema exists, so full detail on return values is not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema lacks descriptions (0% coverage), but the tool's description meaningfully defines all three parameters: goal, project_id, and language, explaining their purpose and defaults (e.g., language default 'r'). This adds significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Assemble the raw material to write a NEW script from previous work,' specifying the verb and resource. It distinguishes from sibling tools like 'analyze_script' by focusing on creating new scripts rather than analyzing existing ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises 'Call this, then write the script,' providing a clear sequence of use. It also explains the scope of project_id (prioritised then cross-project). However, it does not explicitly state when not to use this tool or mention alternatives, which would be beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_folder_for_intentMetis โ Scan Folder For IntentA
Detect a project's purpose from its folder contents.
Args:
folder_path: Absolute path to the project folder.
scan_type: One of:
"names" โ file/folder names only (fast, no content read)
"content" โ reads README, CLAUDE.md, PLANNING.md (more accurate)
"none" โ skip scan, return empty (user will describe manually)
| Name | Required | Description | Default |
|---|---|---|---|
| scan_type | No | names | |
| folder_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior fully. It reveals that 'names' skips content reading, 'content' reads specific files, and 'none' returns empty. But it omits details on error handling, permissions, or side effects, which is acceptable but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a one-sentence summary followed by a structured Args section. It is front-loaded with purpose. The Args list is slightly verbose but necessary for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity and presence of an output schema, the description covers the essential inputs and behaviors. It lacks edge-case handling (e.g., missing folder) but is sufficient for the intended simple use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description fully explains both parameters: folder_path as absolute path, and scan_type with three enumerated values and their behaviors. This adds substantial meaning beyond the schema's minimal titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: 'Detect a project's purpose from its folder contents.' It uses a specific verb (detect) and resource (project purpose from folder), and distinguishes from siblings like 'scan_project_folder' by focusing on intent detection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the three scan_type options with their use cases (fast vs accurate vs manual), providing clear context for when to choose each. However, it does not explicitly compare to alternatives like 'detect_projects' or state when not to use the tool, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_inboxMetis ยท News Radar โ Scan InboxA
Scan the inbox/ folder and auto-transcribe any audio files to ideas.
Detects audio files (.m4a, .mp3, .wav, .ogg, .flac, .aac) and, when
auto_transcribe_audio=True (default), transcribes each one with faster-whisper
and captures the transcript as an idea. The audio file is moved to
inbox/processed/ after successful transcription.
Non-audio files are listed but left for manual review.
Args:
auto_transcribe_audio: When True (default), automatically transcribe
audio files found in the inbox. Set to False to just list them.
| Name | Required | Description | Default |
|---|---|---|---|
| auto_transcribe_audio | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It discloses file movement to processed/, transcription method (faster-whisper), and handling of non-audio files (listed for manual review). It does not cover error handling or permissions, but covers key behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise, listing supported audio formats, processing steps, and parameter usage. It is well-structured with bullet-like lines and a clear separation of parameter description. Could be slightly shorter but still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no required fields, output schema exists), the description is largely complete. It explains input, process, and output (ideas). Missing details about return format are covered by the output schema, so overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description adds full value. It explains the single parameter 'auto_transcribe_audio' in detail: default behavior (True) and effect when set to False (list only). This compensates completely for the schema lack.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('scan the inbox/ folder and auto-transcribe any audio files to ideas'), identifying the resource (inbox) and the operation (transcribe). It includes supported audio formats and distinguishes itself from sibling tools like scan_literature, scan_news, etc., by focusing on inbox processing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does and when to use the parameter (auto-transcribe), but does not explicitly say when to avoid this tool or suggest alternatives among siblings. It provides context but lacks exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_libraryMetis ยท News Radar โ Scan LibraryA
Fetch the literature feeds and add new papers to the Library.
This is the Library's own scan: journal tables-of-contents and preprint
servers (PLOS NTDs, Parasites & Vectors, Malaria Journal, Lancet ID, CDC EID,
BMC Infectious Diseases, Int J Health Geographics, medRxiv, arXiv q-bio โฆ),
written to `new_publications` for the literature-alert surface.
Separate from `scan_news` on purpose: this builds a scientific background
rather than reporting what happened, so it runs on its own schedule and its
output never appears on the News surface. Deduplicates by URL.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose real side effects: rows are written to `new_publications`, duplicates are suppressed by URL, and the output is deliberately kept off the News surface. It stops short of prerequisites (network/config, credentials) and failure behavior when a feed is unreachable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and action in the first sentence, followed by scope and then the sibling contrast. The parenthetical feed roster is somewhat long and ends in an ellipsis, but it earns its place by showing how broad the scan is.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description still covers destination, dedup, and surface isolation. The main gap is operational context โ whether it needs network access, how long it takes, and what happens on partial feed failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty, so there is nothing for the description to clarify. Baseline 4 applies; it correctly avoids inventing inputs the caller might expect, such as a feed list or date range.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch the literature feeds and add new papers to the Library'), enumerates the actual sources, and names the destination table `new_publications`. It explicitly contrasts with the nearest sibling `scan_news`, so an agent can choose between them 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly sets the boundary against `scan_news` and explains why the split exists ('builds a scientific background rather than reporting what happened'). However, the sibling list is dense with other scanning/sync tools โ `scan_literature`, `full_scan`, `scan_pubmed_alerts`, `scan_openalex`, `sync_zotero_library`, `check_news_feeds` โ and none of those are disambiguated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_literatureMetis ยท News Radar โ Scan LiteratureA
Scan inputs/literature/ for new PDFs and register them in literature_metadata.
Walks all subdirectories. Uses the parent folder name as a domain tag.
Deduplicates by title so running multiple times is safe.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses key behaviors: recursive directory walk, domain tagging, title-based deduplication. However, it doesn't specify what happens to duplicates (skip? overwrite?) or mention any authorization needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise, front-loaded sentences. Every sentence adds value: purpose, behavior details, and safety guarantee. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description covers main points (location, action, safety, dedup). Could mention supported file types beyond PDFs or behavior on existing entries, but it's largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so the baseline is 4. The description adds operational context (subdirectory walk, tagging) that compensates for the lack of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('scan') and resource ('inputs/literature/ for new PDFs') and action ('register them in literature_metadata'). It clearly distinguishes from sibling tools like 'scan_folder_for_intent' or 'scan_news' by specifying the target directory and file type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that it walks all subdirectories, uses parent folder as domain tag, and deduplicates by title, making re-runs safe. While it doesn't explicitly contrast with alternatives, the context is clear enough to guide appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_nature_briefingsMetis โ Scan Nature BriefingsA
Fetch the latest Nature Briefing editions from the public archive feed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it does add some value: 'public archive feed' implies an unauthenticated read-only fetch, which is meaningful behavioral context. It stops short of saying how many editions are returned, whether results are deduplicated against prior scans, or any rate/caching behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, front-loading the verb and resource. Nothing is redundant or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with an output schema (so return values need no explanation), the description covers what is fetched and from where. The only meaningful gap is sibling disambiguation against nature_briefing, which an agent selecting between overlapping briefing tools would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to explain; the empty schema is self-evident. Baseline 4 applies since the description correctly conveys that the call needs no input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fetch') and resource ('latest Nature Briefing editions') plus the source ('public archive feed'), so the action is unambiguous. It does not, however, differentiate itself from the close sibling 'nature_briefing' or 'get_news_briefs', leaving overlap for the agent to resolve.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus the clearly related siblings (nature_briefing, get_news_briefs, scan_news, check_news_feeds). The word 'latest' hints at recency scoping but no trigger condition or exclusion is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_newsMetis ยท News Radar โ Scan NewsA
Fetch the news feeds and add new items to the News surface.
Scans journalism only โ outbreak surveillance (ECDC threats report, WHO AFRO,
PAHO), science reporting (ScienceDaily, Guardian Science, STAT, Nature news,
The Conversation Africa), humanitarian and disaster feeds (GDACS, ReliefWeb,
OCHA), Africa desks and policy sources. Journal tables-of-contents are NOT
scanned here: the primary literature is the Library's job, via
`scan_library`. Deduplicates by URL, so running it repeatedly is safe.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses URL-based deduplication and that repeated runs are safe, but it does not describe permission/network requirements, failure behavior, or rate limits, leaving meaningful behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action and scope, then lists sources and the sibling exclusion. The source enumeration is somewhat long but relevant to scope, so it earns most of its space without becoming disorganized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the zero-parameter schema and the existence of an output schema, the description provides enough context to select and invoke the tool: scope, sibling exclusion, and dedupe safety. It could be slightly more complete around operational behavior, but the core invocation context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter names or formats to clarify. The schema is empty and 100% covered, making the baseline score appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pairing ('Fetch the news feeds and add new items') and clearly defines the scan scope as journalism only. It also distinguishes this tool from `scan_library` by explicitly excluding journal tables-of-contents, so an agent can differentiate it from a nearby sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the categories this tool covers and explicitly says journal tables-of-contents are NOT scanned here, directing that use case to `scan_library`. This is a clear when-to-use and when-not-to-use signal with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_openalexMetis ยท Librarian โ Scan OpenalexA
Scan OpenAlex for recent papers matching a query.
OpenAlex covers 474M papers including preprints. Free API, no key required.
Results are inserted into news_briefs with source_type='article'.
Args:
query: Free-text search query. Defaults to the query in user-preferences.json
(openalex_query field), then to your configured research topics from
user-config.yaml, then to a generic global-health fallback.
days_back: How many days back to search (default: 1).
max_results: Maximum papers to retrieve (default: 10).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| days_back | No | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that results are inserted into news_briefs with source_type='article' and that the API is free and keyless. However, it does not cover rate limits, response format, error behavior, or what happens if max_results is exceeded. The fallback chain is helpful but behavioral aspects are partially covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a bulleted Args section. Every element adds value: the opening sentence states purpose, the second adds key context (coverage, API, side effect), and the Args map cleanly to the schema. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no required parameters and an output schema exists, the description sufficiently covers the tool's purpose, behavior, parameter semantics, and side effects (insertion into news_briefs). The fallback chain ensures the agent understands default behavior even without explicit user input. This is complete for a data-gathering tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so thoroughly: each parameter is explained with defaults and fallback logic for query, days_back, and max_results. The query parameter's fallback chain adds crucial context beyond the schema's type/default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action ('Scan OpenAlex for recent papers matching a query'), specifies the resource (OpenAlex), and clearly distinguishes it from sibling tools like search_semantic_scholar or search_literature. The verb 'scan' combined with 'recent papers' and 'query' leaves no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful context on query defaults and the free API, but does not explicitly state when to use this tool over alternatives (e.g., search_literature, search_semantic_scholar). No when-not-to-use or exclusion criteria are given, so the agent must infer from the OpenAlex-specific scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_outgoingMetis ยท Data Guardian โ Scan OutgoingA
Output rail: check a drafted response for leaked PII before it's sent.
The output-side complement to the read-side hook. Agents call this on any
response that might contain individual-level data; it enforces the
constitution's no-pii-output rule. Returns a verdict, what was found, and a
masked version safe to send.
Args:
text: The drafted response text to check.
Returns JSON: {safe: bool, found: {type: count}, masked: str}.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the action (checking for PII) and the return values (verdict, found, masked), but does not explicitly state whether the tool is read-only or if it has side effects. Given no annotations are provided, more explicit disclosure about safety traits would be beneficial, but the description still conveys core behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (6-7 sentences), well-structured with a title, explanation, and a returns section. Every sentence adds value, and the purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single input and a documented output schema (returning JSON with safe, found, masked), the description explains the output structure inline. It is complete and covers all necessary aspects for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'text', is clearly described in the description: 'The drafted response text to check.' This adds meaning beyond the schema, which only provides type and title. Since schema description coverage is 0%, the description fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'check a drafted response for leaked PII before it's sent.' It uses specific verbs and nouns ('check', 'drafted response', 'PII'), and distinguishes itself from sibling tools like 'check_data_safety' or 'scan_inbox' by emphasizing the output rail and complementing the read-side hook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs agents to call this on 'any response that might contain individual-level data' and mentions it enforces the constitution's rule. While it does not explicitly state when not to use or list alternatives, the context is clear and sufficient for deciding when to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_project_folderMetis โ Scan Project FolderA
Scan a project folder to detect work done since last scan.
Checks: git commits, modified files, todo completions, new documents.
Updates the project's scan_summary and last_scanned fields.
Also refreshes CLAUDE.md in the project folder.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behavioral traits: it updates scan_summary and last_scanned fields, and refreshes CLAUDE.md. This gives the agent awareness of side effects beyond the simple operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with four lines, each providing distinct information. It is front-loaded with the main action and efficient, though slightly more structure could improve clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately covers the tool's purpose and side effects. It does not mention prerequisites (e.g., project must be connected) but is otherwise complete for a simple one-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not elaborate on the project_id parameter beyond its name. While the parameter is straightforward, the description adds no additional meaning or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scans a project folder to detect work done since last scan, listing specific checks (git commits, modified files, todo completions, new documents). This distinguishes it from siblings like 'scan_project_scripts' and 'full_scan'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the description of what it does, but there is no explicit guidance on when to use this tool versus alternatives (e.g., scan_project_scripts) or any conditions/limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_project_scriptsMetis ยท Software Engineer โ Scan Project ScriptsA
Walk all R/Python scripts in a folder, extract metadata, and register them.
For each script found (.R, .Rmd, .qmd, .py):
- Parses packages, file reads/writes, variables, and transforms
- Auto-registers each as a code_artifact in the Code Repository
- Aggregates variables across all scripts
- Maps detected file paths to dataset names
Returns a summary: N scripts, M packages, K datasets, P variables.
Args:
folder_path: Absolute path to the folder to scan.
project_id: Project ID to associate the scripts with (optional).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | ||
| folder_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 details the scanning, parsing, and registration behavior, and notes the return summary. It does not mention potential side effects like overwriting or permissions, but overall adequately describes the tool's actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a header, bullet points, and an Args list. It is moderately concise, about 8 lines, with no superfluous content, though it could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (scanning multiple script types, registering artifacts, aggregating data) and the presence of an output schema (not shown but indicated), the description covers the key inputs and outputs. It explains the return summary (N scripts, M packages, etc.), making it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the tool description includes an 'Args' section explaining both parameters (folder_path and project_id). This adds meaning beyond the schema titles, compensating for the lack of schema-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool walks R/Python scripts, extracts metadata, and registers them as code artifacts. It lists specific file types and processing steps, but does not explicitly differentiate from sibling tools like scan_project_folder or scan_folder_for_intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description describes what the tool does but does not specify when to use it versus alternatives, nor does it mention when not to use it. Usage context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_pubmed_alertsMetis ยท Librarian โ Scan Pubmed AlertsA
Scan PubMed for recent papers matching a query.
Uses NCBI E-utilities (free, no API key required). Results are inserted
into news_briefs with source_type='article'. Safe to call daily from the
morning scan scheduler job.
Args:
query: PubMed search query. Defaults to the query in user-preferences.json
(pubmed_query field), then to your configured research field from
user-config.yaml, then to a generic global-health fallback.
reldate: Look back this many days (default: 1 = yesterday + today).
max_results: Maximum papers to retrieve (default: 15).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| reldate | No | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the free API, no key needed, daily safety, and insertion to news_briefs. However, lacks details on rate limits, error handling, or idempotency. Given no annotations, more transparency would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening statement, technical detail, usage context, and parameter explanations. It is reasonably concise for the information provided.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema available, the description covers purpose, parameters, use context, and behavior. It lacks return value description but the output schema likely fills that gap. Idempotency and error handling are omitted, but for a daily scan tool this may be sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description thoroughly explains each parameter: query's multi-source fallback, reldate's meaning and default, max_results' purpose. This provides substantial value beyond the minimal schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scans PubMed for recent papers matching a query. It mentions daily scheduling and response insertion, but does not explicitly contrast with sibling tools like scan_literature or search_literature, though the PubMed specificity is implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions daily scheduling context and safety, but does not provide when-not-to-use or alternative tools for more complex queries or different sources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_tracked_filesMetis โ Scan Tracked FilesA
Scan all tracked files and report which have changed since last scan.
Reads tracked_files table, checks actual file modification times,
and updates last_scanned timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden and discloses that it reads a table, checks file modification times, and updates timestamps. It clearly describes the operations performed, which is sufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with two sentences, front-loading the key purpose. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, the description is fairly complete, explaining the process and purpose. The presence of an output schema reduces the need to detail return values. Minor gap: no mention of error cases or output format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so schema coverage is 100% trivially. The description adds no parameter-specific meaning, but the baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scans tracked files and reports changes since last scan, with details on how it works. It distinguishes itself from siblings like add_tracked_file or full_scan by focusing on scanning only tracked files for modifications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking changes in tracked files but lacks explicit guidance on when to use this tool versus alternatives like full_scan or scan_inbox. No exclusions or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_code_repositoryMetis ยท Software Engineer โ Search Code RepositoryA
Search the Code Repository for prior code, variables and treatments.
Finds reusable scripts/functions, dataset variables and cleaning steps that
match a query โ e.g. "Poisson model offset" or "catastrophic expenditure".
Args:
query: What you're looking for.
project_id: Restrict to one project. Optional.
language: Restrict to a language (r, python, โฆ). Optional.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| language | No | ||
| project_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose all behavioral traits. It only describes the search action and does not mention any side effects, rate limits, pagination, or limitations. The read-only nature is implied but not confirmed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the main purpose. The separate 'Args' section for parameters is well-structured. Every sentence contributes meaning, though the examples could be slightly more integrated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic functionality and parameter semantics. Since an output schema is present, the lack of return value explanation is acceptable. However, it does not address edge cases like empty results or multiple matches, leaving some gaps for a simple search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the 'Args' section in the description adds meaningful descriptions for all three parameters (e.g., 'What you're looking for.' for query). These add value beyond the schema's titles and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches the Code Repository for code, variables, and treatments, with concrete examples ('Poisson model offset'). It distinguishes from sibling search tools by specifying the unique resource (Code Repository).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through its purpose and examples but does not explicitly state when to use this tool over alternatives like search_fulltext or search_literature. No when-not or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_fulltextMetis ยท Librarian โ Search FulltextA
Full-text keyword search across all indexed PDFs.
Exact KEYWORD search across the full body text of your indexed PDFs. For
meaning-based (semantic/vector) PDF search use search_pdf_knowledge; for
reference metadata only use search_library.
Searches the library_fulltext table for papers containing your keywords.
More powerful than title/abstract search โ finds methodological details
in the body of papers.
Args:
query: Keywords to search for, space-separated (words shorter than three
letters and common stop-words are ignored).
max_results: Maximum number of results to return (default 10).
Returns:
A single TextContent listing each matching paper's title (or filename)
with a highlighted snippet around the first matched keyword, or a
"no results" / "no usable keywords" message.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. Describes search scope (library_fulltext table), stop-word handling, and return format (snippet with title/filename). Lacks detail on user scoping or performance, but covers key behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise yet complete: uses clear sections, front-loads purpose, and includes Args list. No redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two simple parameters and no output schema provided, the description covers purpose, usage, parameters, and return format comprehensively. Output schema is described in text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description fully documents both parameters: query (space-separated, with stop-word filtering) and max_results (default 10). Adds meaning far beyond raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it performs full-text keyword search across all indexed PDFs, with verb (search), resource (full text), and scope (all PDFs). Explicitly distinguishes from siblings by naming alternatives for semantic search and metadata-only search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool (exact keyword search) versus alternatives (search_pdf_knowledge for semantic search, search_library for metadata). Mentions it is more powerful than title/abstract search, aiding correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_libraryMetis ยท Librarian โ Search LibraryA
Search the local literature library for matching papers.
Searches your saved reference METADATA (title/authors/abstract/tags of papers
in your Zotero-synced + manual library). For meaning-based search inside PDF
body text use search_pdf_knowledge; for exact keyword search of PDF text use
search_fulltext; for an online/external literature lookup use search_literature.
Runs a substring search across the user's indexed references (Zotero-synced
plus manually added) so you can find what they already have before going to
the internet. Matches the query against title, authors, abstract, and tags,
returning the newest papers first. For richer literature workflows see
ask_library, search_literature, and export_citations.
Args:
query: Search terms matched as a substring against title, authors,
abstract, and tags.
limit: Maximum number of papers to return, ordered newest year first
(default 10).
Returns:
A formatted text list of matching papers (title, authors, year, journal,
DOI, abstract snippet), or a "no papers found" message.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 discloses that it runs a substring search across indexed references, matches against title/authors/abstract/tags, returns newest first, and returns a formatted list or no-papers message. This is good behavioral context, though it doesn't explicitly state it is read-only or mention 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a concise first sentence, a paragraph explaining scope and alternatives, another on behavior, then clearly labeled Args and Returns sections. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, the description covers purpose, usage guidelines, parameters, and return format. It mentions output schema implicitly by describing the return. Minor details like case sensitivity or pagination are missing, but overall it is quite complete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description compensates fully. It explains 'query' as substring search against title/authors/abstract/tags and 'limit' as max number of papers, ordered newest first, with a default of 10. This adds significant meaning beyond the schema's type and required constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches the local literature library for matching papers, specifying the resource (local literature library) and the action (search). It distinguishes from siblings by mentioning alternatives for PDF body text search and online lookup, which helps the agent differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use: searches saved reference metadata before going to the internet, and for different types of searches (PDF body, exact keyword, online) it directs to specific sibling tools. This provides clear context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_literatureMetis ยท Librarian โ Search LiteratureA
Search the user's literature database.
Searches your curated/seeded literature catalogue by structured facets
(disease, method, geography, keyword). For your Zotero/manual reference
metadata use search_library; for full PDF body text use search_fulltext;
for semantic RAG over indexed PDFs use search_pdf_knowledge.
Searches the library_seeded SQLite table. Use this to find papers
by disease focus, methodology, geography, or any keyword.
Args:
query: Search term, matched as a case-insensitive substring.
field: Column to search -- one of "all", "disease", "method",
"geography", or "article".
limit: Maximum number of results to return (default 20).
Returns:
A single TextContent holding a markdown table of matching rows from the
library_seeded table, or an error/"no results" message if the database,
table, or column is missing or nothing matches.
| Name | Required | Description | Default |
|---|---|---|---|
| field | No | all | |
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully carries the burden. Discloses it searches a specific SQLite table, uses case-insensitive substring matching, returns markdown table or error message on missing data. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structured with purpose, sibling alternatives, details, args, returns. Every sentence adds value. Front-loaded with core purpose. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and high sibling count, description sufficiently covers purpose, parameters, behavior, return format, and error handling. Output schema exists, and description complements it by describing the table format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but description explains each parameter: query as case-insensitive substring, field with allowed values (all, disease, method, geography, article), limit with default 20. Adds complete meaning beyond bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'search' plus specific resource 'curated/seeded literature catalogue' and explicit facets (disease, method, geography, keyword). Distinguishes from three sibling tools by naming them and their use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use sibling tools (search_library, search_fulltext, search_pdf_knowledge) for different content, and when to use this tool for structured facets. Provides clear context for agent decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_literature_extendedMetis ยท Librarian โ Search Literature ExtendedB
Search literature with optional inclusion of archived items.
Searches library_seeded table across basename, relevance_note, disease,
geography, method fields. By default excludes archived items.
Args:
query: Search term.
include_archived: Include items with status='archived'. Default False.
limit: Max results. Default 20.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| include_archived | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It does not explicitly state that the tool is read-only, nor does it mention side effects, authentication needs, or rate limits. The focus is on parameter behavior rather than operational traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and uses a structured list for arguments, making it easy to parse. However, the initial sentence could be more front-loaded with the tool's primary function before diving into details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description appropriately focuses on input behavior and search scope. It covers defaults, field targets, and the archive toggle, which is adequate for a search tool of moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides clear, meaningful explanations for all three parameters (query, include_archived, limit), adding value since the input schema has 0% coverage. Default values and meanings are well articulated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches literature across specific fields (basename, disease, etc.) and allows inclusion of archived items. However, it does not explicitly distinguish from its likely sibling search_literature, leaving the 'extended' aspect somewhat inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions default exclusion of archived items and the include_archived parameter, providing basic usage context. But it offers no guidance on when to prefer this tool over alternatives like search_literature or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_memoryMetis ยท Memory Curator โ Search MemoryA
Search the memory palace by keyword.
Looks across Metis's long-term memory to recall past context โ what was
decided, found, or noted before. It searches the memory_entries table
(title, summary, topics) and also greps journal/**/*.md files on disk, so
both structured memory and freeform journal notes are covered.
Args:
query: Keyword or phrase to match against entry titles, summaries,
topics, and journal note text.
entry_type: Optional filter limiting results to one kind of entry โ
"session", "journal", "idea", "decision", or "topic". Empty string
(default) searches all types.
Returns:
A text block of matching memory entries and journal hits, or a message
when nothing matches.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| entry_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully disclose behavior. It describes search sources and return format but lacks details on idempotency, permissions, or side effects. As a read-only search, it is acceptable but not explicit about safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns). It is concise while providing necessary details, though it could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 non-enum parameters and an output schema, the description adequately explains the search sources, fields covered, and return format. No critical gaps for a simple search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has no descriptions (0% coverage). The description adds meaning: query is a keyword or phrase, entry_type lists possible values (session, journal, idea, decision, topic) and default behavior. This compensates well for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches memory by keyword across both structured entries and journal notes, with explicit scope (memory_entries table and journal files). This is specific and distinct from sibling tools like search_session_memory or search_library.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what data is searched and mentions optional filtering by entry type. However, it does not explicitly contrast with other search tools or provide when-not-to-use guidance, though the scope is clear enough for basic usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_notesMetis โ Search NotesA
Search markdown notes across domains, projects, and library.
Case-insensitive substring search with surrounding context lines.
Args:
query: Search term.
scope: Where to search -- "all", "domains", "projects", "library".
limit: Maximum results (default 15).
max_chars_per_result: Truncate each result's context to this many characters (default 500).
Pass 0 for no truncation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| scope | No | all | |
| max_chars_per_result | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description discloses that it performs case-insensitive substring search with context lines and result truncation. However, it does not specify read-only nature, side effects, or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a one-line summary followed by structured parameter descriptions. No unnecessary words, and the information is efficiently front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and moderate complexity, the description covers core functionality well. Minor gaps: does not specify if search is on content or filename, nor the full return structure (handled by output schema).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description provides clear explanations for all four parameters: query, scope, limit, and max_chars_per_result (including special behavior for 0). Adds value beyond the schema's types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches markdown notes across specific scopes (domains, projects, library). It distinguishes from many sibling search tools by specifying 'markdown notes' and the supported scopes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like search_library or search_memory. Lacks context about when to choose this tool over similar ones.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pdf_knowledgeMetis ยท Librarian โ Search Pdf KnowledgeA
Semantic search across one or more knowledge database layers.
Meaning-based (vector) search over your knowledge-base PDF chunks โ the RAG
retrieval tool behind grounded, cited answers. For exact keyword matches use
search_fulltext; for reference metadata use search_library; for your own
notes/memory (not documents) use semantic_search.
Searches indexed PDF chunks using 768-dim nomic-embed vector similarity.
You can search a single layer or combine layers (e.g. PH background + HAT specialist).
Args:
query: Natural language question or keyword phrase to embed and match.
databases: List of database slugs to search; pass None (the default) to
search all indexed databases. Examples: ['ph-background'],
['hat-specialist', 'epi-methods'].
top_k: Number of results to return (default 8).
Returns:
A single TextContent listing the top-ranked PDF chunks (title, similarity
score, layer, domain, page, source file, and an excerpt), or a message if
nothing is indexed yet or no chunks match the requested databases.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| databases | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It explains the vector search method (768-dim nomic-embed), result structure (title, score, layer, etc.), and behavior for no matches. It could mention that it only searches indexed PDF chunks, but the mention of 'nothing is indexed yet' implies this. Overall transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet thorough, with clear sections: purpose, sibling comparison, technical detail, args, and returns. It uses about 10 sentences with no unnecessary words, front-loading the most critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, no nested objects) and the output schema existing (described as TextContent with detailed result format), the description is complete. It covers input semantics, behavioral constraints, return values, and usage context. No gaps evident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the input schema's type/default info. It provides natural language explanations for each parameter (query, databases, top_k), includes examples for databases, and clarifies the role of query as 'natural language question or keyword phrase.' This compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Semantic search across one or more knowledge database layers.' It identifies the specific verb (search) and resource (PDF knowledge), and distinguishes from siblings by specifying when to use alternatives like search_fulltext, search_library, and semantic_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool and when to use alternatives: 'For exact keyword matches use search_fulltext; for reference metadata use search_library; for your own notes/memory (not documents) use semantic_search.' This helps the agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_semantic_scholarMetis ยท Librarian โ Search Semantic ScholarA
Search Semantic Scholar for papers on a topic (citation-graph discovery).
Complements PubMed (scan_pubmed_alerts) and OpenAlex (scan_openalex) with
Semantic Scholar's 200M+ paper graph and citation counts. Free public Graph
API, no key required. Matched papers are inserted into news_briefs with
source_type='article' (domain 'Semantic Scholar') so the Librarian and the
dashboard surface them like any other discovered paper.
Args:
query: Free-text topic to search (e.g. "HAT elimination surveillance").
Defaults to your configured PubMed/topic query if empty.
max_results: Maximum papers to retrieve (default 10, max 100).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses a key side effect: matched papers are inserted into news_briefs with specific metadata. It also mentions the API is free and no key required. However, it doesn't mention rate limits, error handling, or the exact response format beyond the output schema existence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a concise intro, a contextual paragraph, and a clean Args list. Every sentence adds value without repetition. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but indicated), the description sufficiently covers the tool's purpose, behavior, and parameter details. It could be improved by briefly noting the return type or pagination behavior, but for a search tool with output schema, it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It fully explains both parameters: query with an example and default behavior, max_results with default and maximum. This adds essential meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs citation-graph discovery on Semantic Scholar, using a specific verb ('Search') and resource ('Semantic Scholar'). It distinguishes itself from siblings by explicitly naming complementary tools (scan_pubmed_alerts, scan_openalex) and highlighting the unique value of 200M+ papers and citation counts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: for citation-graph discovery and complements PubMed/OpenAlex. It mentions no API key required, but does not explicitly state when not to use it or provide strict exclusions. The guidance is strong but lacks explicit when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_session_memoryMetis ยท Memory Curator โ Search Session MemoryA
Search past session summaries for a topic or keyword.
Use this to recall what was discussed in previous sessions โ e.g.
"what did we decide about the installer?" or "when did we build APScheduler?".
Args:
query: Keyword or phrase to search for.
limit: Maximum number of results to return (default 10).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It implies a read-only search but does not explicitly state non-destructive behavior, authorization needs, or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loads the purpose, and includes helpful examples. The argument list is clear. Minor redundancy could be removed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with an output schema, the description covers purpose, usage, and parameters adequately. It does not detail pagination or result format, but these are likely in the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description adds value by explaining each parameter: query is a keyword/phrase, limit is max results with default 10. This compensates well for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search past session summaries for a topic or keyword', using a specific verb and resource. It distinguishes from siblings like search_memory or recall by focusing on session summaries, though explicit differentiation is not given.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context with examples ('what did we decide about the installer?') indicating when to use this tool. However, it does not explicitly exclude alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_searchMetis ยท Memory Curator โ Semantic SearchA
Search across memory layers using vector similarity + keyword RRF fusion.
Searches your personal MEMORY layers (episodic/semantic/procedural โ things
you or Metis recorded), NOT your document library. For documents/PDFs use
search_pdf_knowledge; for reference metadata use search_library.
Retrieval pipeline (M5.8):
1. Embed the query.
2. Run vector similarity search on each requested layer.
3. Run keyword LIKE search on each layer.
4. Fuse results using Reciprocal Rank Fusion (RRF, k=60).
5. Return top_k deduplicated results ranked by fused score.
Args:
query: Natural language search query to embed and keyword-match.
layers: Comma-separated memory layers to search, drawn from 'episodic',
'semantic', and 'procedural'.
top_k: Number of fused results to return (default 5).
Returns:
A single TextContent listing the top fused results (layer, title, score,
timestamp, and a content preview), or a "no results" / error message.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| layers | No | episodic,semantic,procedural |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description fully discloses the retrieval pipeline (embedding, vector search, keyword search, RRF fusion, dedup), scope constraints, and the fact that it returns fused results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a summary, restrictions, pipeline details (step-by-step), and parameter documentation. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters and an output schema, the description covers the retrieval process, scope, parameters, and return format completely, leaving no gaps for an agent to misunderstand.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description includes an Args section that explains each parameter (query, layers, top_k), their types, defaults, and for layers the allowed values. Could be slightly more precise about layers format but adds significant value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it searches across memory layers using vector similarity and RRF fusion, and explicitly distinguishes from sibling tools search_pdf_knowledge and search_library.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use (personal memory layers) and when not to use (document library), with clear alternatives for other use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_bootstrapMetis โ Session BootstrapA
Stage 1: Find or create a session for the current computer.
Checks for an active session (same computer, last active within 2 hours).
If found: resumes it and returns the last 5 events.
If not: creates a new session and seeds context from recent memory.
Args:
client: Which Claude client is calling ('code'|'chat'|'cowork'|'dashboard').
| Name | Required | Description | Default |
|---|---|---|---|
| client | No | code |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes full responsibility for behavioral disclosure. It explains the conditional logic (check for active session, resume or create), the return of last 5 events or seeding from memory, and the required client parameter. It does not mention side effects like database writes or error handling, but the disclosed behavior is sufficient for most use cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using a clear header and bullet-like structure. Every sentence adds value: purpose, conditional logic, and parameter. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but indicated), the description need not detail return values, but it still mentions returning last 5 events or seeding context. It covers the core behavior well, though it could mention error scenarios or prerequisites like a valid computer identifier.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'client' has a default in the schema but no description or enum. The description adds explicit allowed values ('code', 'chat', 'cowork', 'dashboard'), which is critical for correct invocation. This significantly adds meaning beyond the schema, especially with 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Find or create a session for the current computer.' It uses a specific verb ('find or create') and resource ('session'), and distinguishes itself among siblings by being the only bootstrap tool. The detailed conditional logic (resume vs create) adds further clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage as a first step ('Stage 1') but does not explicitly state when to use or not use this tool, nor does it compare to alternatives. While the context suggests it's a prerequisite, the lack of explicit usage guidance lowers the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_backup_scheduleMetis โ Set Backup ScheduleA
Configure the nightly backup schedule.
The schedule is read by the scheduler (Phase 10) to trigger backup_db()
automatically. This tool only persists the configuration.
Args:
enabled: Whether automatic nightly backups are on.
time_utc: Time in HH:MM UTC to run the backup (e.g. '02:00').
keep_days: How many days of backups to retain (older ones deleted).
destination: Backup directory (defaults to metis/system/backups/).
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | No | ||
| time_utc | No | 02:00 | |
| keep_days | No | ||
| destination | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 discloses that the tool only persists configuration and that older backups will be deleted based on keep_days when the scheduler runs. However, it does not mention authorization needed, error states, or reversibility of settings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with a clear opening clause, a brief behavioral note, and a parameter list. Every sentence serves a purpose, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose and all parameters well. However, it does not mention the presence of an output schema or what the tool returns (e.g., a confirmation or the schedule state). Slightly incomplete for a tool with an output schema, but otherwise comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It adds meaningful explanations for all 4 parameters: enabled (on/off), time_utc (format hint 'HH:MM'), keep_days (retention policy), and destination (default path). This adds significant value beyond the schema's bare types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Configure the nightly backup schedule' with specific verb and resource. It further explains that the schedule triggers backup_db() automatically and that this tool only persists the configuration, distinguishing itself from related tools like backup_db and get_backup_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by stating the scheduler reads the schedule to trigger backup_db(), and that the tool only persists config. However, it does not explicitly state when to use this tool vs alternatives like backup_db for immediate backup or get_backup_schedule for viewing, nor does it provide 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.
set_discovery_tipsMetis โ Set Discovery TipsB
Adjust the feature-tips preference (the user's control).
Args:
enabled: True/False to turn tips on/off entirely.
power_user: True = expert mode (tips stay quiet); False = guided mode.
snooze_days: >0 to snooze ALL tips for N days ("remind me later").
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | No | ||
| power_user | No | ||
| snooze_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states 'adjust the feature-tips preference' without describing persistence, side effects, or response behavior. Agent has no insight into what happens after execution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: a single line for purpose followed by three lines for parameters. Front-loaded with purpose. No unnecessary words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple preferences tool, parameter descriptions are adequate. However, lacks information about output format or return value (output schema exists but unused), and whether changes take effect immediately or require confirmation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description is the sole source of parameter meaning. It adds clear, actionable explanations for each parameter: enabled (turn on/off), power_user (expert vs guided mode), snooze_days (snooze for N days). Significantly enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it adjusts the feature-tips preference, using a specific verb ('adjust') and resource ('feature-tips preference'). This distinguishes it from sibling tools like 'next_discovery_tip' (shows tip) and 'discovery_status' (gets status).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. Does not mention prerequisites, exclusions, or when not to use it. Agents must infer usage from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_focus_stateMetis โ Set Focus StateA
Move a focus between the shelf, following, and the archive.
`active` on the shelf and in the left navbar. At most 3 โ a shelf with
ten things on it is not a focus.
`following` defined and queryable, off the navbar. Attention moved on.
`archived` read-only, no refresh, still openable.
Nothing is ever deleted, and nothing the focus SHOWED is affected by any of
these transitions: notes, ideas, papers and briefs live in their own tables
and keep their tags. Removing a lens cannot remove what you saw through it.
Args:
slug: The focus slug.
state: active | following | archived.
Returns:
The new shelf layout, or an explanation of why the move was refused.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| state | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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: it discloses that nothing is deleted, that archived is read-only with no refresh, that downstream content (notes, ideas, papers, briefs) keeps its tags and is untouched, and that moves can be refused with an explanation. That is unusually complete behavioral and safety disclosure for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then a tight state table, then args and returns. The "Removing a lens cannot remove what you saw through it" line is a rhetorical flourish, but it reinforces the non-destructive guarantee rather than padding, and total length stays modest.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations, the description covers what changes, what does not change, the capacity limit, the failure mode, and even names the return payload โ with an output schema already present to detail the shelf layout. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% โ both `slug` and `state` are bare strings with no descriptions or enum โ so the description must compensate, and it does: `state` is documented as active | following | archived with full semantics for each value. The only gap is `slug`, which gets a one-line gloss ("The focus slug") but no format or where-to-obtain-it detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("Move a focus between the shelf, following, and the archive") and immediately enumerates the three target states, so an agent knows exactly what the tool does. It never names the adjacent siblings (create_focus_area, show_focus_areas, focus_keep/focus_decline), so the differentiation is left to inference rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each state is given a concrete operational meaning ("on the shelf and in the left navbar", "defined and queryable, off the navbar", "read-only, no refresh, still openable"), which is exactly the guidance needed to pick a value. The hard constraint ("At most 3") is stated up front, though there is no explicit when-not-to-use or pointer to an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_knowledge_layer_enabledMetis ยท Librarian โ Set Knowledge Layer EnabledA
Turn a knowledge background layer on or off for searching.
A disabled layer is skipped when a question searches "all" layers, so its
documents stop influencing answers โ useful when a background is off-topic for
the work at hand. It is not deleted, and naming it explicitly in a search still
reaches it.
Args:
database: The layer's slug (e.g. 'ph-background', 'hat-specialist').
enabled: True to include it in searches, False to exclude it.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | No | ||
| database | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that a disabled layer is skipped only in 'all'-layer searches, that documents are not deleted, and that explicit naming still reaches it. It omits persistence/lifecycle details (does the toggle stick across sessions) and error behavior for an unknown slug.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior and its consequence are front-loaded in the first two sentences with no filler. The Args block is useful but slightly padded by hard-wrapped lines and a redundant restatement of 'enabled' semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter toggle with an output schema, the description covers purpose, effect, non-destructiveness, and both arguments. The remaining gap is failure modes and whether the setting persists, neither of which is documented elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the Args section is doing real work: it defines 'database' as a slug with two concrete examples and explains 'enabled' as include/exclude from searches. It doesn't note that 'enabled' is optional with a default of true, which the schema alone reveals.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Turn a knowledge background layer on or off for searching') and immediately explains the effect of the off state. Clearly distinguishable from sibling tools like delete_knowledge_database or list_knowledge_databases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete trigger ('useful when a background is off-topic for the work at hand') and implicitly contrasts with deletion by noting the layer is not removed. It does not name an explicit alternative tool or state prerequisites, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_network_policyMetis ยท Data Guardian โ Set Network PolicyA
Set the current network access policy for all agents.
'strict' โ No internet access. Only local DB, files, and MCP tools.
'normal' โ Default. Librarian and News Radar may access allowed domains.
'offline' โ Airplane mode. All external requests blocked.
Args:
policy: One of 'strict' | 'normal' | 'offline'.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains the effect of each policy mode (strict, normal, offline) and that it applies to all agents, but does not mention requirements, reversibility, or potential disruptions (e.g., dropping connections).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, using a brief sentence followed by a bullet list and explicit args. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter setter with an output schema, the description covers the core functionality well. It could mention return behavior or confirmation, but the output schema likely covers that. Missing failure conditions or required permissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It defines the only parameter 'policy' with three valid values and their meanings, which adds significant value beyond the empty schema. However, it could have listed the values as an explicit enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Set the current network access policy for all agents' and distinguishes three modes with explicit explanations. This differentiates it from the sibling 'get_network_policy' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what each policy does but does not provide when to use this tool versus alternatives. There is no mention of prerequisites, side effects, or guidance on when to choose which policy. However, the context is clear regarding the tool's function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_project_categoryMetis โ Set Project CategoryA
Assign or change a project's category.
Sets the grouping label on a project so it sorts with related work on the
dashboard. Call get_project_categories first to reuse an existing label
rather than creating a near-duplicate.
Args:
project_id: The project_id of the project to update.
category: The category label to assign (e.g. "Article", "Grant");
surrounding whitespace is trimmed.
Returns:
A confirmation message naming the category and project that were set.
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | ||
| project_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions whitespace trimming and return confirmation but lacks detail on permissions, reversibility, or side effects. Adequate for a simple update.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded: a short summary sentence, usage guidance, and a clean args/returns section. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers purpose, desired preconditions, parameter details, and return value. The dashboard sorting effect adds useful context. Output schema presence reduces need to explain return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description compensates well. Both parameters are described with examples for category (e.g., 'Article') and indication that whitespace is trimmed. Provides meaningful context beyond field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Assign or change a project's category' using a clear verb-resource pair. It distinguishes from siblings like get_project_categories by calling that tool as a preliminary step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance to call get_project_categories first to reuse existing labels, and explains the dashboard sorting effect. Does not include when-not-to-use scenarios but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_research_interestsMetis โ Set Research InterestsA
Save the two interest lists after interviewing the person.
NEWS AND LIBRARY INTERESTS ARE SEPARATE THINGS, and either may sit entirely
outside the person's work:
- `news_interests` โ what they want to know is HAPPENING. Drives the
story-thread vocabulary (Metis groups news into persistent running
stories, and a declared interest becomes a subject it can recognise), the
News surface category tabs, and what the daily and weekly briefings
monitor. Legitimately includes pure curiosity โ following AI policy or a
conflict closely without ever publishing on it.
- `library_interests` โ what they want a real SCIENTIFIC BACKGROUND on.
Drives literature relevance and the knowledge layer. Slower and deeper,
and also allowed beyond current projects: a method they intend to learn
belongs here before it appears in any of their work.
They overlap, but the differences are the useful part. Do not collapse them.
Neither list requires the person to have any projects or articles. Someone can
join Metis with nothing set up and still have clear interests โ ask, do not
infer. Call `start_interest_interview()` for the full interview.
Prefer specific, searchable terms: "sleeping sickness" and "DHIS2" work,
"global health" is too broad to filter anything.
Args:
news_interests: What the News surface and briefings should track.
Omit to leave unchanged.
library_interests: What the literature collection and knowledge layer
should build on. Omit to leave unchanged.
role: Optional one-line role description.
display_name: The name to address them by. Set it when someone new tells
you their name โ without it they are greeted as "Researcher".
mode: "replace" (default) overwrites; "add" merges into what is there.
interests: DEPRECATED alias for `library_interests` โ the old combined
field. Accepted so existing callers keep working.
news_topics: DEPRECATED alias for `news_interests`.
Returns:
What was saved per list, and what each one now affects.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | replace | |
| role | No | ||
| interests | No | ||
| news_topics | No | ||
| display_name | No | ||
| news_interests | No | ||
| library_interests | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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: it discloses the overwrite-vs-merge default ('replace' overwrites; 'add' merges), the omit-means-unchanged semantics per parameter, the deprecated alias mapping, and the fallback greeting behaviour without display_name. It also explains what each list subsequently drives (story-thread vocabulary, briefing monitoring, literature relevance), which is real consequence disclosure rather than restatement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the critical news/library distinction are front-loaded, and the parameter docs are grouped at the end where they belong. It runs long and the 'They overlap, but the differences are the useful part. Do not collapse them.' sentence restates the preceding bullets, though the length is largely justified by seven undocumented parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still summarises the return ('what was saved per list, and what each one now affects'). Combined with full parameter semantics, alias handling, and downstream effects, an agent has everything needed to call this correctly on the first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must document all seven parameters and it does โ news_interests, library_interests, role, display_name, mode, plus both deprecated aliases with their mappings. It goes beyond naming by adding quality guidance ('specific, searchable terms') and default/omit behaviour for each field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource ('Save the two interest lists') and immediately constrains timing ('after interviewing the person'). The body then splits the resource into two distinct lists with different downstream effects, which is exactly what separates this tool from siblings like start_interest_interview or add_user_topic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the prerequisite context (after an interview), routes the agent to the alternative ('Call start_interest_interview() for the full interview'), and explicitly forbids inference ('ask, do not infer'). It also names an anti-pattern for term selection ('global health' is too broad), which is guidance an agent cannot get from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_working_memoryMetis ยท Memory Curator โ Set Working MemoryA
Write a key/value pair to the current session's working memory.
Working memory is an ephemeral scratchpad โ it persists for the session
but is not indexed for vector search. Use it for state that agents need
mid-pipeline (e.g. intermediate results, decisions made so far).
Args:
session_id: Pipeline session ID from session_bootstrap().
key: Variable name (e.g. 'current_article', 'user_intent').
value: Value to store (any string, JSON, or text).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| value | Yes | ||
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral traits: ephemeral, session-only persistence, no vector search indexing. Since no annotations exist, the description fully covers behavior. Could mention whether existing keys are overwritten or the value scope size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a concise paragraph followed by bulleted arguments. No redundant sentences. Could be slightly more concise by removing 'any string, JSON, or text' redundancy, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the tool's purpose, usage context, and parameter meanings. With an output schema present, return values need not be explained. Lacks usage examples or edge cases, but sufficient for a simple write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so the description compensates by explaining each parameter: session_id as pipeline session ID, key as variable name with examples, value as any string/JSON/text. Adds meaning beyond schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool writes a key/value pair to working memory, specifying the action ('write') and resource ('working memory'). It distinguishes from sibling tools like 'get_working_memory' and 'remember' by emphasizing ephemeral, session-scoped storage not indexed for search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use for state needed mid-pipeline (intermediate results, decisions). Contrasts with vector search, implying when not to use (for persistent or searchable data). Provides clear context but could state exclusions more directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_agent_decisionsMetis โ Show Agent DecisionsA
What standing decisions does an agent carry, and are they being applied?
Pass no slug to see every decision and which specialist owns it. The `applied`
count is the signal that matters: a decision recorded and never applied is
indistinguishable from one that was never recorded.
Args:
agent_slug: Restrict to one specialist; omit for all.
limit: Maximum rows.
Returns:
The decisions, grouped, with their categories and apply counts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| agent_slug | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 discloses the return structure (grouped, with categories and apply counts) and offers an interpretive framing about unapplied decisions, but never states that the operation is read-only/side-effect free and gives no auth or limits context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core question and the key interpretation of `applied` before the args block, which is good ordering. The Returns section is partly redundant given an output schema exists, and the rhetorical opening costs a sentence, but nothing is badly padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter read tool with an output schema, the description covers purpose, both parameters, and the shape of results adequately. The main gap is routing among the numerous decision-related siblings, which the description never addresses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and largely does: agent_slug is explained as a restrict-to-one-specialist filter with the omit-for-all default, and limit as maximum rows. It stops short of saying where valid slugs come from or noting the schema's default of 30.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete resource (standing decisions carried by an agent) and what the output reveals (whether they are applied), which is more than a restatement of the name. It does not distinguish itself from the many decision-related siblings (recall_decisions, review_open_decisions, record_decision), so an agent must 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives useful in-tool guidance: "Pass no slug to see every decision" and the framing that the `applied` count is the signal to interpret. However, there is no statement of when to reach for this tool versus recall_decisions or review_open_decisions, nor any prerequisite or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_focus_areasMetis โ Show Focus AreasA
List every focus area, its state, and what it currently holds.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. 'List' implies a non-mutating read and the description names what is surfaced (state, current contents), but it does not explicitly state that nothing is changed, nor does it note ordering, scoping, or cost for a tool that returns every focus area.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the resource and the three returned aspects front-loaded. Nothing is wasted and nothing needs re-reading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and an output schema that defines the return shape, the description only needs to say what is listed, which it does. A brief note on ordering or volume (how many areas, is it paged) is the only remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description correctly implies no filtering or selection arguments are needed because it enumerates everything.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource: 'List every focus area, its state, and what it currently holds' tells the agent exactly what comes back. It reads as an overview-listing tool, distinguishable in spirit from focus_brief or update_focus_overview, but it never names those siblings to make the distinction explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by 'List every focus area' โ the agent can infer this is the read-only overview versus create_focus_area or set_focus_state. There is no explicit when-to-use, when-not-to-use, or pointer to focus_brief for per-area detail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_learned_preferencesMetis โ Show Learned PreferencesA
What your keeps and declines have taught Metis โ separately for news and papers.
Added 2026-09-10, when the feedback loop was finally wired. Until then every
verdict was filed and none of it changed a ranking, so this tool exists as
much to make the learning *auditable* as to report it: a preference model you
cannot inspect is one you cannot correct.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It implies this is a passive inspection/reporting tool ('to make the learning auditable'), which is valuable context beyond the name, but it says nothing about what happens when no feedback exists, whether it is read-only, or how volatile the reported model is. Useful framing, incomplete operational disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is well front-loaded and earns its place, but the following two sentences are changelog and design-rationale ('Added 2026-09-10, when the feedback loop was finally wired...') that do not help an agent decide or call correctly. They add flavor at the cost of signal density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter reporting tool with an output schema, the essentials are covered: what is reported and how it is partitioned. Minor gaps remain around empty-state behavior and the correction path implied by 'a preference model you cannot inspect is one you cannot correct', which no sibling is named for.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the description only adds that results are split by news versus papers, which is a return-shape hint rather than parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It names the specific resource โ the preference model learned from keep/decline verdicts โ and its scope ('separately for news and papers'). The phrasing is a bit rhetorical ('what your keeps and declines have taught Metis'), but an agent can tell it apart from generic profile tools like get_user_profile or get_user_topics. It does not explicitly name a sibling it replaces, so no 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is only implied through the reflection that the model must be auditable and correctable; there is no explicit 'use this when...' or a named alternative such as show_agent_decisions. An agent can infer the tool is for inspecting/correcting learned preferences, but must reason about it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_course_buildMetis ยท Course Builder โ Start Course BuildA
Start a new course build pipeline.
Creates a course record in the course_builds table, adds a placeholder
row to learning_courses (status='building'), and returns the intake
questionnaire for the user to complete.
Args:
topic: The subject or title of the course (e.g. "Multilevel models for epidemiologists")
target_audience: Who this course is for (e.g. "MPH students with basic R knowledge")
duration_hours: Estimated total course length in hours (0 = TBD)
notes: Any initial notes or constraints the user has mentioned
Returns:
Course ID, a brief confirmation, and the intake questionnaire.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| topic | Yes | ||
| duration_hours | No | ||
| target_audience | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It lists actions (creates, adds, returns) but does not disclose authorization needs, side effects, or whether the operation is reversible. Basic transparency is present but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (under 100 words), front-loaded with the main purpose, and organized with clear sections for args and returns. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, output schema exists), the description fully explains the effect on the database and the return value (Course ID, confirmation, questionnaire). No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, meaning the JSON schema provides no descriptions. The description compensates by giving clear explanations for each parameter (e.g., topic: 'The subject or title of the course'). This adds significant meaning beyond the schema's titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it starts a new course build pipeline, creates a course record, adds a placeholder row, and returns an intake questionnaire. It distinguishes from sibling tools like publish_course or save_course_curriculum by focusing on the initial pipeline step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for starting a course build, but it does not explicitly state when to use it versus alternatives like save_course_curriculum or publish_course. No guidance on prerequisites or context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_interest_interviewMetis โ Start Interest InterviewA
Get the script for interviewing the researcher about their interests.
Call this when the researcher wants help defining their research interests or
news topics โ typically arriving from the "Set up my interests" button on the
Metis Systems surface, which opens a conversation asking for exactly this.
Returns the full interview to follow. It lives here rather than in the button's
deep link because a `claude://` URL carrying the whole script came to 3,222
characters, over the ~2,048-character limit Windows protocol handlers accept โ
it would have been truncated or dropped silently. Keeping the script here also
means it is maintained in one place instead of duplicated in a template.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does reasonably well: it says the tool returns the full interview to follow, implying a read with no side effects, and explains the design decision behind hosting the script (protocol URL length limits). It does not explicitly confirm there are no state changes or mention any logging/telemetry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and trigger are front-loaded in the first two sentences, which is good structure. The final sentences about the 3,222-character claude:// URL are engineering rationale that does not help an agent invoke the tool and could be trimmed without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description covers what it returns and when to call it, which is sufficient to invoke correctly. The only gap is the absent explicit statement of side effects, which matters somewhat given there are no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The schema is empty and fully self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it fetches the interview script the agent should follow when helping a researcher define interests. It implicitly separates itself from siblings like set_research_interests or suggest_interests_from_work by clarifying that it returns a script rather than saving anything, but no sibling is named outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete trigger โ 'Call this when the researcher wants help defining their research interests or news topics' โ and even names the UI entry point ('Set up my interests' button). No explicit when-not condition or named alternative tool is provided, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_spanMetis โ Start SpanA
Open a new tracing span. Returns the span_id to pass to end_span().
Args:
name: Human-readable span label (e.g. 'stage_1_bootstrap', 'tool:search_library').
kind: Span type โ 'internal' | 'tool' | 'agent' | 'llm'. Default: 'internal'.
session_id: Session identifier (from session_bootstrap). Optional.
run_id: FK to agent_runs.run_id. Optional.
parent_id: Parent span_id for nested spans. Optional.
tags: JSON string of extra key/value metadata. Optional.
Returns the span_id string โ pass it to end_span() when the work is done.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | internal | |
| name | Yes | ||
| tags | No | ||
| run_id | No | ||
| parent_id | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adequately discloses that the tool creates a span and returns an identifier. It notes the need to call end_span, which is a key behavioral trait. Could mention potential side effects (e.g., memory/performance) but the simplicity of the operation makes this sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence followed by a bullet-style Args list and a Returns line. It is somewhat verbose given the tool's simplicity, but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (which likely defines the span_id return type), the description covers all necessary context: purpose, parameter details, return value, and the required follow-up call (end_span). It is complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by explaining each parameter's meaning, defaults, and examples (e.g., 'name: Human-readable span label... kind: Span type...'). This adds significant value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Open a new tracing span') and the resource ('span'), and distinguishes it from sibling tools like 'end_span' and 'get_spans' by focusing on creation and returning a span_id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a usage flow (pass span_id to end_span) but does not explicitly state when to use this tool versus alternatives, nor does it provide conditions, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
store_episodic_memoryMetis ยท Memory Curator โ Store Episodic MemoryA
Store an event in episodic memory and index it for vector search.
Logs a time-stamped EVENT (something that happened) and indexes it for vector
search. For a distilled, timeless concept/definition use store_semantic_memory;
for a human-curated palace note use add_memory_entry.
Episodic memory is a chronological log of things that happened โ ideas,
notes, papers read, tasks completed, agent runs.
Args:
content: The text content of the event to remember.
event_type: One of 'idea', 'note', 'task', 'paper', 'meeting', or
'agent_run'.
session_id: Current pipeline session ID (optional).
metadata: JSON string with extra fields such as title, tags, or source.
Returns:
A single TextContent confirming the stored event (its row id and type),
or an error message if the database is missing, fastembed is not
installed, or the write fails.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| metadata | No | {} | |
| event_type | No | note | |
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool logs a time-stamped event, indexes it for vector search, and returns a TextContent with row id and type, or errors for missing dependencies or write failures. While it covers key behaviors, it could be more explicit about side effects (e.g., that it is a write operation). No annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a brief intro, usage guidance, parameter descriptions, and return value. Every sentence contributes value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, 1 required) and presence of an output schema, the description fully covers purpose, usage, parameters, return value, and error conditions. It is complete and self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds significant meaning by explaining each parameter: content (text), event_type (enumerates options), session_id (optional), metadata (JSON with extras). It adds value beyond the schema, though it does not explicitly mention that content is required or the default values for event_type and session_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool stores an event in episodic memory and indexes it for vector search. It distinguishes itself from siblings like store_semantic_memory and add_memory_entry, and provides concrete examples of event types, making the purpose clear and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit guidance on when to use this tool versus alternatives: 'For a distilled, timeless concept/definition use store_semantic_memory; for a human-curated palace note use add_memory_entry.' It also clarifies that episodic memory is a chronological log, helping agents decide appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
store_procedural_memoryMetis ยท Memory Curator โ Store Procedural MemoryB
Store a successful workflow pattern in procedural memory.
Procedural memory captures 'how to do things' โ repeatable processes,
workflows that worked well, or step-by-step patterns for recurring tasks.
Args:
procedure_name: Short name for this procedure (e.g. 'Domain literature search').
steps: Markdown-formatted steps for the procedure.
trigger_context: What situation should trigger using this procedure.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes | ||
| procedure_name | Yes | ||
| trigger_context | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. It explains the parameters but does not disclose potential side effects (e.g., overwrite behavior, idempotency, auth requirements). For a write operation, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with minimal redundancy. It front-loads the purpose and uses a clear args list. No unnecessary sentences, though structuring could be slightly improved.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basics for a store operation, but lacks details on output (though output schema exists), error behavior, and constraints like uniqueness. It is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates well. It adds examples, specifies Markdown format for steps, and clarifies the trigger context purpose. This adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool stores a successful workflow pattern in procedural memory and explains what procedural memory means. However, it does not explicitly differentiate from sibling tools store_episodic_memory or store_semantic_memory, which could cause confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (for repeatable processes, workflows that worked well) but lacks explicit guidance on when not to use or how it differs from alternative memory stores. No contrast with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
store_semantic_memoryMetis ยท Memory Curator โ Store Semantic MemoryA
Store a distilled knowledge node in semantic memory.
Stores a distilled CONCEPT/definition (timeless 'what I know'). For a
time-stamped event use store_episodic_memory; for a human-curated palace
note use add_memory_entry.
Semantic memory holds the 'what I know' layer โ concepts, definitions,
and their relationships. Used by retrieval to surface relevant knowledge
without relying on raw event history.
Args:
concept: Short name for the concept, e.g. 'RDT sensitivity' or
'fAChE inhibition'.
definition: A one-to-three-sentence definition or explanation.
related_concepts: Comma-separated names of related concepts.
source_type: Where this came from: 'paper', 'note', 'idea', or
'user_defined'.
source_id: ID of the source record, e.g. a paper DOI or idea_id.
Returns:
A single TextContent confirming the stored node (its row id and concept
name), or an error message if the database is missing, fastembed is not
installed, or the write fails.
| Name | Required | Description | Default |
|---|---|---|---|
| concept | Yes | ||
| source_id | No | ||
| definition | Yes | ||
| source_type | No | user_defined | |
| related_concepts | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description covers the behavior well: it stores a concept, is part of semantic memory, and mentions error conditions (missing database, missing fastembed, write failure). However, it does not explicitly state whether the operation is idempotent or if it overwrites existing entries, and lacks details on 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear intro, usage guidance, parameter list, and return info. It is slightly verbose but still efficient. Every sentence adds value, though some repetition could be trimmed (e.g., 'what I know' is stated twice).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters (2 required), no nested objects, and an output schema (mentioned), the description covers all essential aspects: purpose, usage context, parameters, and return values. It is complete for an AI agent to correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description provides detailed parameter explanations including examples for concept, definition, related_concepts, source_type (with enumerated values), and source_id. This fully compensates for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it stores a 'distilled knowledge node in semantic memory' for timeless concepts, and explicitly contrasts with store_episodic_memory and add_memory_entry, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (for storing concepts/definitions) and when not to (use store_episodic_memory for time-stamped events, add_memory_entry for curated notes). It also explains the role of semantic memory in retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_cleaningMetis ยท Data Analyst โ Suggest CleaningA
Profile a dataset and return specific recommended cleaning operations.
Analyses the profile and suggests operations with rationale, e.g.:
- "col 'age' has 12% nulls โ consider fill_na or drop_na_rows"
- "7 duplicate rows detected โ apply drop_duplicates"
- "col 'name ' has leading/trailing whitespace โ apply strip_whitespace"
Args:
path: Absolute local path to the dataset file.
Returns JSON with profile summary and a list of suggested operations,
each with: operation, column (if applicable), rationale, priority (high/medium/low).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the return format and operational logic (analyzes profile, suggests operations with priorities), but omits whether the tool modifies the dataset (assumed read-only but not stated). No annotations to supplement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded purpose, examples illustrate functionality, and structured Args/Returns section clearly explains output format. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, and return structure adequately. Output schema covers return details, so description doesn't need to exhaustively list fields. Slight gap in describing the profile summary format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single 'path' parameter is described as 'Absolute local path to the dataset file,' adding necessary detail beyond the schema's type definition. Compensates for 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool profiles a dataset and returns recommended cleaning operations, with concrete examples distinguishing it from simpler profiling or cleaning execution tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like profile_dataset or clean_dataset. Lacks prerequisites (e.g., file must exist) or context about typical workflow placement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_interests_from_workMetis โ Suggest Interests From WorkA
Read the researcher's own work and propose interests they have not declared.
Interests should not depend on someone being able to articulate them from a
blank field. Their work already states them โ project titles, captured ideas,
what their papers are about, what their sessions keep returning to. This mines
those sources for recurring domain terms and proposes the ones missing from
their declared lists.
Proposals go to the LIBRARY list by default: what recurs in someone's own
papers and projects is what they want a background on. What they want to hear
about in the NEWS is a different question, frequently outside their work
entirely, and cannot be mined from it โ that one has to be asked. See
`start_interest_interview()`.
Args:
apply: False (default) proposes only, so the researcher decides. True adds
the suggestions to `library_interests` directly โ use when they have
said to go ahead, or for a silent top-up during onboarding.
top: How many suggestions to consider. Default 12.
Returns:
Suggested terms with what evidence supports each, and what was already
declared so nothing is proposed twice.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| apply | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the burden and does well: it discloses that the tool reads multiple own-work sources, that `apply=True` writes directly into `library_interests`, and that already-declared terms are never proposed twice. It does not discuss permissions, cost, or failure modes when a source is empty, which keeps it short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then Args/Returns. The rationale paragraph on why interests shouldn't depend on self-articulation is persuasive but costs a sentence or two beyond what an agent needs to call the tool; still, the whole is short for the amount of routing information it delivers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, no-annotation tool, everything an agent needs is present: sources mined, target list, dedupe guarantee, both parameter behaviors, the sibling for the unmineable case, and the return shape (suggested terms plus supporting evidence plus already-declared terms) even though an output schema also exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and does: `apply` gets default, effect, and two situational triggers; `top` gets default 12 and a definition. `top` is described as 'how many suggestions to consider', which is slightly ambiguous about whether it caps returned proposals or mined candidates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: reads the researcher's own work (project titles, ideas, paper topics, sessions) and proposes undeclared interests. It explicitly contrasts with the sibling `start_interest_interview()` and explains that news interests, unlike library interests, cannot be mined from work โ a domain distinction an agent could not infer from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use routing: default proposes only for researcher review, `apply=True` when they've said to go ahead or for a silent onboarding top-up, and `start_interest_interview()` for news-category interests. It even states why the alternative exists rather than just naming it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
surface_relevant_contextMetis ยท Memory Curator โ Surface Relevant ContextA
Retrieve past memory entries relevant to a topic and return a structured context brief.
Searches memory_entries by topic keyword and optional tag list, ranks by
relevance, and formats the top N entries for injection into the current
agent's working context.
Args:
topic: The topic or task description to search for.
tags: Optional comma-separated topic tags to include (e.g. 'methods,phd').
top_n: Maximum number of entries to return (default 5).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| top_n | No | ||
| topic | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It describes search, ranking, and formatting behavior, but does not disclose permissions, side effects, or data safety. It implies a read-only operation but doesn't confirm.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences plus arg definitions), front-loaded with purpose, and every sentence adds value. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a retrieval tool with an output schema, the description adequately covers purpose, parameters, and usage. It could mention behavior when no entries are found, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the input schema: it explains 'topic' as 'topic or task description', 'tags' as 'optional comma-separated topic tags' with an example, and 'top_n' as 'maximum number of entries to return (default 5)'. Schema coverage is 0%, so description compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves past memory entries by topic and returns a structured context brief. It specifies the verb 'Retrieve' and the resource 'memory entries', but does not explicitly differentiate from sibling tools like search_memory or search_notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (when needing memory entries for context injection) and how the tool works (topic keyword, optional tags, ranking, top N). However, it lacks guidance on when not to use or mention of alternatives among the many sibling search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_zotero_libraryMetis ยท Librarian โ Sync Zotero LibraryA
Sync the Zotero library into Metis literature_metadata.
Performs an incremental sync by default โ only fetches items changed since
the last sync. Pass full=True to re-sync everything.
Requires ZOTERO_API_KEY and ZOTERO_USER_ID in metis/system/.env.
Args:
full: If True, re-sync all items regardless of last sync state.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry burden. It describes sync behavior (incremental vs full) and environment requirements, but does not disclose potential side effects (e.g., overwrites, destructive actions) or rate limits. Adds value but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise, front-loaded with purpose, then details. Every sentence is informative with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no nested objects, output schema exists), the description covers sync behavior, parameter usage, and prerequisites. Lacks error handling details but adequate for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining the 'full' parameter's effect (re-sync all items). Single parameter is clearly described, adding meaning beyond the schema's type and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool syncs Zotero library into Metis literature_metadata, with a specific verb 'sync' and resource, and distinguishes between incremental and full sync modes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage guidance on the default incremental sync and how to trigger full sync with the 'full' parameter, plus mentions required environment variables. Lacks explicit differentiation from sibling tools like sync_zotero_local.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_zotero_localMetis ยท Librarian โ Sync Zotero LocalA
Import a local Zotero library by reading zotero.sqlite directly (no API key).
The offline alternative to sync_zotero_library: reads your local Zotero
database file, so it works with no ZOTERO_API_KEY and no network. Items are
imported into literature_metadata (library_source='zotero-local'), the same
table the Librarian and search_library use.
Args:
db_path: Path to zotero.sqlite. If empty, Metis searches common locations
(~/Zotero/zotero.sqlite, and /mnt/c/Users/*/Zotero on WSL).
| Name | Required | Description | Default |
|---|---|---|---|
| db_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It notes that the tool reads the database directly (no modifications stated) and imports into literature_metadata with library_source='zotero-local'. However, it does not mention whether imports are appended or deduplicated, nor error handling or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief (three sentences) and front-loaded with the core action. It includes a separate 'Args' section for parameter details, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter and the presence of an output schema (not shown), the description covers the essential: purpose, alternative, parameter behavior, and target table. It could mention overwrite vs. append, but overall it is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage with only type and default. The description compensates by explaining db_path meaning and fallback behavior when empty, adding significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool imports a local Zotero library by reading zotero.sqlite directly, with no API key or network needed. It explicitly distinguishes the tool from its sibling sync_zotero_library by calling it 'the offline alternative'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool (no network, no API key) and contrasts it with sync_zotero_library. It also details the db_path parameter and the fallback search behavior. It lacks an explicit 'when NOT to use' but the context is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_contextMetis โ Toggle ContextB
Activate or deactivate a specialist context.
Args:
name: Context name to toggle (must exist in specialist_contexts).
active: True to activate, False to deactivate.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| active | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral disclosure. It mentions that 'name must exist in specialist_contexts' but does not disclose side effects (e.g., whether toggling is idempotent, what happens if already active, or any impact on ongoing sessions).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: one line for purpose and a bulleted list for arguments. It is appropriately front-loaded with the action. No superfluous words, though the args section could be integrated more naturally.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (not shown), the description fails to mention return values, error conditions, or the overall effect of toggling. For a simple toggle tool, the description is incomplete; it does not convey what happens after activation/deactivation (e.g., context becomes available/unavailable).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since input schema descriptions are missing (0% coverage), the description adds meaning: it clarifies 'name' as 'Context name to toggle (must exist in specialist_contexts)' and 'active' as 'True to activate, False to deactivate.' This provides necessary constraints and meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's action: 'Activate or deactivate a specialist context.' The verb 'toggle' is clear, and the resource 'specialist context' is specific. It distinguishes from sibling tools like 'add_specialist_context' (which creates new contexts) and 'get_context' (which reads state).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'add_specialist_context' or 'get_context'. There is no discussion of prerequisites, such as the need for the context to exist, nor any mention of when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_recordingMetis ยท Meeting Memory โ Transcribe RecordingA
Transcribe a meeting recording using Whisper.
Optionally applies speaker diarization with pyannote.audio if installed
and HF_TOKEN is set. Saves the transcript alongside the audio file and
updates the meetings table.
Args:
recording_id: The meeting_id from the meetings table (shown in Meetings tab)
Returns:
Transcript text (with speaker labels if diarization succeeded) and
the path where it was saved.
| Name | Required | Description | Default |
|---|---|---|---|
| recording_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description adequately discloses key behaviors: uses Whisper, optional speaker diarization conditional on dependencies, saves transcript alongside audio, updates meetings table, and returns transcript text and file path. This covers side effects and conditional behavior well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief but complete, using two paragraphs to state the core function and then document parameters and return values. It is efficiently structured without superfluous information, earning a strong score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, output schema present), the description covers the main functional aspects, optional features, and return structure. Minor omissions like error handling or diarization availability check are acceptable for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description's explanation of the sole parameter 'recording_id' as 'The meeting_id from the meetings table (shown in Meetings tab)' adds essential context beyond the schema's bare 'Recording Id' title, helping the agent know how to obtain the correct value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool transcribes a meeting recording using Whisper, which is a specific verb-resource pair. While it doesn't explicitly differentiate from sibling 'transcribe_voice', the mention of 'meeting recording' and 'meeting_id' makes its purpose distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for transcribing meeting recordings with an optional diarization feature, but does not provide explicit guidance on when to use this tool versus alternatives, or when not to use it. The context is clear but exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_voiceMetis โ Transcribe VoiceA
Transcribe an audio file or live mic recording and optionally capture the result.
Uses faster-whisper locally โ entirely offline, no API calls, no data leaves
your machine. Supports MP3, WAV, M4A, OGG, FLAC, and most other audio formats.
Args:
audio_path: Path to an audio file to transcribe. Leave empty when using
record_seconds for live mic capture.
route_to: What to do with the transcript after transcription:
- "raw" โ return the transcript text only (default)
- "idea" โ capture as an idea with cross-pollination
- "journal" โ add as a journal entry (mood + energy auto-extracted)
- "note" โ append to today's voice-notes markdown file
record_seconds: Seconds to record from the microphone. Requires sounddevice
and numpy. Only used when audio_path is empty.
model_size: faster-whisper model size. Options: "tiny", "base", "small",
"medium", "large-v3". Defaults to METIS_WHISPER_MODEL env var,
or "base". Larger models are more accurate but slower to load.
Returns:
The transcript text and (if routed) confirmation of where it was saved.
Examples:
transcribe_voice(audio_path="/tmp/idea.m4a", route_to="idea")
transcribe_voice(audio_path="/tmp/reflection.mp3", route_to="journal")
transcribe_voice(audio_path="", record_seconds=30, route_to="idea")
transcribe_voice(audio_path="/tmp/note.wav", route_to="note")
| Name | Required | Description | Default |
|---|---|---|---|
| route_to | No | raw | |
| audio_path | No | ||
| model_size | No | ||
| record_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses offline operation, supported formats, routing behavior, and model size options. It does not mention any destructive side effects, but the 'route_to' parameter implies potential file creation, which is documented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, a note about offline processing, and a clear Args section. It is somewhat verbose but each sentence adds value. Front-loaded with core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of audio transcription and routing, the description covers inputs, outputs, behavior, and constraints. The return value is described, and examples illustrate common usage. No gaps for an AI agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description provides thorough parameter documentation: each parameter's purpose, options, defaults, and interactions (e.g., record_seconds used only when audio_path empty). This adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Transcribe an audio file or live mic recording' with a specific verb and resource. It is distinct enough from siblings like 'transcribe_recording', though it does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples and explains parameters, but lacks explicit when-to-use or when-not-to-use guidance relative to sibling tools. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unarchive_projectMetis โ Unarchive ProjectC
Restore an archived project to active status.
Args:
project_id: The project_id to restore.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits such as side effects, permissions needed, or reversibility. It only says 'restore to active status' without warning about potential impacts on files, connections, or other projects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with no redundant words. However, it is so brief that it sacrifices completeness for brevity, which may leave gaps in understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (unseen) and the simplicity of the tool, the description still lacks information about return values, error cases, and its relationship to sibling tools like 'archive_project'. It is too minimal for complete context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The parameter 'project_id' is described only as 'The project_id to restore', which adds minimal meaning over the schema's 'Project Id'. No format, source, or validation hints are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Restore') and the resource ('archived project'), making the tool's purpose unambiguous and easily distinguishable from sibling tools like 'archive_project' or 'remove_project'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no mention of when not to use it. It only states what it does, leaving the agent to infer usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_all_projectsMetis โ Update All ProjectsA
Scan all registered project folders for activity. Refreshes CLAUDE.md for each.
Called by the dashboard Update button or on demand.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must fully disclose behavior. It mentions scanning and refreshing but does not clarify if 'refreshing' overwrites data, requires permissions, or has side effects. Critical safety details are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with action, no filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an existing output schema, description is adequate but lacks mention of performance impact or error scenarios for a bulk operation. Could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. Description adds meaning by specifying 'all registered project folders', which is beyond the empty schema. No further param info needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it scans all registered project folders for activity and refreshes CLAUDE.md for each. Verb+resource is specific and distinguishes it from sibling tools like scan_project_folder that operate on single folders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context (called by dashboard Update button or on demand) but does not specify when not to use it or suggest alternatives like scanning a single folder. Implied usage is clear but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contactMetis โ Update ContactA
Add or update a contact record.
Args:
name: Contact's full name (used as unique key).
notes: Notes about this contact.
role: Contact's role or affiliation.
birthday: Birthday in YYYY-MM-DD format.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| role | No | ||
| notes | Yes | ||
| birthday | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'Add or update' indicating mutation and the unique key constraint, but lacks details on side effects, authorization needs, or response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a concise docstring with an Args section, no fluff, and every sentence adds value. It is efficiently structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and presence of an output schema, the description covers essential parameters and usage hints. However, it could mention error cases or confirmation of upsert.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description adds meaning by clarifying 'name' as unique key, 'notes' as notes, 'role' as role/affiliation, and 'birthday' format (YYYY-MM-DD). This compensates well for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Add or update a contact record,' specifying the action and resource. The tool name 'update_contact' aligns well, and it distinguishes itself from sibling tools like 'get_contacts'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes that 'name' is used as a unique key, providing some usage guidance. However, it does not explicitly state when to use this tool versus alternatives or mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_focus_overviewMetis โ Update Focus OverviewA
Replace a focus area's standing overview โ the "what matters here" narrative.
This is the piece that was going to be the AI course's introduction: the
orientation you want in front of you every time you open the subject, as
opposed to the feed, which changes daily.
Args:
slug: The focus slug.
overview: Markdown. Replaces the existing overview entirely.
Returns:
Confirmation and the new length.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| overview | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the most important trait: the existing overview is replaced entirely, making this a destructive overwrite. It also states the return value (confirmation plus new length). It does not say whether the prior overview is recoverable or what happens if the slug doesn't exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core statement is correctly front-loaded, but the middle paragraph about the "AI course's introduction" is anecdotal filler that delays the concrete Args section. The Args/Returns block is useful but the framing prose could be cut to one clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return details are already covered. Still missing for a mutation tool with no annotations: whether a missing slug errors or creates, whether the overwrite can be undone, and how to resolve a slug to a focus area.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it partially does by clarifying that overview is Markdown and is a full replacement. However slug is only restated as "the focus slug" with no format or how to discover it, leaving the lookup path undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
First line gives a precise verb+resource: "Replace a focus area's standing overview." It also draws a conceptual boundary against the daily feed, which is the main adjacent resource in this tool family. It stops short of naming specific siblings like focus_brief or show_focus_areas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (this is the durable orientation text, not the changing feed) but never states when to call this instead of focus_brief, create_focus_area, or set_focus_state. An agent has to infer the selection criteria from the metaphor rather than from explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_metisMetis โ Update MetisA
Check for a newer version of Metis and, with confirm=True, install it.
For installs made by MetisSetup.exe on Windows. Without confirm it only
reports the installed and the newest published version and what updating
does โ ask the person before calling again with confirm=True. Updating
keeps their profile, library, projects and settings.
After confirm=True the installer shows a small progress window and stops
Metis while it works, so this conversation loses Metis for a few minutes.
Tell the person: wait until the progress window closes, then quit Claude
Desktop completely (also from the tray) and open it again.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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: it discloses that updating preserves profile, library, projects and settings, that the installer stops Metis so the session loses the tool for 'a few minutes', and that a progress window appears. It also flags the platform restriction ('installs made by MetisSetup.exe on Windows').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the parameter gate, then layered with the platform caveat, the consent rule, and the recovery instructions. Every sentence is actionable, though the final 'tell the person' block is slightly long for what could be a shorter recovery note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutating tool with no annotations, the description covers platform scope, side effects, data preservation, timing, recovery, and consent gating. Return values are handled by the existing output schema, so nothing an agent needs before calling is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 0% schema description coverage, so the description must compensate โ and it does, explaining that confirm=True triggers the install while the default (false) only reports versions and consequences. This is more than the schema's bare boolean title conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Check for a newer version of Metis and ... install it') and immediately binds the mutating behavior to the confirm=True parameter. That distinguishes it cleanly from siblings like verify_install or metis_doctor, which check installation health rather than version upgrade.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to use each mode: without confirm it is a read-only report, and before calling again with confirm=True the agent must 'ask the person'. It also supplies the post-install user instruction verbatim, leaving no inference about sequencing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_project_memoryMetis โ Update Project MemoryA
Append a session summary to a project's history and refresh its prompt memory.
Call this at the end of any work session on a project. The history feeds
into load_project_context() so future sessions automatically know what
happened before.
Args:
project_id: The project slug.
what_was_done: 1-3 sentence summary of what was accomplished this session.
next_steps: Optional: what needs to happen next. Updates the next_step field.
| Name | Required | Description | Default |
|---|---|---|---|
| next_steps | No | ||
| project_id | Yes | ||
| what_was_done | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states it appends to history and updates prompt memory and next_steps. However, it does not explain what 'refresh prompt memory' entails or whether the operation is idempotent, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with no redundant sentences. It uses a clear structure: purpose, usage instruction, then parameter list. The front-loaded purpose immediately conveys the tool's intent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters and an output schema exists, the description covers the core functionality, usage, and parameter semantics adequately. It lacks details on return values but the output schema fills that gap. Overall, it is sufficiently complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so compensation is needed. The description explains 'what_was_done' as a 1-3 sentence summary and 'next_steps' as optional, updating the next_step field. 'project_id' is described as 'The project slug,' which is sufficient. This adds meaning beyond the schema's titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Append a session summary to a project's history and refresh its prompt memory.' The verb 'append' and resource 'project history' are specific. Among memory-related siblings, the focus on session summaries at session end differentiates it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this at the end of any work session on a project,' providing clear when-to-use guidance. It also explains the benefit (feeds into load_project_context), though it does not discuss when not to use or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskMetis โ Update TaskA
Update an existing task โ its status, title, owner, notes, due date, or recurrence.
The companion to create_task and get_tasks: use this to mark a task done or
blocked, reschedule it, reassign it, or edit its details. Only the fields you
pass are changed; empty arguments leave the existing value untouched. Marking
a recurring task "done" automatically creates its next occurrence. Find a
task_id with get_tasks; use delete_task to remove a task entirely.
Args:
task_id: ID of the task to update (as shown by get_tasks). Required.
status: New status โ "open", "done", or "blocked". Empty = unchanged.
title: New title. Empty = unchanged.
owner: New owner. Empty = unchanged.
notes: New notes/details. Empty = unchanged.
due_date: New due date in "YYYY-MM-DD" format. Empty = unchanged.
recurrence: New repeat โ "daily", "weekly", "monthly", or "yearly".
Empty = unchanged; pass "none" to clear an existing recurrence.
Returns:
A confirmation listing the changed fields (and the next-occurrence id if a
recurring task was completed), or a note if the task_id was not found.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| owner | No | ||
| title | No | ||
| status | No | ||
| task_id | Yes | ||
| due_date | No | ||
| recurrence | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that only passed fields are changed, empty arguments leave values untouched. Specifies that marking a recurring task 'done' creates next occurrence. Mentions return confirmation or not-found note. No annotations provided, so description carries full burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a brief purpose sentence, companion context, and bullet-like Args. Slightly lengthy but front-loaded and organized. Could be a bit more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all needed context: how to get task_id (get_tasks), what outputs (confirmation or not-found note), behavior of partial updates and recurrence. Given no annotations and 7 parameters, the description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates fully with an Args section explaining each parameter: task_id required, status options, title, owner, notes, due_date format, recurrence options and 'none' to clear. Adds meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update an existing task' with specific fields (status, title, owner, notes, due date, recurrence). It distinguishes itself from sibling tools like create_task, get_tasks, and delete_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly identifies as companion to create_task and get_tasks, and tells when to use: mark done/blocked, reschedule, reassign, edit. Also mentions delete_task for removal, providing clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_thinking_profileMetis โ Update Thinking ProfileA
Recompute and update the thinking profile from the last 90 days of events.
Computes:
- connection_preferences: acted-on rates per domain_pair (source_type)
- preferred_idea_sources: frequency of source_type in high-rated idea events
- agent_feedback: accepted/flagged rates per agent_slug
Writes updated system/thinking-profile.yaml. Safe to call multiple times.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description discloses the key behavioral trait: it writes to system/thinking-profile.yaml. It also notes safety for repeated calls, indicating no destructive side effects. The mutation is clear, and no contradictory information is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two short paragraphs, first stating purpose, second listing computed fields in a bullet-like style. No unnecessary words, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (not shown but signaled), the description does not mention what the tool returns (e.g., success message or updated profile). However, the computed fields are well-described. A brief note on return value would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty (0 parameters), so schema coverage is 100%. The description adds meaning by explaining what the tool computes, but does not need to elaborate on parameters. Baseline is 4 because no parameter documentation is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool recomputes and updates the thinking profile from the last 90 days of events, listing three computed components (connection_preferences, preferred_idea_sources, agent_feedback). This distinguishes it from siblings like get_thinking_profile (read-only) and reset_thinking_profile (reset to default).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Safe to call multiple times,' implying idempotent usage, but does not explicitly state when to use this tool vs alternatives (e.g., reset_thinking_profile, get_thinking_profile). Guidance is minimal and implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_today_boardMetis ยท News Radar โ Update Today BoardA
Fill a Today-surface board (Outbreaks, Events or Funding) with items you found on the web.
Use this after web-searching for the researcher's field. The Outbreaks board is
modelled on WHO's Disease Outbreak News: the handful of outbreaks that MATTER
right now, each with a location and a date โ not a mirror of any one
publisher's feed. (WHO retired the DON RSS feed; the page is the reference,
and ECDC's Communicable Disease Threats Report covers the gap.) The Events
board holds upcoming scientific congresses/conferences/symposia; the Funding
board holds open or upcoming research funding calls, grants and fellowships.
All three are curated โ no RSS feed writes to them โ so this tool is how
Claude Desktop (on the user's subscription, no API
rate limit) keeps them current โ the dashboard's "Update" buttons open
a chat that calls this tool.
Replaces the previously tool-filled rows on that board; items the user curated or
added by hand are preserved.
EVERY ITEM IS CHECKED AGAINST THE BOARD IT CLAIMS. A congress or a committee
session sent to Outbreaks is filed under Events instead; a call for proposals
goes to Funding; a newsletter, bulletin, quarterly report or declaration
belongs on no board and is recorded as turned away, with the reason, rather
than silently dropped. So the saved count may be lower than the number of
items passed, and some may appear on a different board โ the return value
says how many of each.
Args:
board: "outbreaks", "events" or "funding".
items: list of objects, each {"title": str, "url": str, "date": str (optional,
event date or application deadline), "description": str (optional, one short
sentence)}. Only include real items with a working http(s) URL.
Returns:
dict: {ok, board, saved, re_routed, not_a_board_item} on success, or
{ok: False, error} on failure.
| Name | Required | Description | Default |
|---|---|---|---|
| board | Yes | ||
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses that previously tool-filled rows are replaced while user-curated items are preserved, that every item is validated against the claimed board, that some items are re-routed or rejected with a reason, and that the return value reports these counts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and well organized, with purpose first, then usage, board definitions, validation behavior, and args. It is somewhat long and includes contextual asides about WHO and ECDC, but those details support correct Outbreaks-board usage rather than being pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations and no output schema, the description is complete. It explains side effects, validation and re-routing behavior, argument formats, and the return value structure, leaving no major gap for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. It enumerates the board values ("outbreaks", "events", "funding") and describes each item object's fields, including optional date and description plus the requirement for a working http(s) URL.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: filling a Today-surface board with web-found items. It distinguishes the three boards (Outbreaks, Events, Funding) and makes clear this is curated content rather than an RSS mirror. An agent can identify the tool's purpose without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this after web-searching for the researcher's field and explains that the dashboard's Update buttons trigger this tool. It also describes when an item does not belong on any board, but it does not name a sibling alternative for other update paths. The context is clear, though not a full when/when-not/alternatives routing guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_pipeline_stageMetis ยท Data Guardian โ Validate Pipeline StageA
M5.7.4 โ Validate a sub-agent output before passing to the next pipeline stage.
Treats sub-agent output with the same suspicion as external tool output.
Rejects if any required keys are missing or empty.
Args:
output_json: JSON string of the sub-agent output dict.
required_keys: Comma-separated list of required keys (e.g., "title,summary,agent_slug").
| Name | Required | Description | Default |
|---|---|---|---|
| output_json | Yes | ||
| required_keys | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that it rejects missing or empty keys and treats output with suspicion. However, it does not state whether the tool is read-only or has side effects, but the validation action implies no mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise with a clear first sentence followed by a brief explanation and Args section. The inclusion of version number 'M5.7.4' is minor noise but does not detract significantly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to detail return values. It covers the tool's purpose, parameter semantics, and validation behavior, making it reasonably complete for a simple validation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by explaining both parameters: output_json is a JSON string of the sub-agent output dict, and required_keys is a comma-separated list. This adds meaning beyond the schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it validates a sub-agent output before passing to the next pipeline stage, using specific verb 'validate' and resource 'pipeline stage'. It distinguishes from siblings by focusing on validation between stages, which is unique among the listed tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use it before passing output to the next stage and treats output with suspicion like external tool output. It does not mention when not to use or list alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_backupMetis โ Verify BackupA
Run SQLite integrity_check on a backup file.
Args:
backup_path: Full path to an unencrypted .sqlite backup.
Returns JSON with status ('ok' or errors) and table count.
| Name | Required | Description | Default |
|---|---|---|---|
| backup_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It mentions the operation (integrity_check) and output format but does not explicitly state that the tool is non-destructive or safe to run. Missing details on error handling (e.g., if file is missing or encrypted).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three sentences with no filler. It front-loads the core action and includes necessary parameter details. Every sentence is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one parameter, simple output), the description covers the main behavior and output shape. It could be improved by mentioning what happens on errors (e.g., file not found, corrupted), but the core integrity_check behavior is adequately described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds significant meaning by specifying 'Full path to an unencrypted .sqlite backup.' This clarifies the parameter's type, format, and secrecy requirement, compensating for the schema's lack of description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs SQLite integrity_check on a backup file, specifying the exact action and resource. Among siblings like backup_db, restore_db, and list_backups, it is distinctly focused on verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for verifying backup integrity but does not explicitly state when to use versus alternatives or provide exclusions. No mention of prerequisites (e.g., file must already exist) or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_claimMetis โ Verify ClaimA
Tier A โ check a claim against the indexed corpus, deterministically.
Verifies what can be verified WITHOUT a model: that the cited document is
indexed, that the cited page exists, that the claim's figures appear on that
page, and that any quoted string is actually present. It cannot hallucinate a
verdict because it contains no model.
A `supported` verdict means the deterministic checks passed. It does NOT mean
the passage supports the claim โ that is entailment (Tier C, Critic's job).
For a source that is not in the corpus, use `verify_doi` to establish whether
it exists at all.
Args:
claim: The sentence or statement being checked.
source: Cited document title or filename, as written in the answer.
page: Cited page number; 0 or omitted searches the whole document.
quote: An exact quotation to locate, if the claim contains one.
record: Append the verdict to the citation ledger (default True).
Returns:
The verdict, what was tested, and which figures (if any) were missing.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| claim | Yes | ||
| quote | No | ||
| record | No | ||
| source | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden and does so well: it explains the deterministic/no-model behavior, clarifies that a supported verdict does not mean entailment, and discloses the ledger side effect via the record parameter. It also states what is tested and what the return contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the key distinction, then provides structured Args and Returns sections. Every sentence is useful, with no filler or repetition, and the tier/entailment distinction is clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, lack of annotations, low schema coverage, and presence of an output schema, the description is complete: it covers purpose, boundaries, all parameters, side effects, and return semantics. An agent has enough information to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the Args section fully documents all five parameters: claim, source, page (including 0/omitted behavior), quote, and record with its default. This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: verify a claim against the indexed corpus deterministically. It also clearly delineates scope by explaining what is checked and what is left to Tier C entailment, and distinguishes itself from verify_doi for sources outside the corpus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool and when not to: deterministic checks only, not semantic entailment, and use verify_doi when the source is not in the corpus. The alternatives and boundary conditions are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_doiMetis โ Verify DoiA
Tier B โ does this DOI exist, match the citation, and is it RETRACTED?
Catches the classic fabricated citation: plausible authors, plausible journal,
no such paper. And the failure nothing in Metis could see before โ citing a
paper that has since been retracted, which is worse than a wrong page number
because the claim looks perfectly sourced.
Metadata only: a DOI goes out, bibliographic fields come back. Nothing of the
researcher's leaves the machine, so this stays inside the local-first rule.
A `doi_resolved` verdict means the paper is real, NOT that it supports the
claim. That distinction is the whole point of tiering.
Args:
doi: The DOI as cited (a full https://doi.org/โฆ URL is fine).
expect_author: Surname as cited, to check against the record.
expect_year: Year as cited.
expect_title: Title as cited.
record: Append the verdict to the citation ledger (default True).
Returns:
The verdict, the resolved record, and any retraction or correction flags.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes | ||
| record | No | ||
| expect_year | No | ||
| expect_title | No | ||
| expect_author | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses metadata-only scope, that nothing of the researcher's leaves the machine, and that the response includes retraction/correction flags. It omits operational traits like network dependence on doi.org, behavior for unresolvable malformed DOIs, and rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core question in bold, then rationale, then structured Args/Returns. A few phrases are rhetorical rather than informative ('worse than a wrong page number because the claim looks perfectly sourced'), but they do convey why retraction matters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-param verification tool with an output schema, the description covers purpose, privacy posture, parameter intent, verdict interpretation, and return shape. An agent has everything needed to call it correctly and to read the result without overclaiming.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it documents all five parameters including the meaning of the expect_* fields ('as cited') and the record default. The accept-format hint ('a full https://doi.org/โฆ URL is fine') is genuinely additive, though expect_year and expect_title definitions remain terse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line names a specific verb and resource plus three distinct checks: existence, citation match, and retraction status. That scope cleanly separates it from siblings like verify_claim or verify_text_citations, which address claim support rather than record existence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete triggers โ catching fabricated citations and flagging retracted papers โ and explicitly bounds the tool's meaning: 'A doi_resolved verdict means the paper is real, NOT that it supports the claim.' It stops short of naming the sibling to use for claim support, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_installMetis โ Verify InstallA
Check everything Metis needs on this computer, and repair what can be repaired.
The install doctor โ the same check the installers run and schedule daily โ
over the list in system/install/essentials.json: computer, Metis's
programs, every AI app it connects to and whether Metis starts from that
app's own settings, the dashboard and its scans, the scheduled tasks, and
the data. With fix=True (default) it reinstalls broken or outdated tools,
reconnects apps (merging, never replacing their other connectors), adds
missing database tables, downloads the search model, starts the dashboard
and re-creates missing scheduled tasks โ then checks again.
Use when the person says something is not working, after an update, or when
they ask whether everything is set up. Tell them the result in plain words;
if an app was reconnected, they must quit it completely (Claude Desktop:
also from the tray) and open it again.
| Name | Required | Description | Default |
|---|---|---|---|
| fix | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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: it discloses the checklist source (system/install/essentials.json) and exactly what fix=True mutates โ reinstalls, app reconnects with merge-not-replace semantics, DB table creation, model download, dashboard start, task re-creation โ then a re-check. The merge guarantee and the required app restart are non-obvious behavioral facts an agent could not get anywhere else.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then scope, then fix behavior, then usage. Dense but every clause carries information; the enumeration is long yet each item is a distinct thing being verified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and the mutation surface is well covered for an un-annotated tool. The remaining gap is relational: nothing distinguishes it from metis_doctor, which a sibling-aware agent would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter has no description in the schema, so the description must compensate. It explains fix=True (default) in detail and implies fix=False is check-only via 'repair what can be repaired', but never states that mode explicitly, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb pair (check/repair) and a concrete resource (everything Metis needs on this computer), and enumerates what is covered: programs, connected AI apps, dashboard, scheduled tasks, data. It never names the obvious sibling (metis_doctor) or explains how this differs from it, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real trigger conditions: the person says something isn't working, after an update, or when asked whether everything is set up. It also tells the agent what to do afterward (plain words, quit the app fully after a reconnect). It stops short of exclusions or naming alternatives such as metis_doctor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_text_citationsMetis โ Verify Text CitationsA
Tier A โ find every citation in a block of prose and check each one.
Use this on a draft, a lesson, a report section, or anything about to be
written to disk. Extraction is deliberately conservative: it matches
citations that name a source and a page, plus bare DOIs. A false "unverified"
warning is more corrosive than a missed one, because it trains the reader to
ignore the report.
Args:
text: The prose to scan.
artifact_path: File this text belongs to, recorded in the ledger so
"which of my outputs rest on unverified citations?" is a query.
record: Append each verdict to the citation ledger (default True).
Returns:
A per-citation verdict table and a summary count.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| record | No | ||
| artifact_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does substantial work: it discloses the extraction heuristic (source + page, plus bare DOIs), the deliberate false-negative bias and its rationale, and the ledger write side effect controlled by `record` (default True). It omits whether verification makes external network calls, what happens on lookup failure, and what the verdict categories are, which matters for a tool that clearly reaches beyond local data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the rationale sentence for conservative extraction genuinely earns its place by telling the agent what to expect from results. Minor waste: the 'Returns:' block is redundant given an output schema exists, and the 'Tier A โ' prefix carries no information for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with one required arg, the description covers intent, usage context, extraction behavior, side effects, and (via schema) return shape. The remaining gap is environmental: no mention of whether it needs network access, credentials, or how long a large text block might take.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate entirely โ and it does. `text` is defined as the prose to scan, `artifact_path` is explained by its downstream purpose (recorded in the ledger to enable a specific query), and `record` is given both its effect and its default. Nothing about the three parameters is left ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'find every citation in a block of prose and check each one.' That is concrete and actionable. It does not, however, differentiate itself from the several nearby siblings that also verify things (verify_claim, verify_doi, citation_debt), and the 'Tier A' prefix is unexplained jargon.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear positive guidance on when to reach for it: 'on a draft, a lesson, a report section, or anything about to be written to disk.' That covers the trigger condition well. It stops short of naming alternatives or exclusions, so an agent must infer why it would pick this over verify_doi for a single reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viz_library_overviewMetis โ Viz Library OverviewA
Show the whole visualization library โ every style, every recipe.
Read this when the researcher asks what styles exist, or before offering a choice
of look. The same text is served as the `metis://viz-styles` resource, so
Claude Desktop sees it without any client-specific work.
Returns:
Markdown: styles with their loved-render counts, recipes with their data
contracts and track records.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does the safety work itself: 'Show' and the absence of any mutation language make clear this is a read-only enumeration. It adds genuinely useful non-obvious context โ that the same text is exposed as the `metis://viz-styles` resource โ which tells the agent there is a mirror surface with identical content. Minor gap: no mention of size/volume of the payload or cost of dumping the whole library.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and scope, then the trigger, then the mirror-resource note, then the return shape. Only the resource sentence is arguably meta, but it earns its place by preventing client-specific duplication work. Slightly long for a zero-argument read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool this is fully adequate: what it returns (styles with loved-render counts, recipes with data contracts and track records), when to call it, and the resource mirror are all covered. The output schema exists, so the extra return summary is surplus rather than a requirement, and nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies; there is nothing for the description to disambiguate. The description correctly implies no arguments are needed to get the full library.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Show the whole visualization library โ every style, every recipe'), and the scope word 'whole' plus the enumerations distinguish it from the sibling search tool find_viz and the individual save_viz_style/save_viz_recipe tools. An agent can identify it as the browse-everything entry point 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit trigger given: 'when the researcher asks what styles exist, or before offering a choice of look' โ this is a clear when-to-use condition tied to a concrete conversational situation. It stops short of naming alternatives (e.g. find_viz for targeted lookup, check_viz_fit for fit evaluation), so the routing is clear but not exclusionary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
weigh_evidenceMetis โ Weigh EvidenceA
What does the evidence in the corpus actually say about a quantity?
Fact-checking a number is not the same as checking a citation. A figure can be
correctly cited and still be one of many the literature reports โ this corpus
holds specificity estimates for HAT serology ranging from 72% to 99.7%, and a
single confident answer hides that entirely.
So this reports the SPREAD, never one value: every quantified statement found,
with its document and page, the qualifiers attached to it (sample size,
confidence interval, reference standard, population, setting, threshold), what
is MISSING from each, sentences nearby that complicate the figure, and how old
the evidence is. Deterministic โ lexical retrieval and regex, no model, so it
can miss an oddly-phrased figure but cannot invent one.
Use it before answering any "what is the X of Y" question. Then use
`check_for_newer_evidence` to find out whether the corpus is current.
Args:
question: The question as asked, e.g. "specificity of CATT in passive screening".
layers: Comma-separated layer slugs to restrict to; omit to search all.
show: How many individual findings to list (default 14).
Returns:
Per-metric spread, the individual estimates with provenance and
qualifiers, the qualifier gaps, and the evidence date range.
| Name | Required | Description | Default |
|---|---|---|---|
| show | No | ||
| layers | No | ||
| question | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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: it discloses the retrieval mechanism (lexical + regex, no model), the consequence ('can miss an oddly-phrased figure but cannot invent one'), the deliberate refusal to aggregate to one value, and the qualifier/gap/date-range content of the response. This is exactly the behavioral context an agent needs for a research-evidence tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core question and the spread-not-single-value rationale before mechanics. The 72%-99.7% specificity example is illustrative and slightly indulgent, but it does real work explaining why spread reporting matters; the Args/Returns blocks are tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, mechanism, output shape, and next-step tool, plus documented parameters. An output schema exists, so the Returns section is mild redundancy rather than a gap. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the Args block compensates: question is given an example phrasing, layers is explained as comma-separated slugs with an explicit 'omit to search all' default semantic, and show is defined as the number of findings with default 14. All three parameters gain meaning beyond the bare types in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it reports the SPREAD of quantified evidence about a quantity, not a single value. The opening contrast with fact-checking a citation sharpens what the tool is and is not, distinguishing it from siblings like verify_claim and verify_text_citations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit instruction: 'Use it before answering any "what is the X of Y" question,' followed by the sequencing rule to call check_for_newer_evidence afterwards. It also states when not to expect the tool's output to be a single answer, pre-empting misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
which_accountMetis โ Which AccountA
Which project a folder belongs to and which account (work or personal) it must use for GitHub, Netlify and Supabase. Call this before any push, publish, release or database change, and follow it.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses an authoritative precondition for risky operations ('call this before... and follow it'), but does not explain what happens if skipped, whether it reads local configuration, or error behavior. Output return shape 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with purpose front-loaded and usage directive second. No wasted wording; appropriately sized for a preflight lookup tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter lookup with an output schema, the description gives enough purpose and timing context to invoke it. The remaining gap is path semantics, which is minor but noticeable because schema coverage is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single path parameter has 0% schema description coverage. The description implies it is a folder path, but does not specify absolute versus relative paths, whether file paths are accepted, or what happens for unknown or untracked folders.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific lookup: which project a folder belongs to and which account it must use for GitHub, Netlify and Supabase. This distinguishes it from generic account tools like list_accounts, though the name 'which_account' underplays the project-mapping purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear timing rule: call before any push, publish, release or database change, and follow the result. It does not name alternatives or when-not-to-use cases, but the pre-operation context is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_reflexionMetis โ Write ReflexionA
Stage 11: Record an agent self-critique entry to the reflexion_log.
Called at the end of every agent run to capture experience: what worked,
what could be better, what context was missing, what tools were needed.
Entries are reviewed by the weekly Coach loop for self-improvement proposals.
Args:
session_id: Pipeline session ID from session_bootstrap().
agent_slug: Which agent is writing the reflexion (e.g. 'librarian').
went_well: What went well in this run (1โ2 sentences).
could_improve: What could have been done better (1โ2 sentences).
missing_context: What context or data was unavailable but needed.
tool_wishes: Tools or capabilities that would have helped.
| Name | Required | Description | Default |
|---|---|---|---|
| went_well | No | ||
| agent_slug | Yes | ||
| session_id | Yes | ||
| tool_wishes | No | ||
| could_improve | No | ||
| missing_context | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It describes the tool as a write operation (recording an entry) and provides context about post-processing (review loop). However, it does not specify whether the tool is append-only, if it requires specific permissions, or if there are limits like one entry per run. For a logging tool, this is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a purpose header, a contextual paragraph, and a bullet list of parameters. No unnecessary words. Every sentence adds value. The key information is front-loaded, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, 0% schema coverage, no annotations, and the existence of an output schema (not shown), the description covers all parameters and use case. It explains the downstream use (review by Coach loop). It does not explicitly mention return values, but the output schema likely handles that. A minor gap is not stating if the entry is saved immediately or if failure handling exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (no descriptions in input schema), so the description carries full burden. It lists all 6 parameters with clear explanations: session_id is 'Pipeline session ID from session_bootstrap()', agent_slug is 'Which agent is writing the reflexion', and the three optional text fields are described with their 1-2 sentence length guideline. This adds substantial meaning beyond the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool's purpose is clearly stated: 'Record an agent self-critique entry to the reflexion_log'. It specifies it is called at the end of every agent run to capture experience. This verb+resource combination distinguishes it from sibling tools like log_agent_run or add_journal_entry, which serve different logging purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Called at the end of every agent run'. It also explains the downstream use: entries are reviewed by the weekly Coach loop for self-improvement. While it doesn't explicitly list when not to use it or compare with alternatives, the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_user_configMetis โ Write User ConfigA
Write the full user-config.yaml produced by the first-run config wizard.
Merges the provided YAML into the existing config so that specialist_contexts
and active_contexts set by earlier tools are preserved.
Args:
yaml_content: Complete YAML string as produced by the wizard (all sections).
| Name | Required | Description | Default |
|---|---|---|---|
| yaml_content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavior. It describes the merge behavior and preservation of specialist_contexts and active_contexts, but does not mention permissions, error handling, side effects, or what happens if the config does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus an Args section, efficiently conveying purpose and key behavior. It is front-loaded with the main action. Could be slightly more structured, but overall concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter and an output schema exists, the description covers the core functionality and parameter meaning. However, it lacks context about prerequisites (e.g., wizard must have run) and does not differentiate usage from similar write tools like write_user_preferences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage for the parameter. The description's Args section adds meaning by specifying that yaml_content should be 'Complete YAML string as produced by the wizard (all sections)', but does not provide format constraints, size limits, or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Write' and the resource 'the full user-config.yaml produced by the first-run config wizard'. It distinguishes from siblings like 'get_user_config' (read) and 'write_user_preferences' (partial write) by specifying it writes the complete config.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used after the first-run config wizard and mentions merging behavior, but does not explicitly state when to use this tool versus alternatives like 'write_user_preferences' or provide any 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.
write_user_preferencesMetis โ Write User PreferencesB
Write user-preferences.json produced by the first-run config wizard.
Merges the provided JSON into any existing preferences so incremental wizard
saves do not overwrite earlier sections.
Args:
json_content: JSON string with preference keys (news_topics, journals,
pubmed_query, openalex_query, theme, density, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| json_content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions merge behavior but omits important details: idempotency, error handling, authentication needs, return value. Output schema exists but description doesn't reference it or clarify what the tool returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Brief two-paragraph structure: purpose sentence, merge explanation, then args list. No wasted words. The args section could be integrated more seamlessly but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema exists), the description is adequate but not thorough. It explains the merge behavior and gives key examples, but lacks error handling, format spec, or return value description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description adds value by listing example preference keys (news_topics, journals, etc.). However, it does not specify required JSON format (e.g., escaping, allowed types), leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it writes user-preferences.json produced by the first-run config wizard. Specifies merge behavior to avoid overwriting earlier sections. Does not explicitly differentiate from sibling tool write_user_config, which might have overlapping purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes use case (first-run config wizard, incremental saves) but provides no guidance on when not to use it or alternatives like write_user_config. Lacks explicit exclusions.
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.
3 tool updates
v0.1.6- Changed
set_research_interests1 field changed- added
Input schema / properties / display_nameAdded value: +{ + "default": "", + "title": "Display Name", + "type": "string" +}
- Added
update_metis - Added
verify_install
74 tool updates
v0.1.5- Removed
_obsidian_vault - Added
add_reminder - Added
audit_background_provenance - Added
check_for_newer_evidence - Added
check_news_feeds - Added
check_viz_fit - Added
citation_debt - Added
create_document - Added
create_focus_area - Added
create_poster - Added
create_presentation - Added
delete_knowledge_database - Added
export_background_pack - Added
fill_document_template - Added
find_viz - Added
focus_brief - Added
focus_decline - Added
focus_explore - Added
focus_keep - Added
focus_safe - Changed
generate_daily_insight1 field changed- added
Input schema / properties / periodAdded value: +{ + "default": "daily", + "title": "Period", + "type": "string" +}
- Added
get_briefing_coverage - Added
get_continuity_context - Added
get_missed_news - Added
get_persona_learnings - Added
import_zotero_pdfs - Added
index_pending_layers - Added
ingest_office_document - Added
install_background_pack - Added
kg_index_notes - Added
library_coverage - Added
list_accounts - Added
list_background_packs - Added
list_outputs - Added
list_templates - Added
mark_brief_read - Added
nature_briefing - Added
open_output - Added
preview_focus_lens - Added
promote_session_decisions - Added
push_to_zotero - Added
read_document_template - Added
read_office_document - Added
reading_stack_add - Added
reading_stack_show - Changed
record_decision1 field changed- added
Input schema / properties / agent_slugAdded value: +{ + "default": "", + "title": "Agent Slug", + "type": "string" +}
- Added
record_persona_learning - Added
record_viz_use - Added
resolve_decision - Added
review_open_decisions - Added
run_maintenance - Changed
save_daily_brief1 field changed- changed
Input schema / properties / model / defaultPrevious value: -"desktop-brief"New value: +""
- Added
save_project_figure - Changed
save_session_summary1 field changed- added
Input schema / properties / clientAdded value: +{ + "default": "", + "title": "Client", + "type": "string" +}
- Added
save_viz_exemplar - Added
save_viz_recipe - Added
save_viz_style - Added
scan_library - Added
scan_nature_briefings - Added
set_focus_state - Added
set_knowledge_layer_enabled - Added
set_research_interests - Added
show_agent_decisions - Added
show_focus_areas - Added
show_learned_preferences - Added
start_interest_interview - Added
suggest_interests_from_work - Added
update_focus_overview - Added
verify_claim - Added
verify_doi - Added
verify_text_citations - Added
viz_library_overview - Added
weigh_evidence - Added
which_account
17 tool updates
v0.1.4- Added
analyze_script - Added
consolidate_old_memories - Added
evaluate_against_layers - Added
generate_profiling_script - Added
get_related_memories - Added
ingest_profiling_output - Added
kg_index_memory - Added
kg_memory_connections - Added
link_memories - Added
recall - Added
recall_decisions - Added
record_decision - Added
record_routing_preference - Added
reindex_memory - Added
remember - Added
scan_project_scripts - Added
update_today_board
24 tool updates
v0.1.2- Added
aggregate_reflexions - Removed
aggregate_reflexions_tool - Added
apply_proposal - Removed
apply_proposal_tool - Changed
clean_dataset1 field changed- added
Input schema / properties / authorizedAdded value: +{ + "default": false, + "title": "Authorized", + "type": "boolean" +}
- Added
consolidate_reflexions - Removed
consolidate_reflexions_tool - Added
delete_task - Added
draft_self_improvement_proposal - Removed
draft_self_improvement_proposal_tool - Added
export_knowledge_markdown - Added
find_tools - Added
generate_handoff_brief - Removed
generate_handoff_brief_tool - Added
get_memory_health - Added
list_tool_groups - Added
load_tool_group - Removed
memory_health_report - Added
redact_data_file - Added
save_daily_brief - Added
scan_outgoing - Added
search_semantic_scholar - Added
sync_zotero_local - Added
update_task
185 tool updates
v0.1.0- First observed
_obsidian_vault - First observed
add_glossary_term - First observed
add_journal_entry - First observed
add_memory_entry - First observed
add_specialist_context - First observed
add_tracked_file - First observed
add_user_topic - First observed
aggregate_reflexions_tool - First observed
anonymize_text - First observed
apply_proposal_tool - First observed
approve_proposal - First observed
archive_library_item - First observed
archive_project - First observed
ask_library - First observed
assemble_brainstorm_context - First observed
backup_db - First observed
brainstorm_turn - First observed
build_pdf_knowledge_db - First observed
capture_idea - First observed
capture_observation - First observed
check_data_safety - First observed
clean_dataset - First observed
commit_session_decisions - First observed
compare_profiles - First observed
configure_library_provider - First observed
connect_project_folder - First observed
consolidate_reflexions_tool - First observed
consolidate_session_memory - First observed
create_knowledge_database - First observed
create_project - First observed
create_project_full - First observed
create_task - First observed
cross_pollinate - First observed
daily_note - First observed
decrypt_backup - First observed
detect_projects - First observed
dhis2_metadata - First observed
dhis2_query - First observed
diff_anonymization - First observed
discovery_intro - First observed
discovery_status - First observed
draft_self_improvement_proposal_tool - First observed
encrypt_backup - First observed
end_span - First observed
enrich_meeting_with_crossrefs - First observed
export_citations - First observed
extract_structured - First observed
find_connections - First observed
full_scan - First observed
generate_daily_insight - First observed
generate_handoff_brief_tool - First observed
generate_image - First observed
get_agent_context - First observed
get_agent_runs - First observed
get_backup_schedule - First observed
get_brainstorm_session - First observed
get_consent_ledger - First observed
get_constitution - First observed
get_contacts - First observed
get_context - First observed
get_course_status - First observed
get_daily_insight - First observed
get_glossary - First observed
get_ideas - First observed
get_journal - First observed
get_library_stats - First observed
get_network_policy - First observed
get_new_publications - First observed
get_news_briefs - First observed
get_pdf_index_stats - First observed
get_pending_proposals - First observed
get_project_categories - First observed
get_project_status - First observed
get_research_context - First observed
get_spans - First observed
get_tasks - First observed
get_thinking_profile - First observed
get_topic_memory - First observed
get_user_config - First observed
get_user_profile - First observed
get_user_topics - First observed
get_working_memory - First observed
import_bibtex_library - First observed
index_library_pdfs - First observed
index_pdf_library - First observed
ingest_ideas_document - First observed
kg_community - First observed
kg_paths - First observed
link_claude_desktop - First observed
list_backups - First observed
list_basket - First observed
list_brainstorm_sessions - First observed
list_contexts - First observed
list_folder - First observed
list_generated_images - First observed
list_knowledge_databases - First observed
list_recent_memory - First observed
list_recent_sessions - First observed
list_research_entities - First observed
list_supported_formats - First observed
load_project_context - First observed
log_agent_run - First observed
log_consent_event - First observed
log_span - First observed
mark_publications_read - First observed
memory_health_report - First observed
metis_doctor - First observed
mine_references - First observed
next_discovery_tip - First observed
probe_tool_result - First observed
profile_dataset - First observed
promote_basket_item - First observed
propose_library_organization - First observed
propose_skill_improvement - First observed
publish_course - First observed
query_research_timeline - First observed
read_file - First observed
record_dataset_treatment - First observed
record_research_finding - First observed
record_thinking_event - First observed
register_code_artifact - First observed
register_data_dictionary - First observed
reject_proposal - First observed
remove_first_run_marker - First observed
remove_library_item - First observed
remove_project - First observed
remove_tracked_file - First observed
reset_thinking_profile - First observed
restore_db - First observed
review_course - First observed
run_metis - First observed
save_brainstorm_output - First observed
save_course_curriculum - First observed
save_course_outline - First observed
save_course_sources - First observed
save_lesson_draft - First observed
save_review - First observed
save_session_event - First observed
save_session_summary - First observed
scaffold_script - First observed
scan_folder_for_intent - First observed
scan_inbox - First observed
scan_literature - First observed
scan_news - First observed
scan_openalex - First observed
scan_project_folder - First observed
scan_pubmed_alerts - First observed
scan_tracked_files - First observed
search_code_repository - First observed
search_fulltext - First observed
search_library - First observed
search_literature - First observed
search_literature_extended - First observed
search_memory - First observed
search_notes - First observed
search_pdf_knowledge - First observed
search_session_memory - First observed
semantic_search - First observed
session_bootstrap - First observed
set_backup_schedule - First observed
set_discovery_tips - First observed
set_network_policy - First observed
set_project_category - First observed
set_working_memory - First observed
start_course_build - First observed
start_span - First observed
store_episodic_memory - First observed
store_procedural_memory - First observed
store_semantic_memory - First observed
suggest_cleaning - First observed
surface_relevant_context - First observed
sync_zotero_library - First observed
toggle_context - First observed
transcribe_recording - First observed
transcribe_voice - First observed
unarchive_project - First observed
update_all_projects - First observed
update_contact - First observed
update_project_memory - First observed
update_thinking_profile - First observed
validate_pipeline_stage - First observed
verify_backup - First observed
write_reflexion - First observed
write_user_config - First observed
write_user_preferences
TDQS
Scored across 283 tools
Several tool clusters genuinely overlap: metis_doctor vs verify_install, find_connections vs cross_pollinate, search_literature vs search_literature_extended, propose_skill_improvement/approve_proposal vs draft_self_improvement_proposal/apply_proposal (two parallel proposal systems), and a memory-write family of remember / add_memory_entry / store_episodic_memory / store_semantic_memory / store_procedural_memory / capture_observation. Descriptions work hard to cross-reference each other ('for X use Y; for Z use W'), which rescues many cases, but with 283 tools the boundaries still blur and misselection is likely.
snake_case is used uniformly, which is good, but the verb_noun convention is broken often: recall, remember, metis_doctor, kg_paths, kg_community, focus_brief, focus_safe, reading_stack_show, nature_briefing, viz_library_overview, dhis2_query/dhis2_metadata mix noun-first, question-style, and prefixed forms. Readable overall, but no single predictable pattern an agent can rely on.
283 tools is an extreme mismatch for any single agent context, far past the 15-tool comfort zone. The presence of find_tools / load_tool_group / list_tool_groups shows the team knows this and has built lazy loading, but the declared surface is still enormous and forces every caller through a discovery step.
Coverage is unusually broad: full CRUD for projects, tasks, memories, library items, ideas, journal, contacts; plus verification, backups, DHIS2, course building, document/poster generation, and visualization tracking. Gaps exist (e.g. no update for jobs* beyond archive/unarchive) but almost any workflow has a path.
Maintenance
Related MCP Connectors
A second brain for Claude: remembers your work, plans your day, encrypted under a key only you hold.
A second brain for your AI agent. Shared memory for your team's AI agents, plus public and private knowledge bases โ works with ChatGPT, Claude, Cursor and any MCP client.
AI research library. Save, organise and reuse notes and webpages as clean markdown context.
Portable AI memory you own. Keep memories and notes across Claude, ChatGPT, and other AI tools.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables semantic search and conversational querying across a personal research library of PDFs, DOCX, and other documents using a vector database. It provides tools for document summarization, finding related papers, and high-accuracy retrieval for AI clients like Claude Desktop.-
- AlicenseAqualityDmaintenanceGive Claude the ability to read, search, and synthesize across your entire PDF library. Built on PaperQA2.22MIT
- FlicenseAqualityCmaintenanceEnables Claude to search a local hybrid retrieval index of research papers and ingest new PDFs, providing research-paper memory queryable directly through natural language.2-
- FlicenseNot gradedqualityBmaintenanceEnables Claude Code and Cowork to act as a personal coach grounded in a locally indexed library of YouTube talks, websites and PDF books, answering with exact-second, paragraph or page citations and recalling the user's goals and decisions per Project. Search, memory and the usage log run on the user's own machine, and changing Sources rebuilds the knowledge base without any fine-tuning.-