Skip to main content
Glama

Read, index, pack and file your documents — from the terminal, for you and your agents.

carrel pack src --stats — the token table, before you spend a context window on it.

carrel redact — true raster redaction of a PDF, and the proof: grep exits 1.

carrel turns the documents on your disk — PDFs, Word and OpenDocument files, ebooks, spreadsheets, email, scans — into text you can search, fields you can query, and context you can hand to an LLM. One CLI; every data command speaks --json with stable exit codes; the commands that move your files (organize, rename, intake, dedupe) dry-run by default; a conversion refuses to overwrite its output without --force. It ships an MCP server and a Claude Code plugin marketplace that drive the same commands, so Claude can read your .docx, pack the five relevant files out of five hundred, and file an invoice inbox by what the invoices say. Missing pandoc or tesseract? carrel doctor tells you what works today and how to unlock the rest.

A carrel is a private study desk in a library: your materials close at hand, organized your way.

Install

Requires Python ≥ 3.12 and uv. No checkout needed:

uv tool install 'carrel[all]'   # or: pipx install 'carrel[all]' — puts `carrel` on your PATH
                                # plain `carrel` skips the TUI and office/token extras (see INSTALL)
carrel doctor                   # what can your desk do today? (+ install hints for the rest)

(Contributing or hacking on it? uv tool install . from a checkout does the same thing.)

Related MCP server: local-notes-search-mcp

Three things to try

Give Claude the right context

Index a folder once, then let the desk's own ranking choose what to send. --since does the same job from git history instead of a query.

carrel --root ~/papers index                                   # the desk lives in ~/papers/.carrel
carrel --root ~/papers pack ~/papers --query "attention" --stats
carrel pack . --since HEAD~5 --stats                           # or: what git touched

--root names the desk. Without it the index lands in the directory you happened to run from, and the next --query cannot find it.

The MCP server (carrel mcp, shipped by the carrel-agent plugin) exposes the same thing as a tool, confined to the directory it starts in.

Limitation: query terms must appear in the text — FTS5 AND-s them, so a natural-language question often matches nothing. Under --json an empty pack exits non-zero rather than handing you a valid, empty document.

Read what the agent can't

Claude's Read cannot open a .docx, an .xlsx or an .eml at all. Install the guard plugin once and those files arrive as text, without you converting anything by hand.

claude plugin marketplace add coltonbearden/carrel   # the plugin marketplace, not the CLI
claude plugin install carrel-guard@carrel

Office, ebook, email and spreadsheet files become text automatically before Claude's Read sees them; PDFs become cheap text; images stay pictures for Claude's own vision.

Limitation: layout-heavy PDFs and diagrams still want the visual Read — the guard's note tells Claude where the original is and when to prefer it (CARREL_GUARD_PDF_TEXT=0).

Turn an inbox into an archive

Read what each document says, then file it by that. The dry run is the default; nothing moves until --apply.

carrel fields ~/inbox/invoice.pdf              # vendor, dates, totals, with confidence
carrel intake ~/inbox --to ~/archive           # dry run: shows every planned move
carrel intake ~/inbox --to ~/archive --apply   # files into YYYY/MM, indexes, records fields
carrel --root ~/archive meta find 'total>1000' 'due<2026-11'

Limitation: field extraction is English-label heuristics with a confidence column — read it before --apply. Originals are always kept.

Status and support

A solo-maintainer project, used daily by its author.

Settled interfaces — convert, inspect, index/search, pack: the flags and the --json shapes are what they will stay. Still moving — carrel mcp and the carrel-guard hook do useful work today, but v0.5.0 changes the behaviour of both (the server is now confined to its root; image Reads pass through), so pin an exact version if you script against them. Heuristic, and says so — the accuracy of fields, refs and intake: English-label matching with a confidence column, not a model. The desk TUI is a companion, not a product.

CI: Linux runs the full suite on Python 3.12–3.14 with every optional binary. The required macOS check is the degradation job — no extras, no binaries — so it proves carrel fails cleanly there, not that pandoc or tesseract paths work. Windows is advisory.

Security reports: see SECURITY.md — acknowledged within 7 days, fixed or explicitly declined within 30.

Two things carrel is not: a cloud document system (nothing leaves your disk, and there is no account), and a substitute for reading redaction or financial output before you rely on it.

Everything on the desk

Domain

Command

What it does

Convert & transform

carrel convert

Conversion across pdf, md, html, txt, docx, odt, epub, rtf, png/jpg/ico, json, xml, csv, plus xlsx → csv/json; the full SRC → target matrix is in carrel convert --help

carrel ocr

Images and scanned PDFs → text, markdown, or a searchable PDF

carrel edit

PDF merge/split/rotate/extract-pages, image resize/rotate/crop, text find-replace, json set/del

carrel extract-images

Pull embedded images out of pdf, ico, and html

carrel audiobook

Narrate txt/md/pdf and docx/odt/epub/rtf into mp3/ogg, chapters from markdown headings

Inspect & prove

carrel inspect

Metadata + per-type structure summary: sha256, pages, EXIF, json shape, csv dialect, docx paragraphs, xlsx sheets…

carrel diff

Unified text diffs, structural json/csv diffs, pdf text diffs, image pixel diffs

carrel thumb

Thumbnails for pdfs, images, and html

carrel proof

Soft-proof against an ICC profile, with a ΔE summary

carrel color

Dominant palette extraction, ICC conversion, contrast checks

The desk index

carrel index

SQLite FTS5 index of everything under a root (.carrel/carrel.db, versioned schema); --status reports stale rows

carrel search

bm25-ranked full-text search with type and tag filters

carrel tag

Tag files; find by tag

carrel note

Sidecar notes on any file; real text annotations on PDFs

carrel meta

Typed fields on files — vendor=Acme, total=1234.56, due=2026-10-01 — queried with meta find 'total>1000' 'due<2026-11', exported as a CSV of the folder

carrel catalog

Export/import tags + notes + fields as JSON (move a desk, commit it next to a repo); status shows schema version and stale index rows

Read the documents

carrel fields

Vendor, invoice number, PO, dates, subtotal/tax/total, currency and IBAN out of invoices, receipts and statements — each with a confidence and the line it came from; --save records them as desk fields

carrel refs

Reference numbers anywhere in a folder: invoice, PO, order, check, account, tracking, ticket, plus check-digit-verified IBAN, ABA routing, EIN, VAT, ISBN, GTIN, DOI, UPS, USPS. --tag links every document that shares one; --link shows the grouping

Email

carrel mail

.eml/.mbox are ordinary desk files (inspect, convert, index, search, pack, refs all read them, stdlib only). mail adds the rest: save attachments with digests, split a mailbox into messages, group messages into threads, convert Outlook .pst exports

Agents & context

carrel pack

Bundle files/trees into one LLM-ready document — md/xml/json; --query packs what the desk index ranks relevant, --since REF/--changed packs what git touched; include/exclude globs, .gitignore-aware (with ! negation), chunking, --dedupe-content, --outline, token estimates or exact counts (--tokenizer exact)

carrel mcp

Serve the whole desk over MCP on stdio: 14 tools (search, pack, inspect, tag, note, index, convert, diff, redact, doctor, meta, fields, mail, refs) plus carrel://file/{path} and carrel://search/{query} resources

Housekeeping

carrel organize

Sort a folder by type/date/EXIF date — dry-run by default

carrel dedupe

Exact (BLAKE2) and near (perceptual hash) duplicate detection

carrel rename

Rename files from what they say — {date}_{vendor}_{ref}{ext} — dry-run first, collision-safe, and the desk's tags and notes follow the file

carrel batch

Run any command over many files: parallel jobs, a resumable manifest, dry-run, per-file JSON records

carrel watch

Watch a folder and run shell actions on file events — recursive, settle-wait for slow writers, polling for /mnt/c and network shares, done/error folders, a printable systemd or Task Scheduler unit

carrel intake

The inbox in one command: read each document, name it, file it into YYYY/MM (or fiscal quarters), index it, record its fields and tag its references. Scans are OCRed into a searchable copy, the original is kept

carrel redact

Pattern/PII redaction for text formats; true raster redaction for PDFs

carrel sign

Visible PDF stamps, sha256 manifests, gpg-backed verify

carrel form

Build html/pdf forms from JSON specs; list and fill AcroForm PDFs

The desk itself

carrel desk

A companion TUI — see below; needs the tui extra

carrel doctor

What your environment enables today, with install hints for the rest

carrel completion

Tab-completion scripts for bash, zsh, and fish

carrel wraps the masters — pandoc, poppler, qpdf, tesseract/ocrmypdf, ImageMagick, exiftool, ffmpeg… — behind one adapter layer with capability detection. Missing binary? Commands degrade with an install hint (exit 3), never a crash. Several copies of a tool on PATH? Pin one with CARREL_BIN_<NAME> (docs/CONFIGURATION.md).

A first taste

carrel inspect paper.pdf                              # pages, sha256, producer, form fields…
carrel convert minutes.docx --to md                   # office/ebook formats read and write via pandoc
carrel index . && carrel search "marginal notes"      # FTS5 over your whole desk
carrel pack src/ --format xml -o context.xml --stats  # LLM-ready context + token table
carrel pack docs/ --query "release checklist" --stats # only the files the index ranks relevant
carrel catalog export -o desk.json                    # tags + notes, portable and diff-able

Add --json to any of these and you get machine-readable output on stable exit codes — that's the whole agent contract. Tab completion: eval "$(carrel completion bash)" (zsh and fish too).

The marketplace

This repo is also a Claude Code plugin marketplace: plugins whose slash commands, agents, skills, and hooks all delegate to the CLI above. The table below is a snapshot — docs/MARKETPLACE.md is authoritative for the current plugin list.

claude plugin marketplace add coltonbearden/carrel
claude plugin install carrel-inspect@carrel

Plugin

Gives Claude

carrel-inspect

/inspect, /diff, /search, /pack + a context-packing skill

carrel-convert

/convert, /ocr, /thumb, /edit, /extract-images, /audiobook + a batch doc-converter agent

carrel-organize

/organize, /dedupe, /tag, /note-file, /meta, /rename, /batch

carrel-finance

/refs, /fields — find and cross-link invoice, PO, IBAN, routing and tracking numbers; extract vendor, dates and totals from invoices, receipts and statements + a bookkeeper agent and an accounting-inbox skill

carrel-documents

/redact, /sign, /form, /proof, /color + a document-clerk agent (redact → verify → sign) and a redaction-and-provenance skill

carrel-mail

/mail — attachments, mbox split, threads, Outlook .pst via readpst; eml/mbox are desk file types + a mail-archive skill

carrel-watch

/watch-folder, /intake — file an inbox by what the documents say + a watch-automation recipe skill

carrel-agent

/index, /doctor, /catalog, /completion, a file-librarian agent, the carrel MCP server, and a hook that re-indexes files Claude writes

carrel-guard

A PreToolUse hook that turns the files Read cannot open — Office/ebook/RTF, spreadsheets, email — into text before it sees them, and PDFs into cheap text by default; images are left to Claude's vision. Plus a SessionStart hook that reports what carrel can do here

Install the CLI first (see Install) so the plugins can call it. Works headless too:

claude -p "/carrel-inspect:inspect text+image.pdf" --allowedTools "Bash(carrel:*)"

The full validated flow (with real output) is in docs/TEST_REPORT.md.

The desk TUI

carrel desk

carrel desk — browse the tree, inspect a file, run an action, search the index.

A companion to the CLI: a three-pane Textual desk. A file tree on the left, an inspector in the middle (metadata, preview, tags, notes), an action palette on the right (convert, ocr, pack, thumbnail…) — all driving the same core library as the CLI, with full-text search along the bottom. Theme: warm lamplight on dark wood, per docs/BRAND.md.

Learn more

License

MIT © Colton Bearden

  • brainrot — Self-audit toolkit for Claude: mine your own chat history for corrections and wins, arbitrate findings into a lean rule set, keep memory tidy

Available Tools

14 tools
carrel_convertA

Convert a file to another supported type. Text targets also return the converted content inline (capped at 1 MiB).

NameRequiredDescriptionDefault
toYesTarget type: pdf, md, txt, html, json, xml, csv, png, jpg, ico, docx, odt, epub.
pathYesSource file.
rootNoDesk root (default: server --root / cwd).
forceNoOverwrite an existing output.
out_dirNoDirectory for the output (default: next to the source).

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It does add genuinely useful behavior beyond schema: text targets return converted content inline with a 1 MiB cap, which tells the agent when to expect a payload versus a file on disk. However, it never says the tool writes an output file (only the schema's force/out_dir hints at it), nor what happens on unsupported or failed conversions, nor whether conversion is lossy — gaps that matter for a mutation tool with zero annotation coverage.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core action front-loaded and the return-value caveat immediately after. Every sentence earns its place.

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

Completeness3/5

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

There is no output schema, so the description must cover return behavior — it does for text targets but says nothing about what non-text targets yield (presumably a written file path). Combined with no annotations and five parameters, an agent still lacks the write/destructive framing and failure-mode information needed. The 1 MiB cap is the one real addition over structured fields.

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 schema already documents all five parameters including the full target-type list, the overwrite behavior of force, and the default for out_dir — baseline 3 applies. The description adds no parameter-level detail beyond what the schema states; the 1 MiB cap is about the return value, not a parameter.

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

Purpose4/5

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

States a specific verb and resource — "Convert a file to another supported type" — which is unambiguous and distinct from all listed siblings (search, pack, inspect, diff, redact, etc.), none of which convert. It stops short of naming the boundary explicitly, but no sibling competes for this task.

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?

No explicit when-to-use or when-not guidance, and no alternatives are referenced. Usage is only implied by the clarity of the verb; an agent must infer that this is the tool for format transformation rather than reading it stated.

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

carrel_diffB

Compare two files (text / struct / pdf / image). differ is data, never an error.

NameRequiredDescriptionDefault
aYesFirst file.
bYesSecond file.
modeNoauto
rootNoDesk root (default: server --root / cwd).

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that a 'differ' result is data, never an error—a key non-obvious trait—but omits other important behaviors such as path resolution, permission requirements, and behavior when files are missing or modes are incompatible.

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

Conciseness5/5

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

Two tightly written sentences with zero waste. The core purpose is front-loaded, and the behavioral note follows immediately afterward.

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 four-parameter tool with no output schema and no annotations, the description covers the essential purpose and one important behavioral trait. However, it leaves gaps around mode semantics, error conditions, and the shape of the diff result that an agent would need for confident invocation.

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

Parameters3/5

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

Schema coverage is 75%, so the schema already describes a, b, and root. The description adds meaning to the mode parameter by listing the supported types (text/struct/pdf/image), which maps directly to the enum, but it does not explain 'auto' or how mode changes comparison behavior.

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

Purpose4/5

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

The description states a specific verb and resource ('Compare two files') and enumerates the supported file types, which clearly distinguishes it from siblings like convert or redact. It does not explicitly name an alternative tool or scope boundary, so it falls 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 guidance on when to choose this tool over siblings such as carrel_inspect or carrel_convert, nor any stated preconditions. Usage is implied by the verb 'Compare', but the description offers no exclusions or alternative routing.

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

carrel_doctorB

Environment report: external tools found (with versions or install hints), per-command status, and the capability table gating each command.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden. It implies a passive report but never states that it is read-only, that it performs no installs despite mentioning 'install hints,' whether it probes the network or filesystem, or how long it may take. Those are exactly the traits an agent needs when deciding whether this diagnostic is safe and cheap to call.

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 no filler, and the most useful content (what the report contains) is stated up front. It reads as a noun-phrase fragment rather than a complete sentence, but every clause carries information.

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

Completeness3/5

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

With no input schema, no output schema, and no annotations, the description is the sole source of truth about the return value, and it does list the report's sections. However, it leaves open what 'per-command status' and the 'capability table' actually look like and whether the report is a prerequisite check for other carrel_* tools.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The description correctly adds no parameter discussion, avoiding noise.

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 concretely ('Environment report') and enumerates its sections: external tools with versions or install hints, per-command status, and the capability table. An agent can infer this is a diagnostics/self-check tool, though the verb is nominal ('report') rather than an explicit action like 'check' or 'diagnose'. It does not explicitly contrast itself with siblings such as carrel_inspect or carrel_meta, which sound adjacent.

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 call this tool versus alternatives — nothing like 'run before other commands' or 'use when a command fails due to a missing external tool.' With siblings named inspect and meta, the absence of any differentiation leaves the agent to guess the intended trigger.

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

carrel_fieldsB

Extract vendor, invoice number, PO, dates, subtotal/tax/total, currency, IBAN and account last-4 from a document (invoice, receipt, statement) with a confidence per field; optionally save them as desk meta fields.

NameRequiredDescriptionDefault
ocrNoOCR images and scanned PDFs.
pathYesFile or directory.
rootNoDesk root (default: server --root / cwd).
saveNoWrite the fields into the desk under root (source: fields).
profileNoauto
date_orderNomdy

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses that extraction returns a confidence per field and that saving as desk meta fields is optional, but it does not explain permission requirements, overwrite behavior when saving, or what happens when fields cannot be extracted.

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

Conciseness4/5

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

The description is a single front-loaded sentence that efficiently states the core action, extracted fields, confidence behavior, and optional save. The long field enumeration is justified by the tool's purpose, though it could be structured more scannably.

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 six-parameter extraction tool with no annotations and no output schema, the description covers the main purpose and optional save behavior. It still leaves important context unaddressed, including output format beyond per-field confidence, OCR and root behavior, profile/date-order effects, and sibling alternatives.

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 67%, so the schema already documents several parameters. The description adds meaning for the optional save behavior ('save them as desk meta fields'), but it does not clarify ocr, root, profile, date_order, or path 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 ('Extract') and resource ('vendor, invoice number, PO, dates, subtotal/tax/total, currency, IBAN and account last-4') from clearly named document types. It is easy to understand what the tool does, but it does not differentiate itself from siblings such as carrel_inspect or carrel_meta.

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 document types '(invoice, receipt, statement)' imply the intended context, and the optional save behavior is stated. However, there is no explicit guidance on when to use this tool versus alternatives like carrel_inspect, carrel_meta, or other sibling tools.

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

carrel_indexB

Build or refresh the desk full-text index under root (default: the whole root). Returns indexed/skipped/pruned counts.

NameRequiredDescriptionDefault
ocrNoOCR images and scanned PDFs (needs tesseract / ocrmypdf).
rootNoDesk root (default: server --root / cwd).
pathsNoFiles or directories to index (default: root).
pruneNoDrop index rows whose files are gone.
updateNoTreat paths as individual files; no walking.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description must carry the full behavioral burden; it partly does by disclosing the return values (indexed/skipped/pruned counts) and the default root resolution. It never states that desk files themselves are not modified, that `prune` deletes index rows, whether runs are idempotent, or how expensive a full-root build is.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action and scope; nothing irrelevant. Minor redundancy in 'under root (default: the whole root)' where the default restates the scope.

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 no-annotation, five-parameter mutation of on-disk index state with no output schema, the description covers the basics (default scope, return counts) but omits safety-relevant context such as what `prune` destroys and cost of a full build.

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 all five parameters are already documented in the schema; the description only restates the default root scope. It adds nothing about how `paths` interacts with `update` or about the `prune`/`ocr` trade-offs beyond the schema strings.

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?

Uses a specific verb pair ('Build or refresh') with a concrete resource ('the desk full-text index') and states the default scope ('the whole root'). This clearly separates it from carrel_search or carrel_pack, though it never names a sibling explicitly.

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?

'Build or refresh' implies a re-runnable setup step that search presumably depends on, so usage is inferable. But there is no explicit when-to-use, no when-not-to-use, and no mention of when to pass `paths`/`update` versus letting it walk the root.

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

carrel_inspectA

Metadata for one file: detected type, size, mtime, sha256, mime guess and per-type detail (pages, dimensions, headings, columns, ...).

NameRequiredDescriptionDefault
deepNoAdd exiftool's full tag table when installed.
pathYesFile to inspect.
rootNoDesk root (default: server --root / cwd).

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses the returned metadata fields, but does not state that the operation is read-only, whether it requires filesystem permissions, or what happens when deep/exiftool is unavailable.

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 front-loaded sentence lists the key return fields with zero wasted text. It is appropriately sized for a simple inspection tool.

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?

Because there is no output schema, the description must describe returns, and it does so by enumerating the main metadata fields and per-type detail. It leaves out deep/exiftool behavior, which the schema covers, and omits any read-only safety statement, but is largely complete for this tool.

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 path, root, and deep are already documented in the schema. The description adds no parameter-specific semantics beyond the general metadata mention, so baseline 3 applies.

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 pair: retrieving metadata for one file, and enumerates the returned fields (type, size, mtime, sha256, mime, per-type detail). That clearly distinguishes it from bulk or search-oriented siblings, though it does not explicitly differentiate from carrel_meta.

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

Usage Guidelines3/5

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

Usage is implied by 'Metadata for one file', so an agent can infer this is the per-file inspection tool. However, there is no explicit when-to-use guidance, no exclusions, and no named alternative such as carrel_meta or carrel_search.

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

carrel_mailA

Email files (eml/mbox): save a message's attachments into a directory, or group the messages of files/directories into threads.

NameRequiredDescriptionDefault
pathYeseml/mbox file (attachments) or file/directory (threads).
rootNoDesk root (default: server --root / cwd).
forceNoOverwrite same-named attachments instead of suffixing.
actionYes
out_dirNoWhere attachments are written (attachments).

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does convey that the attachments action writes files into a directory and that the threads action consumes either a file or a directory, which is useful behavior context. But it does not disclose overwrite/suffixing semantics (left to the force param), permissions, or whether the threads action writes anything or merely returns data.

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

Conciseness4/5

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

A single front-loaded sentence naming the file type first, then the two modes. Efficient with no filler, though the two-mode construction is slightly dense and could be split for scanability.

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 five-parameter tool with no annotations or output schema, the description covers the core mode split and the differing path semantics. The remaining gap is what the threads action returns versus writes, which an agent might need to interpret results correctly.

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 80%, so the schema itself documents path, root, force, and out_dir well. The description only restates the path semantics already present in the schema and adds nothing about root, force, or out_dir. Baseline 3 is appropriate when the schema does the heavy lifting.

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 (eml/mbox email files) and two concrete operations (extract attachments, group messages into threads). It is clearly distinguishable from generic siblings like carrel_pack or carrel_convert, though it never names a sibling to differentiate against.

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 two listed behaviors implicitly map to the two enum actions, giving an agent a rough idea of when each mode applies. However, there is no explicit 'use this when...' guidance, no exclusions, and no pointer to any sibling tool for adjacent email tasks.

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

carrel_metaB

Typed key/value fields on desk files: set, get, ls or rm fields on a file, or find files by conditions (vendor=acme, total>1000, due<2026-11-01, paid?).

NameRequiredDescriptionDefault
keyNoField name (get).
keysNoField names to remove (rm).
pathNoFile (set/get/ls/rm).
rootNoDesk root (default: server --root / cwd).
actionYes
fieldsNoFields to set, {key: value}; kinds are inferred (set).
sourceNoWho writes the fields (set).agent
conditionsNoConditions every file must satisfy (find).

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description must carry the full behavioral burden, but it does not disclose permission requirements, whether set replaces or merges existing fields, what rm destroys, or what get/ls/find return. It names the operations but leaves the mutation and safety semantics opaque.

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

Conciseness5/5

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

The description is a single dense sentence that front-loads the core concept and then enumerates actions and condition examples with no wasted text. It is appropriately sized for a compact tool summary.

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

Completeness3/5

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

The description covers all action names for a multi-action tool and provides useful find-condition examples, while the detailed schema covers most parameters. However, because there are no annotations and no output schema, the missing behavioral context around mutation effects and return values leaves clear gaps.

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 88%, so the schema already documents nearly every parameter and the action enum. The description adds condition syntax examples such as vendor=acme and total>1000, but it does not add much beyond that for the remaining parameters.

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

Purpose4/5

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

The description clearly states a specific resource (typed key/value fields on desk files) and enumerates the operations: set, get, ls, rm, and find. It is easy to understand what the tool does, but it does not distinguish itself from likely siblings such as carrel_fields.

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 implies when each action is used, for example get/ls for reading fields and find for locating files by conditions, and gives condition examples. However, it offers no explicit when-not guidance or comparison with alternative sibling tools, leaving the agent to infer the right choice.

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

carrel_noteB

Attach a free-text note to a file in the desk db, or list its notes.

NameRequiredDescriptionDefault
bodyNoNote text (add).
pathYesFile the note belongs to.
rootNoDesk root (default: server --root / cwd).
actionYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden. It implies a persistent write to the desk db but says nothing about whether notes accumulate, whether duplicates are allowed, ordering of listed notes, permissions, or what either mode returns.

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?

One compact sentence with the primary write mode front-loaded ahead of the list mode, and no filler. It could be tightened only slightly by tying each clause to its action value.

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

Completeness2/5

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

For a two-mode tool with four parameters, no annotations, and no output schema, the description leaves too much unexplained: what listing returns, whether an empty result is possible, and how root resolution affects the note's identity are all 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 75%, so the schema already documents body, path, and root. The description reinforces body as free text and path as the owning file, but adds nothing about the root parameter or how action interacts with optional body.

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 ("Attach") and resource ("note") plus the target ("a file in the desk db") and a second mode ("list its notes"). It is clearly distinct from siblings like carrel_tag or carrel_search, though it never names an alternative explicitly.

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 two modes map onto the action enum and the word "or" signals the choice, so usage is implied. However, there is no explicit guidance on when to add versus list, no prerequisites, and no comparison with closely related tools such as carrel_tag.

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

carrel_packB

Pack a file or directory into LLM-ready context: file tree plus extracted text of supported files (text, pdf, office, ebook).

NameRequiredDescriptionDefault
topNoMax query hits to pack.
pathYesFile or directory to pack.
rootNoDesk root (default: server --root / cwd).
queryNoRelevance-rank files by this desk-index query.
formatNojson: structured object; md/xml: rendered pack document.json
excludeNoDrop files/dirs matching these globs.
includeNoOnly pack files matching these globs.
max_bytesNoContent budget in bytes; files past it are listed but omitted.
tree_onlyNoTree without contents.

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose useful traits beyond the schema: which file types get text extracted (text, pdf, office, ebook) and that output combines a tree with contents. It omits whether the operation is read-only/non-destructive, how the byte budget affects output, and any permission or rate considerations.

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

Conciseness4/5

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

A single front-loaded sentence with the action first and the output description second; no filler. It is arguably too terse for a 9-parameter tool, but nothing in it is wasted.

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 9-parameter tool with no annotations and no output schema, the description should explain the pack result structure and the read-only nature more fully. The file-type support and tree+text composition are covered, but an agent still can't tell what the returned document looks like or how the byte budget truncates it.

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 each of the 9 parameters is already documented, including the format enum, globs, max_bytes, and tree_only. The description adds only the high-level notion of tree-plus-text, which implies how tree_only and format relate, but nothing about query/root/top semantics.

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

Purpose4/5

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

States a specific verb (pack) and resource (file or directory), plus the concrete output shape: file tree plus extracted text of supported files. It doesn't name or contrast any sibling (carrel_search, carrel_inspect, carrel_convert), so sibling differentiation is left to inference.

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

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 versus carrel_search (query-based retrieval), carrel_inspect, or carrel_convert. 'LLM-ready context' weakly implies the use case, but no exclusions, prerequisites, or alternatives are stated.

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

carrel_redactA

Redact patterns from a text file's contents and return the result. Never writes; PDFs must go through the CLI (carrel redact FILE.pdf -o OUT.pdf).

NameRequiredDescriptionDefault
pathYesText file (txt/md/html/json/csv/xml).
rootNoDesk root (default: server --root / cwd).
builtinNoBuiltin patterns: email, phone, ssn, ipv4, cc, invoice, po, order, check, account, tracking, ticket, iban, routing, ein, vat, isbn, gtin, doi, ups, usps.
patternNoCustom regexes to redact.
replacementNoReplacement text for matches.█

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden; 'Never writes' is a valuable explicit disclosure of non-mutation that substitutes for destructiveHint=false. It stops there, though: nothing about invalid-regex handling, size limits, encoding, or whether the source file is guaranteed untouched beyond the one-word claim.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the action and immediately followed by the two constraints that matter (no writes, no PDFs). Nothing is wasted and nothing needs reordering.

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 five-parameter, single-required-arg tool with a fully documented schema and no output schema, the description covers the essentials: what it returns, that it does not write, and what input types are rejected. Only edge-case behavior (bad regexes, large files, encoding) is left implicit, which is a minor gap here.

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 every parameter including the builtin pattern list and custom regex array is already documented. The description adds no meaning beyond the schema — it never distinguishes builtin from pattern or explains how the default replacement character behaves.

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

Purpose4/5

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

States a specific verb (redact) on a specific resource (a text file's contents) and notes the result is returned rather than persisted. The text-file restriction plus the PDF exclusion makes the scope unambiguous, though it never names a sibling tool as an alternative.

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?

'PDFs must go through the CLI (carrel redact FILE.pdf -o OUT.pdf)' is an explicit exclusion that routes the agent elsewhere with a concrete command. However, there is no positive guidance on when to choose this over e.g. carrel_convert or carrel_search, so the picture is clear but not complete.

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

carrel_refsB

Find reference numbers (invoice, PO, order, check, account, tracking, ticket, IBAN, routing, EIN, VAT, ISBN, GTIN, DOI, UPS, USPS) in a file or directory; optionally tag files with ref:: or group files by shared value.

NameRequiredDescriptionDefault
allNoWith link, include values seen in one file only.
ocrNoOCR images and scanned PDFs (needs tesseract / ocrmypdf).
tagNoTag each file in the desk under root with ref:<kind>:<value>.
linkNoReturn {references: [{kind, value, files, count}]} instead.
pathYesFile or directory to scan.
rootNoDesk root (default: server --root / cwd).
kindsNoOnly these kinds (default: reference + identifier kinds). Known: email, phone, ssn, ipv4, cc, invoice, po, order, check, account, tracking, ticket, iban, routing, ein, vat, isbn, gtin, doi, ups, usps.
patternsNoExtra NAME=REGEX kinds; a (?P<v1>…) group is the value.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that tagging mutates files (ref:<kind>:<value> tags) and that an alternate grouping output exists, which is useful, but it says nothing about permissions, whether tagging overwrites existing tags, or what the default non-link return 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?

A single front-loaded sentence with the core action first and the optional behaviors after a semicolon. The long parenthetical of kinds is dense but the schema repeats it, so it is slightly redundant rather than wasteful.

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 an 8-parameter tool with no annotations and no output schema, the definition is minimal: it never describes the default result shape (matches per file), how tag/link/all interact, or what OCR enables behaviorally. Key interaction semantics are left to the schema defaults alone.

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 every parameter is already documented, including the kinds list and the patterns name=regex convention. The description only restates the kind enumeration already present in the schema, adding no syntax or default information beyond it.

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

Purpose4/5

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

States a clear verb ('Find'), resource ('reference numbers'), an enumerated set of kinds, and scope ('in a file or directory'). It is distinguishable from siblings like carrel_search and carrel_fields, though it never names them, so the agent must infer the boundary itself.

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 two optional modes ('tag files' and 'group files by shared value') hint at when the extra flags matter, but there is no explicit guidance on when to choose this over carrel_search, carrel_fields, or carrel_tag, and no prerequisites or exclusions are stated.

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

carrel_tagB

Manage desk tags: add/rm/ls tags on a file, or find files by tags.

NameRequiredDescriptionDefault
pathNoFile (add/rm/ls).
rootNoDesk root (default: server --root / cwd).
tagsNoTags to add/remove, or all-of tags to find.
actionYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It indicates that add/rm mutate tags, but does not disclose permissions, reversibility, persistence, duplicate-tag behavior, or what find returns beyond the vague phrase 'files by tags'.

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

Conciseness5/5

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

The description is a single compact sentence with no wasted words, and the core operations are front-loaded. It communicates the tool's scope quickly.

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 four-parameter mutation/query tool with no annotations and no output schema, the description is minimally adequate. It omits the root parameter, the all-of semantics for find, and any behavioral details about tag removal or lookup results.

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 75%, and the schema already documents path, root, tags, and the action enum. The description loosely maps actions to path/tags but adds no syntax, tag format, or root behavior beyond what the schema provides.

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 clear verb and resource: manage desk tags with add/rm/ls and find operations. It distinguishes the tag-management purpose from most siblings, though it does not explicitly contrast itself with carrel_search for tag-based lookup.

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 action list implies when each operation is appropriate, but there is no explicit guidance about when to use this tool instead of siblings such as carrel_search. Alternatives and exclusions are left to inference.

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

Tool Schema Changelog

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

  1. 14 tool updatesv0.5.0
    • First observedcarrel_convert
    • First observedcarrel_diff
    • First observedcarrel_doctor
    • First observedcarrel_fields
    • First observedcarrel_index
    • First observedcarrel_inspect
    • First observedcarrel_mail
    • First observedcarrel_meta
    • First observedcarrel_note
    • First observedcarrel_pack
    • First observedcarrel_redact
    • First observedcarrel_refs
    • First observedcarrel_search
    • First observedcarrel_tag

TDQS

A3.6/5.0

Scored across 14 tools

Disambiguation4/5

Most tools have clearly distinct targets: index/search/pack/inspect/convert/diff/redact/doctor are easy to tell apart by resource and action. The main overlap is between carrel_fields and carrel_refs, which both extract invoice/PO/reference data from documents (and both can tag or persist results), and to a lesser degree among carrel_tag, carrel_meta, and carrel_note, which all attach or query metadata on desk files.

Naming Consistency4/5

All tools share a uniform carrel_ prefix and a single lowercase snake_case token, which is highly predictable. However, the second token is sometimes a verb (search, pack, inspect, convert) and sometimes a noun (meta, fields, mail, refs), and several tools multiplex multiple actions (tag add/rm/ls, meta set/get/ls/rm), so it isn't a strict verb_noun convention.

Tool Count5/5

14 tools is squarely in the well-scoped range and each tool covers a distinct document-desk capability (indexing, retrieval, conversion, comparison, extraction, metadata, mail). Nothing appears redundant or padded for the stated scope.

Completeness4/5

The surface covers the lifecycle well: indexing, search, packing, inspection, conversion, diffing, redaction, tags/notes/meta, and structured extraction. Minor gaps exist — no way to delete a note or remove a tag-adjacent record, no direct file/content deletion or write-back for redaction (PDF redaction is CLI-only), and no plain browse/read primitive independent of pack.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables natural-language semantic search over your own local files through an MCP server, fully offline without API keys or a server daemon, with optional LLM-grounded answers and exact file:line sources.
    5
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables local LLM tools and agentic IDEs to inspect repository token maps, retrieve clean token-bounded codebase snapshots, and audit code for hardcoded secrets via MCP over stdio.
    10 npm
    4
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to search local files by name, path, metadata, and literal text over MCP on Windows, Linux, and macOS, while keeping searches within explicitly configured directories and running locally over stdio.
    7
    MIT