Skip to main content
Glama

PerMark

AI speeds the work. Your vision steers it.

A Markdown app to read and review what your AI agents write, and steer the work through its documents. It opens every Markdown file as a clean page, shows what your agents change while they write, and lets you keep or revert each change.

Created and maintained by Edelmar Schneider.

Latest release License: MIT or Apache-2.0 CI

Get PerMark: Microsoft Store (Windows) · GitHub Releases (Windows, macOS, Linux)

Where to start · Try it · Install · Use with an AI agent · Shortcuts · What's new · Contributing

Free and open source (MIT or Apache-2.0) · No account, no telemetry · Windows, macOS and Linux (tested by hand on Windows)


Where to start

Either way, PerMark works with any AI tool, or with none. It follows changes whatever program writes the files: an AI agent, an editor or git. It is a unified document workspace (UDW): Markdown at the center, with the config, data and code files around it.

Related MCP server: mcp-server-markdown

Try it in a minute

  1. Install. Get PerMark from the Microsoft Store or from GitHub Releases.

  2. Open. Choose a folder as a project (Ctrl+O), or a single .md file (Ctrl+Shift+O). It opens in View, as a clean page.

  3. Watch. Let your agent write in that folder. Changed passages glow. Press Ctrl+Shift+L for Follow mode, and PerMark opens each document while the agent writes it.

📖 Beautiful to read, easy to edit

Every Markdown file opens as a clean page, with its tables, diagrams, math and properties. Edit it as it looks, and keep notes that save themselves.

  • A clean page. GitHub-flavored Markdown with tables, task lists, footnotes, alerts and description lists. Code blocks are highlighted for about 190 languages. In a project, links open inside the app, with Back and Forward, like a wiki.

  • Diagrams and math, written as text. Mermaid and PlantUML diagrams are drawn inside PerMark, with no Java and no server. Math shows as formulas.

  • Front matter as a properties card. View shows it as a clean card. In Edit, you change its values one by one, and the rest of the file stays as it is.

  • Made for long reading. A light, dark or system theme, with softer light tones (Paper, Sage, Gray). Three reading widths, an outline to jump between sections, and Focus mode (Ctrl+Alt+F), which leaves only the page.

  • View, Edit, Source. One switch in the header. View is for reading. Edit changes the page as it looks, with a toolbar and a / block menu. Source shows the raw file, every byte, with find and replace and go to line. A switch beside the modes draws a Mermaid or PlantUML diagram next to its text while you type (off until you turn it on).

  • Honest about Edit. Edit keeps math, diagrams, HTML and footnotes as written: Edit in Source opens them. Edit does not draw pictures that are files next to the document; View and Source do.

  • Notes that save themselves. Click Notes, next to Settings, or press Ctrl+Shift+N for a new note from anywhere in PerMark, and type. No name to choose, no folder to pick, no save prompt. Notes are plain Markdown files you own, and Copy puts a drafted prompt on the clipboard as exact Markdown.

⚡ See what your AI writes

See what your AI writes while it writes, and what changed since you last looked.

  • Changed passages glow. The open document reloads while an agent writes, and keeps your place. Changed blocks glow, and removed blocks leave a marker you can expand.

  • Live changes. A feed lists every file that changed, one entry per file. Show all changes, only yours, or only those from outside.

  • Follow mode (Ctrl+Shift+L) opens the Markdown document being written. It waits while you edit.

  • Unread dots, like mail. A dot marks each Markdown document that changed since you last read it, and folders count them. Alt+U opens the next one.

  • Since last visit. One list of what changed while the project was closed: Changed, New or Removed. It compares the content of your documents, so it works without git, and it still shows the changes after the agent has committed.

  • Worktrees too. Linked git worktrees are found and watched, so agents working in parallel branches show up as well.

PerMark sees the changes in your folder, whatever program makes them. It tells you whether a change came from you or from outside.

✅ Decide what stays

You decide what stays: keep or revert each change, comment on any passage, and share a project with an agent only when you turn it on.

  • Review, change by change. When a document changed since you last read it, a quiet bar says how many changes there are. Review shows each one in place: block by block in Markdown, line by line in code, logs, data and config files. Choose Keep or Revert for each (K, R), or for all at once. Compare with what you last read, or with the last commit.

  • Comments an agent can mark done. Select a passage and press C. With the agent connection on, your agent reads your open comments and marks them done with a reply. Send to agent copies them as a prompt for any agent chat. Comments are yours alone.

  • Only what you changed is saved. Edit and Source rewrite only the blocks you changed. Every other byte stays as its author, or agent, wrote it.

  • Reload theirs or Keep mine (overwrite). If an agent changes a file while you edit it, you choose, for the whole document.

  • Git in plain words. Letter badges, with a legend that says what each letter means. Compare with your last visit or with the last commit. PerMark only reads git: it never commits, stages or creates a repository.

  • Find anything, to the section. Search everywhere (Ctrl+T) finds files, sections, tags and commands in one box. Give any file tags and a one-line description; the ones you add in the app never touch your files.

  • Links follow your files. Move or rename a file, and PerMark shows each link it will update before it changes them. Ctrl+Z in the Explorer takes it back.

🧩 Markdown at the center, not alone

Markdown leads, and many files around it open too: config files as clean sheets, data and code, pictures, audio and video.

  • Config files as clean sheets. TOML, YAML, INI, .env, .properties and ignore files open as sections, keys and values, with comments as captions. Change a value, and only those bytes change. Secret values are masked in the sheet. Sheets edit values, not keys. YAML flow style is read-only, and a file over 256 KB or 3,000 rows shows as plain text.

  • TOON. .toon files, the compact data format made for AI, open as tables and cards and can be edited in place. The Converter turns JSON, XML, YAML, CSV and TOML into TOON or another format, shows the estimated token saving of each choice, and never writes over the original.

  • AI files, recognized. AGENTS.md, CLAUDE.md, SKILL.md, Cursor rules (.mdc), llms.txt, prompt files, and model and dataset cards open with no setup.

  • Prompt blocks. XML-like prompt tags such as <context> and <instructions> fold as blocks, and the Markdown inside still renders. {{name}} variables are marked, and @path references link to the file.

  • JSON, XML, code and plain text open with highlighting. A very large text file opens at once.

  • Pictures, audio and video open in the app (not every audio or video format plays). Other files open with the program your system has for them. Programs and scripts are never run from a click.

  • Token count: how many tokens a document, a section or a folder takes. Exact for OpenAI's tokenizers, marked as approximate for Claude and Gemini. It asks before it downloads a tokenizer's vocabulary.

  • Your editor, at the line. A path like src/main.rs:42 that names a file of the project is a link: it opens your own editor at that line.

Many features are plugins, and every plugin is on from the start. Turn off what you do not need in Settings → Plugins; a plugin that is off leaves nothing behind.

Questions people ask

"Git diff already shows me the changes." Git diff compares with the last commit. PerMark also shows what changed since you last read each document, even after the agent has committed, and you keep or revert each change.

"Does it replace my code editor?" No. PerMark is for the documents around the code. Open in external editor takes you to your own editor at the place you are reading.

"What does the agent get, and how do I stop it?" Sharing is off in every project until you turn it on. The agent reads, shows you a place and marks comments done. It never edits through PerMark. Details in Use with an AI agent.

"Does it go online?" No account, no telemetry, no tracking. PerMark goes online only to check for its own updates (installer versions; the Store and snap update it instead), and when you ask: a picture from the web, or the optional token-count vocabulary. Your documents never leave your computer through PerMark. An AI agent you connect is a separate program: what it sends online is up to that agent. The Windows installers may also download Microsoft's WebView2 component while they install, if your computer does not have it.

What PerMark is not

  • Not a code editor. No completion, refactoring, build, run or debug. Real code work opens in your own editor.

  • Not an agent. It does not run, host or replace your AI. It shows what your AI writes, and you decide what stays.

  • Not tested by hand on macOS or Linux. PerMark 0.6 was tested by hand on Windows; the macOS and Linux builds are checked automatically.

Why Markdown

Markdown was made for readers. So is PerMark. It was designed in 2004 so that plain text reads well as it is. Today, AI tools write it too, for the same reason: it is structured enough for a machine and clear enough for a person.

It is also an opinion: many documents that live in Word or PDF today would be better as Markdown. They would be smaller, comparable line by line in git, readable by any AI, and never locked inside one app.

Install

Windows, macOS and Linux. PerMark 0.6 was tested by hand on Windows; the macOS and Linux builds are checked automatically. Installers are not code-signed, so your system shows a warning the first time you install or open it.

System

Get it

Windows

The Microsoft Store, which keeps PerMark up to date. Or the -setup.exe from Releases; the .msi is only for updating copies installed from a 0.5 .msi

macOS

The universal .dmg (Apple silicon and Intel) from Releases

Linux

The .AppImage, .deb or .rpm from Releases, or the snap (64-bit Intel and AMD): sudo snap install permark

Copies from GitHub check for updates when they start and once a day, and offer to download and restart. The Microsoft Store and the snap update their copies themselves. PerMark becomes your default app for Markdown only if you choose it: it asks once, with Markdown files checked and other types unchecked. On Windows, you confirm the choice in Windows Settings.

Coming from TrailMark? The command is now permark. If an agent is set up with the old trailmark command, run the setup lines from Settings → Integration → Agent connection again. PerMark 0.6 no longer renames old .trailmark/ folders: update to 0.5.8 before you update to 0.6.

permark                  # start PerMark: your last windows and tabs come back
permark .                # open the current folder as a project
permark docs/plan.md     # open a single file
permark --notes          # open the Notes

On Windows and macOS, permark is not on your PATH after an install from GitHub, so use the full path of the program, or add it yourself. The Microsoft Store and snap versions put permark on your PATH.

You need Rust, Node.js 24 and the Tauri prerequisites. The program lives in app/, and app/rust-toolchain.toml pins the Rust version, which rustup installs for you.

git clone https://github.com/EdelmarSchneider/permark.git
cd permark/app
npm ci
npm run tauri build   # or: npm run tauri dev

Use with an AI agent

PerMark can tell an AI agent what you are looking at, the way a code editor tells it the open file. Say "rewrite this paragraph" or "go through my comments", and the agent knows which document, which section and which words you mean. It works with any tool that speaks the Model Context Protocol (MCP).

What it shares, and how it stays in your hands:

  • Off until you turn it on, per project. Choose Share this project with agents in Settings → Integration → Agent connection, or run Agent connection: turn on from the command palette. Nothing inside a project can turn it on.

  • Local. It talks only to programs on your computer and opens no network port.

  • Read, never edit. The agent sees where you are, what you selected, what changed, your comments and the notes you shared one by one. It reads, shows you a place and marks comments done. It never edits a file through PerMark.

  • Your limits. You choose what it may do, group by group. Files in .aiignore never reach an agent. Secret values are hidden by their key names; a secret inside ordinary text is not recognized, so list such files in .aiignore.

  • Visible. While the connection is on, the status bar shows Agent. Click it to see what is shared and the latest requests.

Connect in two lines. Turn the connection on, then add PerMark to your agent as an MCP server. Settings → Integration → Agent connection shows these lines with the right path for your copy, and a Copy button.

# Claude Code
claude mcp add permark -- "<path to PerMark>" mcp
{ "mcpServers": { "permark": { "command": "<path to PerMark>", "args": ["mcp"] } } }

The second form fits any other MCP client. With the connection on, Hand off to agent copies one line for your prompt, so the agent asks PerMark what you did instead of rereading the project.

Tool

What it answers or does

get_context

The open document, whether you are reading or editing, the section on screen, your selection (up to 2,000 characters), whether there are unsaved edits, and how many of your comments are open

list_unread

The documents that changed since you last read them, the newest at the top

map

The files below a folder, by path: approximate size in tokens, flags (unread, changed), and the tags and descriptions you gave them. The place to start in a large project

search

"Where is X described?": ranked sections with path, line, size, snippet and heading, from the same index as Search everywhere. tags narrows the search, and budget caps the size of the answer

list_tags

The tags in use, with how many documents have each; or, for one tag, the documents that have it with their descriptions

outline

The parts of one file (headings, JSON keys, parts of a config file) with line ranges and sizes, so an agent reads only the part it needs; optionally the links in and out

read

The text of one part of a file: a heading, an anchor, a key path or a range of lines. Long parts continue with a cursor

list_comments

Your open comments, each with the quoted passage, its section and line, and your text

resolve_comment

Marks a comment done, with an optional short reply that you read under the comment

list_notes

The notes you chose to share with agents, each with its title, when it changed and its size

read_note

The text of one shared note, by the name list_notes gave

activity

What you did in PerMark since you last pressed Hand off to agent (checked against the disk), plus the changes made outside PerMark

open

Shows you a place (a document, a line or a heading) without taking the focus from the agent's terminal, and offers a way back

Answers are short on purpose: a header line, then tab-separated rows, so an agent spends few tokens. A project's .permark/ folder can narrow what an agent may do, never widen it. When PerMark is closed, the other tools still work from the files, and open starts it. With the connection off, every tool says so and explains how to turn it on.

permark context prints where you are as one short line and exits, for tools that can run a command before each prompt:

Viewing docs/plan.md › Plan › Rollout (lines 40-62), selected (lines 44-46): 'ship it on Friday', 2 comments open.

In Claude Code, a UserPromptSubmit hook in .claude/settings.json (or your user settings) adds it to every prompt:

{
  "hooks": {
    "UserPromptSubmit": [
      { "hooks": [{ "type": "command", "command": "\"<path to PerMark>\" context" }] }
    ]
  }
}

When there is nothing to say (the connection is off, or PerMark is not open), the command prints nothing, so a hook never adds noise to a prompt. A project with a .permark/ folder also has .permark/local/agent-context.json while the connection is on: the same answer as a file, for a script or a tool without MCP. It holds the open document, the section on screen and your selected text, and any program running as you can read it, as can a folder-sync tool that watches the project. It stays out of git and is deleted when the connection is turned off.

Keyboard shortcuts

The ten that matter most. On macOS, use Cmd where this README says Ctrl (except Ctrl+Tab and Ctrl+Shift+Tab).

Action

Shortcut

Search everywhere (files, sections, tags, commands)

Ctrl+T

Quick open a file

Ctrl+P

Every command

Ctrl+Shift+P

Next unread document

Alt+U

Follow mode

Ctrl+Shift+L

Next / previous change

F7 / Shift+F7

While you review: keep / revert

K / R

Comment on the selected passage

C

Edit, and back to View

Ctrl+E

Focus mode: only the page

Ctrl+Alt+F

All of them, and you can change them, in Settings → Keyboard shortcuts.

Reading and navigating

Action

Shortcut

Search all docs (by section)

Ctrl+Shift+F

Find in page

Ctrl+F

Show / hide the outline

Ctrl+Alt+O

Show / hide the sidebar (when you are not editing) / the right panel

Ctrl+B / Ctrl+Alt+B

Cycle the reading width

Ctrl+Alt+W

Back / forward

Alt+← / Alt+→

Copy reference (or selection with reference)

Ctrl+Alt+C

Copy the whole document (View and Source)

Ctrl+Shift+C

Open in your external editor

Ctrl+Shift+E

Zoom in / out / reset

Ctrl+= / Ctrl+- / Ctrl+0

Open a folder / a file

Ctrl+O / Ctrl+Shift+O

Settings

Ctrl+,

Edit the open document's tags and description

T

Tabs

Action

Shortcut

Next / previous tab

Ctrl+Tab / Ctrl+Shift+Tab (or Ctrl+Alt+→ / Ctrl+Alt+←)

Go to tab 1 to 8 / the last tab

Ctrl+1 … Ctrl+8 / Ctrl+9

Close the tab

Ctrl+W

Review

Action

Shortcut

Keep / revert this change

K / R

Next / previous change

N / P

Keep all / revert all

Shift+K / Shift+R

Editing

Action

Shortcut

Open Source mode

Ctrl+Alt+E

Back to View

Ctrl+E or Esc

Save

Ctrl+S

New file

Ctrl+N

Bold / italic / strikethrough (Edit)

Ctrl+B / Ctrl+I / Ctrl+Shift+X

Bold (Source, in Markdown files)

Ctrl+B

Link / inline code (Edit)

Ctrl+K / Ctrl+Shift+C

Headings 1 to 6 (Edit)

Ctrl+Shift+1 … 6

Paragraph (Edit)

Ctrl+Alt+0

Block menu (Edit)

/ in an empty paragraph

Find / replace / go to line (Source)

Ctrl+F / Ctrl+H / Ctrl+G

Notes and the Explorer

Action

Shortcut

Open the Notes

Ctrl+Shift+D

New note, from anywhere in PerMark

Ctrl+Shift+N

New note (in Notes)

Ctrl+N

Copy the note's text (in Notes)

Ctrl+Shift+C

Open a pinned note (in Notes)

Ctrl+1 … Ctrl+9

Rename / delete (to the system trash)

F2 / Del

Take back the last file operation (on macOS, a deleted file stays in the Trash)

Ctrl+Z

What's new and ideas being explored

PerMark 0.6 rebuilt the whole program. Every release is in the CHANGELOG.

  • 0.6.2: a Notes button next to Settings, keys to hide and show the side bars, files dropped from your file manager copy into the project or open as tabs, Move to window for a tab, and every plugin on from the start.

  • 0.6.1: every folder, file and Notes gets a tab, and your windows and tabs come back when PerMark starts.

  • 0.6.0: many windows in one app, a full Settings page, a Plugins page and keys you can change.

  • Config files and TOON as clean sheets, AI files recognized with no setup, and prompt blocks.

  • Review of code and text files, line by line, with keep or revert.

  • An agent connection with 13 tools, permission groups, .aiignore and Hand off to agent.

Ideas being explored, no promises: a home for structured work with AI, such as spec-driven development, for the projects that want it; ready-made ways of working to adopt, such as Spec Kit templates; and a shared place where people and always-on agents follow and review the work together, with the person in charge.

Tech

PerMark is a Tauri 2 app. The core is written in Rust: rendering (comrak and ammonia), file watching (notify), git (the one on your computer, or a built-in libgit2 when there is none), the search index and the block-preserving saves. The interface is Svelte 5 and TypeScript in the system webview, with CodeMirror 6 (Source) and Milkdown (Edit).

Contributing

Issues and pull requests are welcome. The project uses git-flow (develop for integration, feature/* branches) and a strict quality gate:

cd app
npm run check   # version, rustfmt, prettier, build, clippy -D warnings, svelte-check, cargo test, vitest

See CONTRIBUTING.md before opening a pull request. It also explains how to fix or add a translation.

License

Copyright (c) 2026 Edelmar Schneider. Licensed under either of MIT or Apache-2.0, at your option.

"PerMark" and its logo are trademarks of Edelmar Schneider: forks are welcome under a different name. See TRADEMARKS.md.

Available Tools

13 tools
activityC
Read-only

What the person did since the last hand-off (net, checked against disk) + changes outside PerMark.

ParametersJSON Schema
NameRequiredDescriptionDefault
byNo
limitNoRows 1..200, default 50 (not for the package).
sinceNo`handoff` (default: the package handed off), a seq, or an ISO time.

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds that results are 'net, checked against disk' and include changes 'outside PerMark', hinting at deduplication and cross-boundary tracking, but it does not explain return format, pagination, or the precise meaning of 'net'. With annotations reducing the burden, this is a moderate addition.

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

Conciseness3/5

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

The description is a single, front-loaded sentence with no wasted words. However, its extreme terseness introduces jargon like 'net' and 'hand-off' that may not be self-evident, trading clarity for brevity.

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

Completeness2/5

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

No output schema exists, so the description must carry the full burden of explaining what the tool returns. It does not describe the response structure, how rows are formatted, or what the different 'by' modes return, leaving significant gaps for a tool with three parameters and multiple modes.

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

Parameters3/5

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

Schema coverage is 67%: 'limit' and 'since' have clear descriptions, but the 'by' enum values 'person' and 'outside' are not explained in the schema or description. The description provides no additional parameter context beyond what the schema already states.

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

Purpose3/5

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

The description conveys that the tool reports a person's activity since a hand-off and changes outside PerMark, giving a specific resource and scope. However, it lacks a clear action verb and does not explicitly differentiate itself from siblings like get_context or list_unread, leaving the agent to infer when 'activity' is the right call.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as get_context, list_unread, or map. The description does not state prerequisites or scenarios where activity is preferable to searching or listing.

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

get_contextA
Read-only

Where the person is in PerMark now: document, mode, section, selection, unsaved, open comments.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description's real contribution is enumerating what is returned (document, mode, section, selection, unsaved, open comments), which effectively substitutes for the absent output schema. It stops short of saying what happens when nothing is open or how facets are structured.

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

Conciseness5/5

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

A single compact clause listing the state facets with zero filler. The scope marker 'now' is front-loaded, so the key semantic (current, live state) lands immediately.

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

Completeness4/5

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

With no parameters and annotations covering read-only safety, the only gap was the return contract, and the description fills that by listing the state facets. It is nearly complete; minor omissions are the shape of each facet (e.g. whether 'open comments' is a list) and the empty-state behavior.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies. There is no parameter behavior an agent could get wrong.

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

Purpose4/5

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

The description names a specific resource (the user's current position/state in PerMark) and even enumerates the facets: document, mode, section, selection, unsaved, open comments. That is far more than a tautology of 'get_context'. It does not, however, differentiate itself from siblings like 'read_note' or 'outline', so the agent must infer the boundary.

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

Usage Guidelines3/5

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

The phrase 'Where the person is in PerMark now' implies a live-state lookup, so the use case is inferable. But there is no explicit when-to-use, no when-not-to-use, and no mention of alternatives such as 'read_note' or 'outline' for reading content rather than position.

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

list_commentsA
Read-only

The person's comments on passages (id, place, state, quote, text, heading, reply); open by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
whichNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful context by listing the returned fields and the default 'open' filter, but says nothing about pagination, ordering, or volume.

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

Conciseness4/5

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

A single compact sentence with the field list up front and the default stated at the end; every element is informative. Slightly telegraphic but not padded.

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

Completeness4/5

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

For a simple read-only list tool with no output schema, listing the returned fields is valuable and the default filter is stated. Only the relationship to resolve_comment is left unaddressed.

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

Parameters3/5

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

Schema coverage is 0% for the single `which` enum (open/done/all). The description partially compensates by stating 'open by default', clarifying the default value, but it does not explain what 'done' or 'all' select semantically.

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

Purpose4/5

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

The description states a specific verb+resource ('comments on passages') and enumerates the returned fields (id, place, state, quote, text, heading, reply), so an agent knows exactly what it gets. It does not distinguish itself from the related sibling resolve_comment, which is the main clarity gap.

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

Usage Guidelines3/5

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

The phrase 'open by default' hints at the default filtering behavior, giving implied usage context. However, it never states when to use this versus resolve_comment or list_notes, nor any exclusions.

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

list_notesB
Read-only

Notes the person shared with agents (note, age, title).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety and locality are covered. The description adds that results carry note, age, and title fields, but says nothing about ordering, completeness, or whether all shared notes are returned at once.

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

Conciseness4/5

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

A single short sentence with no waste, and the scope qualifier plus returned fields arrive immediately. The fragment phrasing ('Notes the person shared with agents') is slightly awkward but costs nothing in length.

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

Completeness3/5

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

With no output schema and no parameters, the description does the minimum by naming the returned fields (note, age, title). It leaves open whether results are paginated, ordered, or truncated, and 'age' is undefined, which matters for a zero-argument listing tool.

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

Parameters4/5

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

The tool takes zero parameters, so the schema requires no compensation; baseline is 4. The description does not need to explain any argument, and the parenthetical field list is a bonus rather than a substitute for parameter documentation.

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

Purpose3/5

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

The phrase 'Notes the person shared with agents' identifies the resource and a scoping qualifier (shared with agents) plus the returned fields (note, age, title), so an agent can tell it is a listing tool distinct from list_unread or list_tags. However, 'Notes' is not a clear verb and there is no explicit statement of what the tool does versus read_note or search.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no exclusions, and never names alternatives such as list_unread, search, or read_note despite six list/read siblings in the toolset. The only implied usage is 'person shared with agents,' which is scope, not a selection rule.

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

list_tagsA
Read-only

Tags with document counts; with tag: the documents that have it (path, tags, description).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoA tag: list its documents.
limitNoMax items.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real behavioral value that annotations cannot: the response includes document counts, and per-document path, tags, and description — valuable since no output schema exists. It omits ordering, pagination, and what happens for an unknown tag.

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

Conciseness5/5

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

A single semicolon-joined sentence with zero filler, and the default (tag-listing) mode is front-loaded before the variant. Nothing is padded.

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

Completeness3/5

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

For a two-parameter read tool with no output schema, the description covers both modes and the key returned fields, which is reasonable. It still leaves gaps an agent would want: result ordering, whether `limit` applies per mode, and behavior when the tag does not exist.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents both parameters and a baseline of 3 applies. The description clarifies that `tag` switches the tool into document-listing mode, but adds nothing about `limit` and does not say whether the limit caps tags in the first mode or documents in the second.

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

Purpose4/5

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

The description names the resource (tags) and states two concrete modes: tag listing with document counts, and document listing for a given tag with the fields returned. This is specific enough to act on, though it's phrased telegraphically rather than as a verb+resource statement and names no sibling for contrast.

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

Usage Guidelines3/5

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

The 'with tag / without tag' split implies which mode to pick, which is genuine usage guidance. However, it never says when to prefer this over siblings like search, map, or get_context for tag-based lookup, nor any prerequisites.

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

list_unreadB
Read-only

Documents changed since the person last read them, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo1..200, default 50.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavior — results are scoped to what has changed since last read and ordered newest first — but says nothing about pagination beyond the limit, truncation, or what counts as 'changed'.

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

Conciseness5/5

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

One short sentence with zero padding, and the most decision-relevant clause (changed since last read) is front-loaded ahead of the ordering detail.

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

Completeness3/5

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

For a one-parameter read tool with annotations and a documented schema, this is close to sufficient, but it leaves open who 'the person' is (current caller vs. a specific user) and whether results are capped or paginated. No output schema exists, so a brief note on result shape would help.

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

Parameters3/5

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

The single limit parameter is fully documented in the schema (1..200, default 50), so the schema does the work and baseline 3 applies. The description does not mention limit at all, adding nothing beyond structured data.

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

Purpose4/5

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

Names a specific resource (documents) and a precise filter (changed since the person last read them) plus ordering, so an agent can tell it apart from plain listing tools. It lacks an explicit verb (e.g., 'list') and never names a sibling it differs from, so it stops just short of a 5.

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

Usage Guidelines2/5

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

There is no statement of when to call this versus alternatives such as activity, read, or list_notes, and no exclusions or preconditions. The agent must infer the use case from the name and the one-line summary.

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

mapC
Read-only

Files below a folder by path: size_tok, flags, tags, description; folders past depth counted. Start here.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoFolder, default project root.
depthNo1..6, default 2.
limitNoFiles 1..500, default 200.

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already state readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful behavior: folders beyond the depth are counted rather than expanded, and it names the returned fields. It does not explain pagination behavior or what the count looks like.

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

Conciseness4/5

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

It is very short and front-loads the resource and returned fields. The telegraphic phrasing ('size_tok', 'folders past depth counted') is efficient but slightly cryptic.

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

Completeness3/5

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

For a three-parameter read-only mapping tool with full schema coverage and no output schema, the description gives enough to understand the basic result shape and depth-counting behavior. It remains thin on call semantics, pagination, and how the output is organized.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents path, depth, and limit with defaults and ranges. The description adds only that traversal is below a folder and that depth affects whether folders are counted, but does not explain parameter interactions or formats beyond the schema.

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

Purpose3/5

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

It conveys that the tool enumerates files beneath a folder and returns metadata such as size_tok, flags, tags, and description, but the verb is implicit and the name 'map' is metaphorical. It does not clearly distinguish itself from siblings like outline or search beyond the vague 'Start here.'

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

Usage Guidelines2/5

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

'Start here' gives a weak hint that this is an entry point, but there is no explicit guidance about when to use this versus outline, search, get_context, or read. No exclusions or alternatives are named.

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

openA
Idempotent

Show the person a document in PerMark (line or heading) without taking focus; starts PerMark if closed.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineNoLine from 1.
pathYesProject-relative path.
headingNoHeading or path `A > B`.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already specify that the tool is non-destructive, idempotent, and not read-only. The description adds meaningful behavioral context by disclosing that it may start PerMark and deliberately avoids taking focus.

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

Conciseness5/5

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

The definition is a single, front-loaded sentence with no wasted words. The key behavior—showing a document without taking focus—is stated immediately.

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

Completeness4/5

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

All three parameters are documented in the schema, and the description covers the important non-obvious effects: auto-launching and not stealing focus. With no output schema, no return-value explanation is needed.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameter meanings are already fully documented. The description only parenthetically mentions line or heading and adds no new syntax or semantics beyond the schema.

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

Purpose4/5

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

The description uses a specific verb, "Show," and identifies the resource as a document in PerMark, including line/heading positioning. It clearly conveys the UI-opening behavior, but does not explicitly distinguish the tool from the sibling `read` tool.

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

Usage Guidelines3/5

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

It gives useful conditions such as starting PerMark if closed and not taking focus, but does not state when to choose this over `read` or other document-access siblings. Usage is implied rather than explicitly guided.

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

outlineA
Read-only

Parts of a file before reading it (headings | JSON keys | config parts) with lines and size_tok.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesProject-relative path.
linksNoAlso documents linking here and where its links lead.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that the tool returns structural parts with lines and token size, but it does not describe the output format in detail (e.g., structured vs. markdown) or any limitations. With annotations carrying the safety burden, a 3 is appropriate.

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

Conciseness4/5

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

It is a single, front-loaded sentence with no filler. The term 'size_tok' is slightly cryptic but still efficient; every phrase contributes to the purpose.

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

Completeness3/5

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

For a read-only outline tool with no output schema, the description gives a minimal sketch of return values (headings, JSON keys, config parts, lines, size_tok). It omits details about output formatting and does not differentiate from sibling tools like `map`, leaving some ambiguity an agent might need to resolve by trial.

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

Parameters3/5

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

Schema coverage is 100%, and the schema fully documents both `path` and `links`. The description does not mention the `links` parameter at all, so it adds no meaning beyond the schema. Baseline 3 applies when the schema is complete.

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

Purpose4/5

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

The description states a specific resource (parts of a file) and names concrete output types (headings, JSON keys, config parts) with supplemental data (lines, size_tok). The phrase 'before reading it' implicitly distinguishes it from the sibling `read` tool, though it does not explicitly name alternatives.

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

Usage Guidelines4/5

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

The phrase 'before reading it' clearly signals when to use this tool: to get a structural overview prior to full content retrieval. No explicit exclusions or alternative tool names are given, keeping it at a strong 4 rather than a 5.

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

readA
Read-only

Text of one part of a file: at = heading path A > B, #anchor, key path, lines L10-L40 | L10 (from line 10 on); no at = whole file.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoPart to read.
pathYesProject-relative path.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already establish that this is a read-only, non-open-world operation, so the description does not need to restate safety. It adds useful scoping behavior for `at` and whole-file reads, but does not cover errors, missing parts, or return format beyond implying text.

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

Conciseness5/5

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

The definition is a single dense sentence fragment with no wasted wording. The most important scoping rule, no `at` means the whole file, is placed at the end where it is easy to retain.

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

Completeness4/5

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

For a simple two-parameter read tool with annotations and no output schema, the description supplies the critical `at` semantics and whole-file behavior. It is nearly complete, though it lacks failure behavior and sibling differentiation.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema by explaining `at` syntax with heading paths, anchors, key paths, and line ranges. `path` is not expanded beyond the schema, keeping it from a 5.

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

Purpose4/5

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

The description makes clear that this returns text from a file, either a specific part or the whole file, which is more specific than the bare name `read`. It does not distinguish itself from siblings such as `read_note` or `open`, so it stops short of a 5.

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

Usage Guidelines2/5

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

It explains how `at` selects a part of a file and that omitting `at` reads the whole file, but it gives no guidance on when to use this tool instead of `read_note`, `open`, `search`, or other siblings. Usage is only implied by the resource name.

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

read_noteA
Read-only

Text of one shared note, by the note name list_notes gives.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteYesNote name.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description still adds useful context beyond them: the return value is text content, and the scope is limited to shared notes, which explains why some notes may not be retrievable.

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

Conciseness5/5

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

A single compact clause, front-loaded with the return value and followed by the identifier source. Nothing extraneous.

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

Completeness4/5

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

For a one-parameter read tool with annotations and no output schema, the description covers what is returned and how to obtain the argument. Only edge behavior (missing or unshared note) is left implicit, which is minor here.

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

Parameters4/5

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

Schema coverage is 100% with a single 'note' parameter, so baseline is 3. The description earns an increment by telling the agent where the identifier comes from (list_notes), which the schema's bare 'Note name.' does not.

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

Purpose4/5

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

States the resource and scope precisely: the text of ONE SHARED note, addressed by name. The verb is elided ("Text of one shared note"), and it doesn't explicitly contrast with the generic `read` sibling, but the specificity of 'one shared note' makes its purpose distinguishable from list_notes and read.

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

Usage Guidelines3/5

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

Implies a workflow by saying the `note` value is "the name list_notes gives", which signals list_notes must be called first. It stops short of saying when to use this over `read` or `get_context`, or what to do when a note isn't shared.

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

resolve_commentA
Idempotent

Mark one comment done, with a short reply the person reads. The only change an agent can make.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesComment id from list_comments.
replyNoWhat you did, short.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare it as a non-destructive, idempotent write; the description adds two traits not in the annotations — that the reply is read by a person (so the content is user-facing, not a log line) and that this is the sole mutation available in the toolset. It does not state reversibility or what happens to an already-resolved comment.

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

Conciseness5/5

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

Two sentences, no filler, with the core action front-loaded and the scoping constraint immediately after. Nothing could be cut without losing information.

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

Completeness4/5

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

For a two-parameter idempotent mutation with annotations and no output schema, the description covers purpose, audience, and scope adequately. Minor gap: it doesn't say what the caller gets back or how the comment's state changes afterward.

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

Parameters3/5

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

Schema coverage is 100% and already documents both parameters (id from list_comments, reply = what you did, short). The description only adds that the reply is read by a person, a marginal gain over the schema; baseline 3 is appropriate.

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

Purpose4/5

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

Names a concrete verb and resource: "Mark one comment done, with a short reply." The second sentence ("The only change an agent can make") distinguishes it from the many read/list siblings without naming them explicitly.

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

Usage Guidelines4/5

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

"The only change an agent can make" gives clear context for when this tool is the right choice among twelve largely read-only siblings. It stops short of explicit exclusions, such as when a comment should not be resolved or how to pick among multiple comments.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv0.7.0
    • Addedactivity
    • Changedget_context1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedlist_comments5 fields changed
      • removedInput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / which / description
        Removed value: -"Which comments: `open` (the default), `done` or `all`."
      • addedInput schema / properties / which / enum
        Added value: +[
        +  "open",
        +  "done",
        +  "all"
        +]
      • changedInput schema / properties / which / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedlist_notes1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedlist_tags8 fields changed
      • removedInput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / limit / description
        Previous value: -"How many tags (or, with `tag`, documents) to list at most: 50 tags or 20 documents when left out, up to 200\ntags or 100 documents. `more` in the answer says how many were left out."New value: +"Max items."
      • removedInput schema / properties / limit / format
        Removed value: -"uint"
      • changedInput schema / properties / limit / minimum
        Previous value: -0New value: +1
      • changedInput schema / properties / limit / type
        Previous value: -[
        -  "integer",
        -  "null"
        -]New value: +"integer"
      • changedInput schema / properties / tag / description
        Previous value: -"A tag, as `list_tags` names it without this argument. With it, the answer lists the documents that have that\ntag (path, description and all of their tags) instead of the tags. Optional."New value: +"A tag: list its documents."
      • changedInput schema / properties / tag / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedlist_unread2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "1..200, default 50.",
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Addedmap
    • Changedopen9 fields changed
      • removedInput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / heading / description
        Previous value: -"A heading of the document to show, such as `Rollout`, or a path of headings such as `Plan > Rollout`.\nWins over `line` when the document has it. Optional."New value: +"Heading or path `A > B`."
      • changedInput schema / properties / heading / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedInput schema / properties / line / description
        Previous value: -"A line of the document to show (from 1). Optional."New value: +"Line from 1."
      • removedInput schema / properties / line / format
        Removed value: -"uint32"
      • changedInput schema / properties / line / minimum
        Previous value: -0New value: +1
      • changedInput schema / properties / line / type
        Previous value: -[
        -  "integer",
        -  "null"
        -]New value: +"integer"
      • changedInput schema / properties / path / description
        Previous value: -"The document, relative to the project folder, with `/` separators (for example `docs/plan.md`)."New value: +"Project-relative path."
    • Addedoutline
    • Addedread
    • Changedread_note3 fields changed
      • removedInput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / note / description
        Previous value: -"The note's name, exactly as `list_notes` gives it in `note` (for example `2026-10-15 1432.md`)."New value: +"Note name."
    • Changedresolve_comment5 fields changed
      • removedInput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / id / description
        Previous value: -"The comment's `id`, as `list_comments` gives it."New value: +"Comment id from list_comments."
      • changedInput schema / properties / reply / description
        Previous value: -"A short message to the person saying what you did, such as `Rewritten in 3f2a1c`. They read it under the comment."New value: +"What you did, short."
      • changedInput schema / properties / reply / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
    • Changedsearch11 fields changed
      • removedInput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / budget
        Added value: +{
        +  "description": "Max tokens of the answer, 200..12000: fewer hits, shorter snippets.",
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"How many sections to return (1 to 25). Ten when left out. With `tags` and no `query` it is how many documents\nto list instead (up to 100, twenty when left out)."New value: +"Sections 1..25, default 10."
      • removedInput schema / properties / limit / format
        Removed value: -"uint"
      • changedInput schema / properties / limit / minimum
        Previous value: -0New value: +1
      • changedInput schema / properties / limit / type
        Previous value: -[
        -  "integer",
        -  "null"
        -]New value: +"integer"
      • changedInput schema / properties / query / description
        Previous value: -"What to look for: keywords or a short phrase, as you would type them into a search box. Leave it out when you\npass `tags`, to get the documents that have those tags instead of sections."New value: +"Words or a short phrase."
      • changedInput schema / properties / query / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedInput schema / properties / tags / description
        Previous value: -"Look only in the documents that have all of these tags, as `list_tags` names them (for example `[\"adr\"]`).\nOptional."New value: +"Only documents with all these tags."
      • changedInput schema / properties / tags / type
        Previous value: -[
        -  "array",
        -  "null"
        -]New value: +"array"
  2. 9 tool updatesv0.1.0
    • First observedget_context
    • First observedlist_comments
    • First observedlist_notes
    • First observedlist_tags
    • First observedlist_unread
    • First observedopen
    • First observedread_note
    • First observedresolve_comment
    • First observedsearch

TDQS

B3.4/5.0

Scored across 13 tools

Disambiguation4/5

Most tools target distinct actions: map (folder listing), outline (structure of one file), read (text of one part), search (word matching), and open (show to user) are clearly separated by their descriptions. Minor overlap exists between read/read_note and between get_context/activity/list_unread, which all answer 'what's the current state/history' questions and could occasionally be misselected.

Naming Consistency3/5

Consistent snake_case, but conventions are mixed: some tools are verb_noun (get_context, list_notes, resolve_comment, read_note) while others are bare verbs or nouns (map, search, outline, read, open, activity). Still readable and largely intuitive, but there is no predictable pattern an agent can rely on.

Tool Count5/5

13 tools is well within the ideal range and each one covers a distinct slice of the workflow (orientation, navigation, reading, comments, presenting). No obvious redundancy or filler; a single write tool (resolve_comment) keeps the surface tight.

Completeness4/5

The read/navigate/present lifecycle is well covered: locate a file, outline it, read sections, look at comments, resolve comments, and show the user a location. Gaps are in writing—no document creation/editing, no comment creation or general reply beyond resolve—but the resolve_comment description signals this is a deliberate read-mostly design rather than an omission.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers