flaiwheel
Flaiwheel is a self-hosted, Git-native MCP server that provides persistent memory and governance for AI coding agents — capturing, organizing, and retrieving structured engineering knowledge across sessions.
Search & Retrieval
search_docs— Semantic hybrid search (vector + BM25 + optional reranking) across the entire knowledge basesearch_bugfixes— Search only bugfix summaries for past root causes and solutionssearch_by_type— Filter search by document category (architecture, api, bugfix, best-practice, setup, changelog, test, etc.)search_tests— Search test case documents to check existing coverageget_file_context— Retrieve architecture decisions, bugfixes, and best practices relevant to a specific source file
Writing & Documentation
write_bugfix_summary— Create and index a structured bugfix summary, auto-pushed to gitwrite_architecture_doc— Create architecture decision records (ADRs) and system design docswrite_api_doc— Document HTTP endpoints, REST APIs, and RPC schemaswrite_best_practice— Capture coding standards, patterns, and team conventionswrite_setup_doc— Write deployment, environment setup, and infrastructure guideswrite_changelog_entry— Create versioned release notes and changelog entrieswrite_test_case— Document test scenarios in structured BDD/Gherkin-style format
Validation & Quality
validate_doc— Validate raw markdown before committing it to the knowledge repocheck_knowledge_quality— Scan the knowledge base for structural issues, returning a quality score 0–100
Index Management
reindex— Re-index the knowledge base (diff-aware by default, or full rebuild withforce=True)git_pull_reindex— Pull latest commits from the knowledge git repo then re-indexget_index_stats— Show vector index statistics (chunk counts, model, chunking strategy)
Project Management
list_projects— List all registered projects with chunk counts and health statssetup_project— Register and initialize a new project (clones repo, indexes, binds session)set_project— Bind all subsequent tool calls in a session to a specific projectget_active_project— Check which project is currently active for this session
Knowledge Bootstrap & Cleanup
analyze_codebase— Zero-token, server-side cold-start analysis of a source directory; returns a ranked bootstrap reportanalyze_knowledge_repo— Detect structure issues, duplicates, and misplaced files inside the knowledge repoexecute_cleanup— Execute approved cleanup actions (moves files withgit mv, never deletes)classify_documents— Classify project source files by category and generate a migration plan
Session Memory
save_session_summary— Append a session summary (decisions, open questions, files modified) to the session logget_recent_sessions— Retrieve recent session summaries to restore context at session start
Maintenance
check_update— Check whether a newer Flaiwheel version is available on GitHub
Flaiwheel integrates with AI coding agents like Cursor, Claude, and VS Code Copilot, and auto-captures knowledge from Git commits (fix:, feat:, refactor:, perf:, docs:) with optional auto-push and GitHub webhook support for instant reindexing.
Automatically captures engineering knowledge from commit messages and manages a dedicated repository of structured documentation via Git-native automation.
Leverages the GitHub CLI (gh) for secure authentication and synchronization of the persistent knowledge layer across distributed engineering teams.
Integrates with VS Code Copilot to provide high-precision context from previous bug fixes and architectural decisions during active coding sessions.
Stores and governs all engineering knowledge, including bugfix summaries and best practices, as structured flat Markdown files within the user's infrastructure.
Directs AI agents to create and maintain self-updating Mermaid.js diagrams for system components and technical flows within the project documentation.
Flaiwheel
Self-hosted memory & governance layer for AI coding agents. Turn every bug fix into permanent knowledge. Zero cloud. Zero lock-in.
🚀 Why Flaiwheel Exists
AI coding agents forget everything between sessions. That leads to repeated bugs, lost architectural decisions, and knowledge decay.
Flaiwheel ensures:
Agents search before coding
Agents document after fixing
Commits automatically capture knowledge
Memory compounds over time
Every bug fixed makes the next bug cheaper.
Related MCP server: MCP VectorStore Server
🧠 How Flaiwheel Is Different
Persistent AI Memory That Compounds — knowledge doesn't reset between sessions.
Git-Native Automation — commits automatically become structured knowledge.
Governance, Not Just Storage — quality gates + enforced documentation.
Hybrid Search + Reranking — high-precision context for real codebases.
Fully Self-Hosted — single Docker container, no external infrastructure.
Zero Lock-In — all knowledge stored as structured flat files in Git.
✅ Who Flaiwheel Is For
Engineering teams using AI coding assistants in real projects
Codebases where repeated bugs are expensive
Teams requiring full data control
AI-native development environments
❌ Not For
Small hobby projects under a few thousand lines
Developers who just want better autocomplete
Pure SaaS workflows with no interest in self-hosting
🆚 Where Flaiwheel Fits
AI coding tools generate code.
RAG tools retrieve documents.
Flaiwheel governs and compounds structured engineering knowledge inside your own infrastructure.
It does not replace your AI assistant. It makes it reliable at scale.
📄 Whitepaper (PDF) — Vision, architecture, and design in depth.
⚙️ Key Technical Features
Flaiwheel is a self-contained Docker service that operates on three levels:
Pull — agents search before they code (search_docs, get_file_context)
Push — agents document as they work (write_bugfix_summary, write_architecture_doc, …)
Capture — git commits auto-capture knowledge via a post-commit hook, even without an AI agent
Indexes your project documentation (
.md,.pdf,.html,.docx,.rst,.txt,.json,.yaml,.csv) into a vector databaseProvides an MCP server that AI agents (Cursor, Claude Code, VS Code Copilot) connect to
Hybrid search — combines semantic vector search with BM25 keyword search via Reciprocal Rank Fusion (RRF) for best-of-both-worlds retrieval
Cross-encoder reranker — optional reranking step that rescores candidates with a cross-encoder model for significantly higher precision on vocabulary-mismatch queries
Behavioral Directives — AI agents silently search Flaiwheel before every response, auto-document after every task, and reuse before recreating — all without being asked
get_file_context(filename)— pre-loads spatial knowledge for any file the agent is about to edit (complementsget_recent_sessionsfor full temporal + spatial context)post-commit git hook — captures every
fix:,feat:,refactor:,perf:,docs:commit as a structured knowledge doc automaticallyLiving Architecture — AI agents are instructed to maintain self-updating Mermaid.js diagrams for system components and flows
Executable Test Flows — test scenarios are documented in machine-readable BDD/Gherkin format (
Given,When,Then) for QA automationLearns from bugfixes — agents write bugfix summaries that are instantly indexed
Structured write tools — 7 category-specific tools (bugfix, architecture, API, best-practice, setup, changelog, test case) that enforce quality at the source
Structured relations (v1) —
relations()andtimeline()derive a per-project knowledge graph from optional YAML frontmatter on existing docs (id,replaces,depends_on,fixes,implements,status). No second store — markdown stays canonical and Git history is the validity windowPre-commit validation —
validate_doc()checks freeform markdown before it enters the knowledge base, including unknown-relation-key warningsIngest quality gate — files with critical issues are automatically skipped during indexing (never deleted — you own your files)
Auto-syncs via Git — pulls AND pushes to a dedicated knowledge repo
Tool telemetry (persistent) — tracks every MCP call per project (searches, writes, misses, patterns), detects knowledge gaps, and nudges agents to document — persisted across restarts and visible in the Web UI
Impact metrics API —
/api/impact-metricscomputes estimated time saved + regressions avoided; CI pipelines can post guardrail outcomes to/api/telemetry/ci-guardrail-reportProactive quality checks — automatically validates knowledge base after every reindex
Knowledge Bootstrap — "This is the Way": analyse messy repos, classify files, detect duplicates, propose a cleanup plan, execute with user approval (never deletes files)
Cold-Start Codebase Analyzer —
analyze_codebase(path)scans a source code directory entirely server-side (zero tokens, zero cloud). Uses Python's built-inastmodule for Python, regex for TypeScript/JavaScript, the existing MiniLM embedding model for classification and duplicate detection. Returns a singlebootstrap_report.mdwith language distribution, category map, top 20 files to document first ranked by documentability score, duplicate pairs, and coverage gaps. Reduces cold-start token cost by ~90% on legacy codebases.Multi-project support — one container manages multiple knowledge repos with per-project isolation
Includes a Web UI for configuration, monitoring, and testing
What’s New in v3.13.0 — Observability
Flaiwheel now knows whether its knowledge repo is still connected to its remote. Everything before this reported on pushes that were attempted. The failure that hid 325 documents in a Docker volume for 2.5 months attempted nothing: the clone had drifted from its remote, so there was never anything to commit, so no push could fail, so nothing went red.
check_divergence()comparesHEADagainst@{u}and classifies the result assynced/ahead/behind/diverged/no-upstream.The "nothing to push" path is where this matters. That branch used to return an unconditional "already in sync". It now verifies the claim. Divergence is also checked after every successful push (did the commit actually land?), after a rejected push (a rejection is the classic symptom — now named instead of leaving you to read a git error), and on every pull.
A repo that indexes perfectly and pushes nothing is no longer "healthy".
/healthgainsdivergence_status,commits_ahead,commits_behindandlast_divergence_at, and reportsdegradedondiverged,aheadorno-upstream. Beingbehindis the normal state between two pulls and deliberately does not alarm.The agent is told directly.
write_*results append an explicit warning when the repo has diverged — including on "nothing to push". A warning in an endpoint nobody polls does not exist; the agent that just wrote the document is the one that needs to know it never left the machine.Tests: 316 → 335, against real temp repos including a force-pushed rewritten upstream — the real-world trigger, where a secret purge or a squash silently desynchronises every clone.
This closes the 2026-08-19 incident completely. The one item that looked outstanding — "watcher path scoping" — was retracted as a misdiagnosis after checking the running container. Its only evidence was the log line
knowledge: update flaiwheel/telemetry.json, read as one project's file being committed into all 11 repos. The real path is.flaiwheel/telemetry.json, with a leading dot: the signature of the porcelain off-by-one already fixed in v3.12.2. Every project owns an identically-named telemetry file, so all 11 watchers logged the same mangled string at once — uniformity caused by shared code, mistaken for shared state.
Previous: v3.12.3
Every dependency is capped below the next major. Eleven requirements were unbounded
>=X. That fails silently: the breaking release lands, existing installs keep working off a stale resolve, and it only bites on the next fresh install — CI, a Docker rebuild, a new contributor. Exactly howmcp2.0.0 broke CI and the Docker build together three weeks after release while every dev machine stayed green. A clean install resolves to identical versions as before, so this constrains the future without moving anything today.Sustained push failure now degrades
/health.HealthTrackerkept onlylast_push_ok— a single boolean the next attempt overwrites — so one blip and a repo failing for weeks looked the same.push_failures_consecutiveescalates past 3 consecutive failures. A single failure deliberately does not degrade; crying wolf on transients is how alerts get ignored./healthnames the failing projects. Addslast_push_ok,last_push_error,push_failures_consecutiveanddegraded_projects— previously the endpoint could saydegradedwhile showing only the default project's numbers, with no way to tell which repo was broken.Pre-deploy image smoke test documented. An image can build cleanly and still fail every import at runtime. The README now verifies
from flaiwheel.server import create_mcp_serverinside the image before starting a container, and renames rather than removes the previous container so rollback is instant.Tests: 308 → 316.
Previous: v3.12.2
Auto-commit no longer drops the first worktree-modified file.
git status --porcelainemitsXY <path>where a leading space is data (" M file"). Stripping the whole output before splitting ate that space on the first line only, soline[3:]truncated the filename's first character —.flaiwheel/telemetry.jsonbecameflaiwheel/telemetry.json,git addfailed, and the commit aborted. Intermittent and file-order dependent, which is why it survived so long.Renamed and copied files are staged correctly. Porcelain reports
old -> new; the whole string was passed togit add, so renames were never committed.
Previous: v3.12.1
Pinned
mcp[cli]<2.0.0.mcp2.0.0 removedmcp.server.fastmcp(FastMCP→mcp.server.mcpserver), breaking every import of the server on a fresh resolve.
Previous: v3.12.0
Auto-push now reports what actually happened.
push_pending()returns a structured result (ok/noop/disabled/failed/blocked) and everywrite_*tool renders that outcome. Previously the success line was derived from configuration (git_auto_push and bool(git_repo_url)), so it readAuto-pushed to remote: Trueeven when every push was being rejected. A failed push now says "Auto-push: FAILED — this doc is NOT on the remote" with the git error attached.Push errors are no longer swallowed. The bare
exceptinpush_pending()that only wrote to the diagnostic log now records toHealthTrackerand returns the error to the caller. A failinggit commitis reported instead of raising through an uncheckedcheck=True.gitleaks runs inside the container, on the write path. Flaiwheel's commits are machine-generated and never human-reviewed, so secret scanning now happens in
_push_local_changes()before the commit — not as a per-clone git hook that gets lost on re-clone.MCP_GITLEAKS_MODE=block(default) refuses to commit and reports the findings through the MCP result;warncommits and reports;offdisables. Honours a.gitleaks.tomlin the knowledge repo for allowlisting. A missing or broken scanner is reported explicitly, never silently skipped.Tests: 300 → 308 (
tests/test_watcher_push.py: push success/failure/noop/disabled reporting, gitleaks block/warn/clean, unavailable-scanner visibility).
Previous: v3.11.0
Telemetry now survives
docker volume rm flaiwheel-data. A per-project summary slice is mirrored from the Docker volume into each knowledge repo at<docs_path>/.flaiwheel/telemetry.json. On the next cold start,hydrate_from_mirrors()rebuilds the in-memory state from these files so the Tool Telemetry dashboard does not reset to zero. Hot tier wins when both exist; mirror writes are rate-limited to 60s/project to avoid one Git commit per tool call. Events stay in the volume only (too noisy for the knowledge repo). Don't want it committed? Add.flaiwheel/to your knowledge repo's.gitignore— Flaiwheel will still read/write the file locally.Reset Telemetry button on every per-project tile in the Web UI. Zeroes summary counters across both storage tiers via the new
POST /api/telemetry/reset?project=<name>endpoint. The 30-day impact-metrics window keeps working because events history is preserved.Agent instructions taught the relations workflow.
AGENTS.mdand both install.sh templates now include a "Structured Relations Workflow" section with three concrete rules (when to addfixes, when to addreplaces, when to adddepends_on) so agents actually use the v3.10.x graph machinery instead of ignoring it.Client Configuration's "VS Code" tab is now "VS Code + Copilot" with explicit help text pointing at GitHub Copilot agent mode. The
.vscode/mcp.jsonfile Flaiwheel emits already works for Copilot — no separate snippet needed.Tests: 292 → 300 (8 new tests in
test_telemetry.pyfor mirror writes, rate limiting, cold-start hydration, hot-tier authority, and reset semantics).
Previous: v3.10.1
Every structured writer now auto-emits frontmatter.
write_bugfix_summary,write_architecture_doc,write_api_doc,write_best_practice,write_setup_doc,write_changelog_entry, andwrite_test_caseprependid/type/status: active+ empty relation lists to every new doc. Every doc you create from now on is automatically a graph node — no manual frontmatter editing required. IDs are derived from the existing filename slugs (e.g.adr-2026-05-22-payment-service-architecture,bugfix-2026-05-22-fix-race-condition,api-create-user-endpoint).New helper
flaiwheel.frontmatter.emit()with stable, deterministic key order so same-day overwrites produce minimal diffs.
Previous: v3.10.0
Structured relations (v1) — two new read-only MCP tools,
relations(entity_id)andtimeline(entity_id), derive a per-project knowledge graph from YAML frontmatter on existing markdown docs. No new persistent store and nograph_add/invalidatewrites: markdown stays the single source of truth and Git history is the validity window. Recognised relation keys:replaces,depends_on,fixes,implements. Scalar keys:id,type,status,superseded_at.Frontmatter-aware quality checks —
validate_doc()now warns on unknown relation keys (info severity) and invalidstatusvalues (warning severity); heading-structure checks strip the leading---block first so frontmatter does not confuse the "first heading is h1" rule.GitWatcher.log_for_file()— read-only helper returning newest-first commits (hash,author, ISOdate,subject); backs thetimeline()tool.Zero new dependencies — frontmatter parsing is stdlib-only (
flaiwheel.frontmatter). Nopython-frontmatter/PyYAMLadded.Total tools: 28 → 30.
Note: the SQLite ER store (
graph_add/graph_invalidate/valid_from/valid_tocolumns) originally proposed for this feature is deferred as v2, gated on a real query becoming measurably too slow on v1. AST-driven code↔symbol edges (v3) remain merged with thefeature_ideas_backlog#13 track.
Previous: v3.9.40
Installer:
claude-mdno longer fails on repeat runs —claude mcp addnon-zero exits (e.g. MCP already registered) no longer abort the parallel phase underset -e; registration output is captured safely.Installer: correct release version from GitHub —
_FW_VERSIONis refreshed frommainpyproject.tomlwhen reachable so Docker rebuild / version checks stay aligned with the package even if rawinstall.shonmainlags at the CDN.
Previous: v3.9.29
Glama tool detection fix —
AuthManagercrashed on read-only/databefore the MCP server could start (the real reason Glama saw 0 tools). Skipped in stdio cold-start mode.Zero print() on stdout — 36 remaining
print()in watcher, indexer, readers, bootstrap replaced withdiag()(stderr). Verified: full MCP handshake returns all 28 tools over stdio.config.save()resilient — read-only filesystem logs warning instead of crashing.
Previous: v3.9.28
Glama / MCP stdio fix — all diagnostic output moved to stderr; stdout is now JSON-RPC only. Glama Inspector now detects all 28 tools correctly.
Improved cold-start detection — stdio cold-start logic handles empty Docker volumes correctly (no bootstrap / model download during Glama inspection).
Previous: v3.9.27
License cleanup — one
LICENSEfile (BSL 1.1) for correct GitHub/Glama detection; all docs and headers point toLICENSE(notLICENSE.md).Glama / stdio inspection — optional
[inspect]deps and cold-start stdio path for lightweight MCP directory builds.
Previous: v3.9.26
Claude Cowork skill — the Flaiwheel workflow is now distributed as a native Claude skill. The installer writes
.skills/skills/flaiwheel/SKILL.mdto your project. When you open the project in Claude (Cowork), the skill is auto-available — no extra setup needed. The skill drives session-start context restore, pre-coding knowledge search, mandatory post-bugfix documentation, and session-end summarisation.Skill source also committed to
skills/flaiwheel/SKILL.mdin this repo for reference and manual install.
Previous: v3.9.25
WSL2 automatic pre-flight setup — WSL2 is now detected automatically and a dedicated pre-flight block runs before the main installer flow. No manual steps required:
Switches
iptablesto legacy backend (fixes Docker networking / DNAT errors)Adds the current user to the
dockergroup (no morepermission denied)Starts the Docker daemon via
service(no systemd on WSL2)Adds a Docker auto-start snippet to
~/.bashrc(idempotent, runs on every WSL2 login)
Scattered WSL2 checks throughout the script consolidated into the single pre-flight block.
Previous: v3.9.24
Fix: auto-install python3 if missing — the installer uses
python3extensively for JSON manipulation. On minimal Linux/WSL2 systems without python3, config file writes silently failed (/dev/fd/63: line N: python3: command not found). python3 is now checked as prerequisite #0 and auto-installed via apt/dnf/yum/pacman/brew if missing.
Previous: v3.9.23
Fix: Docker daemon start on WSL2 with iptables-legacy — Docker on WSL2 often fails to start silently because the default
iptables-nftbackend is not supported. The installer now switches toiptables-legacyviaupdate-alternativesbefore starting Docker. Also adds the current user to thedockergroup automatically.All install commands updated to
bash <(curl ...)— every displayed install/re-run command throughout the script (error messages, AGENTS.md, Cursor rules, etc.) now uses process substitution to avoid WSL2 pipe issues.
Previous: v3.9.22
Fix:
curl | bashpipe write failures on WSL2 —curl | bashcan fail withcurl: (23) Failure writing outputon WSL2 due to pipe/tmp permission issues. The primary install command in README is nowbash <(curl ...)(process substitution), which avoids the pipe entirely. The re-exec block also tries$HOMEas a fallback temp dir when/tmpwrites fail. Error message explicitly recommends thebash <(curl ...)form.
Previous: v3.9.21
Fix: sudo guard moved before re-exec block — when
sudo curl | bashwas used, thecurl: (23)pipe error truncated the script before the previous sudo guard (which was after colors/functions) was ever reached. The guard is now the very first executable line (set -euo pipefailaside), so it fires even on a truncated download. Duplicate guard after colors removed.
Previous: v3.9.20
Fix: Docker daemon startup poll on WSL2 — instead of a fixed 5-second sleep, the installer now polls
docker infoevery 2 seconds for up to 30 seconds afterservice docker start. Also shows the actual output ofservice docker startso startup errors are visible instead of silently swallowed.
Previous: v3.9.19
Fix: Docker daemon start on WSL2 — WSL2 typically has no
systemd, sosystemctl start dockersilently failed. The installer now detects WSL2 via/proc/versionand usessudo service docker startinstead. If Docker still isn't running after install, a clear WSL2-specific error is shown with the exact fix command and a tip to add it to~/.bashrcfor auto-start on login.
Previous: v3.9.18
Fix: block
sudo curl | bashandsudo bash install.sh— running the installer as root viasudobreaks GitHub CLI authentication:gh authstores credentials in/root/.config/gh/instead of the real user's home, making every subsequentghcall fail. Also causedcurl: (23) Failure writing outputpipe errors on WSL. The installer now detectsSUDO_USERat startup and exits immediately with a clear message telling the user to re-run withoutsudo. Privilege escalation for package installs is handled internally.
Previous: v3.9.17
Fix:
gh auth loginmust not be run with sudo — after auto-installingghon Linux/WSL, the installer now explicitly tells the user to rungh auth loginwithoutsudo. If auth was previously done withsudo, credentials ended up in/root/.config/gh/and were invisible to the current user, causing the auth check to fail. The error messages at both the post-install and the auth-check step now clearly warn: do not use sudo forgh auth.
Previous: v3.9.16
Fix: installer works on WSL and non-root Linux — all Linux package manager commands (
apt-get,dnf,yum,zypper,pacman), Docker convenience script, andsystemctlcalls now automatically usesudowhen the installer is not running as root. Root installs are unaffected. FixesPermission denied/ lock file errors on WSL and standard Linux desktop users.
Previous: v3.9.15
Cold-start report cached in
/data/—analyze_codebase()saves the report to/data/coldstart-<project>.mdafter the first run. Subsequent calls return the cached report instantly (<1s). The installer also writes the cache during install so the very first MCP call by any agent is instant. Call withforce=Trueto regenerate after major codebase changes.analyze_codebase()in all agent Session Setup templates —AGENTS.md,.cursor/rules/flaiwheel.mdc,CLAUDE.md, and.github/copilot-instructions.mdall now include it as step 3 of Session Setup. Agents automatically get the codebase overview before starting work.Cold-start prompt asked before Docker rebuild — all interactive questions (embedding model + cold-start) are now batched upfront, then the rebuild runs unattended.
Fix: used
docker execfor cold-start — replaced broken HTTP calls to the MCP SSE endpoint with directdocker exec python3. Analysis now works reliably in ~20s.
Previous: v3.9.14
Fix: fast-path always prompts for cold-start — no more silent skip when cached report exists.
Previous: v3.9.13
Improved cold-start classification — two-pass classifier: path heuristics first, code-specific embedding templates as fallback.
Previous: v3.9.12
Fix: y/n answer respected before cache check — explicit
ynow always re-runs analysis even when cached report exists.
Previous: v3.9.11
Fix: coldstart functions in global scope — moved
_run_coldstart/_do_coldstart_analysisto top of script so fast-path can call them.
Previous: v3.9.10
Fix: version check —
LATEST_VERSIONnow uses_FW_VERSIONdirectly, no CDN fetch.
Previous: v3.9.9
Fix: cold-start on all paths —
_run_coldstart()called from fast-path, update, and fresh install. Smart cache detection.
Previous: v3.9.8
Cold-start report caching —
analyze_codebase()cached to/data/coldstart-<project>.mdfor instant reads. Newforce=Trueparam.
Previous: v3.9.7
Agent Session Setup — all instruction templates now include
analyze_codebase()as a first-session step.
Previous: v3.9.6
Fix: use docker exec — replaced broken HTTP calls to MCP SSE endpoint with direct
docker exec python3invocation. Cold-start report now actually works (~20s).
Previous: v3.9.5
Fix: warm up embedding model — added model warm-up before cold-start analysis (superseded by v3.9.6).
Previous: v3.9.4
Fix: cold-start retries while model loads — installer now retries
analyze_codebase()for up to 90s after container starts.
Previous: v3.9.3
Fix: update detection always checks
main—LATEST_VERSIONnow fetched frommainbranch so stale cached installers no longer silently skip updates.
Previous: v3.9.2
Cold-start prompt moved before Docker rebuild — all interactive questions now batched upfront.
Previous: v3.9.1
Cold-start prompt moved upfront — the
install.shcold-start question is now asked right after the embedding model selection (before the Docker rebuild), so all interactive questions are gathered first and the user never misses the prompt after a long rebuild.
Previous: v3.9.0
analyze_codebase(path)— new 28th MCP tool for zero-token cold-start analysis of legacy codebases. Runs entirely server-side in Docker. Uses Pythonast, regex, MiniLM embeddings, and nearest-centroid classification. Returns a rankedbootstrap_report.mdwith language distribution, category map, top 20 files by documentability score, near-duplicate pairs, and recommended next steps. Reduces cold-start token cost by ∼90%.
Previous: v3.8.3
No auto-index on project add — adding a project via the web UI no longer immediately pulls and embeds the knowledge repo. Indexing is now deferred until explicitly triggered (“Git Pull + Reindex” or
reindex()MCP tool), keeping the vector DB clean until the repo has been reviewed.
Previous: v3.6.x
VS Code / GitHub Copilot support — installer writes
.vscode/mcp.jsonand.github/copilot-instructions.md.Claude Desktop support — installer auto-configures Claude Desktop via
mcp-remote.Web UI Client Configuration panel — VS Code and Claude Code CLI tabs added.
Previous: v3.5.x
Claude Desktop + Claude Code CLI support added.
README strategically rewritten with positioning, target audience, and competitive framing.
Previous: v3.4.x
Search miss rate fix —
search_bugfixescalls no longer inflate miss rate above 100%.Classification consistency —
_path_category_hintunified token-based approach across all categories.CHANGELOG.mdadded to repo root.
Quick Start — One Command (recommended)
Prerequisites: GitHub CLI authenticated (gh auth login), Docker running.
Platform support: macOS and Linux work out of the box. On Windows, run the installer from WSL or Git Bash (Docker Desktop must be running with WSL 2 backend enabled).
Run this from inside your project directory:
bash <(curl -sSL https://raw.githubusercontent.com/dl4rce/flaiwheel/main/scripts/install.sh)WSL2 / Linux note: Use the
bash <(curl ...)form above — it avoidscurl: (23)pipe write errors that occur withcurl | bashon some WSL2 setups. Never prefix withsudo.
That's it. The installer automatically:
Detects your project name and GitHub org from the git remote
Creates a private
<project>-knowledgerepo with the standard folder structureStarts the Flaiwheel Docker container pointed at that repo
Configures Cursor — writes
.cursor/mcp.jsonand.cursor/rules/flaiwheel.mdcConfigures VS Code / GitHub Copilot — writes
.vscode/mcp.json(native SSE, VS Code 1.99+) and.github/copilot-instructions.mdConfigures Claude Desktop (macOS app) — writes
claude_desktop_config.jsonviamcp-remotebridge (requires Node.js)Configures Claude Code CLI — writes
.mcp.json+CLAUDE.mdand runsclaude mcp addautomatically if the CLI is on PATHInstalls Claude Cowork skill — writes
.skills/skills/flaiwheel/SKILL.mdso the full Flaiwheel workflow is available as a native Claude skillWrites
AGENTS.mdfor all other agentsIf existing
.mddocs are found, creates a migration guide — the AI will offer to organize them into the knowledge repo
After install:
Agent | What to do |
Cursor | Restart Cursor → Settings → MCP → enable |
Claude Desktop (macOS app) | Quit and reopen Claude for Mac — hammer icon appears when connected |
Claude Code CLI | Already registered automatically — run |
VS Code | Open project → Command Palette → MCP: List Servers → start |
Claude (Cowork) | Skill auto-loads from |
The installer also sets up a post-commit git hook that automatically captures every fix:, feat:, refactor:, perf:, and docs: commit as a structured knowledge doc — no agent or manual action required.
Once connected, the AI has access to all Flaiwheel tools. If you have existing docs, tell the AI: "migrate docs".
Optional: Open Terminal Local Daemon (Open WebUI)
If you also use Open WebUI's Open Terminal integration, this repo includes helper installers for a local open-terminal daemon.
Third-party write-ups (for example AI·Collab — Open Terminal) may mirror only the Linux script; macOS uses scripts/macos/install-open-terminal-launchagent.sh below. After any mirror update, re-check the file with shasum -a 256 against the same revision on GitHub.
One-liner install via curl (no git clone)
Use main or pin a commit SHA / tag in the URL for reproducible bytes.
Linux / WSL2 (systemd --user):
curl -fsSL -o install-open-terminal-systemd-user.sh \
https://raw.githubusercontent.com/dl4rce/flaiwheel/main/scripts/install-open-terminal-systemd-user.sh
/bin/chmod +x install-open-terminal-systemd-user.sh
/bin/bash ./install-open-terminal-systemd-user.shmacOS (LaunchAgent; do not use sudo):
curl -fsSL -o install-open-terminal-launchagent.sh \
https://raw.githubusercontent.com/dl4rce/flaiwheel/main/scripts/macos/install-open-terminal-launchagent.sh
/bin/chmod +x install-open-terminal-launchagent.sh
/bin/bash ./install-open-terminal-launchagent.shIf chmod or bash are “not found”, your PATH is broken (often Conda base); the /bin/… paths above still work.
Linux / WSL2 (systemd --user)
./scripts/install-open-terminal-systemd-user.shService name:
com.flaiwheel.open-terminal-local.serviceDefault endpoint:
http://localhost:8000The script auto-generates an API key and prints it after install/reset.
On WSL2, make sure
systemd=trueis enabled in/etc/wsl.conf.
Useful commands:
systemctl --user status com.flaiwheel.open-terminal-local.service
journalctl --user -u com.flaiwheel.open-terminal-local.service -fmacOS (launchctl LaunchAgent)
./scripts/macos/install-open-terminal-launchagent.shLaunchAgent label:
com.flaiwheel.open-terminal-localDefault endpoint:
http://localhost:8000The script auto-generates an API key and prints it after install/reset.
The LaunchAgent sets WorkingDirectory to
$HOMEby default so Open Terminal does not start in/private/tmp.PATH:
launchddoes not load~/.zshrc, so the daemon used to see only/usr/bin:/bin:…and miss Homebrew / Supabase CLI. The generated wrapper prepends/opt/homebrew/bin,/usr/local/bin,~/.local/bin, and~/.npm-global/bin. Re-run the installer (menu →1 Update) after pulling this change so the wrapper is regenerated.Persisted custom folder: the installer can save a path in
~/.config/flaiwheel/open-terminal-working-directory(fresh-install prompt, or menu →5 when re-running the script). Update (menu →1) keeps using that saved path. One-off override: setOPEN_TERMINAL_WORKING_DIRECTORYfor that run only.
Environment overrides (both scripts):
HOST=127.0.0.1 PORT=8000 OPEN_TERMINAL_CORS_ALLOWED_ORIGINS='https://your-openwebui.example' ./scripts/install-open-terminal-systemd-user.shHOST=127.0.0.1 PORT=8000 OPEN_TERMINAL_CORS_ALLOWED_ORIGINS='https://your-openwebui.example' ./scripts/macos/install-open-terminal-launchagent.shmacOS only — custom initial folder for Open Terminal (must exist before you save it):
OPEN_TERMINAL_WORKING_DIRECTORY="$HOME/projects/my-repo" ./scripts/macos/install-open-terminal-launchagent.shRe-run the same script and choose 5 to change or clear the saved folder (or edit ~/.config/flaiwheel/open-terminal-working-directory). Non-interactive install: set the env var above or create that file with a single line (path); use AUTO_INSTALL_DEPS=1 to skip the first-run path prompt.
Updating
Run the same install command again from your project directory:
bash <(curl -sSL https://raw.githubusercontent.com/dl4rce/flaiwheel/main/scripts/install.sh)The installer detects the existing container, asks for confirmation, then:
Rebuilds the Docker image with the latest code
Recreates the container (preserves your data volume + config)
Refreshes all agent configs and guides
Your knowledge base, index, and credentials are preserved — only the code is updated.
Manual Setup
1. Create a knowledge repo
# On GitHub, create: <your-project>-knowledge (private repo)
mkdir -p architecture api bugfix-log best-practices setup changelog
echo "# Project Knowledge Base" > README.md
git add -A && git commit -m "init" && git push2. Build and start Flaiwheel
git clone https://github.com/dl4rce/flaiwheel.git /tmp/flaiwheel-build
docker build -t flaiwheel:latest /tmp/flaiwheel-build
# Smoke-test the image BEFORE starting or replacing a container.
# A broken transitive dependency only surfaces on a fresh resolve, so an
# image can build cleanly and still fail every import at runtime.
docker run --rm --entrypoint sh flaiwheel:latest -c \
'python -c "from flaiwheel.server import create_mcp_server; import flaiwheel; print(flaiwheel.__version__)"'
docker run -d \
--name flaiwheel \
-p 8080:8080 \
-p 8081:8081 \
-e MCP_GIT_REPO_URL=https://github.com/you/yourproject-knowledge.git \
-e MCP_GIT_TOKEN=ghp_your_token \
-v flaiwheel-data:/data \
flaiwheel:latestUpgrading an existing container? Run the smoke test above first, then rename the old container instead of removing it (
docker rename flaiwheel flaiwheel-rollback) so you can restore it instantly if the new one fails its health check. Confirm every knowledge repo is pushed (git rev-list --count @{u}..HEAD→0) before swapping.
3. Connect your AI agent
Cursor — add to .cursor/mcp.json:
{
"mcpServers": {
"flaiwheel": {
"type": "sse",
"url": "http://localhost:8081/sse"
}
}
}VS Code / GitHub Copilot (1.99+) — add to .vscode/mcp.json:
{
"servers": {
"flaiwheel": {
"type": "sse",
"url": "http://localhost:8081/sse"
}
}
}Then: Command Palette → MCP: List Servers → start flaiwheel.
Claude Desktop (macOS app) — add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"flaiwheel": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://localhost:8081/sse"]
}
}
}Requires Node.js. Restart Claude for Mac after editing.
Claude Code CLI — run once in your project directory:
claude mcp add --transport sse --scope project flaiwheel http://localhost:8081/sse4. Done. Start coding.
Knowledge Repo Structure
yourproject-knowledge/
├── README.md ← overview / index
├── architecture/ ← system design, decisions, diagrams
├── api/ ← endpoint docs, contracts, schemas
├── bugfix-log/ ← auto-generated bugfix summaries
│ └── 2026-02-25-fix-payment-retry.md
├── best-practices/ ← coding standards, patterns
├── setup/ ← deployment, environment setup
├── changelog/ ← release notes
└── tests/ ← test cases, scenarios, regression patternsSupported Input Formats
Flaiwheel indexes 9 file formats. All non-markdown files are converted to markdown-like text in memory at index time — no generated files on disk, no repo clutter.
Format | Extension(s) | How it works |
Markdown |
| Native (pass-through) |
Plain text |
| Wrapped in |
| Text extracted per page via | |
HTML |
| Headings/lists/code converted to markdown, scripts stripped |
reStructuredText |
| Heading underlines converted to |
Word |
| Paragraphs + heading styles mapped to markdown |
JSON |
| Pretty-printed in fenced |
YAML |
| Wrapped in fenced |
CSV |
| Converted to markdown table |
Quality checks (structure, completeness, bugfix format) apply only to .md files. Other formats are indexed as-is.
Configuration
All config via environment variables (MCP_ prefix), Web UI (http://localhost:8080), or .env file.
Variable | Default | Description |
|
| Path to .md files inside container |
|
|
|
|
| Embedding model name |
|
|
|
|
| Enable cross-encoder reranker for higher precision |
|
| Reranker model name |
|
| RRF k parameter (lower = more weight on top ranks) |
|
| Vector search weight in RRF fusion |
|
| BM25 keyword search weight in RRF fusion |
|
| Minimum relevance % to return (0 = no filter) |
| Knowledge repo URL (enables git sync) | |
|
| Branch to sync |
| GitHub token for private repos | |
|
| Pull interval in seconds (0 = disabled) |
|
| Auto-commit + push bugfix summaries |
|
| Secret scan before auto-commit: |
| GitHub webhook secret (enables | |
|
| MCP transport: |
|
| MCP SSE endpoint port |
|
| Web UI port |
Multi-Repo Support
A single Flaiwheel container can manage multiple knowledge repositories — one per project. Each project gets its own ChromaDB collection, git watcher, index lock, health tracker, and quality checker, while sharing one embedding model in RAM and one MCP/Web endpoint.
How it works:
The first
install.shrun creates the Flaiwheel container with project ASubsequent
install.shruns from other project directories detect the running container and register the new project via the API — no additional containersAll MCP tools accept an optional
projectparameter (e.g.,search_docs("query", project="my-app"))Call
set_project("my-app")at the start of every conversation to bind all subsequent calls to that project (sticky session)Without an explicit
projectparameter, the active project (set viaset_project) is used; if none is set, the first project is usedThe Web UI has a project selector dropdown to switch between projects
Use
list_projects()via MCP to see all registered projects (shows active marker)
Adding/removing projects:
Via AI agent: call
setup_project(name="my-app", git_repo_url="...")— registers, clones, indexes, and auto-bindsVia install script: run
install.shfrom a new project directory (auto-registers)Via Web UI: click "Add Project" in the project selector bar
Via API:
POST /api/projectswith{name, git_repo_url, git_branch, git_token}Remove:
DELETE /api/projects/{name}or the "Remove" button in the Web UI
Backward compatibility: existing single-project setups continue to work without changes. If no projects.json exists but MCP_GIT_REPO_URL is set, Flaiwheel auto-creates a single project from the env vars.
Embedding Model Hot-Swap
When you change the embedding model via the Web UI, Flaiwheel re-embeds all documents in the background using a shadow collection. Search remains fully available on the old model while the migration runs. Once complete, the new index atomically replaces the old one — zero downtime.
The Web UI shows a live progress bar with file count and percentage. You can cancel at any time.
Embedding Models (local, free)
Model | RAM | Quality | Best for |
| 90MB | 78% | Large repos, low RAM |
| 520MB | 87% | Best English quality |
| 2.2GB | 86% | Multilingual (DE/EN) |
Select via Web UI or MCP_EMBEDDING_MODEL env var. Full list in the Web UI.
Cross-Encoder Reranker (optional)
The reranker is a second-stage model that rescores the top candidates from hybrid search. It reads the full (query, document) pair together, which produces much more accurate relevance scores than independent embeddings — especially for vocabulary-mismatch queries where the user and the document use different words for the same concept.
How it works:
Hybrid search (vector + BM25) retrieves a wider candidate pool (
top_k × 5)RRF merges and ranks the candidates
The cross-encoder rescores the top candidates and returns only the best
top_k
Enable via Web UI (Search & Retrieval card) or environment variable:
docker run -d \
-e MCP_RERANKER_ENABLED=true \
-e MCP_RERANKER_MODEL=cross-encoder/ms-marco-MiniLM-L-6-v2 \
...Reranker Model | RAM | Speed | Quality |
| 90MB | Fast | Good — best speed/quality balance |
| 130MB | Medium | Better — higher precision |
| 420MB | Slower | Best — state-of-the-art accuracy |
The reranker is off by default (zero overhead). When enabled, it adds ~50ms latency per search but typically improves precision by 10-25% on vocabulary-mismatch queries.
GitHub Webhook (instant reindex)
Instead of waiting for the 300s polling interval, configure a GitHub webhook for instant reindex on push:
In your knowledge repo on GitHub: Settings → Webhooks → Add webhook
Payload URL:
http://your-server:8080/webhook/githubContent type:
application/jsonSecret: set the same value as
MCP_WEBHOOK_SECRETEvents: select "Just the push event"
The webhook endpoint verifies the HMAC signature if MCP_WEBHOOK_SECRET is set. Without a secret, any POST triggers a pull + reindex.
CI Guardrail Telemetry (ROI tracking)
Track non-vanity engineering impact directly in Flaiwheel:
POST
/api/telemetry/ci-guardrail-report— CI reports guardrail findings/fixes per PRGET
/api/impact-metrics?project=<name>&days=30— returns estimated time saved + regressions avoided
Example payload:
{
"project": "my-app",
"violations_found": 4,
"violations_blocking": 1,
"violations_fixed_before_merge": 2,
"cycle_time_baseline_minutes": 58,
"cycle_time_actual_minutes": 43,
"pr_number": 127,
"branch": "feature/payment-fix",
"commit_sha": "abc1234",
"source": "github-actions"
}Flaiwheel persists telemetry on disk (<vectorstore>/telemetry) so metrics survive container restarts and updates.
Diff-aware Reindexing
Reindexing is incremental by default — only files whose content changed since the last run are re-embedded. On a 500-file repo, this means a typical reindex after a single-file push takes <1s instead of re-embedding everything.
Use reindex(force=True) via MCP or the Web UI "Reindex" button to force a full rebuild (e.g. after changing the embedding model).
Architecture
┌─────────────────────────────────────────────────────────────┐
│ Docker Container (single process, N projects) │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Web-UI (FastAPI) Port 8080 │ │
│ │ Project CRUD, config, monitoring, search, health │ │
│ └─────────────────────┬─────────────────────────────────┘ │
│ │ shared state (ProjectRegistry) │
│ ┌─────────────────────┴─────────────────────────────────┐ │
│ │ MCP Server (FastMCP) Port 8081 │ │
│ │ 30 tools (search, write, classify, manage, projects,│ │
│ │ relations, timeline) │ │
│ └─────────────────────┬─────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────┴─────────────────────────────────┐ │
│ │ Shared Embedding Model (1× in RAM) │ │
│ └─────────────────────┬─────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────┴────────────────────────────────┐ │
│ │ Per-Project Contexts (isolated) │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Project A │ │ Project B │ │ Project C │ │ │
│ │ │ collection │ │ collection │ │ collection │ │ │
│ │ │ watcher │ │ watcher │ │ watcher │ │ │
│ │ │ lock │ │ lock │ │ lock │ │ │
│ │ │ health │ │ health │ │ health │ │ │
│ │ │ quality │ │ quality │ │ quality │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ /docs/{project}/ ← per-project knowledge repos │
│ /data/ ← shared vectorstore + config + projects │
└─────────────────────────────────────────────────────────────┘Search Pipeline
query
│
├──► Vector Search (ChromaDB/HNSW, cosine similarity)
│ fetch top_k (or top_k×5 if reranker enabled)
│
├──► BM25 Keyword Search (bm25s, English stopwords)
│ fetch top_k (or top_k×5 if reranker enabled)
│
├──► RRF Fusion (configurable k, vector/BM25 weights)
│ merge + rank candidates
│
├──► [optional] Cross-Encoder Reranker
│ rescore (query, doc) pairs for higher precision
│
├──► Min Relevance Filter (configurable threshold)
│
└──► Return top_k results with relevance scoresWeb UI
Access at http://localhost:8080 (HTTP Basic Auth — credentials shown on first start).
Features:
System health panel: last index, last git pull, git commit, version, search metrics, quality score, skipped files count
Index status and statistics (including reranker status)
Embedding model selection (visual picker)
Search & Retrieval tuning: cross-encoder reranker toggle + model picker, RRF weights, minimum relevance threshold
Chunking strategy configuration
Git sync settings (URL, branch, auto-push toggle)
Test search interface
Knowledge quality checker (also runs automatically after every reindex)
Search metrics (hits/total, miss rate, per-tool breakdown)
Skipped files indicator (files excluded from indexing due to critical quality issues)
"This is the Way" — Knowledge Bootstrap: agent-driven project classification + in-repo cleanup (Web UI shows guidance + advanced scan)
Multi-project switcher (manage multiple repos from one instance)
Client configuration snippets (Cursor, Claude Desktop, Docker)
Password management
Development
# Clone
git clone https://github.com/dl4rce/flaiwheel.git
cd flaiwheel
# Install
pip install -e ".[dev]"
# Run tests (259 tests covering readers, quality checker, indexer, reranker, health tracker, MCP tools, model migration, multi-project, bootstrap, classification, file-context, cold-start analyzer)
pytest
# Run locally (needs /docs and /data directories)
mkdir -p /tmp/flaiwheel-docs /tmp/flaiwheel-data
MCP_DOCS_PATH=/tmp/flaiwheel-docs MCP_VECTORSTORE_PATH=/tmp/flaiwheel-data python -m flaiwheelLicense
Business Source License 1.1 (BSL 1.1)
Flaiwheel is source-available under the Business Source License 1.1.
You may use Flaiwheel for free if:
Your use is non-commercial (personal, educational, no revenue), or
Your organization has no more than 10 individuals using it
Commercial use beyond these limits (e.g., teams of 11+ or commercial deployment) requires a paid license.
Effective 2030-02-25, this version converts to Apache License 2.0 (fully open source)
Commercial licenses: info@4rce.com | https://4rce.com
See LICENSE for full terms.
Available Tools
30 toolsanalyze_codebaseA
Analyze a source code directory and return a cold-start bootstrap report. Read-only.
Does not modify source files or the vector index. Runs entirely
server-side using Python ast, regex, and local MiniLM embeddings —
no cloud calls, no token cost.
The report is cached at /data/coldstart-{project}.md after the first
run and returned instantly on subsequent calls. Use force=True only
after significant code changes — not for routine sessions.
Use at the START of work on an unfamiliar codebase instead of reading
dozens of files. Then use the write_*() tools to document the top
files identified in the report. Use classify_documents() for existing
.md files in the project repo.
The path must be accessible inside the Docker container (i.e. mounted
as a volume). It cannot reach paths on the host that are not mounted.
Args:
path: Absolute path to the source directory to scan
force: Regenerate even if a cached report exists (default: False)
project: Target project name (optional)
Returns:
Markdown report (~5–20 KB) with language distribution, category map,
top 20 files ranked by documentability, near-duplicate file pairs,
undocumented directories, and recommended next steps.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| force | No | ||
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully discloses behavior: read-only, no modifications, server-side execution, no cloud calls or token cost, caching with instant return on subsequent calls, and path mount requirements. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a lead sentence, bullet-style paragraphs, and explicit Args/Returns sections. It contains necessary details without excessive verbosity. Slightly long but justified by the need to cover behavior, caching, and usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema (Markdown report), the description covers input parameters, behavior, caching policy, usage timing, and alternative tools. It provides complete context for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description explains all parameters: path (absolute path in container), force (regenerate cache, default False), project (optional). It also describes the return value (Markdown report with specific sections). This compensates fully for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Analyze a source code directory and return a cold-start bootstrap report.' It uses a specific verb and resource, and distinguishes itself from siblings like classify_documents and write_* tools, which are mentioned for subsequent steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use at the START of work on an unfamiliar codebase instead of reading dozens of files.' It advises against frequent use of force=True and directs users to alternative tools (write_*, classify_documents) for subsequent tasks. Also notes path accessibility constraints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_knowledge_repoA
Analyse the knowledge repo for structure issues, duplicates, and misplaced files.
Read-only — no files are modified. Scans files already inside the
knowledge repo (inside the Docker volume), not the project source repo.
Caches the report in memory so execute_cleanup() can act on it in the
same session.
To classify and migrate files from the project source repo use
classify_documents() instead. For a simpler quality check without
cleanup proposals use check_knowledge_quality().
Args:
project: Target project name (optional)
Returns:
Structured report with file counts by category, duplicate pairs,
misplaced files, and numbered proposed cleanup actions (a1, a2, …)
ready for execute_cleanup().
| Name | Required | Description | Default |
|---|---|---|---|
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Declares read-only nature, scope (knowledge repo inside Docker volume), and caching behavior. No contradiction with missing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a clear intro line and bullet points; covers key aspects without excessive verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Mentions output structure and integration with execute_cleanup. Output schema covers return values. Missing prerequisites but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Describes the single optional parameter briefly ('Target project name (optional)'), but lacks detail on how it affects analysis. Schema has no descriptions, so description adds minimal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicitly states 'Analyse the knowledge repo for structure issues, duplicates, and misplaced files' and distinguishes from siblings like classify_documents and check_knowledge_quality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides specific when-to-use guidance: for classification use classify_documents, for simpler quality check use check_knowledge_quality, and notes that the report is cached for execute_cleanup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_knowledge_qualityA
Validate the knowledge base for consistency and structural correctness. Read-only.
Does not modify any files or the vector index. Use periodically
or after adding many documents to spot quality regressions.
Use validate_doc() instead to check a single document before committing.
Use get_index_stats() to check chunk counts rather than quality.
Args:
project: Target project name (optional)
Returns:
Quality score 0–100, counts of critical/warning/info issues,
and a per-file issue list tagged [!] critical, [~] warning, [i] info.
Critical issues cause files to be skipped during indexing.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Read-only. Does not modify any files or the vector index.' This is critical behavioral info. Since no annotations are provided, the description fully bears the burden and addresses it well. It also explains return format with quality score and issue categories.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, usage guidance, and parameter/return details. Every sentence is informative; no fluff. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one simple optional parameter and no required params or nested objects, the description is thorough. It explains behavioral aspects, usage context, and return format. Lacks mention of error handling or edge cases, but sufficient for a read-only validation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one optional parameter 'project'. The schema has no description (coverage 0%), so the description's mention 'Target project name (optional)' adds meaning. However, it does not elaborate on default behavior or domain, which could be valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Validate the knowledge base for consistency and structural correctness' using a specific verb and resource. It distinguishes from siblings by referencing validate_doc() and get_index_stats(), providing clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises when to use: 'Use periodically or after adding many documents to spot quality regressions.' It also gives alternatives: 'Use validate_doc() instead to check a single document before committing. Use get_index_stats() to check chunk counts rather than quality.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_updateA
Check whether a newer Flaiwheel version is available on GitHub. Read-only.
Makes a single network request to GitHub (git ls-remote) to compare
version tags against the running version. No files are modified.
Use when you suspect Flaiwheel may be outdated, or periodically to
keep the server current.
Returns:
"Up to date" message, or the available version number plus the
exact bash command to give the user for upgrading.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool is read-only, makes a single network request using git ls-remote, and does not modify files. However, it does not mention potential network failures or rate limits, which are minor omissions for a simple check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a clear one-line summary, followed by detailed behavioral notes in a single paragraph, and a bullet-like list of return values. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no annotations, the description provides all necessary information: purpose, behavior, usage guidance, and return values. The presence of an output schema (as indicated by context signals) further reduces the need to describe return structure in detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and schema coverage is 100% (empty). The description adds value by explaining the return format ('Up to date' message or version number with upgrade command), which is beyond the schema. Baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks for a newer Flaiwheel version on GitHub. It includes a specific verb ('check') and resource ('Flaiwheel version'), and distinguishes itself from sibling tools, none of which serve a similar update-checking purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool: 'when you suspect Flaiwheel may be outdated, or periodically to keep the server current.' Although it does not mention when not to use it or alternatives, the context of sibling tools doesn't imply any overlapping functionality, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classify_documentsA
Classify project repo documents for migration into the knowledge base. Read-only.
Does not write any files. The agent reads project files locally and
passes their content here; the Docker container cannot access the
project source repo directly. Flaiwheel classifies each file by
semantic similarity and returns a migration plan.
Trigger: user says "This is the Way" or "42".
Step 1 of the migration workflow — after classification, use the
suggested write_*() tool for each file to push it into the knowledge base.
Use analyze_knowledge_repo() instead when files are already inside the
knowledge repo and need reorganisation.
Args:
files: JSON array of {"path": "...", "content": "..."} objects.
Send the first ~2000 characters of each file as content.
Example: [{"path": "docs/auth.md", "content": "# Auth..."}]
project: Target project name (optional)
Returns:
Per-file classification (category, suggested write_*() tool),
duplicate detection, and a step-by-step migration plan.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | ||
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It clearly states read-only nature, explains that agent reads files locally and passes content, and that Docker container cannot access source repo. However, lacks details on rate limits, auth, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with clear sections: purpose, read-only note, trigger, step, alternative, parameter details, and return summary. Front-loaded with key info, no redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (classifying multiple files), description covers workflow, input format, output (classification, duplicates, plan), and integration with other tools. Output schema exists, so return values are adequately summarized.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description adds rich details: for 'files' parameter it explains format (JSON array of objects with path and content), recommends sending first ~2000 characters, and provides example. For 'project' it describes as optional target project name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Classify project repo documents for migration into the knowledge base.' It also specifies it is read-only, step 1 of migration, and distinguishes from sibling tool analyze_knowledge_repo().
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides trigger phrase ('This is the Way' or '42'), states when to use (step 1 after which write_* tools are used), and when not (use analyze_knowledge_repo() for files already in knowledge repo).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_cleanupA
Execute approved cleanup actions from analyze_knowledge_repo().
Side effects: moves files within the knowledge repo using git mv
(preserves git history) and creates missing category directories.
NEVER deletes any file. Requires analyze_knowledge_repo() to have
been called first in this session.
Use "all" to execute every proposed action, or pass a comma-separated
list of specific action IDs (e.g. "a1,a3") to cherry-pick.
Call reindex() after cleanup to rebuild the search index.
Args:
actions: Comma-separated action IDs from the analysis report,
e.g. "a1,a2,a5", or "all" to execute everything
project: Target project name (optional)
Returns:
Per-action results (directories created, files moved), any errors,
and a rollback command to undo the moves if needed.
| Name | Required | Description | Default |
|---|---|---|---|
| actions | Yes | ||
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: it moves files using git mv, creates directories, and explicitly states 'NEVER deletes any file'. It also mentions return values and a rollback command.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at ~150 words, well-structured with clear sections, and front-loaded with the primary purpose. Each sentence provides valuable information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter structure and presence of an output schema, the description covers prerequisites, side effects, usage patterns, and return values, making it fully informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description fully explains both parameters with examples and format: 'actions: Comma-separated action IDs... e.g. "a1,a2,a5" or "all"' and 'project: Target project name (optional)'. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Execute approved cleanup actions from analyze_knowledge_repo().' It specifies the verb (execute) and resource (cleanup actions), and distinguishes it from sibling tools like analyze_knowledge_repo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states prerequisites ('Requires analyze_knowledge_repo() to have been called first') and follow-up steps ('Call reindex() after cleanup'), providing clear context for when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_active_projectA
Show the active project for this session. Read-only, no side effects.
Use to verify which project is bound before making tool calls.
Use set_project() to change the binding. Use list_projects() to see
all registered projects and their stats.
Returns:
Active project name, chunk count, and docs path when bound.
Instructions to call set_project() or setup_project() when not bound.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly declares 'Read-only, no side effects,' which is a clear behavioral trait. It also describes the return values, providing full transparency without annotations. This is well above the minimum required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short sentences plus a usage notes section and return description. It is front-loaded with the core purpose and every sentence earns its place. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description provides complete context: what it does, when to use it, alternatives, and return values. No additional information is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the description adds value by explaining the return values. Baseline is 4 for zero-parameter tools, and the description enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Show' and resource 'active project', and distinguishes from sibling tools by explicitly mentioning set_project() and list_projects() as alternatives for changing or listing projects. This provides a specific and differentiated purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('to verify which project is bound before making tool calls') and directs to set_project() for changing the binding and list_projects() for viewing all projects. This provides clear when-to-use and alternative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_contextA
Retrieve knowledge base context relevant to a specific source file. Read-only.
Runs multiple semantic searches derived from the filename and returns
architecture decisions, past bugfixes, and best practices related to
that file — without requiring a manual search query. No files modified.
Complements get_recent_sessions() (temporal context) with file-level
spatial context. Use before reading or editing any source file.
Use search_docs() for free-form queries not tied to a specific file.
Args:
filename: File path or name being opened/edited, e.g.
"payment.service.ts" or "src/auth/jwt.py"
project: Target project name (optional)
Returns:
Relevant architecture docs, bugfix summaries, and best practices
for the given file, ranked by relevance. Returns "no context found"
when the knowledge base has nothing for that file yet.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| filename | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description fully discloses read-only nature ('No files modified', 'Read-only'), the semantic search process, and return behavior including the 'no context found' case.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, details, args section, and returns section. Every sentence is meaningful and concise, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (mentioned in context signals), the description appropriately explains the return content and edge case, providing sufficient completeness for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description adds valuable context: filename is explained with examples ('payment.service.ts' or 'src/auth/jwt.py') and project is described as optional target project name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve knowledge base context relevant to a specific source file' with a specific verb and resource, and explicitly distinguishes from siblings like get_recent_sessions and search_docs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use ('before reading or editing any source file'), when not to use ('Use search_docs() for free-form queries not tied to a specific file'), and names an alternative (get_recent_sessions).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_index_statsA
Show vector index statistics for the active project. Read-only, no side effects.
Use to check how many chunks are indexed, verify a reindex completed,
or inspect the embedding model and chunking configuration.
Use check_knowledge_quality() instead when you want quality issues, not stats.
Args:
project: Target project name (optional)
Returns:
Total chunk count, docs path, embedding provider and model,
chunking strategy, and per-document-type chunk distribution.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description declares read-only, no side effects, and lists return fields. Some missing details like permissions or error handling, but sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with paragraphs and bullet points, concise with essential information. Slightly verbose in returning details, but acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
In context of one optional parameter and output schema, description covers purpose, usage, and return values completely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but description adds meaning for 'project' as optional target project name. Adequate but not extensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it shows vector index statistics, is read-only, and distinguishes itself from sibling tool check_knowledge_quality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (check chunk counts, verify reindex, inspect config) and when not to (use check_knowledge_quality for quality issues), providing clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_sessionsA
Retrieve recent session summaries to restore context. Read-only.
Reads from /data/sessions-{project}.json. Does not modify any data.
Call at the START of every session before any other tools to understand
what was done previously and pick up open questions.
Use save_session_summary() at the END of a session to store context.
Args:
limit: Number of most-recent sessions to return (default: 5, max: 20)
project: Target project name (optional)
Returns:
Timestamped session entries showing summary, decisions, open
questions, and modified files for each session, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description fully discloses behavior: reads from /data/sessions-{project}.json, does not modify data, and describes output structure (timestamped entries with summary, decisions, etc.).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded with key info, no waste. Structured logically: purpose, file location, usage, parameters, return value. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, description explains return values sufficiently. Covers all aspects: purpose, usage, behavior, parameters, and output. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% coverage (no descriptions), but description fully documents both parameters: limit (default 5, max 20) and project (optional). Compensates for schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb ('retrieve'), resource ('session summaries'), and purpose ('restore context'). Explicitly notes read-only nature, distinguishing it from sibling tools like save_session_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use: 'Call at the START of every session before any other tools' and when-to-use alternative: 'Use save_session_summary() at the END of a session to store context.' No ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_pull_reindexA
Pull latest commits from the knowledge repo git remote, then re-index.
Call this AFTER pushing .md files to the knowledge repo. Runs
'git pull' on the cloned docs directory, then re-indexes only changed
files. No-op if the repo is already up to date.
Requires MCP_GIT_REPO_URL to be configured. Use reindex() instead
when files were written locally (not via git push).
Args:
project: Target project name (optional)
Returns:
"Already up to date" if no changes, otherwise files indexed,
chunks upserted, and stale chunks removed.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the workflow (git pull then re-index only changed files), notes it's a no-op if up-to-date, and indicates what returns. Lacks explicit mention of network usage or potential side effects, but covers main behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise, uses bullet points for clarity, and front-loads the main purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description covers prerequisites, behavior variations, and return states. Could elaborate on project parameter usage, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'project' is only described as 'Target project name (optional)', which adds no meaning beyond the schema's type and default. With 0% schema coverage, the description should provide more context, e.g., how project filtering works or what default project is used.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (pull and re-index), the trigger (after pushing .md files), and distinguishes from the sibling tool 'reindex' by specifying when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call (after pushing .md files), when not to (use reindex for local writes), and mentions the prerequisite MCP_GIT_REPO_URL configuration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
List all registered projects with chunk counts and health stats. Read-only.
Use to check which projects exist, their index sizes, quality scores,
and git repo URLs. Use get_active_project() to check only the active
project for the current session.
Returns:
Per-project summary: name (with active marker), total chunks,
quality score, docs path, and git repo URL if configured.
Returns setup instructions when no projects are registered.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully bears the burden of behavioral disclosure. It explicitly declares 'Read-only', which is the key behavioral trait for a list operation. It also describes the return value in detail, including the per-project summary and the empty state behavior. No side effects or auth requirements are mentioned, but for a read-only list, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a single sentence stating the core functionality, then a 'Use to' section, and a 'Returns' section. Every sentence adds value, with no redundancy or unnecessary detail. It is front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no annotations, and the presence of an output schema, the description is complete. It explains the output per project (name, chunks, quality score, docs path, git repo URL) and the behavior when no projects are registered. No gaps remain for an agent to effectively use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, and schema description coverage is 100% vacuously. The description adds no parameter-specific information, but with no parameters to describe, a baseline score of 4 is appropriate as the description compensates by explaining the output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'list' and the resource 'projects', clearly stating it lists all registered projects with chunk counts and health stats. It distinguishes itself from the sibling tool 'get_active_project' by noting that the latter checks only the active project, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('to check which projects exist...') and provides a clear alternative ('Use get_active_project() to check only the active project'). It also mentions the behavior for empty projects. While it could include explicit 'when not to use' guidance, the context is sufficient for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reindexA
Re-index the knowledge base docs into the vector store.
Modifies the vector index in place. Does not modify source .md files.
By default only re-embeds changed files (fast, diff-aware). Set
force=True to rebuild all embeddings from scratch — use this after
changing the embedding model, not for routine updates.
Use git_pull_reindex() instead when the docs changes came from a
git push to the knowledge repo.
Args:
force: Rebuild all embeddings from scratch, not just changed files
(default: False — use only when changing embedding model)
project: Target project name (optional)
Returns:
Files indexed, changed, skipped; chunks upserted; stale chunks removed.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes in-place modification, no source file changes, diff-aware default, and force rebuild behavior. Mentions stale chunk removal but lacks potential side effects or auth details. With no annotations, description carries full burden and does well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with intro, bullet points, and returns section. Not overly verbose, but could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, behavior, parameters, and return values. Output schema exists but description's Returns section is sufficient. No missing information for a reindex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description compensates fully. Explains force parameter (purpose and when to use) and project parameter (target project). Adds meaning beyond schema defaults and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Re-index the knowledge base docs into the vector store' with specific verb and resource. It distinguishes from sibling tool git_pull_reindex by noting its better fit for git-push changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use force=True (after changing embedding model) and when to prefer git_pull_reindex (for git-sourced changes). Provides clear default behavior (diff-aware).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
relationsA
Return structured relations for an entity, derived from YAML frontmatter. Read-only.
Entities and edges are declared **explicitly** in markdown frontmatter:
---
id: adr-0042
type: architecture
replaces: [adr-0017]
depends_on: [service-summarizer]
status: active
---
Recognised relation keys: replaces, depends_on, fixes, implements.
Use timeline() to see when the doc holding an entity changed over time.
Args:
entity_id: Frontmatter ``id`` value of the entity to resolve
project: Target project name (optional)
Returns:
Markdown showing the entity, its outbound edges (declared on
this doc), and inbound edges (other docs that reference it).
Lists are truncated; entities not found return a hint.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| entity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: read-only, lists recognized relation keys, explains output format (Markdown with truncation and not-found hints), and describes how relations are declared in frontmatter. This exceeds expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary first, then a YAML example, recognized keys, args, and returns. It's longer but each part adds value. Minor conciseness issues: the example could be shorter, but overall front-loading is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and that an output schema exists, the description is complete: it explains behavior, truncation, not-found hints, recognized keys, and references an alternative tool. No gaps in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description explains entity_id as the frontmatter 'id' value and project as an optional target project name, adding meaning beyond schema types and defaults. It could be more explicit about project's role, but it's good.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns structured relations for an entity from YAML frontmatter, uses specific verbs like 'Return structured relations', and distinguishes from siblings like timeline() by mentioning it as an alternative for change history. It lists recognized relation keys, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use (to resolve an entity's relations) and explicitly suggests timeline() for change history. However, it does not explicitly state when not to use this tool or provide alternatives for tasks like listing all entities or searching, but the context is sufficient for most agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_session_summaryA
Append a session summary to the project's session log.
Side effects: appends a JSON entry to /data/sessions-{project}.json.
Does not modify the vector index or the knowledge repo. Safe to call
multiple times in one session — each call adds a new entry.
Call at the END of every session. Use get_recent_sessions() at the
START of the next session to restore context.
Args:
summary: What was accomplished this session (1–3 sentences)
decisions: Key decisions made, comma-separated (optional)
open_questions: Unresolved questions or next steps, comma-separated (optional)
files_modified: Files changed, comma-separated (optional)
project: Target project name (optional)
Returns:
Confirmation with the project name and total session count stored.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| summary | Yes | ||
| decisions | No | ||
| files_modified | No | ||
| open_questions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effects (appends to JSON file, does not modify vector index or knowledge repo), states it is safe to call multiple times, and explains each call adds a new entry. No annotations were provided, so the description fully carries the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections: main purpose, side effects, usage, arguments, returns. Every sentence adds value, and the information is front-loaded. Despite length, it is appropriately concise for the detail needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary aspects: what the tool does, side effects, when to use, parameter details, and return value. With no annotations and a low schema coverage, the description provides complete context for correct agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an Args section that explains each parameter's purpose (e.g., summary: 1–3 sentences, decisions: comma-separated, optional). The schema only has types and defaults, so the description adds significant meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool appends a session summary to the project's session log, using a specific verb and resource. It distinguishes itself from sibling tools like get_recent_sessions by explaining the complementary usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call at the END of every session and to use get_recent_sessions at the start of the next session, providing clear when-to-use guidance with an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_bugfixesA
Search only bugfix summaries for similar past problems. Read-only, no side effects.
Prefer this over search_docs() when debugging — it filters to bugfix
documents only, surfacing root causes and solutions faster.
Use search_docs() for broader queries that span all doc types.
Args:
query: Description of the current problem or error message
top_k: Number of results (default: 5)
project: Target project name (optional)
Returns:
Ranked bugfix chunks showing root cause, solution, and lessons
learned, with source file and relevance %. Prompts to call
write_bugfix_summary() when no matches are found.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description fully discloses behavior: it is read-only with no side effects, returns ranked chunks with specific fields, and prompts a follow-up action. This meets the high bar for transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with sections (purpose, usage, Args, Returns) and every sentence adds value. No redundancy; it is appropriately concise for the information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 params, simple return schema), the description covers purpose, usage, parameters, return format, and follow-up actions. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds meaning to all three parameters: query is 'Description of the current problem or error message', top_k has a default, and project is optional. This compensates fully for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search only bugfix summaries for similar past problems', providing a specific verb and resource. It also distinguishes from the sibling tool search_docs by noting its focused scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: prefer this over search_docs when debugging, and use search_docs for broader queries. Also instructs to call write_bugfix_summary when no matches are found.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_typeA
Search filtered by a specific document category. Read-only, no side effects.
Use instead of search_docs() when you know the category — it improves
precision by restricting results to that type only.
Use search_bugfixes() or search_tests() as convenient shortcuts for
those specific categories.
Args:
query: Search query (natural language)
doc_type: Category filter — one of: "architecture", "api",
"bugfix", "best-practice", "setup", "changelog",
"test", "readme", "docs"
top_k: Number of results (default: 5)
project: Target project name (optional)
Returns:
Ranked chunks of the specified type with source, relevance %, and text.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| project | No | ||
| doc_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states 'Read-only, no side effects' and describes the return value as 'Ranked chunks... with source, relevance %, and text.' It does not detail error conditions or rate limits, but the core behavioral traits are well-covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but well-organized: opening summary, usage instructions, then a clear parameter list. Every sentence is informative and concise. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (4 parameters, filtering, no annotations, has output schema), the description covers purpose, usage, parameters, and return value comprehensively. It mentions output format and differentiates from siblings. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully explain parameters. It does: query is 'Search query (natural language)', doc_type lists all allowed values, top_k explains default 5, and project is 'Target project name (optional)'. This adds meaning far beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches documents filtered by a specific category ('Search filtered by a specific document category') and explicitly notes it is read-only with no side effects. It distinguishes itself from sibling tools like search_docs, search_bugfixes, and search_tests by describing when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use instead of search_docs() when you know the category' and mentions alternatives: 'Use search_bugfixes() or search_tests() as convenient shortcuts for those specific categories.' This clearly tells the agent when to use this tool vs others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsA
Semantic search over the ENTIRE project knowledge base. Read-only, no side effects.
Use this ALWAYS before writing or changing code to retrieve architecture
decisions, past bugs, best practices, and API contracts.
Prefer search_bugfixes() when debugging a specific error (searches only
bugfix summaries). Use search_by_type() when you know the category.
Use search_tests() when looking for test coverage.
Args:
query: What you want to know (natural language, be specific)
top_k: Number of results (default: 5, increase for broad questions)
project: Target project name (optional, defaults to active project)
Returns:
Ranked doc chunks, each showing source file:line, section heading,
relevance %, doc type, and text. Returns a "no results" message with
a rephrasing suggestion when nothing matches.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: read-only, no side effects, and describes the return format including how 'no results' is handled with a rephrasing suggestion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections: purpose, usage guidelines, args, returns. Every sentence is concise and contributes value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema existing, the description covers all necessary context: purpose, usage rules, parameter semantics, and return details including edge cases. Complete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but the description explains each parameter: query as natural language, top_k with default and usage advice, and project as optional with default behavior, adding significant meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Semantic search over the ENTIRE project knowledge base' with 'Read-only, no side effects', distinguishing it from sibling tools like search_bugfixes, search_by_type, and search_tests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises 'Use this ALWAYS before writing or changing code' and provides clear alternatives: 'Prefer search_bugfixes() when debugging...', 'Use search_by_type() when you know the category.', 'Use search_tests() when looking for test coverage.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_testsA
Search test case documents in the knowledge base. Read-only, no side effects.
Call BEFORE write_test_case() to check what is already covered and
avoid duplicates. Equivalent to search_by_type(query, "test") but
more intent-clear for test-coverage workflows.
Args:
query: What to search for (e.g. "authentication edge cases")
top_k: Number of results to return (default: 5)
project: Target project name (optional)
Returns:
Ranked test case chunks with scenario, steps, expected result,
and status. Returns a prompt to call write_test_case() when empty.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description transparently discloses it is read-only with no side effects. It describes return fields and signals when to call write_test_case, though lacks details on pagination or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for purpose, usage, args, and returns. It is informative but could be slightly more concise; the bullet-like args section is clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, output schema exists), the description covers purpose, usage, behavior, parameters, and return values thoroughly without relying on structured fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description fully compensates by defining each parameter with examples and defaults, adding meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches test documents and is read-only. It distinguishes itself from the sibling 'search_by_type' by noting it is more intent-clear for test-coverage workflows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises calling this tool before write_test_case() to avoid duplicates. References an alternative (search_by_type) and clarifies when this tool should be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_projectA
Bind all subsequent tool calls in this session to a specific project.
In-memory only — no files are created or modified. The binding is
per-connection: setting project A in workspace-1 does not affect
workspace-2. The project= parameter on individual tools overrides
this session binding for a single call.
Call at the START of every session. Use setup_project() to create
a new project. Use get_active_project() to check the current binding.
Args:
name: Name of a registered project (see list_projects())
Returns:
Active project name, chunk count, and docs path on success.
Lists available projects and suggests setup_project() on failure.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description fully discloses in-memory only, no file modification, per-connection binding, and return value details for success and failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bullet points, front-loaded with primary purpose, no wasted words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Single parameter with output schema; description explains purpose, usage pattern, return values, error handling, and differentiates from many sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but description adds that 'name' must be a registered project from list_projects(), providing essential context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it binds all subsequent tool calls to a specific project, and distinguishes from sibling tools setup_project (create new) and get_active_project (check binding).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call at the START of every session, and explains when to use setup_project or get_active_project instead. Also clarifies override behavior with project= parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_projectA
Register and initialise a new project in Flaiwheel.
Side effects: creates a project directory under MCP_DOCS_PATH, optionally
clones the git knowledge repo, runs an initial index, and binds this
session to the new project. Idempotent — safe to call again if the
project already exists (just rebinds the session).
Call once per project. Use set_project() to switch between already
registered projects. Use list_projects() to see what exists.
Args:
name: Short project identifier, no spaces (e.g. "my-app")
git_repo_url: HTTPS URL of the knowledge git repo (optional,
can be added later via the Web UI)
git_branch: Branch to track for git sync (default: "main")
display_name: Human-readable label shown in the Web UI (optional)
git_auto_push: Auto-commit and push write_*() docs to git (default: True)
git_sync_interval: Background git pull interval in seconds (default: 300)
Returns:
Project name, chunk count, active-project confirmation, and next steps.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| git_branch | No | main | |
| display_name | No | ||
| git_repo_url | No | ||
| git_auto_push | No | ||
| git_sync_interval | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It lists side effects: creates directory, optionally clones git, runs index, binds session. Notes idempotent. Missing details like synchronous vs async index, but sufficient for transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: summary, side-effects, usage guidance, Args, Returns. Front-loaded with key info. Returns section slightly vague ('Project name, chunk count...') but overall concise and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (6 params, mutation with side effects, output schema exists), the description covers all essential aspects: behavior, all parameters, returns, and distinguishes from siblings. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so description must compensate. It provides full Args section explaining each parameter: name (short identifier, no spaces), git_repo_url (HTTPS, optional), git_branch (default main), display_name (optional label), git_auto_push (default true), git_sync_interval (default 300s). Adds significant meaning beyond schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Register and initialise a new project in Flaiwheel.' It specifies the verb (register/initialize), resource (project), and scope (new project). It distinguishes from siblings like set_project (switch) and list_projects (list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance: 'Call once per project. Use set_project() to switch between already registered projects. Use list_projects() to see what exists.' Also notes idempotency, so safe to call again if exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
timelineA
Return the git history of the document that holds an entity. Read-only.
Resolves ``entity_id`` to a file via frontmatter ``id:`` field, then
runs ``git log`` for that file. Use this to answer "what was true at
time T?" — Git history is the validity window; no separate
``valid_from``/``valid_to`` columns are stored.
Args:
entity_id: Frontmatter ``id`` value of the entity
limit: Max commits to return (default 20, max 200)
project: Target project name (optional)
Returns:
Newest-first list of commits with short hash, ISO date, author,
and subject. Empty result hints if the docs repo is not a git
checkout or the file has no history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| project | No | ||
| entity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details the read-only nature, the resolution logic, git log execution, return format, and error hints (empty result for non-git checkout). It adds substantial behavioral context beyond annotations (none provided).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear summary, structured Args/Returns sections, and each sentence adds value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description covers the return format and error cases. It explains the tool's purpose, parameters, and behavior comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description explains all three parameters: entity_id (frontmatter id), limit (max commits, default 20, max 200), and project (optional). This adds meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns git history for a document, using a specific verb (Return) and resource (git history of the document). It distinguishes from siblings by focusing on historical timeline, unlike search or write tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides a use case: 'Use this to answer "what was true at time T?"' and explains why git history is used. It does not explicitly mention when not to use or name alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_docA
Validate a markdown document before committing it to the knowledge repo. Read-only.
Does not write any files or modify the index. Not needed when using
the write_*() tools — they validate internally. Use this only when
you are writing raw markdown and committing it manually via git.
Args:
content: Full markdown content to validate
category: Target category — one of: "architecture", "api",
"bugfix", "best-practice", "setup", "changelog", "test", "docs"
project: Target project name (optional)
Returns:
"OK" if the document passes all checks, or a list of issues
tagged [!] critical (blocks indexing), [~] warning, [i] info.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| project | No | ||
| category | No | docs |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Declares read-only behavior and explicitly states it does not write files or modify the index. This is beyond what annotations (none) provide, giving full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a summary line, guidance section, parameter list, and return value. Slightly verbose but every sentence is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and having an output schema, the description covers purpose, usage, parameters, and return values completely. No gaps in essential information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description explains all three parameters: content as full markdown, category with a list of valid values, and project as optional name. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates a markdown document before committing it to the knowledge repo, distinguishing it from sibling tools like write_* that validate internally. The verb 'validate' and resource 'markdown document' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (manual git commit) and when not (when using write_* tools), and names alternatives. This provides clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_api_docA
Create an API endpoint document, index it, and auto-push to git.
Side effects: creates api/{slug}.md in the docs path, indexes it into
the vector store, and pushes to git if configured. Overwrites an
existing file with the same title.
Use for HTTP endpoints, REST APIs, and RPC schemas.
Use write_architecture_doc() for system-level design decisions.
Use write_best_practice() for API coding conventions.
Args:
title: Short title (e.g. "Create User Endpoint")
endpoint: URL path (e.g. "/api/v1/users")
method: HTTP method: GET, POST, PUT, PATCH, DELETE, etc.
request_schema: Request body or query params description
response_schema: Response body schema and status codes
auth: Authentication/authorization requirements (optional)
examples: Curl or code examples (optional)
project: Target project name (optional)
Returns:
Saved filename, chunk count, and whether auto-push succeeded.
| Name | Required | Description | Default |
|---|---|---|---|
| auth | No | ||
| title | Yes | ||
| method | Yes | ||
| project | No | ||
| endpoint | Yes | ||
| examples | No | ||
| request_schema | Yes | ||
| response_schema | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses key side effects: overwrites existing files, indexes into vector store, and auto-pushes to git. It also describes return values. However, it could mention potential failure modes for auto-push or permission requirements, but overall it is transparent given the context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections: main purpose, side effects, usage guidelines, parameter list, and returns. It is front-loaded with the most critical information and every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 8 parameters (5 required) and no annotations, the description provides sufficient context for an agent to select the tool and fill parameters correctly. It covers side effects, alternatives, and return format, and the presence of an output schema further reduces the need to describe return values in detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides natural-language explanations for all 8 parameters (e.g., 'Short title', 'URL path', 'HTTP method'), adding meaning beyond the schema's type definitions. Though thorough, it could clarify the format for request_schema and response_schema more precisely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create an API endpoint document, index it, and auto-push to git,' specifying the verb, resource, and actions. It also distinguishes from siblings by naming alternatives: write_architecture_doc for system-level decisions and write_best_practice for API coding conventions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use for HTTP endpoints, REST APIs, and RPC schemas' and provides alternatives for other document types, giving clear guidance on when to use this tool versus siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_architecture_docA
Create an architecture decision or system design document, index it, and auto-push.
Side effects: creates architecture/YYYY-MM-DD-{slug}.md in the docs path,
indexes it into the vector store, and pushes to git if configured.
Overwrites an existing file with the same title.
Use for system design, ADRs, and component relationships.
Use write_api_doc() for HTTP endpoint specs, write_best_practice()
for coding patterns, write_bugfix_summary() after fixing bugs.
Include a Mermaid diagram in the diagrams field for best results.
Args:
title: Short title (e.g. "Payment Service Architecture")
overview: High-level description of the system/component
decisions: Key architectural decisions made and why
trade_offs: Alternatives considered and rejected, pros/cons
components: Optional component breakdown (optional)
diagrams: Optional Mermaid or ASCII diagrams (optional)
project: Target project name (optional)
Returns:
Saved filename, chunk count, and whether auto-push succeeded.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| project | No | ||
| diagrams | No | ||
| overview | Yes | ||
| decisions | Yes | ||
| components | No | ||
| trade_offs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effects (file creation, indexing, git push, overwrite behavior). Without annotations, this provides substantial transparency, though could mention permission requirements or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with summary, bullet-like side effects, usage guidance, and parameter list. Every sentence adds value, though slightly verbose for the parameter descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all key aspects: purpose, side effects, usage, alternatives, parameters, and return values. Suitable for a complex tool with 7 parameters and missing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description adds value by explaining each parameter's purpose (e.g., 'decisions: Key architectural decisions made and why'). Provides enough context for correct usage, though lacks examples or formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool creates architecture documents, indexes, and auto-pushes. Explicitly differentiates from siblings by naming alternative tools for other doc types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (system design, ADRs, component relationships) and when not to use by referencing siblings like write_api_doc, write_best_practice, write_bugfix_summary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_best_practiceA
Create a coding standard or best practice document, index it, and auto-push.
Side effects: creates best-practices/{slug}.md in the docs path,
indexes it into the vector store, and pushes to git if configured.
Overwrites an existing file with the same title.
Use for recurring patterns, conventions, and rules the team should follow.
Use write_architecture_doc() for system-level decisions,
write_bugfix_summary() after fixing a specific bug.
Args:
title: Short title (e.g. "Error Handling in API Routes")
context: When and where this practice applies
rule: The actual rule or pattern to follow (be specific)
rationale: Why this rule exists and what problems it prevents
examples: Code examples showing correct vs incorrect usage (optional)
project: Target project name (optional)
Returns:
Saved filename, chunk count, and whether auto-push succeeded.
| Name | Required | Description | Default |
|---|---|---|---|
| rule | Yes | ||
| title | Yes | ||
| context | Yes | ||
| project | No | ||
| examples | No | ||
| rationale | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses side effects (creates file, indexes, pushes to git, overwrites existing). However, it omits details about authorization needs, error handling, or what happens if auto-push fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary, side effects, usage guidelines, and args list. It is concise but could be slightly tighter (e.g., 'Args:' could be merged with the preceding list). Overall, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters (4 required), the presence of an output schema, and no nested objects, the description covers purpose, side effects, usage, and args. It lacks details on input format specifics (e.g., is markdown expected?) but is otherwise complete for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no descriptions for any parameters (0% coverage). The description compensates by explaining each parameter in plain English: title, context, rule, rationale, examples, project. This adds semantic meaning beyond the schema's type/title information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource combination: 'Create a coding standard or best practice document, index it, and auto-push.' It clearly identifies the tool's purpose and distinguishes it from sibling tools like write_architecture_doc and write_bugfix_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('Use for recurring patterns, conventions, and rules the team should follow') and provides concrete alternatives for other scenarios ('Use write_architecture_doc() for system-level decisions, write_bugfix_summary() after fixing a specific bug').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_bugfix_summaryA
Create a bugfix summary .md file, index it immediately, and auto-push to git.
MANDATORY after every bug fix — these summaries are retrieved during
future debugging sessions to avoid repeating the same mistakes.
Side effects: creates bugfix-log/YYYY-MM-DD-{slug}.md in the knowledge
repo docs path, indexes it into the vector store, and pushes to the
remote git repo if MCP_GIT_REPO_URL is configured. Overwrites an
existing file if the same title is used on the same day.
Use write_architecture_doc() for design decisions,
write_best_practice() for recurring patterns.
Args:
title: Short, descriptive title of the bug (used in filename)
root_cause: What was the actual cause? (be technical)
solution: How was it fixed? (describe code changes made)
lesson_learned: What should be done differently next time?
affected_files: Comma-separated list of changed files (optional)
tags: Comma-separated categories, e.g. "auth,race-condition,critical" (optional)
project: Target project name (optional)
Returns:
Saved filename, chunk count, and whether auto-push succeeded.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | Yes | ||
| project | No | ||
| solution | Yes | ||
| root_cause | Yes | ||
| affected_files | No | ||
| lesson_learned | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are not provided, but the description details all side effects: creates file in bugfix-log/, indexes into vector store, pushes to remote git, and overwrites if same title same day. Discloses dependencies on MCP_GIT_REPO_URL. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and mandatory status. It includes side effects, alternatives, and parameter details. While slightly long, every sentence adds value, so it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 7 parameters (4 required) and no output schema annotations, but the description covers the return format ('Saved filename, chunk count, and whether auto-push succeeded'). Combined with behavioral and usage details, it is fully complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description includes an Args section with meaningful explanations for each parameter (e.g., title used in filename, root_cause: 'be technical', solution: 'describe code changes'). This adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Create a bugfix summary .md file, index it immediately, and auto-push to git.' It clearly specifies the verb (create) and resource (bugfix summary file), and differentiates from siblings like write_architecture_doc and write_best_practice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description declares 'MANDATORY after every bug fix' and provides explicit alternatives: 'Use write_architecture_doc() for design decisions, write_best_practice() for recurring patterns.' This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_changelog_entryA
Create a changelog entry for a release, index it, and auto-push to git.
Side effects: creates changelog/{version-slug}.md in the docs path,
indexes it into the vector store, and pushes to git if configured.
Calling twice with the same version overwrites the existing entry.
Returns an error if none of added/changed/fixed/breaking is provided.
Use for release notes and version history. At least one of the
content fields (added, changed, fixed, breaking) must be non-empty.
Args:
version: Version string (e.g. "2.1.0" or "v3.9.40")
release_date: ISO date string (e.g. "2026-05-03")
added: New features added in this release (optional)
changed: Changes to existing functionality (optional)
fixed: Bug fixes included (optional)
breaking: Breaking changes requiring migration (optional)
project: Target project name (optional)
Returns:
Saved filename, chunk count, and whether auto-push succeeded.
| Name | Required | Description | Default |
|---|---|---|---|
| added | No | ||
| fixed | No | ||
| changed | No | ||
| project | No | ||
| version | Yes | ||
| breaking | No | ||
| release_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses side effects: file creation, vector store indexing, git push, idempotency (overwrites on same version), and error conditions. This provides clear behavioral expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary line, bullet points, and arg list. It is concise but contains minor redundancy (error condition mentioned twice). Still, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, output schema present), the description covers the tool's purpose, side effects, usage, parameters, and return value format. It is sufficiently complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description provides detailed explanations for all 7 parameters, including format examples (e.g., '2.1.0' for version) and semantic meaning of optional content fields. This adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create a changelog entry for a release, index it, and auto-push to git,' identifying specific resource and actions. It distinguishes from sibling write_* tools by focusing on changelog entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use for release notes and version history' and specifies the precondition that at least one content field must be provided. However, it does not mention when not to use or compare with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_setup_docA
Create a setup, deployment, or infrastructure document, index it, and auto-push.
Side effects: creates setup/{slug}.md in the docs path, indexes it
into the vector store, and pushes to git if configured. Overwrites
an existing file with the same title.
Use for environment setup guides, CI/CD configuration, Docker or
infrastructure docs, and deployment runbooks.
Use write_architecture_doc() for system design rather than how-to guides.
Args:
title: Short title (e.g. "Local Development Setup")
prerequisites: Tools, accounts, or config required before starting
steps: Step-by-step instructions (numbered list recommended)
verification: How to confirm the setup is working correctly
troubleshooting: Common issues and their fixes (optional)
project: Target project name (optional)
Returns:
Saved filename, chunk count, and whether auto-push succeeded.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes | ||
| title | Yes | ||
| project | No | ||
| verification | Yes | ||
| prerequisites | Yes | ||
| troubleshooting | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description details side effects (creates file, indexes, auto-push) and overwrites existing files. It mentions return values but lacks specifics on permissions or failure modes, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with headers for side effects, usage, args, and returns. It is slightly long but every sentence adds value; could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, side effects, return value, and sibling tools, the description covers all essential aspects: purpose, usage, parameter meanings, return format, and relationship to alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description provides an Args section explaining all six parameters (title, prerequisites, steps, verification, troubleshooting, project) with clear roles and format suggestions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a setup, deployment, or infrastructure document, with specific verbs and resource (create, index, auto-push). It distinguishes from sibling write_architecture_doc by naming it directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly lists use cases (environment setup, CI/CD, Docker, deployment runbooks) and directs to use write_architecture_doc for system design, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_test_caseA
Create a test case document, index it immediately, and auto-push to git.
Call search_tests() first to check for existing coverage before adding
a new test case.
Side effects: creates tests/YYYY-MM-DD-{slug}.md in the docs path,
indexes it into the vector store, and pushes to git if configured.
Use after writing or modifying tests to make them discoverable.
Status values: "pass", "fail", "blocked", "pending" (default: pending).
Args:
title: Short test case title (e.g. "User login with expired token")
scenario: What is being tested and why (the test intent)
steps: Step-by-step test procedure
expected_result: What should happen when the test passes
preconditions: Setup required before running the test (optional)
actual_result: Observed result if already executed (optional)
status: "pass", "fail", "blocked", or "pending" (optional)
tags: Comma-separated tags, e.g. "auth,regression,critical" (optional)
project: Target project name (optional)
Returns:
Saved filename, chunk count, and whether auto-push succeeded.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| steps | Yes | ||
| title | Yes | ||
| status | No | ||
| project | No | ||
| scenario | Yes | ||
| actual_result | No | ||
| preconditions | No | ||
| expected_result | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effects: file creation with specific naming, vector store indexing, and git push. No annotations provided, so description carries full burden; it fully informs the agent of all behavioral impacts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections (purpose, usage, side effects, args, returns), but contains minor redundancy (status values mentioned twice). Still efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, side effects, output), the description fully covers all aspects. Output schema exists and return values are described. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but the description explains all 9 parameters, including defaults, status enum values, and optional nature. Adds significant meaning beyond schema types/titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool creates a test case document, indexes it, and auto-pushes to git. Distinct from sibling write tools (e.g., write_api_doc) by specifying test case creation and its unique side effects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises calling search_tests() first to check coverage, and states the tool should be used after writing or modifying tests. Provides clear when-to-use context and implies alternatives (search_tests).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose, from codebase analysis to document writing and search. Even similar tools like search_docs, search_bugfixes, and search_by_type are differentiated by scope and description, eliminating ambiguity.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., analyze_codebase, get_index_stats, write_api_doc). This uniformity makes it easy to predict tool functionality from its name.
30 tools is high but justified by the scope of the server, which covers analysis, search, writing, indexing, and project management. Some tools could potentially be merged (e.g., search_by_type with search_docs), but overall the count is reasonable for the intended functionality.
The tool set covers the full knowledge management lifecycle: analysis, classification, writing, indexing, search, and session management. Minor gaps exist, such as the lack of explicit deletion tools for documents or projects, but the core workflow is well-supported.
Maintenance
Related MCP Connectors
Self-hosted AI-native knowledge workspace with hybrid search, GraphRAG, and MCP.
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Persistent memory for AI agents. EU-hosted, privacy-first, hybrid recall, contradiction detection.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that transforms codebases into knowledge graphs using Neo4J, enabling AI assistants to understand code structure, relationships, and metrics for more context-aware assistance.27MIT
- AlicenseNot gradedqualityDmaintenanceProvides advanced document search and processing capabilities through vector stores, including PDF processing, semantic search, web search integration, and file operations. Enables users to create searchable document collections and retrieve relevant information using natural language queries.MIT
- AlicenseBqualityDmaintenanceEnables web search via Serper API with advanced search operators and webpage scraping capabilities to extract content in plain text or markdown format.23,022MIT
- AlicenseNot gradedqualityDmaintenancePersistent codebase knowledge layer for AI agents. Pre-digests codebases into structured knowledge (symbols, dependency graphs, co-change patterns, architectural decisions) and serves via MCP. 28 languages, 14 tools, ~85% token reduction.127MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dl4rce/flaiwheel'
If you have feedback or need assistance with the MCP directory API, please join our Discord server