margins-mcp
Allows Claude to read and write notes in an Obsidian vault, with staging for proposals and tools for searching, linking, and compiling raw files into structured wiki pages.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@margins-mcpsummarize my recent notes from this week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
margins-mcp
Use your Claude Pro/Max subscription on your Obsidian vault. No API key. No per-token costs. No embedding pipelines. Claude reads your notes and proposes updates; your subscription pays for inference; your files stay on your disk.
margins-mcp is a small Node program that sits between Claude (Desktop or Code) and your Obsidian vault. When you chat with Claude, it reads your notes through margins-mcp. Your files stay local, Claude does the thinking, your existing subscription pays for it.
Which Margins are you?
Margins works for six common starting points. margins_start auto-detects your state on the first call, so you don't have to classify yourself — but knowing which row you're on helps set expectations.
You... | Persona | First conversation |
Obsidian, vault organized with wikilinks | A1 | Q&A on your notes. |
Obsidian, vault is empty or new | A2 | Ask Claude to scaffold daily-note + meeting templates. |
Obsidian, many files but few wikilinks | A3 | Run |
No Obsidian, organized markdown | B1 | Same as A1. Install Obsidian for the proposal-review UX. |
No Obsidian, empty | B2 | Use |
No Obsidian, messy folder | B3 | Run |
Related MCP server: Obsidian MCP Server
Requirements
An Obsidian vault, or any folder with notes, PDFs, Office/OpenDocument files, email exports, EPUBs, or plain text
A Claude subscription: Pro ($20/mo), Max, or Claude Code
Install
Two commands:
npm install -g margins-mcp
margins-mcp installThe installer prompts for your vault path, detects Claude Desktop and Claude Code, writes the right config files, scaffolds raw/ + proposed/ + .margins/ inside your vault if missing, and runs a verification probe. Restart Claude Desktop (Cmd-Q on macOS, not just close the window), or in Claude Code run /mcp to see Margins listed.
Don't have a vault yet?
Scaffold a Margins-shaped one:
margins-mcp install --starter-vault ~/notesFinding your Obsidian vault path
If you already use Obsidian and don't know your vault's absolute path:
In Obsidian: right-click the vault name in the file tree → "Reveal in Finder" (macOS) or "Show in Explorer" (Windows). The path is in the title bar.
macOS common paths:
~/Documents/<VaultName>, or~/Library/CloudStorage/iCloudDrive/Obsidian/<VaultName>if iCloud-synced.Linux common paths:
~/Documents/<VaultName>, or~/.local/share/Obsidian/<VaultName>.Windows common paths:
%USERPROFILE%\Documents\<VaultName>.
Pass it to the installer via --vault /absolute/path or answer the prompt.
Try-without-installing
npx margins-mcp install --vault /path/to/vaultYou'll see a warning that npm may garbage-collect the npx cache and your configs would break weeks later. For real use, prefer npm install -g above. The npx path is fine for kicking the tires.
Manual install
If you'd rather edit config yourself, add this to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS; see Anthropic docs for Windows/Linux paths):
{
"mcpServers": {
"margins": {
"command": "node",
"args": ["/absolute/path/to/margins-mcp/bin/margins-mcp.js"],
"env": { "MARGINS_VAULT": "/absolute/path/to/your/vault" }
}
}
}Try it
In a new Claude conversation, ask:
Use margins to give me a summary of my recent notes.
Or:
What pages support the claim that my project deadline is May 30th? Use margins to find them.
Or:
I just dropped a spreadsheet into
raw/. Compile it into a structured source page in my wiki.
The model can read your vault, propose new pages, propose edits to existing ones, and pull raw sources into structured wiki pages. propose_compile_from_raw accepts Markdown/plain text, PDFs, Word docs, spreadsheets, decks, email exports, EPUBs, OpenDocument files, RTF, HTML, CSV/TSV, JSON, YAML, and common text-ish formats. Every write stages to proposed/ first; nothing lands without you accepting.
Tools
Context (call once per conversation)
Tool | Purpose |
| Vault stats + pending proposals + uningested raw files + recent preferences + the vault's |
| Read durable user preferences from |
Read
Tool | Purpose |
| Full-text + filename search across the vault. |
| Read one page by relative path. |
| Most recently modified pages. |
| Pages that wikilink to a target slug. |
| ChatGPT Deep Research compatibility pair. |
Propose writes (staged — nothing lands until accepted)
Tool | Purpose |
| Stage a new page at |
| Stage a string-replacement edit. |
| Stage an append. Creates the page if missing; stacks on pending proposals. |
| Turn a raw transcript, note, PDF, Word doc, spreadsheet, deck, email, EPUB, or other supported document in |
| List pending proposals + overwrite-risk flag per entry. |
|
|
Suggest (for A3 / B3 — vaults with many files but few links)
Tool | Purpose |
| Scan a page for entity-shaped phrases and propose wikilinks to other vault pages that share the same slug. The model then chains |
Learn
Tool | Purpose |
| Append a durable rule to |
How the proposal flow works
Every write tool stages to proposed/<path> inside your vault. Nothing touches the live tree until you (or an MCP client acting on your behalf) call resolve_proposal with action: "accept". You can also inspect staged content (ls proposed/) and accept by moving files yourself.
Sequential edits stack: a second propose_edit on the same path reads from the pending proposal, not the vault.
Configuration
Env var | Default | Purpose |
| (required) | Absolute path to your Obsidian vault or Markdown folder. |
| auto-detected | Comma-separated subfolders to index. Auto-detection: |
| (consent file) | Override telemetry: |
What Margins is NOT
To keep scope crisp:
Not an inference layer. Your Claude subscription pays for that. Margins makes zero LLM calls.
Not a web app. The chat surface lives in Claude Desktop / Claude Code / claude.ai. Margins is plumbing.
Not a cloud sync. Local-first. Your files stay on your disk.
Not a CRM integration. Different product.
Not API-key-based. Subscription-passthrough is the whole point.
Privacy
Vault content never leaves your machine. Margins is a Node process that reads/writes files locally and exposes structured tools over stdio.
Anonymous telemetry (opt-in at install time) reports tool-call counts to help me prioritize what to build next. Sample event payload:
GET https://margins.goatcounter.com/count?p=/tool/search_vault. No vault content, no file paths, no user identifier beyond the standard 24-hour rolling session token GoatCounter assigns. Disable per-session withMARGINS_TELEMETRY=off. Decision stored at~/.margins/consent.json.
Develop
git clone https://github.com/cflorczyk9/Margins.git
cd Margins
npm install
npm test
MARGINS_VAULT=/path/to/test/vault npm startThe compiler (src/compiler/) was originally vendored from an earlier Margins web app. The web app and its landing page live on the legacy-webapp branch in this repo. Re-vendor with scripts/vendor-compiler.sh if you ever need to pull updates back from there.
How Margins gets smarter over time
Two things compound:
Your vault's
CLAUDE.mdis auto-loaded bymargins_start. Drop vault-specific rules in there — filing conventions, voice, naming patterns — and Claude obeys them in every conversation. No copy-paste..margins/preferences.mdis a Margins-maintained file inside your vault. When you correct Claude ("no, that should be in projects, not personal"), Claude callsrecord_preferenceto remember the rule. Next conversation it reads them viarecall_preferencesbefore proposing writes. The file is plain Markdown — you can audit it, hand-edit it, delete sections that no longer apply.
Both files live in the vault, so they travel with it. Switch machines, switch hosts (Claude Desktop → Claude Code → ChatGPT once that lands), and your conventions follow.
Roadmap
v0.6: web onboarding at marginsmcp.com — pick a folder via File System Access, scaffold a vault, get the install command. Closes B2/B3 personas without requiring CLI fluency.
v0.6:
get_citations(semantic embedding search, opt-in dep).v0.6: OCR/image, legacy Office binary, and audio/video ingestion for
propose_compile_from_raw.v0.7: HTTP / Streamable transport for claude.ai web and ChatGPT custom connectors.
v0.7+: Obsidian community plugin alongside MCP, if signal supports it.
v0.8+: file watcher / auto-scaffold on drop into
raw/.
License
MIT
Available Tools
23 toolsappend_toA
Append content to the end of a page. If the page doesn't exist, it's created. If a pending proposal exists for the path, the append stacks on top of it. Result is staged at proposed/. If the user asks for final proposed content, read proposed/ after appending instead of inferring.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Page path relative to vault root. | |
| content | Yes | Content to append. A newline separator is added if needed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). Description adds behavioral details: auto-creation, proposal stacking, newline handling. 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?
Four concise sentences front-loaded with the main action. Every sentence adds value: core function, creation behavior, proposal interaction, output location. 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?
No output schema, but description explains result staging at proposed/<path>. Handles all likely agent questions: what happens if page exists? if not? if proposal exists? How to get final 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 coverage 100% with descriptions. Description adds 'relative to vault root' for path and 'newline separator added if needed' for content, providing extra clarity 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 'Append content to the end of a page' with specific verb and resource. It also covers edge cases like page creation and proposal stacking, which distinguishes it from sibling tools like propose_edit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: append to end, create if missing, stacks on pending proposals. Also advises reading proposed/<path> for final content instead of inferring. No alternatives named but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchBRead-only
ChatGPT Deep Research fetch. Returns {id, title, text, url, metadata} for the given vault path.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the read-only nature is clear. The description adds the return shape but does not disclose error handling, authentication, or performance characteristics. It 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?
The description is a single concise sentence that includes purpose and return fields. It is efficient, though it could be better structured with bullet points 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 a simple fetch with one parameter and no output schema, the description provides basic coverage. However, it lacks details on constraints (e.g., path format, accessibility) and does not differentiate from sibling tools, leaving some 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 schema only defines 'id' as a string. The description adds meaning by stating it is a 'vault path', which is critical for correct usage. 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 it fetches a document from a vault path and specifies the returned fields. However, it doesn't explicitly differentiate from sibling tools like read_page or search, which may also retrieve vault 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?
No guidance is provided on when to use this tool versus alternatives (e.g., search, read_page, search_vault). The description merely states what it does without context on selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_backlinksARead-only
Find vault pages that link to a target slug or filename. Matches [[wikilinks]] and relative .md links.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 25. | |
| target | Yes | Slug or filename without extension. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description correctly adds behavioral detail beyond annotations by specifying the link matching behavior. It does not contradict annotations and provides useful context about what links are matched, though it could further clarify the output format.
Agents need to know what a tool does to the 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 consists of two concise sentences with no unnecessary words. It is front-loaded with the core purpose and immediately provides specific details about link types. 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 backlink lookup tool with clear annotations and schema, the description covers the main functionality. However, the lack of an output schema and detailed information about what specifically is returned (e.g., page paths or titles) leaves some minor gaps. Overall, it is fairly 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 100%, with both parameters described adequately in the schema. The description adds minimal new meaning beyond repeating the schema descriptions ('Default 25.' for limit, and 'Slug or filename without extension' for target). Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb 'Find' and resource 'vault pages that link to a target slug or filename', and specifies the link types matched ([[wikilinks]] and relative .md links). This clearly distinguishes it from siblings like search_vault or read_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 finding backlinks but does not explicitly state when to use this tool versus alternatives, nor does it provide any exclusions or prerequisites. However, the context is clear: it's for backlink discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vault_contextARead-only
Read the vault's wikilinking context: entity slugs (people, organizations, places, tools, projects), active project/decision slugs (priority=active or recently updated), and the in-use semantic tag taxonomy. Call this BEFORE propose_compile_from_raw so the page you stage uses real entity slugs in [[wikilinks]] (not invented names) and existing tags (not new variants). Region/X and vibrance/X tags are excluded from the response — those are auto-computed by scripts/wiki_regions.py and must not be model-generated. Cached on a vault-mtime key; safe to call repeatedly.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | Force a re-scan even if the vault hasn't changed since the last call. Default false (use cache). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds valuable behavioral details: cached on vault-mtime, safe to call repeatedly, and exclusion of auto-computed tags. 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?
Well-structured: opens with main purpose, then specifics, then usage hint, then exclusion detail. Each sentence adds value, though slightly verbose in listing all three context types.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 one optional parameter and no output schema, the description fully covers what the tool returns, when to use it, caching behavior, and exclusions. 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?
Only one parameter 'refresh' with boolean type; schema coverage is 100%, so schema already documents it. Description mentions force re-scan but adds no new semantic meaning beyond the 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?
Clearly states it reads the vault's wikilinking context and lists three specific outputs: entity slugs, active slugs, and taxonomy. Differentiates from siblings by naming propose_compile_from_raw and explicitly excluding Region/X and vibrance/X tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 before propose_compile_from_raw, explaining why (real entity slugs and existing tags). Notes caching behavior and safety for repeated calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_proposalsARead-only
List pending proposals with optional filtering. Each entry has proposal path, destination path, whether accepting overwrites an existing vault file, size, and (for overwrites under default settings) a small first-diff preview. Use the pattern filter to scope to a folder or file shape when the queue is large.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum proposals to return. Response includes totalMatched + truncated flag when results are capped. | |
| sortBy | No | Sort order. 'path' (default) is lexical; 'age' is newest mtime first; 'size' is largest first. | |
| pattern | No | Glob to filter destinationPath. Supports *, **, ?. Example: 'wiki/sources/*.md' or 'wiki/projects/briefly-**'. | |
| includeDelta | No | Include per-overwrite first-diff preview. Default true. Set false when scanning a large queue — saves N pairs of file reads. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals specifics about each entry (path, destination, overwrite status, size, preview) and explains the effect of setting includeDelta to false, which goes beyond the readOnlyHint annotation. This provides useful behavioral context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, the purpose is front-loaded. Every sentence adds necessary detail like the preview feature and pattern usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 parameters and no output schema, the description covers purpose, filtering, and parameter behaviors. The limit parameter's schema description already mentions totalMatched and truncated flag, so the description doesn't need to repeat that. It's sufficiently complete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the practical effect of includeDelta (saving file reads) and the purpose of pattern (scoping to folder/file shape), improving understanding beyond 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 the verb 'list' and the resource 'pending proposals', making the purpose immediately obvious. It distinguishes from sibling tools like 'resolve_proposal' and 'propose_wikilinks' by focusing on listing, not acting on proposals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 using the pattern filter when the queue is large, which is helpful context. However, it does not explicitly state when not to use this tool or mention alternatives (e.g., 'list_unprocessed' for unprocessed items), leaving some ambiguity for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recentARead-only
List the most recently modified vault files. Use this to answer 'what did I just ingest / update'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 20. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the description's read-only nature is already signaled. The description adds the temporal constraint (most recently modified) but does not detail pagination or return fields, which is acceptable for a simple 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?
Two sentences, front-loaded with action, no fluff. Perfectly concise 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?
Given the tool's simplicity (1 optional parameter, no output schema), the description is complete: it states what it lists and when to use it, leaving no 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 coverage is 100%, and the parameter 'limit' is fully described in the schema (min, max, default). The tool description adds no additional parameter context, so baseline score 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 tool lists recently modified vault files and gives a specific use case ('what did I just ingest / update'), distinguishing it from siblings like list_unprocessed and list_proposals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 it (to answer recent updates), providing clear context. It does not mention alternatives or when not to use, but the context is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_unprocessedARead-only
List vault files that have not yet been compiled into a wiki source page. Files can live anywhere in the vault (raw/ is conventional but not required) — detection works on raw_file: frontmatter, not folder placement. Use this when the user asks 'what haven't I filed yet?' or before a compile pass. Each item is a vault-relative path you can pass directly to propose_compile_from_raw.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum pending files to return. Default 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds context about detection using frontmatter rather than folder placement. It does not describe return format details beyond 'vault-relative path', which could be improved, 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 compact and front-loaded with the core purpose, followed by usage context and a practical pointer to a sibling tool. 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 (one optional param, no output schema), the description is complete. It explains what is listed, how detection works, when to use it, and how the output can be used.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter is described in the schema. The description adds no additional meaning about how limit affects results or the default value is already in 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 (list) and resource (unprocessed vault files) and clearly states the detection mechanism (raw_file frontmatter). It distinguishes itself from sibling tools like list_proposals by explaining the output can be passed to propose_compile_from_raw.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 scenarios: when the user asks 'what haven't I filed yet?' or before a compile pass. Also mentions that results are directly consumable by propose_compile_from_raw, guiding the agent to the appropriate next step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
margins_doctorARead-only
Diagnose the vault's health. Returns a structured report of issues: orphan source pages (raw_file points to a missing file), tracker drift (source pages without tracker rows, or tracker rows for missing sources), files with malformed frontmatter, and large raw files. Read-only — never modifies the vault. Use when the user asks 'is anything broken?', 'check my vault', or before major operations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true, and the description reinforces 'never modifies the vault.' It adds value by listing the exact types of issues diagnosed, providing behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each serving a purpose: first describes output, second states read-only property and usage hints. 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 no output schema, the description adequately describes the output types and usage scenarios. It is complete for a diagnostic 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 zero parameters, so schema coverage is 100%. The description doesn't need to explain parameters; baseline is 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 the tool diagnoses vault health and returns a structured report of specific issues: orphan source pages, tracker drift, malformed frontmatter, and large raw files. The verb 'diagnose' and resource 'vault health' are precise, and it distinguishes from siblings like margins_start and margins_reset_proposals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: when user asks about broken items, checks vault, or before major operations. It doesn't explicitly state when not to use or name alternatives, but the context with siblings implies it's the diagnostic tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
margins_reset_proposalsADestructive
Clear all pending proposals from proposed/. Use when proposals have accumulated from failed Claude sessions, or when the user wants a clean slate. Returns the number of files that would be deleted. Requires confirm=true to actually delete — without confirm, returns a dry-run list. Vault files are never touched; only files under proposed/.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Pass true to actually delete the pending proposals. Default false returns a dry-run preview. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark it as destructive, but description adds critical detail: never touches vault files, only proposed/. Also explains dry-run behavior with confirm parameter. No contradiction 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?
Three concise sentences, each essential. First sentence states action, second gives usage context, third explains confirmation behavior and safety.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 single parameter and no output schema, description fully covers purpose, usage cues, parameter behavior, and safety scope. Agent can correctly decide and invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameter semantics already, but description adds behavioral context for confirm: dry-run vs actual deletion. Reinforces and clarifies 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 clearly states the tool clears pending proposals from a specific directory. It uses a specific verb 'Clear' and resource 'pending proposals from proposed/', distinguishing it from sibling tools like list_proposals or resolve_proposal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: after failed Claude sessions or when wanting a clean slate. Implicitly excludes use cases where proposals should be preserved. Does not explicitly list 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.
margins_startARead-only
Conversation-start primer. Always call this once at the start of every vault-relevant conversation. The response includes a 'mode' field — read it and follow the 'guidance' field tailored to that mode: (1) mode='pile' for unstructured many-file vaults — returns a time-stratified sample of vault files, filename patterns, and (importantly) a rawScan with a priorityQueue of raw/ files to compile FIRST via propose_compile_from_raw. If priorityQueue is non-empty, your best opening move is to compile those files in parallel in a single turn (read_page each to get readable text, then propose_compile_from_raw with a structured summary) — the user dropped source documents and wants wiki source pages within ~90 seconds. (2) mode='empty' for near-empty vaults — ask what the user wants and offer to scaffold. (3) mode='synthesis' for organized linked vaults — returns folder stats, pending proposals, uningested files, recent user preferences, and the vault's CLAUDE.md. Ground answers in this structure and cite file paths. All modes also return pendingProposals, uningestedRaw, recentPreferences, and vaultManual.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, which aligns with the tool's read-only nature. The description adds valuable behavioral context: explains response structure (mode, guidance, etc.) and expected follow-up actions. However, it doesn't mention idempotency or effects of re-calling, which would be useful.
Agents need to know what a tool does to the 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 detailed and well-structured, breaking down modes with clear instructions. It is slightly verbose but every section adds necessary context. Front-loaded with the primary 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 output schema, the description covers response fields (mode, guidance, pendingProposals, etc.) adequately. It guides the agent on subsequent actions. However, it lacks details on repeated calls or fallback 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?
Input schema has zero parameters, so schema coverage is 100%. The description correctly provides no parameter info, as none exist. Baseline score of 4 is appropriate since there is nothing to add 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 that this is a 'Conversation-start primer' and must be called once at the start of every vault-relevant conversation. It clearly identifies the tool's role and distinguishes it from sibling tools by being the mandatory first call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance ('Always call this once at the start of every vault-relevant conversation'). Also gives mode-specific instructions for 'pile', 'empty', and 'synthesis' modes, including how to handle each and what actions to prioritize.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_compile_from_rawA
Compile a supported source file (.adoc, .asciidoc, .conf, .csv, .docx, .eml, .epub, .htm, .html, .ini, .json, .log, .markdown, .md, .mdx, .odp, .ods, .odt, .org, .ott, .pdf, .pptx, .rst, .rtf, .srt, .tex, .text, .toml, .tsv, .txt, .vtt, .xlsm, .xlsx, .xml, .yaml, .yml) into a wiki source page proposal staged at proposed/.
IMPORTANT — produce a knowledge artifact, not a topic recap. The page you stage is the substrate the user (and future Claude sessions) will retrieve from. Thin pages = thin retrieval.
Before calling, call get_vault_context to know which entity slugs and active project slugs to wikilink, and which semantic tags are already in use.
For a meeting/call/transcript: pick content-specific H2 headings that reflect what was actually discussed (e.g. 'Practice Overview', 'Service Philosophy', 'Succession Status' — NOT 'Summary' / 'Bullets' / 'Takeaways'). Quote verbatim where the exact phrasing matters. Wikilink every entity using slugs from get_vault_context. Include a relevanceCallout naming the active projects/decisions this source bears on. Surface 2-4 concrete applications.
For a synthesis page (pageType='synthesis'): pass the source URLs as sources, structure body sections around the argument, include a relevanceCallout.
For a concept page (pageType='concept'): structure as snapshot + context + source log.
Legacy callers can still pass summary + summaryBullets + takeaways and skip sections — Margins will fall back to the simple template. But the rich path is what produces a knowledge artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Semantic tags (topical, people slugs, firm slugs). DO NOT include region/X or vibrance/X — those are auto-computed by scripts/wiki_regions.py and will be overwritten. | |
| force | No | Replace an existing source page for this raw file. Without bucket/destination_path override, the existing source page is replaced IN PLACE (same path). With override, the source moves to the new location. Default false. | |
| quiet | No | Omit the full staged markdown from the response. The page still lands at proposed/<destinationPath> — set quiet=true when compiling many files in one turn so the response payload stays small. Default false. | |
| split | No | Split-mode trigger. When set, the raw file is segmented at the chosen boundary and Margins stages one source page per segment plus a hub page that wikilinks them. 'heading-h1' / 'heading-h2' segment by Markdown-style heading level (works for MD/HTML and any extractor that emits H markers like XLSX/PPTX). 'sheet' is alias for h2 splits, ergonomic for spreadsheets. 'auto' picks h2 for spreadsheets and h1 elsewhere. Summary is not required in split mode. | |
| title | No | Title for the page. Defaults to titlecased filename. | |
| bucket | No | Wiki bucket folder. 'sources', 'projects', 'ideas', 'meetings', 'career'. Pick by topic, not page-type. | |
| rawPath | Yes | Vault-relative path of the source file. Examples: 'raw/foo.pdf', 'meetings/march-7.md'. Pass list_unprocessed paths directly. Bare filename (e.g. 'foo.pdf') resolves to raw/foo.pdf unless an actual root-level foo.pdf exists and raw/foo.pdf does not. | |
| related | No | Related wiki pages. Either bare slug strings or {slug, note} objects. Renders as `## Related` with `[[wikilinks]]`. | |
| sources | No | For synthesis pages: list of evidence URLs. Renders as a sources frontmatter list. | |
| summary | No | Rich multi-clause summary (NOT 1-3 sentences). REQUIRED unless split mode is set — in split mode each segment is auto-titled from its heading and no summary is needed. For single-source compile this becomes the frontmatter summary used by retrieval. | |
| keyLinks | No | Wikilink slugs for the frontmatter key_links field, e.g. ['ellis-rutili', 'centric-wm', 'briefly']. Use slugs from get_vault_context. | |
| pageType | No | Page shape. 'source' = faithful summary of one raw file (default). 'concept' = durable theme/idea. 'synthesis' = connection-point across multiple sources. | |
| sections | No | Primary body — array of {heading, body} sections. Pick content-specific H2 headings that fit the source. Body is markdown; may include [[wikilinks]], tables, blockquotes, bold key terms. Quote verbatim where phrasing matters. If you provide sections, the legacy summary/bullets/takeaways template is skipped. | |
| eventDate | No | Date the source event occurred (YYYY-MM-DD). Defaults to today. | |
| hubBucket | No | Bucket folder for the hub + segment pages when split mode is set. Defaults to bucket if provided, else 'sources'. | |
| sourceUrl | No | External URL if the source has one (YouTube, blog post, public PDF). Renders as a markdown link in the header block. | |
| takeaways | No | LEGACY — for the simple template only. If you provide `sections`, this is unused. Either strings or {point, evidence} objects. | |
| headerNote | No | Short paragraph under the H1 giving venue/runtime/context (e.g. 'Stanford GSB fireside chat, ~45 min, published 2026-05-04'). | |
| maxSegments | No | Cap on segments staged in a single split call. Default 50. Extra headings beyond the cap are noted in the hub but not staged. | |
| applications | No | Concrete questions or applications. Renders as `## Personal applications worth tracking`. 2-4 items typical. | |
| participants | No | For meeting/call pages: participant names. Renders as a participants frontmatter list. | |
| sourceCaveat | No | Source-quality warning — renders as a `> [!info]+ Source caveat` callout. Use when the source has limitations (e.g. 'Granola summary, no transcript available'). | |
| summaryBullets | No | LEGACY — for the simple template only. If you provide `sections`, this is unused. | |
| destination_path | No | Override destination path, e.g. 'wiki/career/source-2026-05-13-something.md'. | |
| propagationNotes | No | Entity/concept creation decisions made or refused (per operator-manual rule #4). Renders as `## Propagation Notes`. | |
| relevanceCallout | No | Connor-relevance synthesis. Renders as `> [!claude-note]+ Connor-relevance — Claude synthesis`. Body is markdown. Links is an array of wikilink slugs to active projects/decisions this source bears on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, destructiveHint=false) are supplemented by description details: the 'force' parameter can replace existing source pages, split mode stages multiple pages, and tags are auto-computed. This adds valuable behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for different page types and parameter guidance. While it is somewhat verbose (e.g., listing all file extensions), the length is justified by the tool's complexity and the need to disambiguate usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 26 parameters and no output schema, the description covers file types, page types, parameter usage, prerequisites, and legacy mode comprehensively. It lacks details on return values, but the complexity is high and the description is fairly complete 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 100% schema description coverage, the description further enriches parameter meanings, e.g., providing content-specific heading instructions for meetings, warning against certain tags, and clarifying legacy vs rich paths. This adds significant value beyond 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 the tool compiles supported source files into wiki source page proposals at 'proposed/<wiki path>', listing many file extensions. It distinguishes from sibling tools like propose_page by emphasizing knowledge artifacts vs topic recaps and providing specific page-type guidance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage guidance: call get_vault_context first, avoid certain tags, and follow different patterns for meetings, synthesis, and concept pages. It also explains the legacy vs rich path. However, it does not explicitly state when NOT to use this tool versus alternatives like propose_page.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_editA
Propose an edit to an existing page via exact string replacement. 'before' must appear exactly once in the current file (or in the pending proposal if one exists); add surrounding context if it doesn't. The edit is staged at proposed/.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Page path relative to vault root. | |
| after | Yes | Replacement text. Empty string deletes the match. | |
| before | Yes | Exact text to replace. Must be unique in the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-readonly and non-destructive. The description adds that the edit is staged (not applied directly) and explains uniqueness constraint, providing valuable context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. Front-loaded purpose and mechanism, followed by essential usage hint. Highly 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 simple tool with 3 parameters and no output schema, the description covers the core behavior (staging, uniqueness, deletion). A minor gap is missing what the tool returns (e.g., success indication), 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?
With 100% schema coverage, baseline is 3. The description adds contextual guidance: explaining what to do if 'before' is not unique, and that empty 'after' deletes. This improves the agent's ability to use parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain 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 'exact string replacement' on an 'existing page'. This verb+resource+machine specification distinguishes it from sibling tools like append_to or propose_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the 'before' text must be unique and advises to add context if needed. However, it does not explicitly contrast with alternatives like propose_page or append_to, which would help the agent decide between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_entity_stubsA
Stage stub entity pages for a list of candidate slugs (typically from scan_entity_candidates). Each stub becomes a proposed page at wiki//.md (default bucket 'entities') with frontmatter type:entity + a from_scan marker, an auto-built '## Mentioned in' block linking source files when snippets/files are provided, and a '## Next' checklist. Skips slugs whose destination page already exists in the vault — edit those directly instead of overwriting them. Closes the cold-start loop: scan finds names with no page; this stages the pages; resolve_proposal accepts the ones the user wants. Reject events on a stub (single or bulk) automatically append the slug to .margins/entity-rejections.md so it doesn't re-surface in the next scan.
| Name | Required | Description | Default |
|---|---|---|---|
| bucket | No | Bucket folder for the stubs. Default 'entities'. Pick a topical bucket if the candidates share a theme ('people', 'cases', 'firms'). | |
| candidates | Yes | Array of candidate slugs (strings) or candidate objects (forward the scan_entity_candidates payload verbatim for the richest stub bodies). Limit 200 per call to keep the proposal queue reviewable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses the tool's behavior: it creates stub pages with frontmatter, auto-builds a 'Mentioned in' block, skips existing pages, and explains the rejection mechanism. Annotations declare readOnlyHint=false and destructiveHint=false, consistent with creating non-destructive stubs. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: first sentence states core function, followed by details, then workflow context. Every sentence adds value without redundancy. It front-loads the key action and uses clear segmentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 and its role in a multi-tool workflow, the description covers essential context: the cold-start loop, skip behavior, and rejection handling. No output schema exists, but the description explains what the user gets. Slight gap: does not detail how to interact with stubs after creation (use resolve_proposal), but sibling tools cover 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 coverage is 100% and both parameters are described. The description adds value by explaining the intent of 'bucket' (thematic grouping) and 'candidates' (forwarding scan payload for rich stubs) beyond the schema's technical descriptions. It also mentions the 200-item limit not present in 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 stages stub entity pages for candidate slugs from scan_entity_candidates, with specific details about destination path, frontmatter, and auto-built blocks. It distinguishes itself from siblings like propose_page by focusing on entity stubs and being part of a defined cold-start loop.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: after scan_entity_candidates, and before resolve_proposal. It notes that it skips existing pages, implying not to use for edits. However, it does not explicitly compare to alternatives like propose_page or propose_edit, which slightly reduces clarity. The workflow context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_pageA
Propose a new page in the vault. Body is the full markdown (frontmatter optional). The page is staged at proposed/ until the user accepts it via resolve_proposal. Errors if a page already exists at this path in the vault — use propose_edit or append_to in that case.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Full markdown body to write. | |
| path | Yes | Destination path relative to vault root, e.g. 'wiki/projects/foo.md'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, destructiveHint=false) indicate mutation but not destruction. The description adds that the page is staged at 'proposed/<path>' and requires user acceptance via resolve_proposal. It mentions error condition. Lacks detail on response or 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?
Three concise sentences, front-loaded with purpose. No wasted words. Every sentence adds value: purpose, behavior, error/alternative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 and no output schema, the description covers core functionality, staging, error condition, and alternatives. Minor omission: no mention of return value or confirmation, but acceptable for this tool type.
Complex tools with many parameters or behaviors need more documentation. 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 property descriptions. The description adds that body is 'full markdown (frontmatter optional)' and path is 'relative to vault root'. This is consistent with schema but adds minimal new meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool proposes a new page, specifying the verb 'propose' and resource 'new page in vault'. It differentiates from siblings propose_edit and append_to by indicating it fails if page exists and directing to those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 new pages and provides guidance on when not to use: 'Errors if a page already exists... use propose_edit or append_to in that case.' This gives 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.
propose_wikilinksA
Scan vault pages for entity-shaped phrases and propose wikilinks to other vault pages that share the same slug. Two modes:
(1) single-page — pass path, get a ranked list of {phrase, wikilink, occurrences} for that one page.
(2) scope — pass scope (glob/folder), scan every matching page using one shared slug index (much faster than calling repeatedly), get aggregated suggestions across pages.
With apply: true in scope mode, Margins stages one rewritten page per scanned page (a propose_page proposal that replaces every candidate phrase with its wikilink). Apply mode preserves the proposal-review contract — nothing lands until resolve_proposal accepts.
Useful for A3/B3 personas (many files, few wikilinks): scope across a folder finds entity references that already have target pages.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Page path for single-page mode, e.g. 'wiki/career/career.md'. Mutually exclusive with scope. | |
| apply | No | Only meaningful in scope mode. When true, stage a rewritten page per scanned page with all wikilink suggestions applied (one propose_page per page, NOT per phrase). Review/accept via list_proposals + resolve_proposal. Default false (suggest only). | |
| scope | No | Glob for bulk-scope mode, e.g. 'wiki/sources/**' or 'Anatomy/*.md'. Mutually exclusive with path. | |
| maxPages | No | Cap on pages scanned in scope mode. Default 50. | |
| maxSuggestions | No | Cap on suggestions per page. Default 15. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (non-destructive, non-read-only), explains that apply mode stages rewritten pages but respects the proposal-review contract (nothing lands until resolve_proposal). Notes that scope mode is faster and uses a shared slug index. 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?
Front-loaded with main purpose, then modes, then additional details. Every sentence contributes information. Well-structured and efficient 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?
Describes return format for single-page (ranked list of {phrase, wikilink, occurrences}) and scope (aggregated suggestions). Covers apply mode and proposal workflow. Lacks error handling or edge cases, but sufficient given no output schema and clear parameter descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds meaning: explains mutual exclusivity of path and scope, details apply behavior (stages one propose_page per scanned page), and caps for maxPages and maxSuggestions. Adds value beyond schema descriptors.
Input schemas describe structure but not intent. Descriptions should explain 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 vault pages for entity-shaped phrases and proposes wikilinks. Distinguishes two modes (single-page and scope) and mentions target personas (A3/B3). Specific verb+resource and differentiates from sibling tools like propose_page and propose_entity_stubs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when to use: scanning for entity-shaped phrases to propose wikilinks. Implicitly distinguishes from other propose tools (e.g., propose_page for rewriting). Mentions scenarios (many files, few wikilinks) and that scope mode is faster than repeated calls. Could be explicit about 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.
read_pageARead-only
Read a single vault file by relative path (e.g. 'wiki/career/career.md' or 'raw/report.pdf'). Extracts readable text from supported document formats before returning it.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path relative to the vault root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds that it extracts readable text from supported formats, which is consistent and provides context about the read operation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, no redundancy, front-loaded with the core purpose. 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?
The description is adequate for a simple read tool with one parameter and annotations. However, it lacks details on error handling, supported document formats, or behavior for unsupported files. With no output schema, some additional completeness would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a clear description for the single required parameter 'path'. The description adds example paths but no additional semantic meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads a vault file by relative path and extracts text, specifying the verb 'read' and the resource 'vault file'. It distinguishes from siblings like 'search_vault' or 'list_recent' that handle 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?
The description implies usage for reading a single file but does not explicitly state when to use it over alternatives or provide exclusions. No guidance on when not to use or prerequisites is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recall_preferencesARead-only
Read the user's vault-scoped preferences file (.margins/preferences.md). Returns durable rules the user has stated or that you've recorded via record_preference. Call this before any propose_* tool so your proposals follow the user's filing conventions, naming patterns, and prior corrections.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the readOnlyHint annotation by specifying the file path, return content (durable rules from user or record_preference), and its relation to propose tools. 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?
Three efficient sentences, no wasted words. First sentence states action and resource, second explains return, third gives usage 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?
Given zero parameters and no output schema, the description covers all necessary aspects: purpose, return content, and usage context. It ties into sibling tools appropriately.
Complex tools with many parameters or behaviors need more documentation. 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 description cannot add meaning beyond schema. Baseline score of 4 applies 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?
The description clearly states the tool reads a specific file (.margins/preferences.md) and returns durable rules. It distinguishes from siblings by mentioning record_preference and propose_* tools, making its unique role 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?
The description explicitly instructs to call this before any propose_* tool, providing a clear when-to-use directive. It lacks explicit when-not-to-use but the positive guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_preferenceA
Append a durable user preference, convention, or correction to the vault's preferences file. Call this when the user corrects a proposal in a way that should apply next time (filing path, naming pattern, summary length, link style, etc.). Do NOT record one-off disagreements or transient feedback. Aim for one-line rules.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional category tag. Examples: 'filing', 'naming', 'voice', 'structure'. | |
| observation | Yes | One-line rule capturing the durable preference. Example: 'Mark Loh meeting notes file under wiki/projects/ not wiki/personal/.' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-read-only, non-destructive operation, which aligns with the description 'Append' and 'durable'. The description adds context about the target (preferences file) and the nature of data (one-line rules), but doesn't elaborate on file creation or duplicate handling. Still, it sufficiently discloses behavior beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences front-loaded with purpose, then usage guidelines, then negative guidance. Every sentence adds essential information 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?
Given the tool's simplicity (2 params, no output schema, no enums), the description fully covers purpose, when to use, and parameter semantics. No gaps remain for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with descriptions for both `observation` and `category`. The description reinforces the expected format with examples ('One-line rule...', 'Optional category tag... Examples: filing, naming...') and provides a concrete example for observation, clarifying usage beyond 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 the action: 'Append a durable user preference, convention, or correction to the vault's preferences file.' It also gives specific examples of when to use (user corrects a proposal on filing path, naming pattern, etc.), distinguishing it from one-off feedback.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when the user corrects a proposal...' and provides a clear negative: 'Do NOT record one-off disagreements or transient feedback.' This helps the agent decide when to invoke this tool vs. alternative feedback mechanisms.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_telemetry_consentA
Record the user's choice on anonymous telemetry. Call this exactly once, only when the margins_start response had telemetryConsentNeeded=true AND the user has answered the in-chat opt-in question. Pass enabled=true if they said yes, enabled=false if they said no. The choice persists in ~/.margins/consent.json and applies to all future Margins sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | True if the user opted in, false if they declined. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, destructiveHint=false) indicate mutation without destruction. Description adds that 'The choice persists in ~/.margins/consent.json and applies to all future Margins sessions,' clarifying long-term effects. 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?
Four sentences with no waste: states purpose, gives exclusive usage condition, maps user response to parameter, and explains persistence. 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?
For a simple one-parameter mutation tool with no output schema, the description covers invocation trigger, parameter mapping, and side effects. Complete given the tool's 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?
Single parameter 'enabled' with schema description 'True if the user opted in, false if they declined.' The description repeats this exactly, adding no new semantic information beyond the schema. Schema coverage is 100%, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Record the user's choice on anonymous telemetry' with a specific verb and resource. It differentiates from siblings like record_preference by focusing on telemetry consent and providing exact conditions for invocation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 exactly once, only when the margins_start response had telemetryConsentNeeded=true AND the user has answered the in-chat opt-in question.' Also maps user answer to parameter value ('Pass enabled=true if they said yes, enabled=false if they said no').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_proposalADestructive
Accept or reject pending proposals. Two modes: (1) single — pass path to apply the action to exactly one proposal; (2) bulk — pass pattern (glob) to apply the action to every matching proposal. Exactly one of path/pattern is required. Accept moves proposal to its destination atomically (overwriting any existing file at the destination); reject deletes the proposal without touching the vault. Per-destination lock guarantees concurrent edits on the same path serialize. Use dryRun: true with a pattern to preview which proposals would be touched without applying anything.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Destination path of a single proposal, with or without the 'proposed/' prefix. Mutually exclusive with pattern. | |
| action | Yes | Whether to apply or discard the matched proposal(s). | |
| dryRun | No | Only meaningful with pattern. When true, return the list of paths that WOULD be affected without applying the action. | |
| pattern | No | Glob to match destinationPath of multiple proposals. Supports *, **, ?. Mutually exclusive with path. | |
| maxCount | No | Only meaningful with pattern. Cap the number of proposals processed in a single call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate destructive (destructiveHint=true) but not read-only. The description adds atomicity of accept (overwriting), reject behavior (deletes proposal without touching vault), per-destination lock for concurrency, and dryRun preview. This far exceeds annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose. Each sentence adds value: purpose, modes details, behavioral notes. 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 5 parameters, 1 required, no output schema, the description fully explains tool behavior, modes, edge cases, and concurrency. DryRun output is mentioned. Complete for 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 100%, baseline 3. Description adds significant meaning: explains mutually exclusive path/pattern, dryRun function, maxCount capping, and that path can include 'proposed/' prefix. Adds clarity 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 states clearly 'Accept or reject pending proposals' and distinguishes two modes (single and bulk). It uses specific verbs and resource, making it distinct from sibling tools like list_proposals or propose_*.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explains when to use single mode (pass path) vs bulk mode (pass pattern), with exactly one required. Mentions dryRun for preview. While it doesn't explicitly say when not to use it, the context is clear given sibling tools. Slight lack of explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_entity_candidatesARead-only
Find capitalized phrases that recur across vault pages but have no matching slug — i.e. entities the user keeps mentioning without having a page for them. This is the inverse query of propose_wikilinks: instead of 'where should I add a wikilink to an existing page?', it answers 'what page should exist that doesn't yet?'. Returns candidates ranked by file-spread × mention-count, with snippets and the list of files where each appears. Read-only — never stages. The companion tool propose_entity_stubs takes the slugs you choose from this list and stages stub entity pages. Layered filtering: a global English/structural stoplist, an optional domain pack ('med', 'realestate', 'law', 'generic'), and an optional excludeUserRejections list (slugs the user already rejected). Existing slugs are excluded automatically — the shared vault-slug index is the same one propose_wikilinks uses. Best used right after a fresh import or split-mode compile, when the corpus has many entity references but few entity pages.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Cap on candidates returned. Default 50. Total candidate count is in candidatesFound so callers can tell if there are more behind the cap. | |
| scope | No | Glob to limit the walk. Default 'wiki/**'. Pass a folder glob like 'Path/**' to scope to one subject. Supports *, **, ?. | |
| domain | No | Domain pack to apply on top of the global stoplist. 'med' drops Step One / Gram Positive / Stage III etc; 'realestate' drops Class A / Phase II / Due Diligence; 'law' drops Section / Article / Chapter; 'generic' (default) applies only the global list. | |
| minMentions | No | Minimum total mentions across the scope before a candidate qualifies. Default 5. Lower to surface more (noisier); raise for high-confidence only. | |
| minFileSpread | No | Minimum number of distinct files a candidate must appear in. Default 3. Catches phrases that recur many times in one file (often boilerplate) and treats them as low-signal. | |
| minPhraseWords | No | Minimum word count for a candidate to qualify. Default 2 — single-word sentence-start capitals are the dominant noise source on real vaults. Acronyms (AI / MBA / MCP, all-caps 2-6 letters) bypass this filter and surface regardless. Drop to 1 to also see single-word surnames like 'Holmes' or 'Cardozo' (raises recall, raises noise). | |
| excludeUserRejections | No | Slugs the user has previously declined. Wired by propose_entity_stubs in v0.16+ to read rejection memory from .margins/preferences.md; you can also pass it ad-hoc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses read-only nature ('Read-only — never stages') beyond the annotation. Explains the ranking algorithm (file-spread × mention-count), layered filtering (global stoplist, domain pack, user rejections), and that existing slugs are excluded automatically. No contradiction 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?
Well-structured with clear paragraphs. Front-loads the main purpose and draws contrast with sibling. A bit long with multiple paragraphs, but each sentence earns its place. Could be slightly shorter 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 7 parameters (all documented in schema) and no output schema, the description covers return values (candidates ranked with snippets and file list), companion tool, filtering layers, and best-use timing. Provides enough context for a correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds value by explaining the interaction of parameters (e.g., 'layered filtering', trade-offs like 'Lower to surface more; raise for high-confidence'). Gives context for minPhraseWords (single-word noise, acronym bypass). This 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 the tool's purpose: finding capitalized phrases that recur without a matching slug. It distinguishes itself from the sibling propose_wikilinks by explaining the inverse query nature. The verb 'find' and resource 'entities' are 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?
Explicitly states when to use: 'Best used right after a fresh import or split-mode compile.' Contrasts with propose_wikilinks, clarifying the decision boundary. Also mentions companion tool propose_entity_stubs for next steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchBRead-only
ChatGPT Deep Research search. Returns a list of {id, title, url} where id is the vault path. Pair with fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The `readOnlyHint` annotation already indicates this is a safe read operation, and the description does not contradict it. The description adds that the tool returns search results and pairs with fetch, but does not disclose other behavioral aspects (e.g., rate limits, sorting, or pagination). With annotations covering the safety profile, a 3 is appropriate as the description adds some but limited value.
Agents need to know what a tool does to the 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 and a short phrase. It front-loads the tool's purpose ('ChatGPT Deep Research search') and provides essential return format details. Every sentence contributes value. Minor improvement could restructure to first state purpose then return and usage hint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 no output schema, the description adequately covers the return value and suggests a pairing with 'fetch'. However, it lacks information about result limits, error conditions, or how to interpret the 'id' as a vault path. Given the low complexity, a 3 reflects adequate but not thorough 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 description coverage is 0%, so the description must compensate. However, the description only mentions the return format and does not explain the 'query' parameter's expected format, constraints, or examples. It adds no meaning beyond the schema, which simply defines 'query' as a string. This is a significant gap for a single-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain 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 performs a 'ChatGPT Deep Research search' and returns a list with specific fields (id, title, url). It also explains that 'id is the vault path', making the resource clear. However, it does not differentiate from the sibling tool 'search_vault', which may 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?
The description includes a usage hint: 'Pair with fetch', implying a workflow. However, it does not provide explicit guidance on when to use this tool versus alternatives like 'search_vault', nor does it state when not to use it. The context is implied but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vaultARead-only
Full-text + filename search across the Margins vault. Returns top hits with path and snippet.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return. Default 10. | |
| query | Yes | Search string. Case-insensitive substring. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds that results include path and snippet, but lacks details on pagination, ordering, or edge cases. With annotations covering safety, this is minimally 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?
Single sentence efficiently conveys purpose and return value. No redundant information, perfectly 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?
No output schema exists; description mentions 'top hits with path and snippet' but lacks detail on structure (e.g., fields per hit). For a simple search tool this is acceptable 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 coverage is 100% with clear descriptions for both parameters. The description adds no extra meaning beyond what the schema provides, baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool performs 'Full-text + filename search across the Margins vault' and specifies return of 'top hits with path and snippet.' This is a specific verb-resource pair, distinguishing it from generic siblings like '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?
No guidance on when to use this tool versus alternatives such as 'search' or 'scan_entity_candidates'. 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
23 tool updates
v0.15.3- First observed
append_to - First observed
fetch - First observed
get_backlinks - First observed
get_vault_context - First observed
list_proposals - First observed
list_recent - First observed
list_unprocessed - First observed
margins_doctor - First observed
margins_reset_proposals - First observed
margins_start - First observed
propose_compile_from_raw - First observed
propose_edit - First observed
propose_entity_stubs - First observed
propose_page - First observed
propose_wikilinks - First observed
read_page - First observed
recall_preferences - First observed
record_preference - First observed
record_telemetry_consent - First observed
resolve_proposal - First observed
scan_entity_candidates - First observed
search - First observed
search_vault
TDQS
Each tool has a clearly distinct purpose: margins_start initializes conversations, get_vault_context provides context for proposals, propose_* tools handle different types of content creation, and management tools like list_proposals and resolve_proposal are separate from diagnostics. There is no functional overlap that would cause confusion.
Tool names predominantly follow a verb_noun pattern (e.g., get_vault_context, propose_page, resolve_proposal). A few tools like 'search' and 'fetch' are single verbs, and 'append_to' uses a different structure, but these are minor deviations from the otherwise consistent convention.
With 23 tools, the server covers a comprehensive set of operations for vault management, including context retrieval, content proposal, preference recording, diagnostics, and proposal lifecycle. While the count is on the higher side, each tool serves a specific need without redundancy.
The tool surface covers the full lifecycle of a vault: initialization (margins_start), context (get_vault_context), search, reading, proposing new content (propose_page, propose_compile_from_raw), editing (propose_edit, append_to), and proposal management (list_proposals, resolve_proposal, margins_reset_proposals). Missing a direct deletion tool for existing pages is a minor gap, but the set otherwise feels complete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Give Claude only the Google Drive files you choose. Every action logged.
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects Claude.ai to your local Obsidian vault for full CRUD access, search, and daily note creation via the Model Context Protocol.1514MIT
- AlicenseNot gradedqualityBmaintenanceConnects Claude Desktop to your Obsidian vault, enabling reading, writing, searching, and organizing notes locally.1MIT
- FlicenseNot gradedqualityDmaintenanceLets Claude save conversations, notes, and structured summaries directly to your Obsidian vault. Supports YAML frontmatter, auto-backlinks, daily notes, and vault search.-
- AlicenseAqualityCmaintenanceConnects Claude Desktop to an Obsidian vault, enabling reading, searching, capturing ideas, and managing notes through natural language.2118MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cflorczyk9/Margins'
If you have feedback or need assistance with the MCP directory API, please join our Discord server