Skip to main content
Glama

lilbee runs and manages your models: chat, embedding, vision, and rerank, placed across every GPU you have. It puts them to work as a search engine you can talk to, over your files, notes, code, and the web, where every answer cites the exact file and line. It crawls websites into your library, launches your coding agents on local models, and hands any MCP-aware agent cited answers from everything you've indexed. The same engine backs the Obsidian community plugin, so your vault gets all of it without a terminal. Ask in plain English. No containers, no networking, nothing else to install or set up.

And it is private. Your files, the index, the embeddings, your questions, and the answers stay on your machine. lilbee sends no telemetry and needs no account. It contacts a cloud provider only when you set an API key for it, in lilbee's settings or in the provider's own environment variable. Then it checks once that the key works, and sends your questions only to a cloud model you pick.

ask lilbee "what is lilbee in one sentence?" and get a cited answer drawn from its own README

It's all one program: no separate model server, vector database, or container to stand up. lilbee runs the models and keeps the index itself. Reach it as a terminal app, CLI, Model Context Protocol server, HTTP API, or Python library. Close it and it's gone, or run it as a service to keep it warm. Everything runs on your computer; it uses a cloud model only when you pick one.

Models are no different: lilbee has its own model manager and multi-GPU fleet, built on llama.cpp, so one executable does everything (browse Hugging Face, download a model, give it a role, run it on Metal / Vulkan / CUDA). You don't need Ollama or LM Studio at all: the architectures lilbee runs are behind most of the 190,000+ GGUF repos on Hugging Face, with representatives verified on real GPUs. If you already use them, point lilbee at your existing setup and keep your models.

Tutorial reel: every demo on this page, plus the extras that don't fit here, with long-form captions at lilbee.sh/tutorial.

⚠️ Beta software

lilbee is in active beta development. Every release on PyPI is a pre-release; you must use --pre (or uv's --prerelease=allow) when installing. Interfaces, command names, and on-disk formats may shift between betas. Feedback, bug reports, and issues are very welcome; that's the whole point of the beta.

Latest pre-release (always): lilbee on PyPI →



Related MCP server: local_ai_gen

Install

Two routes, and the difference matters:

  • A self-contained bundle (start here): the standalone binary, or the Homebrew / AUR / Nix / Docker / Flatpak / Snap / Scoop builds that wrap it. It carries its own Python runtime, llama.cpp, the model engine, and the optional extras, so there is nothing else to install and nothing to assemble. The trade-off is one large download and a small cold-start cost the first time it self-extracts.

  • Into your own Python with pip or uv (Python 3.11 to 3.14), in its own section below. This is the developer route: it installs lilbee as a library in an environment you manage, and the model engine is a separate extra from a separate index that you have to ask for. Take it if you are working on lilbee or importing it into your own code.

Have a discrete GPU? The bundled builds and the Vulkan engine already use it. There are faster vendor builds too: NVIDIA (CUDA) and AMD (ROCm).

No external services either way; lilbee downloads and runs models locally. Optional, for scanned-PDF / image OCR: Tesseract (brew install tesseract / apt install tesseract-ocr) or a GGUF vision model.

How

Command

Notes

Homebrew

brew tap tobocop2/lilbee && brew install lilbee

macOS (Apple silicon and Intel) / Linux x86_64. Bundled build; clears the macOS quarantine flag for you.

AUR

paru -S lilbee

Arch Linux. Wraps the Linux x86_64 binary; works with yay / pacaur / any helper.

Docker

docker run --rm -v lilbee-data:/home/lilbee/data ghcr.io/tobocop2/lilbee:latest --help

GHCR image, tagged by version and latest. Data lives at /home/lilbee/data. Mount a volume there. :cuda and :rocm tags carry the vendor builds.

Nix

nix run github:tobocop2/lilbee

NixOS, nix-darwin, or any host with nix. On Linux the flake bundles glibc, libgomp, and vulkan-loader so it runs on bare NixOS.

Flatpak

flatpak remote-add --if-not-exists lilbee https://tobocop2.github.io/flatpak-lilbee/lilbee.flatpakrepo && flatpak install lilbee io.github.tobocop2.lilbee

Linux x86_64, any distro with flatpak. Needs the Flathub remote for the runtime. Run with flatpak run io.github.tobocop2.lilbee, or make it a plain command: alias lilbee='flatpak run io.github.tobocop2.lilbee' in your shell rc (swap in .cuda / .rocm / .compat for a vendor build). flatpak update picks up new releases. Data lives under ~/.var/app/io.github.tobocop2.lilbee/. Prefer one file? Grab lilbee.flatpakref from the release and flatpak install ./lilbee.flatpakref.

Snap

curl -LO https://github.com/tobocop2/lilbee/releases/latest/download/lilbee-linux-x86_64.snap && sudo snap install ./lilbee-linux-x86_64.snap --dangerous --classic

Linux x86_64. Sideloaded, so snapd flags it --dangerous (it just means unsigned) and it won't auto-update; rerun the same command to upgrade.

Scoop

scoop install git; scoop bucket add lilbee https://github.com/tobocop2/scoop-lilbee; scoop install lilbee

Windows x86_64. Scoop needs git to add a bucket, so the first command installs it (a no-op when present). Reads your NVIDIA driver version and installs the matching CUDA build (555.85+ gets cu125, 551.61+ gets cu124), otherwise the Vulkan build. It says which one it picked. scoop update lilbee upgrades. Added the bucket before 2026-09-08? It moved to its own repository, so run scoop bucket rm lilbee and add it again; your install is untouched.

npm

npm install -g lilbee

macOS / Linux x86_64 / Windows, Node 18+. A small launcher: on first run it detects your hardware (CUDA, ROCm, Metal, or the AVX-baseline build), downloads the matching standalone binary of the latest release, verifies it, and caches it. lilbee prepare does that ahead of time; npx -y lilbee mcp runs the MCP server for agent hosts.

Standalone binary

download for your platform →

One file, own Python runtime, no pip needed. Linux needs glibc 2.28+; the macOS / Windows builds are unsigned (xattr -d com.apple.quarantine ./lilbee-macos-arm64 if Gatekeeper blocks it).

On NVIDIA hardware

The default Vulkan build works on NVIDIA cards, but there's a dedicated CUDA build that's faster on NVIDIA hardware and sidesteps the iGPU + dGPU Vulkan-loader crash on Windows.

Command

Homebrew

brew install tobocop2/lilbee/lilbee-cuda

AUR

paru -S lilbee-cuda

Nix

nix run github:tobocop2/lilbee#lilbee-cuda

Flatpak

flatpak install lilbee io.github.tobocop2.lilbee.cuda

Scoop

scoop install lilbee-cuda (cu125 in one download, driver 555.85+; the plain lilbee install also auto-picks CUDA, but downloads the Vulkan build first)

Binary

lilbee-linux-x86_64-cu125 or lilbee-windows-x86_64-cu125.exe

pip (devs)

pip install --pre 'lilbee[engine]' --extra-index-url https://lilbee.sh/cu125/

uv (devs)

uv tool install --prerelease=allow 'lilbee[engine]' --extra-index-url https://lilbee.sh/cu125/

Same lilbee command after install. The CUDA runtime is bundled; you only need the NVIDIA driver. Already have the regular lilbee installed? On AUR paru -S lilbee-cuda swaps it automatically; on Homebrew run brew uninstall lilbee first, and on Scoop run scoop uninstall lilbee first. Older driver? cu124 and cu121 ship via the matching wheel indexes and as direct-download Linux binaries on the release page.

On AMD hardware

The default Vulkan build works on AMD cards, and stays the fallback if ROCm isn't set up. There's also a dedicated ROCm build that's faster. It bundles the ROCm userspace, so you need only the amdgpu kernel driver.

Command

Homebrew

brew install tobocop2/lilbee/lilbee-rocm

AUR

paru -S lilbee-rocm

Nix

nix run github:tobocop2/lilbee#lilbee-rocm

Flatpak

flatpak install lilbee io.github.tobocop2.lilbee.rocm

Binary

lilbee-linux-x86_64-rocm

pip (devs)

pip install --pre 'lilbee[engine]' --extra-index-url https://lilbee.sh/rocm/

uv (devs)

uv tool install --prerelease=allow 'lilbee[engine]' --extra-index-url https://lilbee.sh/rocm/

Same lilbee command after install. Linux only. Cards: MI100, MI200, MI300, MI350, RDNA2, RDNA3, RDNA3.5 APUs and RDNA4. ROCm 7 ships no GEMM kernels for the MI50, so it needs the Vulkan build. Largest of the three builds, since the ROCm userspace and per-card kernels ship inside it.

Then check it runs and pick a model:

lilbee self-check    # ~90 MB download; runs an inference + an embedding; "SELF-CHECK PASSED" on success
lilbee               # launch the terminal app; pick your models from the catalog on first run

The usage guide covers the rest: TUI screens, slash commands, CLI, HTTP server, MCP, env vars, and config.toml. The settings reference lists every setting and which of those surfaces can change it.

On older CPUs (pre-AVX2)

Pre-2013 Intel or pre-Zen AMD CPUs lack AVX2, so the normal build crashes on launch. The lilbee-compat build runs on any x86-64 chip back to ~2008.

Command

Homebrew

brew install tobocop2/lilbee/lilbee-compat

AUR

paru -S lilbee-compat

Nix

nix run github:tobocop2/lilbee#lilbee-compat

Scoop

scoop install lilbee-compat

Flatpak

flatpak install lilbee io.github.tobocop2.lilbee.compat

Snap

curl -LO https://github.com/tobocop2/lilbee/releases/latest/download/lilbee-compat-linux-x86_64.snap && sudo snap install ./lilbee-compat-linux-x86_64.snap --dangerous --classic

Binary

lilbee-compat-linux-x86_64, lilbee-compat-windows-x86_64.exe, or lilbee-compat-macos-x86_64 (pre-AVX2 Intel Macs, e.g. the 2013 Mac Pro)

Binary + GPU

lilbee-compat-linux-x86_64-cu124 (NVIDIA CUDA, driver 550+) or lilbee-compat-linux-x86_64-rocm (AMD ROCm). These need a CPU with AVX (2011+); the Vulkan build above covers older chips.

pip (devs)

pip install --pre lilbee 'lancedb==0.39.0+compat' --extra-index-url https://lilbee.sh/compat/ — no engine: there is no compat engine wheel, so use a bundled build above or bring your own llama-server

Use a bundled build here if you can. The compat index carries the patched lancedb only, so the pip row installs lilbee without an engine and every model call will fail until you point LILBEE_LLAMA_SERVER_PATH at a llama-server that runs on your CPU.

Same lilbee command after install. The crash is from lancedb's AVX2-compiled wheels; this build swaps in a lancedb fork that picks instructions at runtime. A 👍 or comment on the upstream lance PR helps it land.

Linux runtime requirements

The Linux x86_64 wheel and binary bundle the Vulkan loader, so they start on any distro. GPU detection still reads adapters through the system loader, though: without libvulkan1 lilbee treats the machine as CPU-only. Most desktop distros (Ubuntu 22.04+, Pop!_OS, Mint) ship it; on bare Arch / Fedora / Alpine images install it once: sudo pacman -S vulkan-icd-loader (Arch / Manjaro), sudo dnf install vulkan-loader (Fedora, RHEL), or sudo apt-get install libvulkan1 (Debian, Ubuntu).

Optional extras

These only matter for a pip or uv install: add the name in brackets, e.g. pip install --pre 'lilbee[engine,crawler,litellm]' (combine multiple, and --extra-index-url still works). The standalone binary and the Homebrew / AUR / Nix / Docker / Flatpak / Snap builds already include all four, which is why they need none of this. [engine] is the one that is not really optional; lilbee works fine without the other three. See the install commands in the usage guide for any uv install that has crawler in the extras list.

Extra

What it adds

[engine]

The bundled llama-server that runs your models. Published on lilbee.sh rather than PyPI, so it needs the --extra-index-url for your hardware; without it nothing can load a model.

[crawler]

Index websites alongside your files: crawl a docs site or wiki to markdown, then search it offline.

[litellm]

Bridge to hosted model providers for chat, vision, or embeddings while other roles stay local. The TUI flags when a hosted role is active.

[graph]

Concept-graph search: extracts the ideas in your documents and uses how they relate to surface matches plain keyword search misses. No extra model calls.

See the full guide on optional extras for configuration.

Developer install: pip and uv

For working on lilbee, or importing it as a library into an environment you manage. Everything below needs the [engine] extra and its index; the bundled builds above do not.

How

Command

Notes

pip

pip install --pre 'lilbee[engine]' --extra-index-url https://lilbee.sh/cpu/

Python 3.11 to 3.14. Runs on any x86_64 CPU with AVX2 (2013+; older CPUs: On older CPUs). Swap the index for your hardware, below.

uv

uv tool install --prerelease=allow 'lilbee[engine]' --extra-index-url https://lilbee.sh/cpu/

Same wheels as pip; fetches a Python for you if you need one.

From source

git clone https://github.com/tobocop2/lilbee && cd lilbee && uv sync && uv run lilbee

Needs git and uv. uv sync resolves the in-repo engine package, but CI is what fills its bin/, so a checkout has no engine binaries: install the [engine] extra from the index below, or point LILBEE_LLAMA_SERVER_PATH at your own llama-server.

The engine. llama-server runs every model, and it ships as the [engine] extra rather than as part of lilbee. It is not on PyPI: the CUDA and ROCm wheels run 444 MiB to 863 MiB each, several times PyPI's default 100 MiB per-file limit, so every backend is published from lilbee's own PEP 503 package index at lilbee.sh. That is what --extra-index-url is for, and the index you pick is the build you get: cpu is compiled with every GPU backend off, metal publishes only a macOS arm64 wheel, vulkan only Linux and Windows ones.

Hardware

Index

Command

NVIDIA (CUDA)

cu125

pip install --pre 'lilbee[engine]' --extra-index-url https://lilbee.sh/cu125/

AMD (ROCm)

rocm

pip install --pre 'lilbee[engine]' --extra-index-url https://lilbee.sh/rocm/

Apple silicon

metal

pip install --pre 'lilbee[engine]' --extra-index-url https://lilbee.sh/metal/

Other GPUs

vulkan

pip install --pre 'lilbee[engine]' --extra-index-url https://lilbee.sh/vulkan/

No GPU

cpu

pip install --pre 'lilbee[engine]' --extra-index-url https://lilbee.sh/cpu/

Leave the extra off and lilbee still installs and starts. The first thing that needs a model then fails with an error naming the engine and repeating the command for your hardware, so it is recoverable rather than mysterious, but it is a step you have to take.

Hardware requirements

Standalone mode needs nothing but your machine. No cloud required. Minimum: Apple Silicon Mac, or a 64-bit Intel/AMD CPU from 2013+ (older CPUs: On older CPUs), or an ARMv8 Linux box; 8 GB RAM, 2 GB disk.

Platform

Minimum

Recommended

macOS arm64

Apple Silicon (M1 or newer), macOS 11+

M-series Pro / Max / Ultra

macOS x86_64

Intel Mac with AVX (Ivy Bridge or newer), macOS 12+

Quad-core Intel with 16+ GB RAM

Linux x86_64

64-bit Intel/AMD from 2013+ (x86-64-v3)

Modern Intel/AMD CPU + an NVIDIA, AMD, or Intel Arc GPU

Windows x86_64

64-bit Intel/AMD from 2013+ (x86-64-v3), Windows 10/11

Modern desktop / workstation CPU + GPU

Linux ARM64

ARMv8 NEON-capable (Raspberry Pi 4+, AWS Graviton, Ampere Altra)

Modern ARM server with 16+ GB RAM

Resource

Minimum

Recommended

RAM

8 GB

16 to 32 GB to keep several local models warm at once (chat + embed + rerank + vision); actual footprint scales with the sizes and quantizations you pick

GPU / Accelerator

none required (CPU-only works)

Apple Silicon (Metal) · NVIDIA / AMD / Intel Arc (Vulkan) · faster vendor builds with the runtime bundled: CUDA on NVIDIA, ROCm on AMD (see Install)

Disk

2 GB

10+ GB for multiple models

Quick start

Two recommended ways to use lilbee, depending on whether you're the one driving:

  • Run lilbee for the full-screen terminal app. On first run you pick a chat model straight from the catalog, fit-checked against your hardware, then you index files, search, and chat without leaving the TUI. The Settings screen exposes every retrieval knob (search depth, distance threshold, reranker, chunking) so you can tune lilbee to your library shape.

  • Connect it to your agent over MCP. Any MCP-aware coding agent calls lilbee_search / lilbee_add and gets back cited snippets it can quote. Agents can also fine-tune lilbee on the fly via lilbee_settings_set. Drop in the lilbee-mcp skill and the agent reads the full surface: every tool, every retrieval knob, and when to widen for prose vs narrow for code. See A reference for AI agents.

Retrieval defaults are sane, and every setting is tunable from env vars or config.toml, most of them from the TUI, MCP, and the HTTP API too; the settings reference has a column per surface. The CLI and HTTP API cover scripting and headless runs. See the usage guide.

Highlights

  • Private by default. The models, the index, and every question and answer stay on your machine. No telemetry, no account. lilbee contacts a cloud provider only when you set its API key: once to check the key, then only for a cloud model you pick.

  • Answers cite the source line. Click a citation, jump to the file at the exact line; when the answer isn't in your library, lilbee says so instead of inventing one.

  • It works, and the demos prove it. Every GIF and reel here is recorded live on real hardware, nothing staged, backed by 100% test coverage, full typing, and CI on macOS, Linux, and Windows.

  • One command to running. Install, run lilbee, pick a model that fits your machine from the catalog, and you're chatting.

  • Reads almost anything: 90+ formats and 150+ languages across documents, scanned pages, spreadsheets, ebooks, web pages, and source code.

  • Chunks that stand on their own. Prose and code are split differently so each piece keeps its meaning, which is where most of the retrieval quality lives.

  • A real search engine on top, ranking every result by how well it answers you, with 50+ tunable knobs and sane defaults.

  • It brings and runs the models itself, on Metal, Vulkan, or CUDA, with no server to point at and no cloud account. Browse Hugging Face, pull a model, give it a role (chat, embedding, vision, rerank).

  • A model too big for one card runs across all of them, sized with gguf-parser and tensor-split automatically, or pinned by hand. Run a model bigger than one card.

  • Already on Ollama or LM Studio? Keep them. lilbee's own manager covers the same architectures they run, and their models also show up in the same pickers.

  • One install, many surfaces: TUI, CLI, MCP server, REST API, and Python library, so your coding agent answers from your real files, with citations.

  • Everything in one file, nothing to operate. The binary bundles the whole stack (search engine, crawler, MCP + HTTP servers, TUI, Python, llama.cpp) in ~360-530 MB, or ~0.7-1.3 GB with CUDA; it loads on demand and nothing stays running.

  • Per-project libraries. One library for everything, or one per project.

Why lilbee

A small local model is fun, but limited on its own. Give it properly processed documents and a search engine over them, and it becomes genuinely powerful. Without those, it never gets past novelty.

lilbee does all of it in one install: it runs the models, processes your documents, crawls the web pages you point it at, and searches the lot with a real engine. The same engine works two ways:

  • An Encarta 99 over your own files. Build a library from your documents and saved web pages, then read it and ask questions of it in the terminal.

  • A reference layer for code. Point it at your project, dependencies, and API docs, and your coding agent answers from what's actually there, with file:line citations, instead of guessing function names.

The long-term goal: make local AI genuinely useful on hardware you already own, with no token budgets, no provider to depend on, and nothing about your files leaving your machine; the cloud's there only when you want it.

How lilbee compares

lilbee is built for consumer hardware and for people who don't want to babysit infrastructure. It isn't another model server you point an app at; it's a local search engine with the model runner built in. One install gives you the whole stack in a single executable:

  • A search engine over your files, with answers that cite the source line, not just a model to chat with.

  • A managed fleet, chat, embedding, vision, and reranking, spread across every GPU in the machine behind a load-balancing router, not one model loaded at a time.

  • Everything bundled: model manager, search engine, web crawler, MCP server for coding agents (native opencode and hermes), HTTP server, TUI, and Python, in one file.

It sits between two worlds: the desktop runners that get a model chatting on your machine (Ollama, LM Studio), and vLLM, the server you stand up to push one model to a cluster of users. lilbee runs models to do retrieval over your files, and places that whole stack across the GPUs in the machine.

Full comparison table

lilbee

LM Studio

Ollama

vLLM

Primary focus

local search, chat, and serving across your GPUs

desktop app to run and chat with models

local model runner with a growing ecosystem

high-throughput GPU serving

Runs local models

✓

✓

✓

✓

Search your own files, with citations

✓ full RAG pipeline, inline per-line citations

per-session doc attachment (RAG, document-level citation)

—

—

Chat, embedding, vision, rerank as one managed fleet

✓ all four, coordinated

chat, embed, vision (no rerank), loaded individually

chat, embed, vision (no rerank), loaded individually

each supported, but one model per server

Multi-GPU model placement

✓ VRAM-aware tensor-split

✓ GPU selection + tensor parallelism (CUDA)

✓ auto multi-GPU offload

✓ tensor + pipeline parallel

Indexing spread across every GPU

✓ an embedding and OCR replica per GPU, load-balanced

—

—

—

Web crawler built in

✓ built in

—

—

—

Long-term memory (opt-in)

✓ opt-in

—

—

—

Interfaces

TUI, CLI, MCP, REST, Python, Obsidian GUI

desktop GUI, lms CLI, Python + TS SDKs, REST API, MCP client

desktop GUI, CLI, REST API, Python/JS libs

API server

Use your existing Ollama / LM Studio / cloud as a backend

✓ how

—

—

—

Of the four, lilbee is the only one built around retrieval. It places chat, embedding, vision, and reranking together across the GPUs in the machine, and spreads indexing across every card.

Install size (single-file download, models excluded)

Download sizes in decimal GB/MB (bytes ÷ 1000), measured from each project's own release artifacts, linked. lilbee and Ollama measured 2026-07-25 from their release APIs (lilbee v0.6.90b420.dev726, Ollama v0.32.4).

macOS

Windows

Linux

What you get

lilbee (Metal / Vulkan, default)

317 MB

333 MB

478 MB

the whole stack: search engine, crawler, servers, TUI, model runner, fleet manager

lilbee (CUDA, opt-in for NVIDIA)

n/a

666 MB

1.25 GB

the same whole stack, with the faster CUDA runtime

lilbee (ROCm, opt-in for AMD)

n/a

n/a

854 MB*

the same whole stack, with the faster ROCm runtime

Ollama

181 MB

1.56 GB (CUDA bundled)

1.42 GB (CUDA bundled)

a model runner, fetches its runtimes separately

LM Studio

569 MB

617 MB

1.10 GB

a desktop app (Electron)

vLLM

n/a

n/a

multi-GB

a Python + CUDA serving engine

Even lilbee's CUDA build stays under Ollama's, and it's the whole stack, not just a model runner.

* ROCm is the one figure not yet from a release: it is the binary CI builds today, measured, and lands here unchanged at the first release that carries it.

Already on Ollama or LM Studio? lilbee runs on top of them. Prefer a GUI to the terminal? The Obsidian plugin maps lilbee's model manager and search to a visual interface inside your vault.

First start

The very first launch does one-time work: a bundled build unpacks itself behind a progress bar, and the model loads before your first answer, shown live inside the answer bubble. Every launch after that opens straight to chat in a couple of seconds.

Very first launch

Every launch after

Measured with a small chat model (Qwen3 0.6B):

Very first launch

Every launch after

Chat on screen

15 to 20s, one-time unpack

2 to 3s

First answer of the session

10 to 20s, the engine load plays in the bubble

the same, or instant with Keep engine warm inside the idle window

Answers after that

model speed

model speed

Bigger models load longer; the bubble shows real progress while the weights load. The usage guide explains the engine lifecycle and how to keep the engine warm so relaunches skip the load.

What you can do with it

A library of your own files

Point lilbee at a folder of PDFs, notes, ebooks, or code and it builds a searchable library, with citations that click back to the source line. The pattern works for anything you have a lot of text about: a shelf of appliance manuals, a field's research papers, a car's service manuals, your company's internal wiki. Whatever you give it becomes searchable, and you can talk to it.

https://github.com/user-attachments/assets/73903a5c-9c0a-42a8-9ffd-bdf34f719c29

Ask it something with a real answer at stake and you get the answer, not a paraphrase of the question. Here it reads the towing section out of a car manual and answers with the page it came from, so you can check it. The panel on the right is the GPU doing it, on this machine.

https://github.com/user-attachments/assets/284c316c-85f8-46d1-9531-59476f0db9f7

Offline copies of websites

Install the [crawler] extra, point lilbee at a docs site, a wiki, or a vendor's API reference, and the pages get fetched, converted to markdown, and added to your library. From then on you can search or chat with that copy of the site offline, even after it changes or goes down.

https://github.com/user-attachments/assets/8380c49b-cc65-43ae-83d4-ba9e3aa84af4

Or crawl a whole site, not just one page. With recursive crawling on, lilbee follows the links and indexes the lot; watch the page count climb in the Task Center, then ask one question that synthesizes across the whole site.

https://github.com/user-attachments/assets/0c7fbed2-9b40-4976-9856-1720c4f9ffb0

Documents, code, and scanned images

lilbee splits indexing by what's being read:

  • Prose and structured documents (PDFs, Office files, ebooks, HTML, 90+ formats) go through Xberg with heading-aware chunking, so each chunk keeps its section context.

  • Code goes through tree-sitter's AST-aware splitter across 150+ languages, so chunks map to functions, classes, and modules instead of arbitrary line ranges.

  • Scanned PDFs and photos go through OCR in 100+ languages: Tesseract for plain text (set LILBEE_OCR_LANGUAGE, e.g. eng+deu), or a local / remote vision model that keeps tables and layout as markdown.

Retrieval returns things that make sense on their own, not fragments cut through an argument or a function signature.

Pick and tune your models

You install and switch chat, embedding, vision, and reranking models from inside the terminal: browse the catalog, pull a model, pick a role. Retrieval and generation expose 50+ settings (chunk size, search strictness, reranker depth, and more), editable from the TUI, env vars, or a project-local config file. Sane defaults.

Tested GPUs and backends

Placement reads what the engine reports about your hardware, and every backend words that differently, so lilbee checks each backend on real silicon rather than inferring it from the last one. CUDA from an RTX 3090 up to H200, and up to eight A100s at once, Vulkan on NVIDIA and Intel, ROCm on an AMD Instinct MI300X, Metal on Apple Silicon, and a CPU-only host. docs/tested-gpus.md lists every machine and what each run settled. Send captures from hardware the table does not list.

Supported models

lilbee's engine is llama.cpp, so lilbee runs what llama.cpp runs: any GGUF model built on one of the architectures below. The list comes from the bundled engine itself and grows with every engine update.

afmoe

apertus

arcee

arctic

arwkv7

baichuan

bailingmoe

bailingmoe2

bailingmoe3

beam

bert

bitnet

bloom

chameleon

chatglm

clef

clip

codeshell

cogvlm

cohere2

cohere2moe

command-r

dbrx

deci

deepseek

deepseek2

deepseek2-ocr

deepseek32

deepseek4

dflash

dots1

dots3note

dream

eagle3

ernie4_5

ernie4_5-moe

eurobert

exaone

exaone-moe

exaone4

falcon

falcon-h1

gemma

gemma-embedding

gemma-embedding2

gemma2

gemma3

gemma3n

gemma4

gemma4-assistant

glm-dsa

glm4

glm4moe

glm5-next

gpt-oss

gpt2

gptj

gptneox

granite

granite_swa

granitehybrid

granitemoe

graniteswitch

grok

grovemoe

hrm_text

hunyuan-dense

hunyuan-moe

hunyuan_vl

hy_v3

hy_v4

internlm2

jais

jais2

jamba

jina-bert-v2

jina-bert-v3

k2-horizon

kimi-k3

kimi-linear

kolibri1

laguna

lfm2

lfm2moe

llada

llada-moe

llama

llama-embed

llama4

maincoder

maion-coder

mamba

mamba2

maple

mellum

mimo2

minicpm

minicpm3

minimax-01

minimax-m2

minimax-m3

mistral3

mistral4

modern-bert

mpt

muse-glimmer

muse-spark

nanbeige

nemotron

nemotron_h

nemotron_h_moe

neo-bert

nomic-bert

nomic-bert-moe

olmo

olmo2

olmoe

openelm

orion

paddleocr

pangu-embedded

phi2

phi3

phimoe

plamo

plamo2

plamo3

plm

pockettts

qwen

qwen2

qwen2moe

qwen2vl

qwen3

qwen35

qwen35moe

qwen3moe

qwen3next

qwen3tts

qwen3vl

qwen3vlmoe

qwen4exp

refact

rnd1

rwkv6

rwkv6qwen2

rwkv7

seed_oss

smallthinker

smollm3

spark2_5

stablelm

starcoder

starcoder2

step35

t5

t5encoder

talkie

vllm-decision2

wavtokenizer-dec

xverse

One representative per family also runs the full pipeline end to end on real GPUs -- the models, method, and results are in docs/tested-models.md.

https://github.com/user-attachments/assets/993a63d4-9468-4a55-b9ed-e4b1ae1ed235

Already running Ollama or LM Studio? Keep them.

Watch it: Ollama as the model manager and LM Studio as the model manager. Point lilbee at a running manager, index a PDF on camera, and get a cited answer back.

lilbee works with Ollama and LM Studio. Finding and running models for you is the default and simplest path (lilbee pulls them and runs them on Metal / Vulkan / CUDA, no server to stand up), but you don't have to adopt a new model manager to use lilbee.

  • Point it at a running manager. Your models in Ollama or LM Studio show up in the same catalog and role pickers (chat, embedding, vision, rerank), labeled by where they run, alongside lilbee's own and any cloud models. Mix freely.

  • They stay read-only. lilbee lists and runs them but never pulls or deletes them, so their lifecycle stays in the app you already use.

  • On pip / uv, this needs the [litellm] extra (pip install --pre 'lilbee[litellm]'); the Homebrew, AUR, Nix, Docker, Flatpak, and Snap builds already include it. See Install.

Both reels run chat and embedding on the other manager's models, picked out of the catalog's Library tab where each row names the server it runs on.

https://github.com/user-attachments/assets/52635a74-b69f-42df-b427-3c8f8499323f

https://github.com/user-attachments/assets/13ec8b12-f931-46ac-a500-8a7940d1a2bd

See when a model won't load before you download it

Hugging Face has thousands of GGUFs, but the bundled llama.cpp only supports a subset of architectures and brand-new ones take time to reach the pinned runtime. lilbee tags incompatible models in the catalog and refuses the download (with an override confirm), so you don't wait through a multi-GB pull only to hit "unsupported architecture" at load.

https://github.com/user-attachments/assets/b42effc3-a7f6-4391-904c-3ac897712172

Cloud models, when you want them

lilbee runs entirely on your machine until you set a cloud provider's API key. Two ways to use a cloud model when you want one:

  • Bring your own key. Install the [litellm] extra, add an API key, then point any role (chat, embedding, vision, rerank) at a cloud model from the same catalog. The TUI shows a warning the whole time a cloud model is on.

  • Pair lilbee with a cloud agent over MCP. Your files, the embeddings, and the index stay local. Any MCP-aware agent calls lilbee_search / lilbee_add and gets back cited snippets.

Either way, your files and the index stay on your computer. Only what you ask and the snippets needed to answer it get sent to the cloud model.

Agents

lilbee serves your coding agents two ways, both local: it runs the models they talk to, and it answers their searches with cited snippets from your library.

Launch your coding agent on local models

lilbee launch opencode, lilbee launch hermes, and lilbee launch claude set up lilbee's local models in your agent in one command. For opencode and hermes, lilbee registers itself as a provider and an MCP server in the agent's own config and leaves your existing setup intact; for Claude Code, lilbee serves an Anthropic-compatible API and points the session at it by env, without touching Claude Code's settings. Each launch warms a model and opens the agent pointed at it. No API keys, no provider setup, and nothing leaves your machine, except a check of any provider API key you have set. Tool-calling works across many GGUF families; docs/agent-models.md has the verified list and how the QA harness measures it.

One model serves as many agents as you want to run. These reels show four working at once against a single local model, each in its own worktree, reading and searching this repository through lilbee.

https://github.com/user-attachments/assets/5f3fd1a4-f946-4008-bfd8-600142785327

Qwen3 Coder Next, 45GB across three RTX 4090s: four agents on one model, 138 tokens a second warm.

https://github.com/user-attachments/assets/510a1691-4289-4d98-b749-7522c1f28559

Gemma 4 26B is a thinking model, and lilbee streams its reasoning as visible text: every pane shows the model working through the problem before it answers.

https://github.com/user-attachments/assets/06dbf829-1e1e-4a1f-9ca2-32aa65086f13

Qwen3.6 27B on the same four tasks: each agent states what it expects, then reads the code to check itself.

https://github.com/user-attachments/assets/46ce5440-ee9d-4420-a881-031a1ccccec8

And the same setup scales up: Devstral 2 123B, 70GB across two A100 80GB cards, one agent at the model's full 14 tokens a second.

It tunes itself, too. Tell a small local model to widen lilbee's search when a first result comes back thin, and the second pass returns full function bodies with file:line citations; a more capable model does the same from a prompt like "improve your search results." The lilbee-mcp skill teaches your own model the pattern.

https://github.com/user-attachments/assets/7bfec600-4c06-4a2f-8f77-be7e92f4f33f

A reference for AI agents

Once configured, lilbee plugs into whatever agent you use, over MCP. Feed it your project's docs, your dependency source, your API docs, your design notes; the agent stops making up function names and instead reads the actual code, cites file and line, and says it doesn't know when the answer isn't in your library. The lilbee-mcp skill is the single entry point: drop it into .opencode/skills/ or .claude/skills/ and it documents every tool, the workflows the agent should follow, and points to drop-in AGENTS.md and worker-subagent starters under examples/agent-integration/. This works with cloud-model agents too; lilbee stays local, and only the queries and the returned chunks reach the model.

Your files, the search index, and the embeddings stay on your computer. The agent calls lilbee_search and gets back cited snippets with file and line. The agent reels above show this live: each pane reads and searches this repository through lilbee.

Run a model bigger than one card

When a chat model won't fit on a single GPU, lilbee spreads it across the ones you have. It sizes each role's memory with gguf-parser, keeps headroom on every card, and tensor-splits the chat model across the fewest GPUs that fit, with the embedder, reranker, and vision models placed alongside it behind a load-balancing router. This is automatic: ask a question and the model loads split across your cards, answering from your own indexed source. Here a 70B is spread across three consumer cards and answers a mechanic's question from an indexed car manual, citing the page it came from.

https://github.com/user-attachments/assets/2a2232e6-d8ce-4302-92e4-6467f4fb1bee

You can also place it by hand. The placement editor pins each role to the cards you choose, previews the fit before anything loads, and applies it live. Ask for a layout that can't fit and it tells you the exact shortfall instead of failing at load time.

TUI

lilbee (no args) launches a full Textual terminal app: streaming chat with clickable citations, a model bar with searchable pickers and a Search/Chat toggle, a Task Center for background jobs, and screens for the model catalog, settings, and the generated wiki. Type / for the command list; tab completion works everywhere.

https://github.com/user-attachments/assets/ab4c5847-2261-421d-91a0-e3838498901c

Ctrl+P opens the Textual command palette, ? on an empty prompt (or F1 anywhere) toggles the keybinding cheat sheet, /help opens the slash-command catalog. Every action lilbee can take is reachable from one of those three.

https://github.com/user-attachments/assets/7c4f1096-44a4-40b5-b511-0f6496c520c5

Conversations are kept. Reopen an earlier one and it comes back with its history and citations intact.

Fork a conversation after any answer to try a different follow-up. The fork keeps the messages up to and including that answer, and the original stays as it was. Use /fork in the chat, or lilbee sessions fork on the command line. Export a conversation as a markdown document with its sources. Use /export-chat in the chat, or lilbee sessions export on the command line. Both also work over HTTP. See Sessions in the usage guide for the full command set.

https://github.com/user-attachments/assets/3ee7fb50-b983-4761-807c-2f024bbc3756

Tell it something about yourself and it remembers, across conversations rather than only within one.

https://github.com/user-attachments/assets/08a69c31-d74f-4e0a-97b6-340dc195848c

Every setting is editable in the app, and the first run opens the model catalog to get you started.

https://github.com/user-attachments/assets/a578dfd1-61a5-4008-b9bf-e94539003b6e

https://github.com/user-attachments/assets/702975d8-5c1f-4fa7-92a6-bf594ef9d2e3

Every reel on this page (plus the extras that don't fit here) is at lilbee.sh/tutorial with long-form captions. Tape sources are in demos-src/ on the gh-pages branch. For commands and settings, see the usage guide.

HTTP Server

The HTTP server exposes a REST API any tool or GUI can hit: search (with SSE streaming), document lifecycle, crawling, model management, configuration. See the REST API reference and the usage guide for setup.

The Obsidian plugin is a GUI built on it: it starts the HTTP server in the background, and every citation opens a Source Preview scrolled to the exact spot. It is an official Obsidian community plugin: install it from Settings then Community plugins inside Obsidian. The plugin README has setup.

Running as a service (optional)

For tools that talk to lilbee's HTTP REST API (the Obsidian plugin, custom GUIs, anything hitting /api/*), your OS launcher can keep the HTTP server warm so requests skip the cold-start.

This is the only lilbee surface that benefits from a daemon. The TUI, lilbee chat, the MCP server, and the rest of the CLI load on demand and exit when you close them. No always-on process to babysit.

Pull a chat and embedding model first; all recipes pin the server to 127.0.0.1:42697.

Platform

Command

macOS (Homebrew)

brew services start lilbee

Linux (Arch / AUR)

systemctl --user enable --now lilbee (add loginctl enable-linger $USER on headless servers)

NixOS

Import lilbee.nixosModules.lilbee, set services.lilbee.enable = true;

Supported formats

Document extraction powered by Xberg, code chunking by tree-sitter. lilbee handles every format Xberg can extract (100+) and tracks its list directly, so support grows as Xberg adds formats. The table below covers the common ones.

lilbee ingests 126 file extensions through Xberg and 306 programming languages through tree-sitter.

Format

Extensions

Requires

PDF

.pdf

none; scanned pages need Tesseract or a vision model

Office

.doc, .docm, .docx, .dot, .dotm, .dotx, .fodg, .hwp, .hwpx, .key, .numbers, .odp, .ods, .odt, .pages, .pot, .potm, .potx, .pps, .ppsx, .ppt, .pptm, .pptx, .rtf, .wp, .wp5, .wp6, .wpd, .xla, .xlam, .xls, .xlsb, .xlsm, .xlsx, .xlt, .xltm, .xltx

none

eBook

.epub, .fb2

none

Images (OCR)

.avcs, .avif, .bmp, .gif, .heic, .heics, .heif, .heifs, .hif, .j2c, .j2k, .jb2, .jbig2, .jp2, .jpc, .jpeg, .jpg, .jpg2, .pbm, .pgm, .png, .pnm, .ppm, .tif, .tiff, .webp

Tesseract or a vision model

Notebooks

.ipynb, .qmd, .rmd

none

Bibliographies

.bib, .enw, .nbib, .ris

none

Email

.eml, .msg, .pst

none

Data

.csv, .db, .dbf, .geojson, .gpkg, .gpkx, .json, .jsonl, .kml, .ndjson, .sqlite, .sqlite3, .toml, .tsv, .xml, .yaml, .yml

none

Text and markup

.adoc, .asciidoc, .commonmark, .dbk, .dj, .djot, .docbook, .docbook4, .docbook5, .doctags, .htm, .html, .jats, .latex, .markdown, .md, .mdx, .nxml, .opml, .org, .rst, .tex, .txt, .typ, .typst, .vtt, .xht, .xhtml

none

Archives

.7z, .gz, .tar, .tgz, .zip (each file inside is indexed as its own document, named archive.zip/file.pdf)

none

Code

.py, .js, .ts, .go, .rs, .java, .c, .cpp, .rb and 306 languages via tree-sitter (AST-aware chunking)

none

See the usage guide for OCR setup.

Wiki

lilbee reads the documents you've indexed and writes a wiki about them: one page per concept or entity, not per document. A subject that recurs earns its own page, written and cited from the source that mentions it most and cross-linked with [[wiki link]], with coverage across sources coming from synthesis pages. Every section is citation-verified against the source text before it publishes; lower-confidence pages wait in a drafts/ queue for review.

Pages are written on demand: open one that does not exist yet and lilbee writes it from the sources it has, then links it into the rest.

https://github.com/user-attachments/assets/3ba1478e-86b0-4a90-aba1-99384b4f92fb

See the usage guide for commands and configuration, and how the wiki is validated for the evidence behind it.

Other projects generate wiki-style pages too; they differ in what they read, where they run, and what happens between generation and publication.

Capability

lilbee wiki

STORM

GraphRAG

DeepWiki-Open

Builds a wiki from your own private documents (PDFs, notes)

✓

partial¹

✓

— (code repos)²

Runs fully local, no cloud account required

✓

✓

✓³

✓ (Ollama)

Every generated claim carries a citation with a quoted excerpt

✓⁴

—

—

—⁵

Citations mechanically verified against the source text before publishing

✓

—

—

—

Quality gate (faithfulness score) that quarantines failing pages

✓

—

—

—

Human review queue for gated pages: diff, accept, reject

✓

—

—

—

Detects stale citations when a source document changes

✓

—

—⁶

—

Archives pages when their sources are deleted

✓

—

—

—

Drift protection: a rewrite above threshold never silently replaces a reviewed page

✓

—

—

—

Wiki pages feed back into search alongside your documents

✓

—

✓

—

Never generates without an explicit action (auto-update strictly opt-in)

✓

n/a

n/a

n/a

Multi-perspective research and outline planning before writing

—

✓

—

partial⁷

Entity relationship graph with hierarchical topic communities

partial⁸

—

✓

—

Researches topics on the live web while writing

—

✓

—

—

Web UI (self-hosted)

—

✓ (demo)

—

✓

¹ STORM's retrievers are web search engines; its VectorRM grounds on a custom corpus, but documents must be pre-converted to CSV and indexed into Qdrant. No PDF or note ingestion in the repo. ² A local folder of .md/.txt files works via repo_type=local, but there is no PDF support and the prompts assume a codebase. ³ Any OpenAI-compatible local endpoint works; the config validator requires a placeholder api_key value. ⁴ Claims are cited with quoted excerpts or explicitly marked [*inference*]; lint flags any unmarked claim. ⁵ The page prompt instructs per-claim file:line citations, but nothing verifies them and no excerpt is quoted. ⁶ Incremental indexing exists, but old community reports are kept verbatim; nothing flags a stale page. ⁷ An LLM structure-planning step produces the page outline before writing; no multi-perspective research. ⁸ lilbee's optional [graph] extra builds a concept co-occurrence graph (PMI-weighted) with flat Leiden communities, usable as the wiki synthesis clusterer; no typed entity relations or hierarchical communities.

Built on

lilbee stands on a stack of established open-source projects, all bundled into one install:

  • Xberg parses 90+ document formats with heading-aware chunking.

  • llama.cpp is the local model runtime: lilbee bundles its llama-server and starts it for you, so every chat, embedding, vision, and reranker call goes through it. llama-swap keeps a server per role resident together behind one endpoint, and gguf-parser estimates each model's memory footprint so lilbee loads what fits. Without llama.cpp there is no lilbee.

  • Hugging Face Hub (via huggingface_hub) hosts the model catalog and handles every download. Search, browse, and pull all route through it.

  • LanceDB is the embedded vector store.

  • tree-sitter (via tree-sitter-language-pack) chunks code across 150+ languages.

  • crawl4ai and Playwright crawl the web; Tesseract is the OCR fallback when no vision model is set.

  • LiteLLM bridges cloud model providers (the [litellm] optional extra).

  • Textual draws the terminal; Litestar runs the HTTP server.

  • MCP Python SDK is the agent surface; Typer is the CLI; Pydantic is the config + validation backbone.

  • Nuitka compiles the whole thing into the standalone single-file binary, bundling its own Python runtime so there is nothing to install and nothing to compile.

FAQ

Does my data leave my machine? No. Your files stay on disk and search runs locally. A cloud model is used only when you pick one.

Will a model fit my GPU? lilbee reads the GGUF file and your devices and estimates fit before you download, and splits large models across multiple GPUs. More at lilbee.sh/gpu.

Can my coding agent use it? Yes, over MCP. The agent reads your real code and docs before answering, cited to the file and line. More at lilbee.sh/mcp.

Support

Having trouble? See TROUBLESHOOTING.md for log locations and common failures.

lilbee is built and maintained by one person. If it is useful to you, you can chip in via PayPal. Bug reports and pull requests help just as much.

License

MIT. See LICENSE.

Available Tools

29 tools
addA

Add files, directories, or URLs to the knowledge base, then sync. Paths are absolute and resolve on the machine running lilbee, not the caller's when the server is remote. URLs are fetched as single pages; use crawl for sites.

ParametersJSON Schema
NameRequiredDescriptionDefault
ocrNoWhich pages OCR reads.
forceNo
pathsYes
ocr_timeoutNo
render_modeNoHow a crawl fetches pages. ``http`` uses no browser; ``browser`` runs Chromium with JS.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose real behavior: the add is followed by a sync, paths are absolute and resolve on the lilbee host rather than the caller (critical for remote servers), and URLs are single-page fetches. It does not cover duplicate handling, idempotency, or what happens on partial failure, which matters for a mutating tool.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the action, then the path-resolution caveat, then the sibling pointer. Every sentence earns its place and nothing is repeated from the schema.

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

Completeness3/5

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

An output schema exists, so return values need not be explained. For a mutation tool with five parameters and no annotations, however, the description leaves gaps around duplicate/overwrite behavior and two undocumented parameters, making it adequate but not fully self-sufficient.

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

Parameters2/5

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

Schema description coverage is only 40%, so the description must compensate, and it only explains `paths` (absolute, server-side resolution) plus URL behavior. `force` and `ocr_timeout` are undocumented in both places, and `ocr`/`render_mode` get no elaboration beyond their enum descriptions.

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

Purpose5/5

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

States a specific verb and resource set (files, directories, URLs into the knowledge base) and pairs it with the implicit follow-up action (sync). It also explicitly distinguishes itself from the sibling `crawl`, so an agent can route between the two without inspecting either schema.

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

Usage Guidelines4/5

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

Gives clear routing guidance: URLs are fetched as single pages, and `crawl` is named for whole sites. That covers the main ambiguity for this tool. It stops short of explicit exclusions against other ingestion siblings such as `import_dataset` or `init`, so it is clear context rather than complete when/when-not guidance.

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

catalog_browseB

Browse the model catalog. task: chat/embedding/vision/rerank. size: small/medium/large/huge, by parameter count. max_fit: fits/tight/wont_run, worst fit to keep. sort: featured/downloads/name/size_asc/size_desc.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNo
sortNo
taskNo
limitNo
offsetNo
searchNo
max_fitNo
featuredNo
installedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It explains the meaning of enum-like values (e.g., max_fit: fits/tight/wont_run) but does not disclose pagination behavior, default sort, whether 'featured' and 'installed' are filters or flags, or what the response contains. The output schema exists but the description itself adds little behavioral context beyond value semantics.

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 compact and front-loads the main purpose in the first sentence, then uses a terse key: value format for parameter semantics. It is efficient, though the formatting is slightly telegraphic and could be clearer with a short sentence about how filters combine.

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 browse tool with no annotations and 0% schema coverage, the description covers the core filter dimensions but leaves limit, offset, search, featured, and installed unexplained. The output schema exists, so return values are partially covered, but an agent would still be guessing about pagination and filter semantics. This is a minimally viable description with 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 0%, so the description must compensate. It does add meaning for four parameters (task, size, max_fit, sort) by listing allowed values, which is genuinely useful. However, five parameters (limit, offset, search, featured, installed) are left entirely undocumented, and the description does not explain how the parameters combine, so the compensation is only partial.

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 ('Browse the model catalog') and enumerates the key filter dimensions (task, size, max_fit, sort), which distinguishes it from sibling tools like model_list and model_show. However, it does not explicitly contrast itself with those siblings, so it loses a point for not naming the alternative.

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

Usage Guidelines3/5

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

The description implies usage by listing the filter dimensions and their allowed values, giving an agent a sense of how to narrow a catalog browse. It does not state when to prefer this over model_list or model_show, nor does it mention any exclusions or prerequisites, so the guidance is only implicit.

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

clear_placementA

Clear the manual placement and return to automatic placement.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It only states the basic action without mentioning side effects, reversibility, or error conditions.

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

Conciseness5/5

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

The description is a single, minimal sentence that conveys the core purpose without unnecessary words.

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 simple tool with no parameters and an output schema, the description is mostly complete but lacks context on prerequisites or result details.

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?

No parameters exist, so baseline score of 4 applies; no additional parameter description needed.

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

Purpose5/5

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

The description clearly states the action (clear) and the resource (manual placement), and distinguishes it from siblings like preview_placement.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like add or remove, nor any prerequisites or contexts.

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

crawlB

Start a non-blocking crawl; poll via crawl_status(task_id). depth=0 (default) = single URL, N = follow links N levels, null = whole site. render_mode: "http"/"browser".

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
depthNo
max_pagesNo
render_modeNoHow a crawl fetches pages. ``http`` uses no browser; ``browser`` runs Chromium with JS.
include_subdomainsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, and it does disclose the key behavioral trait: the crawl is non-blocking and results must be polled via crawl_status. However, it omits other important behaviors such as default max_pages, whether include_subdomains affects scope, rate limiting, or any permission requirements.

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

Conciseness4/5

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

Dense but front-loaded: the non-blocking nature and polling path come first, followed by parameter shorthand. Every clause carries information, though the backtick-heavy telegraphic style trades some readability for compactness.

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?

Since an output schema exists, return-value detail is unnecessary, and the async polling model is covered. The gap is on the input side: two of five parameters have no semantics anywhere, and there is no indication of crawl scope limits or failure behavior.

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 only 20%, so the description must compensate. It usefully explains depth values including the null = whole-site case, which contradicts the schema's integer type and would otherwise be undiscoverable. But max_pages and include_subdomains remain undocumented in both the schema and the description, and the render_mode explanation merely repeats the schema text.

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 ('Start a non-blocking crawl') and the non-blocking qualifier immediately sets it apart from the synchronous siblings. It also names the follow-up tool crawl_status(task_id), making the crawl lifecycle obvious. It never says what a crawl actually does (presumably fetch linked pages from a site), leaving the resource slightly opaque.

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 a follow-up protocol ('poll via crawl_status(task_id)') rather than when-to-use guidance, and it encodes depth semantics (0 = single URL, N = N levels) that help choose parameters. There is no explicit statement of when to prefer this over siblings like search or catalog_browse, and no exclusions or prerequisites.

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

crawl_cancelA

Stop a running crawl started by crawl. Pages already saved are kept.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It reveals that pages already saved are kept, which is useful. But it does not mention other behaviors like whether the cancel is immediate, error handling, or permission requirements, leaving some gaps.

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, front-loaded sentences with zero waste. Every word earns its place, clearly stating the action and a key behavioral consequence.

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 cancel operation, the description covers the main purpose and the key side effect (saved pages kept). An output schema exists, so return values need not be explained. Minor missing details about edge cases (e.g., task not found or already finished) are acceptable given the tool's simplicity.

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

Parameters2/5

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

The schema has one required parameter, task_id, with no description. The tool description does not explain what task_id is or where to obtain it (e.g., from a crawl call). With 0% schema description coverage, the description should compensate, but it doesn't.

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

Purpose5/5

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

The description clearly states a specific action ('Stop a running crawl') on a specific resource ('crawl started by ``crawl``'), which distinguishes it from sibling tools like crawl and crawl_status. The verb and resource are unambiguous.

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

Usage Guidelines4/5

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

It implies when to use (for crawls started by `crawl` that are still running) and provides a clear context. However, it does not explicitly mention alternatives or when not to use, such as checking status first with crawl_status.

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

crawl_statusB

Poll a crawl task by id; returns {status, pages, error}.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 burden. It discloses the return fields but omits behavioral traits like idempotency, rate limits, or error handling. Adequate for a simple status poll, but minimal.

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

Conciseness5/5

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

Single sentence with inline code formatting. No wasted words; efficient and front-loaded.

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?

Given the single parameter and existence of an output schema, the description covers the basics. However, it could mention it is meant to be used after a crawl to poll progress, enhancing context completeness.

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 0%, so description must compensate. It mentions polling 'by id' and the parameter is named 'task_id', making the mapping clear. No additional syntax or constraints provided, but sufficient for a single 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?

The description clearly states it polls a crawl task by id and returns status, pages, and error, distinguishing it from sibling tools like 'crawl' for initiating tasks. However, the verb 'poll' could be more explicit about checking status after initiation.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., 'crawl' for starting a task, 'search' for searching). It is implied for checking status after a crawl, but lacks explicit when-not or prerequisites.

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

export_datasetA

Write the per-page {source, page, text} dataset to a file (no vectors).

fmt is parquet/jsonl (empty infers from the suffix); source limits to one file.

ParametersJSON Schema
NameRequiredDescriptionDefault
fmtNo
outputYes
sourceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

Describes core behavior (write to file, no vectors) but does not disclose side effects (e.g., read-only, no modification of original data). No annotations provided, so description carries burden but only partially addresses it.

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

Conciseness5/5

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

Two concise sentences front-loaded with main purpose and parameters. No wasted words.

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?

Covers main purpose and two parameter details, but lacks usage context and behavioral safety. Output schema exists (not shown) so return values not needed. With no annotations, description is adequate but not thorough.

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?

Explains fmt (parquet/jsonl, infers from suffix) and source (limits to one file) but does not describe output parameter beyond being the file path. Schema coverage is 0%, so description adds some value but leaves gaps.

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

Purpose5/5

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

Clearly states the tool writes a per-page dataset to a file, specifies no vectors, and implies export action. Distinguishes from import_dataset (sibling) by nature of operation.

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 use for exporting dataset to file in parquet/jsonl optionally limited to one source. No explicit when-to-use or alternative guidance, but context suggests it's for file output.

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

get_gpusA

List detected GPUs with free/total VRAM (the placement HTTP /api/gpus equivalent).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so the description carries the burden. It clearly indicates a read-only operation listing GPUs with memory info. No destructive or side effects are suggested, and the behavior is transparent for such a simple tool.

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

Conciseness5/5

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

The description is a single sentence that conveys all necessary information without extraneous words. It is perfectly sized for the tool's simplicity.

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

Completeness5/5

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

With no parameters and an output schema present, the description fully covers the tool's purpose and behavior. It explains what is listed and provides an equivalent API reference, leaving no gaps.

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?

There are zero parameters, so schema coverage is 100%. The description adds meaningful context about the return values (free/total VRAM) beyond the schema, justifying a baseline of 4.

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

Purpose5/5

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

The description clearly states it lists detected GPUs with free/total VRAM, and provides the equivalent HTTP endpoint. This distinguishes it from sibling tools which are unrelated to GPU listing.

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

Usage Guidelines3/5

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

The description implies this tool is for checking GPU availability, but does not explicitly state when to use it versus alternatives or any prerequisites. However, due to its simplicity (no parameters), usage is largely self-evident.

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

get_placementA

Show the current effective multi-GPU model placement.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It correctly implies a read-only operation without side effects. It does not specify edge cases but is adequate for a simple getter.

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, succinct sentence that front-loads the key action and resource. No wasted words.

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

Completeness5/5

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

For a simple read tool with no parameters and an output schema, the description provides all necessary context: it returns the current effective placement. No 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?

There are no parameters, so schema coverage is 100%. The description adds no parameter-specific value, so baseline score of 3 applies.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Show the current effective multi-GPU model placement.' It uses a specific verb ('Show') and resource ('multi-GPU model placement'), and distinguishes itself from siblings like set_placement and clear_placement.

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?

While no explicit when/when-not guidance is given, the tool's purpose is straightforward and the name implies its usage relative to siblings (set, clear, preview). Context is clear enough for an agent to infer when to use this tool.

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

import_datasetA

Import a per-page text dataset, re-embedding under the current model.

Replaces existing copies; imported sources are detached so sync won't delete them.

ParametersJSON Schema
NameRequiredDescriptionDefault
fmtNo
datasetYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 discloses key behaviors: replaces existing copies and detaches imported sources from sync. However, it lacks details on authorization, rate limits, or potential side effects on other data.

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 concise sentences with no fluff. The first sentence states the primary purpose, and the second adds essential behavioral context. Front-loaded and efficient.

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?

Given the presence of an output schema and the tool's moderate complexity, the description covers the main action, replacement, and detachment. It lacks details on re-embedding process and prerequisites but is generally sufficient.

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

Parameters2/5

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

Schema coverage is 0%, so the description must compensate. It partially explains the 'dataset' parameter (the dataset to import) but does not mention the 'fmt' parameter at all, leaving its purpose unclear.

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

Purpose5/5

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

The description clearly states the tool imports a per-page text dataset and re-embeds it under the current model. It distinguishes the tool from siblings like export_dataset by specifying the action and additional behavior of replacing copies and detaching sources.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives (e.g., crawl, add). The description does not specify prerequisites or preferred contexts.

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

initA

Initialize a local .lilbee/ knowledge base; empty path = cwd.

Switches the MCP session to use it for subsequent calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

The description discloses the initialization and session switching behavior, but does not address idempotency, error cases, or effects if the knowledge base already exists. No annotations are provided to supplement.

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

Conciseness5/5

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

The description is extremely concise with two clear sentences, no redundancy, and the key behavior is front-loaded.

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 the basic purpose but lacks details on prerequisites, error cases, and integration with other tools. The presence of an output schema may compensate for return values, but overall completeness is limited.

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 description adds the default behavior for an empty path beyond the schema's simple string type, but does not detail valid paths, error conditions, or other constraints. Given 0% schema coverage, more parameter detail would improve.

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

Purpose5/5

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

The description clearly states the tool initializes a local .lilbee/ knowledge base and switches the session, with default to cwd. This specific verb+resource distinguishes it from sibling tools like search or sync.

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

Usage Guidelines4/5

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

The description implies the tool should be used before other calls to set the session knowledge base, but lacks explicit when-not-to-use guidance or comparisons with alternatives.

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

list_documentsB

List documents and chunk counts, paged (limit 1-1000).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose the pagination model and the limit range (1-1000), implying a safe read operation, but says nothing about offset behavior, default limits, or what the page envelope 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 compact sentence with the resource and pagination constraint front-loaded and no filler. It is efficient, though bordering on under-specified rather than merely concise.

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

Completeness3/5

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

An output schema exists, so return structure needn't be explained, and the read-only list nature is simple. However, with low parameter coverage and no annotations, the missing offset semantics and default paging behavior leave a real gap.

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?

With schema description coverage at 0%, the description must compensate for both parameters. It does constrain limit to 1-1000, adding real meaning, but offset is left completely undefined in both schema and description.

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 (List) and resource (documents), and adds that chunk counts are returned along with pagination. It is clear enough to distinguish from unrelated siblings like add, remove, and search, but does not explicitly contrast itself with any near-neighbor.

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?

Contains no guidance on when to use this tool versus alternatives such as search or catalog_browse, and no prerequisites or exclusions are stated. The agent must infer its role from the name alone.

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

model_listB

List installed models. source is native / remote; task filters by role.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
sourceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, description carries full burden. It explains filter parameters but does not disclose results format, pagination, performance, or any side effects. Minimal behavioral context beyond basic functionality.

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 concise sentences with clear front-loading. Every word adds value, no redundancy.

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

Completeness4/5

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

Tool is simple and output schema exists, so description is mostly complete. Provides necessary filter context. Could benefit from brief note on result limitation or ordering, but adequate for a list operation.

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 0%, so description must compensate. It defines 'source' as native/remote and 'task' as filter by role, adding meaning but remaining somewhat vague (e.g., 'role' not defined). Partial compensation.

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

Purpose5/5

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

Explicitly states 'List installed models' with clear verb and resource. Distinguishes from sibling tools like 'search' or 'sync' by focusing on listing installed models with filtering options.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. The description implies listing usage but does not mention exclusions or compare with siblings like 'search' or 'crawl'.

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

model_pullB

Download a model and stream progress.

source is native (GGUF) or remote (SDK). allow_unsupported overrides the architecture refusal.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
sourceNo
allow_unsupportedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 behavioral burden. It usefully discloses progress streaming, the meaning of source, and that allow_unsupported overrides an architecture refusal (a notable safety bypass), but omits auth/permission requirements, error behavior, and where the download lands.

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 core action is front-loaded in the first sentence, followed by two terse parameter notes. Nearly every clause earns its place, though the doubled backticks are a formatting artifact.

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

Completeness3/5

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

An output schema exists so return values need not be described, and the source/override semantics are covered. However, for a mutation-style download with 0% schema coverage and no annotations, missing prerequisites and failure behavior leave it only adequate.

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 0%, so the description must compensate. It meaningfully explains two of three parameters (source native=GGUF/remote=SDK, allow_unsupported override), but the required model parameter receives no explanation at all.

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

Purpose5/5

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

States a specific verb and resource ("Download a model") plus a secondary behavior ("stream progress"). It is clearly distinguishable from siblings like model_show (inspect), model_rm (remove), and model_list (enumerate).

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 explicit when-to-use or when-not-to-use guidance and no routing to alternatives. The source and allow_unsupported notes hint at configuration choices, but the agent is left to infer the appropriate context for invoking a pull.

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

model_rmA

Remove an installed model. Only native GGUF models lilbee downloaded; Ollama/LM Studio are read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
sourceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 burden. It discloses the destructive nature (remove) and the limitation to certain sources, but lacks details on whether removal is irreversible, permissions needed, or any confirmation steps.

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?

Description is very concise at two sentences, front-loading the purpose. It earns its keep by covering scope and limitations, but could be slightly more structured for clarity.

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?

Given the simple nature of the tool (removal with two params) and presence of output schema, the description covers the core action and constraints. However, it lacks parameter descriptions, which is a notable gap for completeness.

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

Parameters1/5

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

Schema has 0% description coverage and the description adds no explanation for the 'model' and 'source' parameters. The description does not clarify what values are expected or how 'source' affects behavior, leaving a significant gap.

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

Purpose5/5

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

Description clearly states 'Remove an installed model' with a specific verb and resource. It distinguishes from siblings by specifying it only works on native GGUF models from 'lilbee' (likely a typo for 'libbee' or similar), and notes that Ollama/LM Studio models are read-only.

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

Usage Guidelines4/5

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

Provides clear context for when to use (removing models) and an exclusion (Ollama/LM Studio models are read-only). However, it does not mention alternatives for removing other model types or any prerequisites.

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

model_showC

Show catalog and installed metadata for a model ref.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It only says 'Show catalog and installed metadata' without disclosing side effects, permission needs, rate limits, or what exactly 'catalog and installed metadata' entails. The minimal description leaves the agent guessing about behavior.

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 sentence that is concise and to the point. While it lacks detail, it is not overly verbose. Every word contributes to stating the tool's basic function.

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?

Given low complexity (1 parameter, output schema exists), the description is minimally adequate. It explains the basic purpose but omits details about return values, parameter semantics, and how it differs from similar tools. The output schema reduces some burden, but more context would help.

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

Parameters1/5

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

The single required parameter 'model' has no description in the input schema (0% coverage). The description does not clarify acceptable values, format (e.g., name, ID, path), or constraints. No additional meaning is provided beyond the schema's type string.

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?

Description uses verb 'Show' and resource 'catalog and installed metadata for a model ref,' clearly indicating the tool's function. It is specific enough to distinguish from siblings like 'model_list' (which lists models) and 'model_pull' (which downloads). However, it does not explicitly differentiate from similar inspection tools.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like 'model_list' or 'search.' No exclusions or prerequisites mentioned. The description simply states the action without contextual hints.

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

preview_placementB

Preview what a placement spec (or auto, when omitted) would place. No changes made.

ParametersJSON Schema
NameRequiredDescriptionDefault
specNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

No annotations provided, so description carries burden. States 'No changes made' which signals non-destructive preview. Does not disclose permissions, rate limits, or error behaviors.

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, direct sentences. No unnecessary words. Could be slightly more informative without harming conciseness.

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?

Adequate for a simple preview tool with one optional parameter and output schema. However, lacks explanation of the output or any error conditions.

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

Parameters2/5

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

Schema coverage is 0%, so description must add meaning. Only says 'placement spec (or auto, when omitted)', which clarifies that the object represents a placement spec but provides no structure or constraints for the 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?

Clearly states verb 'preview' and resource 'placement spec'. Indicates non-mutating behavior ('No changes made'). Lacks explicit differentiation from siblings like 'clear_placement' but distinct enough.

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?

Description implies safe preview usage via 'No changes made', but no explicit guidance on when to use vs alternatives like 'add' or 'clear_placement'.

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

removeA

Remove documents from the index by source name, folder, or glob pattern.

Source files are never deleted. A folder removes everything indexed beneath it; a glob (*/?/[]) removes every match.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does well: it states that source files are never deleted and spells out the destructive scope of folder removal ('everything indexed beneath it') and glob matching. It omits permissions, idempotency, and what happens on non-matching patterns, but the safety profile of a 'remove' tool is disclosed.

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

Conciseness5/5

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

Two tight sentences plus a clarifying clause; the primary action is front-loaded and the safety caveat follows immediately. No filler or restatement of the tool name.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and the single parameter's meaning is covered. Remaining gaps are minor: no auth/permission requirements and no note on behavior when a pattern matches nothing.

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 description coverage is 0% and the schema only declares an array of strings, so the description must compensate. It does, by explaining that entries may be source names, folder paths, or glob patterns and defining glob syntax (*/?/[]). It does not explain how multiple entries combine or path resolution rules.

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

Purpose5/5

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

The description names a specific verb (remove) and resource (documents from the index) and pins down the three selection modes (source name, folder, glob), which separates it from broad-wipe siblings such as reset or wiki_wipe. It also clarifies the blast radius up front with 'Source files are never deleted'.

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 the semantics of each selector (folder vs glob vs name), but there is no explicit when-to-use or when-not-to-use guidance and no named alternative (e.g., list_documents to inspect first, reset for a full wipe). An agent can infer intent but gets no routing help.

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

resetA

Factory reset: delete all documents and indexed data. Requires confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations exist, so description carries full burden. It discloses destructive behavior (delete all documents and indexed data) and the confirm requirement. But lacks details on reversibility or side effects.

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

Conciseness5/5

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

Two concise sentences with no fluff. Every part provides essential 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 simple destructive tool with one parameter, the description covers the core function and key requirement. Does not mention output, but completeness is reasonable given output schema exists.

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?

Only one parameter (confirm) with 0% schema coverage. Description compensates by stating it requires confirm=true, adding meaning beyond the boolean type.

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

Purpose5/5

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

Description clearly states 'Factory reset: delete all documents and indexed data', using a specific verb and resource. It implicitly distinguishes from sibling tools like 'settings_reset' by indicating a full reset.

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?

States the requirement 'Requires confirm=true', which is a usage constraint. However, it does not provide guidance on when to use this tool versus alternatives like 'settings_reset' or 'remove'.

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

set_placementA

Set and apply a manual multi-GPU placement spec (persists to config).

Maps a role ("chat"/"embed"/"rerank"/"vision") to a placement, e.g. {"chat": {"devices": [0, 1], "tensor_split": [1, 1]}}. devices is the GPU indices (get_gpus lists them); tensor_split is optional per-device weights (omit for an even split). A role left out is auto-placed.

ParametersJSON Schema
NameRequiredDescriptionDefault
specYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/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 persistence to config, the auto-placement of omitted roles, and that tensor_split defaults to an even split. It does not say whether changes apply immediately, require a reload/restart, or how they interact with existing placements, which are meaningful gaps for a mutating tool.

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

Conciseness5/5

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

Front-loaded with the core action and persistence note, then a compact example and two clarifying clauses. Every sentence earns its place; nothing is redundant.

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?

Output schema exists, so return values need not be described. The high-complexity nested payload is well documented. Only minor behavioral details (apply timing, reload requirement, override semantics) are absent for a no-annotation mutation tool.

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

Parameters5/5

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

Schema coverage is 0% and the sole param 'spec' is an opaque bare object, so the description does all the work: it gives the role→placement shape, a concrete example, and the meaning/default of 'devices' and 'tensor_split'. This fully compensates for the schema and is exactly what an agent needs to build the payload.

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

Purpose5/5

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

States a specific verb+resource ('Set and apply a manual multi-GPU placement spec') with the added scope qualifier that it persists to config. Together with the role-mapping explanation, an agent can distinguish it from get_placement/preview_placement/clear_placement without opening any schema.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: 'manual' placement and 'persists to config' signal this is the durable counterpart to preview_placement/get_placement, but the description never explicitly says when to prefer it over those siblings or whether preview should be run first. Adequate but leaves routing to inference.

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

settings_getB

Get a single setting's current value + metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output 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 bears full responsibility for behavioral disclosure. It only states the tool gets a value and metadata, but fails to mention side effects, auth requirements, rate limits, or behavior when the key does not exist.

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

Conciseness4/5

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

The description is very concise at one sentence, front-loading the core purpose. However, it sacrifices valuable detail that could be included without becoming verbose.

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?

Given the presence of an output schema (not detailed here), the description does not need to elaborate on return values. However, with only one parameter and no parameter description, along with missing usage guidelines and behavioral context, the description falls short of being fully complete for an agent to use effectively.

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

Parameters2/5

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

With 0% schema coverage for the 'key' parameter, the description adds no additional meaning beyond the parameter name. It does not explain what constitutes a valid key, how to obtain it, or any format constraints.

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

Purpose5/5

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

The description clearly states the verb 'Get', the resource 'a single setting', and the output 'current value + metadata'. This distinctly separates it from sibling tools like settings_list (list multiple) and settings_reset (reset).

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, such as when to use settings_get over settings_list or other tools. There are no context signals or exclusions mentioned.

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

settings_listA

List writable lilbee settings (each with value, default, type, help, choices).

group filters by group name (case-insensitive); empty returns all.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses the output fields (value, default, type, help, choices) and parameter behavior. Despite no annotations, it gives sufficient transparency for safe usage.

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

Conciseness5/5

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

The description is two succinct lines, front-loaded with the main purpose, and each word adds value. No redundancy or waste.

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

Completeness4/5

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

Given the tool's simplicity (single optional parameter, list operation), the description covers output structure and parameter behavior. No missing critical details like authentication or pagination, which are likely not needed.

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 only parameter 'group' has zero coverage in schema but the description adds full semantics: filtering behavior, case-insensitivity, and default when empty. This compensates well for schema gaps.

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

Purpose5/5

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

The description clearly states the action ('List') and the resource ('writable lilbee settings'), with specific details about output fields. The name and description distinguish it from siblings like settings_get and settings_reset.

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

Usage Guidelines4/5

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

The description explains the optional group parameter's behavior (case-insensitive filter, empty returns all), providing clear context for when to use it. While it doesn't explicitly contrast with sibling tools, the purpose is clear enough.

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

settings_resetC

Reset writable settings to their built-in defaults.

ParametersJSON Schema
NameRequiredDescriptionDefault
keysYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

The description mentions 'writable settings' implying read-only settings cannot be reset, but it fails to clarify that only specified keys are reset (contradicted by the required 'keys' parameter which suggests per-key operation). No annotations exist, so the description must carry all behavioral info but is incomplete.

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

Conciseness4/5

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

The description is a single concise sentence, which is efficient. However, it lacks additional structure (e.g., bullet points) that could improve readability, but given the simplicity, it is appropriately sized.

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?

Given the number of sibling tools and no annotations, the description should provide more context about scope (e.g., does it reset all writable settings or only specified ones?), but it does not. The existence of an output schema partially mitigates the need to describe return values, but overall the description is incomplete for a complex tool ecosystem.

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

Parameters1/5

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

Schema description coverage is 0%. The description does not mention the 'keys' parameter at all, leaving its purpose and format entirely undocumented. The tool's behavior is implied as resetting settings, but how to specify which settings is missing.

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

Purpose5/5

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

The description uses a specific verb ('Reset') and resource ('writable settings') with the outcome ('built-in defaults'). It clearly distinguishes from sibling tools like settings_list (read) and settings_get (read single), as reset is a mutation action.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. For example, it does not explain when a reset is appropriate compared to updating individual settings via other tools, nor does it mention any prerequisites or side effects.

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

settings_setB

Atomically update writable settings; rolls back on validation error. Persists to config.toml; returns updated, reindex_required, warnings.

ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior4/5

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

With no annotations, the description bears the full burden and carries it well: it discloses atomicity, rollback-on-validation-error behavior, that changes persist to config.toml, and even the key return fields. It does not cover authorization requirements or what happens to settings not named in the update set, which keeps it short of a 5.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the operation's defining trait (atomicity) and followed by persistence and return shape. No filler or restatement of the tool name.

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

Completeness3/5

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

An output schema exists, so the mention of updated/reindex_required/warnings is a bonus rather than a necessity. The real gap is on the input side: for a nested, untyped object parameter the agent has no way to know valid keys or values from either the schema or the description.

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

Parameters2/5

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

Schema coverage is 0% for the single 'updates' parameter, which is an untyped free-form object. The description says only 'update writable settings' and never enumerates which settings are writable or what keys the updates object accepts, so the critical parameter remains undocumented in both places.

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

Purpose4/5

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

States a specific verb+resource ('atomically update writable settings') and adds a meaningful qualifier ('writable') that separates it from the read-side siblings settings_get/settings_list and from settings_reset. It never names a sibling explicitly, so an agent must infer the boundary rather than being routed, but the purpose itself is unambiguous.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of the closely related settings_reset, settings_get, or settings_list siblings. The atomic/rollback clause hints that this is the safe path for multi-key changes, but that implication is never stated as a selection rule.

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

statusC

Show documents, config and chunk counts, or the running upgrade.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/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 does not state that this is a read-only/non-mutating operation, nor anything about permissions, cost, or behavior when an upgrade is not running. The mention of 'the running upgrade' hints at conditional output but is not explained.

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 subject front-loaded. It is efficient, though the trailing 'or the running upgrade' adds ambiguity rather than clarity about what selects each output.

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

Completeness3/5

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

An output schema exists and there are no parameters, which lowers the disclosure burden, but the description presents multiple possible outputs without explaining what determines which one is returned. For a diagnostic tool with this many overlapping siblings, that ambiguity leaves the agent short of what it needs to invoke confidently.

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 clarify; the baseline of 4 applies.

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 names concrete things it reports (document counts, config, chunk counts, running upgrade), so the purpose is inferable, but the verb and scope are fuzzy and it gives no signal distinguishing it from siblings like model_show, wiki_status, or crawl_status. An agent could not confidently pick this over those without opening schemas.

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 the numerous other status-like siblings (wiki_status, crawl_status, model_show) or any prerequisites. Only implied usage at best.

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

syncA

Sync the documents directory into the vector store.

force_rebuild re-ingests everything. retry_skipped retries failed files. prune_ignored drops sources .lilbeeignore excludes.

ParametersJSON Schema
NameRequiredDescriptionDefault
ocrNoWhich pages OCR reads.
ocr_timeoutNo
force_rebuildNo
prune_ignoredNo
retry_skippedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 behavioral burden, and it does disclose real destructive semantics: prune_ignored drops sources, force_rebuild re-ingests everything. However, it omits default (incremental?) behavior, permission/auth requirements, and whether the drops are reversible.

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

Conciseness5/5

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

Purpose is front-loaded in one sentence, then three tight clauses map directly to the boolean flags. Every sentence earns its place with no redundancy.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the destructive flags are covered. It is close to complete for a 5-param mutation tool, missing only default incremental behavior and any auth/permission note.

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 only 20% (ocr documented, ocr_timeout not), so the description must compensate, and it does: it explains force_rebuild, retry_skipped, and prune_ignored with concrete meaning. Only ocr_timeout remains undocumented in both places, 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 first sentence gives a specific verb+resource+destination: 'Sync the documents directory into the vector store.' It clearly distinguishes this from sibling ingest paths like crawl and add. It stops short of explicitly naming those siblings, so it earns a 4 rather than 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?

The description never states when to reach for sync versus crawl, add, import_dataset, or list_documents. The flag explanations describe modes of this tool, not selection criteria against alternatives. Usage is only implied by the tool name.

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

wiki_statusA

Show wiki layer status: page counts, recent lint issues.

Registered even when the wiki is disabled, like the HTTP status route, so a caller can read the disabled state instead of finding no tool at all.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It discloses an important trait: it is registered even when the wiki is disabled, similar to an HTTP status route. This gives context about availability and what the tool can reveal, which is sufficient for a status check tool.

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

Conciseness5/5

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

The description is two sentences, with the main purpose front-loaded clearly in the first sentence. The second sentence adds a meaningful caveat about disabled state without unnecessary elaboration. No wasted words.

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?

Given the output schema exists, the description need not explain return values. It covers the essential purpose and the notable behavior about disabled state. It could mention what the response looks like, but for a simple status tool this is sufficient.

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

Parameters4/5

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

The input schema has zero parameters, so schema coverage is trivially 100%. The description correctly omits parameter details. Baseline for a zero-parameter tool is 4, and no additional explanation is needed.

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

Purpose5/5

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

The description clearly states the tool's function: 'Show wiki layer status' with specific contents (page counts, recent lint issues). It distinguishes itself from sibling tools like 'status' by focusing on the wiki layer, and the name reinforces this specificity.

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

Usage Guidelines4/5

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

It explains a key usage context: even when the wiki is disabled, this tool remains registered so callers can read the disabled state. This implies using this tool when you need wiki status regardless of enabled state, but it does not explicitly compare to alternatives like 'status'.

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

wiki_wipeA

Delete every generated wiki page and its indexed rows. Pass confirm=true.

Registered even with the wiki disabled, because turning the setting off leaves the pages generated earlier in place.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses that the tool deletes all generated wiki pages and their indexed rows, and that it requires confirmation (confirm=true). It also explains its availability even when the wiki is disabled, which is valuable behavioral context. With no annotations, this description carries the full burden and does a good job conveying the destructive and conditional nature.

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

Conciseness5/5

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

The description is two sentences: the first states the action and requirement, the second provides rationale for the tool's availability. Every sentence adds value and it is front-loaded with the core purpose.

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 destructive tool with one parameter, the description covers the action, the confirmation requirement, and a specific use case (even when wiki disabled). It doesn't explain return values or permissions, but an output schema is present, so that's not required. The description is complete enough for an agent to select and invoke correctly.

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

Parameters4/5

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

The schema only defines a boolean 'confirm' with no description, but the description explicitly instructs to 'Pass confirm=true,' clarifying the parameter's role and required value. This adds meaning beyond the schema, though it could further explain the behavior when confirm is false.

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

Purpose5/5

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

The description clearly states 'Delete every generated wiki page and its indexed rows.' This is a specific verb (delete), resource (wiki pages and indexed rows), and scope (every). It distinguishes the tool from siblings like 'remove' or 'reset' by focusing on generated wiki pages.

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

Usage Guidelines4/5

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

The description explains that the tool is 'Registered even with the wiki disabled, because turning the setting off leaves the pages generated earlier in place,' providing clear context for when to use it. It also instructs to 'Pass confirm=true,' indicating the required action. However, it doesn't explicitly mention when not to use it or name alternative tools.

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. 4 tool updatesv1.0.16
    • Changedadd7 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "CrawlRenderMode": {
        -    "description": "How a crawl fetches pages. ``http`` uses no browser; ``browser`` runs Chromium with JS.",
        -    "enum": [
        -      "http",
        -      "browser"
        -    ],
        -    "title": "CrawlRenderMode",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / enable_ocr
        Removed value: -{
        -  "type": "boolean"
        -}
      • addedInput schema / properties / ocr
        Added value: +{
        +  "description": "Which pages OCR reads.",
        +  "enum": [
        +    "auto",
        +    "all",
        +    "off"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / render_mode / $ref
        Removed value: -"#/$defs/CrawlRenderMode"
      • addedInput schema / properties / render_mode / description
        Added value: +"How a crawl fetches pages. ``http`` uses no browser; ``browser`` runs Chromium with JS."
      • addedInput schema / properties / render_mode / enum
        Added value: +[
        +  "http",
        +  "browser"
        +]
      • addedInput schema / properties / render_mode / type
        Added value: +"string"
    • Changedcrawl5 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "CrawlRenderMode": {
        -    "description": "How a crawl fetches pages. ``http`` uses no browser; ``browser`` runs Chromium with JS.",
        -    "enum": [
        -      "http",
        -      "browser"
        -    ],
        -    "title": "CrawlRenderMode",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / render_mode / $ref
        Removed value: -"#/$defs/CrawlRenderMode"
      • addedInput schema / properties / render_mode / description
        Added value: +"How a crawl fetches pages. ``http`` uses no browser; ``browser`` runs Chromium with JS."
      • addedInput schema / properties / render_mode / enum
        Added value: +[
        +  "http",
        +  "browser"
        +]
      • addedInput schema / properties / render_mode / type
        Added value: +"string"
    • Changedlist_documents2 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "type": "integer"
        +}
    • Changedsync2 fields changed
      • addedInput schema / properties / ocr
        Added value: +{
        +  "description": "Which pages OCR reads.",
        +  "enum": [
        +    "auto",
        +    "all",
        +    "off"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / ocr_timeout
        Added value: +{
        +  "type": "number"
        +}
  2. 1 tool updatev1.0.8
    • Changedcatalog_browse1 field changed
      • addedInput schema / properties / max_fit
        Added value: +{
        +  "type": "string"
        +}
  3. 1 tool updatev1.0.5
    • Changedsync1 field changed
      • addedInput schema / properties / prune_ignored
        Added value: +{
        +  "type": "boolean"
        +}
  4. 3 tool updatesv1.0.4
    • Addedcrawl_cancel
    • Addedwiki_status
    • Addedwiki_wipe
  5. 9 tool updatesv1.0.3
    • Addedcatalog_browse
    • Addedget_placement
    • Addedlist_documents
    • Addedmodel_rm
    • Changedremove1 field changed
      • removedInput schema / properties / delete_files
        Removed value: -{
        -  "type": "boolean"
        -}
    • Addedreset
    • Addedset_placement
    • Addedsettings_set
    • Addedstatus
  6. 24 tool updatesv1.0.2
    • Changedadd15 fields changed
      • removedInput schema / properties / enable_ocr / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / enable_ocr / default
        Removed value: -null
      • removedInput schema / properties / enable_ocr / title
        Removed value: -"Enable Ocr"
      • addedInput schema / properties / enable_ocr / type
        Added value: +"boolean"
      • removedInput schema / properties / force / default
        Removed value: -false
      • removedInput schema / properties / force / title
        Removed value: -"Force"
      • removedInput schema / properties / ocr_timeout / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / ocr_timeout / default
        Removed value: -null
      • removedInput schema / properties / ocr_timeout / title
        Removed value: -"Ocr Timeout"
      • addedInput schema / properties / ocr_timeout / type
        Added value: +"number"
      • removedInput schema / properties / paths / title
        Removed value: -"Paths"
      • addedInput schema / properties / render_mode / $ref
        Added value: +"#/$defs/CrawlRenderMode"
      • removedInput schema / properties / render_mode / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/CrawlRenderMode"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / render_mode / default
        Removed value: -null
      • removedInput schema / title
        Removed value: -"addArguments"
    • Removedcatalog_browse
    • Addedclear_placement
    • Changedcrawl14 fields changed
      • removedInput schema / properties / depth / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / depth / default
        Removed value: -null
      • removedInput schema / properties / depth / title
        Removed value: -"Depth"
      • addedInput schema / properties / depth / type
        Added value: +"integer"
      • addedInput schema / properties / include_subdomains
        Added value: +{
        +  "type": "boolean"
        +}
      • removedInput schema / properties / max_pages / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / max_pages / default
        Removed value: -null
      • removedInput schema / properties / max_pages / title
        Removed value: -"Max Pages"
      • addedInput schema / properties / max_pages / type
        Added value: +"integer"
      • addedInput schema / properties / render_mode / $ref
        Added value: +"#/$defs/CrawlRenderMode"
      • removedInput schema / properties / render_mode / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/CrawlRenderMode"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / render_mode / default
        Removed value: -null
      • removedInput schema / properties / url / title
        Removed value: -"Url"
      • removedInput schema / title
        Removed value: -"crawlArguments"
    • Changedcrawl_status2 fields changed
      • removedInput schema / properties / task_id / title
        Removed value: -"Task Id"
      • removedInput schema / title
        Removed value: -"crawl_statusArguments"
    • Changedexport_dataset6 fields changed
      • removedInput schema / properties / fmt / default
        Removed value: -""
      • removedInput schema / properties / fmt / title
        Removed value: -"Fmt"
      • removedInput schema / properties / output / title
        Removed value: -"Output"
      • removedInput schema / properties / source / default
        Removed value: -""
      • removedInput schema / properties / source / title
        Removed value: -"Source"
      • removedInput schema / title
        Removed value: -"export_datasetArguments"
    • Addedget_gpus
    • Changedimport_dataset4 fields changed
      • removedInput schema / properties / dataset / title
        Removed value: -"Dataset"
      • removedInput schema / properties / fmt / default
        Removed value: -""
      • removedInput schema / properties / fmt / title
        Removed value: -"Fmt"
      • removedInput schema / title
        Removed value: -"import_datasetArguments"
    • Changedinit3 fields changed
      • removedInput schema / properties / path / default
        Removed value: -""
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • removedInput schema / title
        Removed value: -"initArguments"
    • Removedlist_documents
    • Changedmodel_list5 fields changed
      • removedInput schema / properties / source / default
        Removed value: -""
      • removedInput schema / properties / source / title
        Removed value: -"Source"
      • removedInput schema / properties / task / default
        Removed value: -""
      • removedInput schema / properties / task / title
        Removed value: -"Task"
      • removedInput schema / title
        Removed value: -"model_listArguments"
    • Changedmodel_pull6 fields changed
      • removedInput schema / properties / allow_unsupported / default
        Removed value: -false
      • removedInput schema / properties / allow_unsupported / title
        Removed value: -"Allow Unsupported"
      • removedInput schema / properties / model / title
        Removed value: -"Model"
      • removedInput schema / properties / source / default
        Removed value: -"native"
      • removedInput schema / properties / source / title
        Removed value: -"Source"
      • removedInput schema / title
        Removed value: -"model_pullArguments"
    • Removedmodel_rm
    • Changedmodel_show2 fields changed
      • removedInput schema / properties / model / title
        Removed value: -"Model"
      • removedInput schema / title
        Removed value: -"model_showArguments"
    • Addedpreview_placement
    • Changedremove4 fields changed
      • removedInput schema / properties / delete_files / default
        Removed value: -false
      • removedInput schema / properties / delete_files / title
        Removed value: -"Delete Files"
      • removedInput schema / properties / names / title
        Removed value: -"Names"
      • removedInput schema / title
        Removed value: -"removeArguments"
    • Removedreset
    • Changedsearch8 fields changed
      • removedInput schema / properties / query / title
        Removed value: -"Query"
      • removedInput schema / properties / scope / default
        Removed value: -"both"
      • removedInput schema / properties / scope / title
        Removed value: -"Scope"
      • removedInput schema / properties / top_k / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / top_k / default
        Removed value: -null
      • removedInput schema / properties / top_k / title
        Removed value: -"Top K"
      • addedInput schema / properties / top_k / type
        Added value: +"integer"
      • removedInput schema / title
        Removed value: -"searchArguments"
    • Changedsettings_get2 fields changed
      • removedInput schema / properties / key / title
        Removed value: -"Key"
      • removedInput schema / title
        Removed value: -"settings_getArguments"
    • Changedsettings_list3 fields changed
      • removedInput schema / properties / group / default
        Removed value: -""
      • removedInput schema / properties / group / title
        Removed value: -"Group"
      • removedInput schema / title
        Removed value: -"settings_listArguments"
    • Changedsettings_reset2 fields changed
      • removedInput schema / properties / keys / title
        Removed value: -"Keys"
      • removedInput schema / title
        Removed value: -"settings_resetArguments"
    • Removedsettings_set
    • Removedstatus
    • Changedsync5 fields changed
      • removedInput schema / properties / force_rebuild / default
        Removed value: -false
      • removedInput schema / properties / force_rebuild / title
        Removed value: -"Force Rebuild"
      • removedInput schema / properties / retry_skipped / default
        Removed value: -false
      • removedInput schema / properties / retry_skipped / title
        Removed value: -"Retry Skipped"
      • removedInput schema / title
        Removed value: -"syncArguments"
  7. 2 tool updatesv1.0.1
    • Changedadd2 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "CrawlRenderMode": {
        +    "description": "How a crawl fetches pages. ``http`` uses no browser; ``browser`` runs Chromium with JS.",
        +    "enum": [
        +      "http",
        +      "browser"
        +    ],
        +    "title": "CrawlRenderMode",
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / render_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/CrawlRenderMode"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedcrawl2 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "CrawlRenderMode": {
        +    "description": "How a crawl fetches pages. ``http`` uses no browser; ``browser`` runs Chromium with JS.",
        +    "enum": [
        +      "http",
        +      "browser"
        +    ],
        +    "title": "CrawlRenderMode",
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / render_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/CrawlRenderMode"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
  8. 21 tool updatesv1.0.0
    • First observedadd
    • First observedcatalog_browse
    • First observedcrawl
    • First observedcrawl_status
    • First observedexport_dataset
    • First observedimport_dataset
    • First observedinit
    • First observedlist_documents
    • First observedmodel_list
    • First observedmodel_pull
    • First observedmodel_rm
    • First observedmodel_show
    • First observedremove
    • First observedreset
    • First observedsearch
    • First observedsettings_get
    • First observedsettings_list
    • First observedsettings_reset
    • First observedsettings_set
    • First observedstatus
    • First observedsync

TDQS

B3.2/5.0

Scored across 29 tools

Disambiguation4/5

Most tools target clearly distinct resources and actions (e.g., model lifecycle, GPU placement, settings, document ingestion, search, wiki, datasets). Some pairs like model_show/model_list/catalog_browse and status/wiki_status require reading descriptions, but the boundaries are generally clear.

Naming Consistency3/5

The names mix noun_verb patterns (model_list, settings_get, wiki_status), verb_noun patterns (get_gpus, list_documents, export_dataset), and bare verbs (add, sync, search, reset). They remain readable, but there is no single predictable convention.

Tool Count2/5

With 29 tools, the surface is heavy for the apparent scope. Many granular operations (e.g., settings_get/list/set/reset, placement get/preview/set/clear) could be consolidated, and the count exceeds the 25+ threshold for 'too many' in the rubric.

Completeness4/5

The set covers model discovery/download/removal, GPU placement, settings management, document indexing/search/crawl, wiki status/wipe, and dataset import/export. Minor gaps exist, such as no explicit wiki build/refresh or model inference/load tool, but core workflows are covered.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Local RAG system for Claude Code with hybrid search (semantic + BM25), cross-encoder reranking, markdown-aware chunking, and 12 MCP tools. Zero external servers, pure ONNX in-process.
    13
    228 PyPI
    296
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A local-first document retrieval MCP server that enables AI coding tools like Codex to search private local documents via semantic search and keyword boost, supporting ingestion of PDF, DOCX, TXT, Markdown, and HTML files.
    7
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables indexing local documents (PDF, Markdown, text, code) into a knowledge base and querying them via semantic search using local embeddings, all running privately on your machine.
    4
    -