Grove
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GROVE_HOME | No | The data directory where Grove keeps its SQLite file grove.db. Used when --home DIR is not given; otherwise defaults to ~/.grove. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Grove is a local workshop for agents: it maps a codebase into a three-layer blueprint (what docs declare, what the code appears to do, what tests appear to prove), keeps lasting knowledge, and tracks local work items toward a reviewed change. It does not write code, and it does not open pull requests. Scans are read-only and deterministic; findings are heuristics. Nothing is sent to GitHub or any other service. Typical walk: grove_project_create, grove_scan, grove_gaps, grove_recommend_next.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| grove_statusA | Report Grove's version, data directory, database path and project count. Use it first to confirm which Grove home this session is using. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_project_createA | Register a codebase as a Grove project: a unique name plus the root directory to map. Use once per codebase, before grove_scan. Only a row in Grove's own database is written; the directory itself is not touched. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_project_listA | List registered projects, paginated. Use to find a project name or id. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_project_getA | Get one project by name or id, with last_scanned_at, the last scan's cap warnings, and item, finding and work-item counts. Use to check whether a scan is recent or was cut short by a cap. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_scanA | Scan a project's root directory and rebuild its blueprint (declared / actual / tests layers), then recompute gap findings. Use after creating a project and whenever the code or docs have changed. The scan is deterministic and read-only: it never writes inside the project, honours .gitignore, and stops at the file and time caps (reported in the result). Returns counts per layer and per finding kind plus a small sample; page the rest with grove_gaps and grove_blueprint_get. It replaces earlier scan-derived items and findings but keeps knowledge, work items and map-ingested items. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_blueprint_getA | Read a project's blueprint items, paginated: what docs declare (declared), what the code appears to contain (actual: modules and symbol names) and what tests appear to prove (tests: test names). Optionally filter by layer and by a case-insensitive substring of title, body or path. Reads Grove's stored result of the last scan; it does not rescan. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_gapsA | List a project's gap findings, paginated, with counts per kind. Kinds: declared_untested (docs state it, no test name overlaps), declared_unseen (docs state it, no code name overlaps), actual_undocumented (module never mentioned in docs), map_untested (an ingested map marks it untested). Every finding is a token-overlap heuristic to be checked by reading the code, not a verdict. Use after grove_scan or grove_ingest_map. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_ingest_mapA | Ingest a markdown architecture map (for example a MAP.md) into a project. The file is only read, never modified. Its full text is stored as a knowledge document (key from the file name; a new revision each time), and blocks carrying the evidence labels documented / observed-in-code / untested seed declared items, actual items and map_untested findings. Use when a human or agent has written a map of the codebase. Re-ingesting replaces what the same map seeded before. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_knowledge_writeA | Save a lasting note (a decision, a convention, a lesson) under a stable slug key. Writing an existing key adds a new revision; earlier revisions are kept and never overwritten. Give a project to scope the note to it, or omit project for a workspace-level note. Use for knowledge worth finding again in later sessions, not for scratch notes. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_knowledge_getA | Fetch a knowledge document by key: the latest revision, or a given revision number. Keys are unique per project (and at workspace level); pass project when the same key exists in more than one project. Without project, a workspace-level document wins. Use after grove_knowledge_search to read a full document. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_knowledge_searchA | Full-text search (SQLite FTS5) over the titles and bodies of the latest revision of every knowledge document, including ingested maps. All words must match; end a word with * for a prefix match. Returns ranked hits with a snippet, paginated; fetch a full document with grove_knowledge_get. Use before starting work, to recall what is already known. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_work_createA | Create a local work item for a project, starting in status ready. issue_url is stored as plain text for reference and is never fetched or opened. Use to record a unit of work that should end in a reviewed change; Grove tracks it but does not implement it or open a pull request. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_work_listA | List a project's work items, paginated, optionally only those in one status (ready, in_progress, review, done, blocked). Use to see what is open. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_work_getA | Get one work item by id, with its plan and notes. Use before continuing a piece of work. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_work_updateA | Update a work item: any of status, plan, notes, title (at least one). Each given field replaces the stored value. Use to move work through ready -> in_progress -> review -> done (or blocked) and to keep the plan and notes current. This only updates Grove's local record. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
| grove_recommend_nextA | Suggest one next step for a project by fixed priority, with a short rationale and the finding or work item ids behind it: map_untested findings first, then declared_untested findings whose words also appear in the code, then other declared_untested findings, then the oldest ready work item, then actual_undocumented findings. A deterministic heuristic; no model is called. Grove is local only: scans are read-only and nothing is sent to GitHub or any other service. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 16 tools
Each tool targets a distinct resource+action: project CRUD, scan, blueprint read, gap listing, map ingest, knowledge, work items, and recommendation are all clearly separated, and descriptions explain when to use which (e.g. scan vs blueprint_get vs gaps). The only mild overlap is grove_blueprint_get / grove_gaps / grove_recommend_next, since all three surface scan-derived findings, but their scopes and outputs differ enough to choose confidently.
Most names follow a predictable grove_<resource>_<verb> pattern (project_create, project_list, project_get, knowledge_write/get/search, work_create/list/get/update), all snake_case with a uniform prefix. A handful deviate in ordering or shape (grove_scan, grove_status, grove_gaps, grove_ingest_map, grove_recommend_next), which makes the set slightly less mechanical but still fully readable.
Sixteen tools sit at the upper edge of the comfortable range but each one maps to a real operation across four sub-areas (projects/scanning, knowledge, work items, recommendation), so nothing feels padded. It is slightly heavy for a local analysis tool, but no tool is obviously redundant.
The lifecycle is well covered: project register/list/get, scan and re-scan, blueprint and gap retrieval, knowledge write/get/search with revisions, and full work-item create/list/get/update plus a recommendation entry point. The notable gaps are the absence of project update/delete (no way to remove or rename a registered project) and no deletion/cleanup for knowledge or work items.