Booboo
The Booboo server provides read-only graph querying tools for navigating and exploring a structured brain graph (nodes/links) via MCP tools:
booboo_stats— Retrieve node and link counts for the entire graph, broken down by layer. No input required.booboo_search— Find nodes by label or ID with ranked results (exact → prefix → substring). Requires a query string; optional result limit.booboo_node— Fetch complete data for a single node by its exact ID.booboo_neighbors— Explore connected nodes and links around a given node up to a specified depth, with an optional result limit.booboo_path— Find the shortest path between two node IDs using BFS traversal, with a configurable max hops (default 64, max 1000); returns null if no path exists.
Allows using Neo4j as a data source for building a Booboo brain graph via a config-driven adapter.
Exports a Booboo brain snapshot as a wiki-linked markdown vault ready to be opened in Obsidian for browsing and note-taking.
Allows using Supabase (Postgres) as a data source for building a Booboo brain graph, with privacy walls and parent spines.
🐾 Booboo — the unified operational brain
Turn any AI system's data into one living, rooted 3D brain — structure + knowledge + memory + agents + automations fused into a single graph. Query it by REST or MCP, view it in your browser or as a desktop wallpaper, and boot your agents from it in one call.
See it before you install it → booboo.fractionalhq.uk · a live brain in your browser, no signup, nothing to clone.
Named after a dachshund who never forgets where the treats are buried. Fitting, because Booboo is about exactly that: memory and recall — seeing the whole system at once, fetching what's buried, never losing the thread.
Unretouched: booboo view --demo --nodes 50000 — 50k nodes, 4 layers, live in a browser tab, zero console errors. Try it yourself in one command.
Most tools show you one slice: a knowledge graph, an agent flow chart, a memory store, a trace viewer. Booboo fuses all of them into one graph rooted at a single point, so you can see — and query — how the whole system actually hangs together.
Status: alpha — eight packages published:
@booboo-brain/spec(the contract),@booboo-brain/build(config-driven postgres/json adapters),@booboo-brain/serve(REST + MCP query layer),@booboo-brain/viewer(million-node 3D render),@booboo-brain/panel(the organigram),@booboo-brain/vault(wiki-linked markdown export),@booboo-brain/cli(the unifiedbooboocommand), andcreate-booboo(project scaffolder). Per-package semver — see eachpackage.json. MIT.
The one idea
Booboo is a tiny JSON spec at the center, with adapters that feed it and consumers that render/serve/query it:
your data ──▶ ADAPTERS ──▶ GRAPH JSON ──▶ CONSUMERS
(postgres, (config- (the spec, (3D viewer ·
json, neo4j, driven, ~1 KB REST API ·
mcp, …) ~50 lines) contract) MCP server · wallpaper)Emit the JSON → get the viewer, the API, and the MCP server for free. Weird data → a ~50-line adapter, not a fork. See SPEC.md.
Related MCP server: gbrain
Quickstart
One command. No database, no config, no signup. A synthetic brain, running on your machine:
npx @booboo-brain/cli view --demo --nodes 1000000That's the headline flex: a million nodes at 60fps in a browser tab. Drop the count to --nodes 50000 on a modest laptop. See SCALE.md for how it holds up (one draw call over a single point cloud with a custom shader, plus tier-LOD on labels).
If it holds up on your machine, leave a star. There's no marketing behind this repo; stars are how the next builder finds it.
Then point it at your own stack:
# scaffold a project (json starter + postgres upgrade path)
npx create-booboo my-brain
cd my-brain
npm install
npm run build # booboo.config.yaml → brain.json (the snapshot)
npm run serve # REST API on http://localhost:8787
npm run mcp # MCP over stdio — point Claude / Cursor / Claude Code at itEdit booboo.config.yaml to point at your own Postgres/Supabase (a commented example ships in the scaffold). Full reference: docs/CONFIG.md · stuck? docs/TROUBLESHOOTING.md.
Roadmap: a single all-in-one command bundling build + REST + MCP + the 3D viewer together, and an interactive scaffold wizard — tracked in LAUNCH_CHECKLIST.md.
What works today
booboo build --config booboo.config.yaml # any postgres/json → one graph snapshot (privacy walls + parent spines)
booboo serve --snapshot my.booboo.json --port 8787 # REST: /graph /stats /search /nodes/:id /neighbors/:id /path/:a/:b
booboo mcp --snapshot my.booboo.json --org org.booboo.json # MCP over stdio (+ booboo_boot: agents boot FROM the org)
booboo view --snapshot my.booboo.json # 3D viewer in your browser — no monorepo, no build step
booboo panel --org org.booboo.json --snapshot my.booboo.json # THE ORGANIGRAM — see below
booboo vault --snapshot my.booboo.json --org org.booboo.json --out vault # the brain as a markdown vault — see belowbooboo view serves the @booboo-brain/viewer 3D renderer as a standalone app — any snapshot (or ?n=1000000 synthetic) in your browser, no monorepo. The build engine was
proven on a real 4,469-node production brain assembled straight from Supabase by config alone —
privacy-walled, validated, served. See each package's README for the details.
Connect it to Claude / Cursor (MCP)
booboo mcp speaks MCP over stdio. Point any MCP client at it — no server to host, it runs on demand:
// Claude Desktop: claude_desktop_config.json · Cursor: .cursor/mcp.json · Claude Code: .mcp.json
{
"mcpServers": {
"booboo": {
"command": "npx",
"args": ["-y", "@booboo-brain/cli", "mcp",
"--snapshot", "my.booboo.json", "--org", "org.booboo.json"]
}
}
}Your agent can now query the whole system — search, neighbors, path, stats — booboo_boot('<agent-id>') returns an agent's rules, memory reach, and reports so it boots from the org, and booboo_remember / booboo_report let it write back durable memories and reports that persist across rebuilds (the live memory system). Point --snapshot/--org at absolute paths if the client's working directory differs.
Tools
Tool | What it does |
| Node/link counts for the whole graph, broken down by layer. |
| Counts alone, without pulling the payload — use when sizing a query. |
| Search nodes by label or id (ranked: exact > prefix > substring). Use this first to find a node's id. |
| Fetch a single node (all fields + data) by its exact id. |
| The neighbourhood around a node: connected nodes + links out to |
| Shortest path (chain of nodes) between two node ids; null if unreachable. |
| An agent's boot slice of the organigram: identity, authority chain, inherited rules, bucket access, skills, children. Call this first, every session. |
| The full organigram: every agent, the hierarchy, buckets and rule refs. |
| Write a durable memory — one atomic fact, tied to an agent. Appended to the journal beside the snapshot; queryable the same session, survives every rebuild. |
| Write a report — what an agent just closed. Lands on the panel's Reports timeline. |
booboo_remember/booboo_reportare on by default — the live half of the memory system. Pass--no-write(orBOOBOO_READONLY=1) for a read-only server (public/locked-down deployments); it still reads the journal but refuses writes.
The Organigram — run your agents like a company

booboo panel opens your agent fleet as a real org chart — and the chart is not a diagram, it's the authority. Every agent is a card: its rules, skills, memory-bucket access, and latest reports. Drag an agent under a new parent, hit apply, and the org file changes — versioned in git, validated before every write (a cycle can never land). Agents that boot with booboo_boot obey the new shape on their next session. Reorganize your company at breakfast; the whole fleet knows by the first coffee.
the portfolio timeline | memory, bucket by bucket |
|
|
Five tabs over one org file + one snapshot: organigram (drag-drop hierarchy) · buckets (who remembers what) · reports (what the fleet closed, newest first) · rules (who declares, who inherits) · graph (the 3D brain, embedded). Rules inherit top-down — declare once at a branch, everyone beneath is bound; every dossier shows the inherited stack in boot order.
Reports and buckets fill two ways: live, when an agent calls booboo_remember / booboo_report (durable journal writes, no rebuild), or in bulk from your own tables via config — see docs/CONFIG.md § Wiring fleet reports & memory.
The vault — your brain as plain markdown (Obsidian-ready)
booboo vault emits the same snapshot as a wiki-linked markdown vault: one page per
node with frontmatter and its links, index pages per layer and cluster, an agent dossier
per org member (chain of command, inherited rules, buckets, machines, contract). Open the
folder as an Obsidian vault and you have the "LLM second brain" pattern — except generated
from your real system instead of hand-fed notes. Plain files are the ultimate portability:
any human can read them, any agent from any provider can too. Emit it nightly and the vault
doubles as your insurance copy.
Author links yourself: put [[node-id]] (or [[exact label]]) refs inside a note's text and
set wikilinks: true in the config — the builder turns them into first-class authored edges
that outrank harvested relations, in the graph, the API, the 3D view and the vault. Every build
also prints an ingestion-quality line (authored · orphans · dump-suspects) so curation is
a number, not a vibe.
Your agent knows what to do — the contract ships with the scaffold
npx create-booboo scaffolds AGENTS.md (imported by CLAUDE.md) into the project: the
operating doctrine any AI agent working that folder reads automatically — boot from the org,
one atomic fact per note, author your [[links]], corrections replace, respect the walls,
watch the quality gate, close honestly. A fresh install leaves your agent already fluent in
the brain's conventions; edit the file as your own rules evolve — it is your system's
constitution, versioned next to the org.
Why it's different
The closest things on GitHub each do one layer — good tools, all of them, for their slice:
Whole-system view | REST API | MCP (agents query it) | 3D at 1M nodes | Privacy walls | |
Booboo | ✅ | ✅ | ✅ | ✅ | ✅ |
Graph viewers ( | render only | — | — | ✅ | — |
Note graphs (Obsidian, Logseq) | your notes, not your system (booboo emits an Obsidian vault: | — | plugins | — | — |
Agent frameworks (LangGraph, traces) | flows & runs | ✅ | partial | — | — |
Memory stores (Graphiti, Cognee) | memory only | ✅ | ✅ | — | — |
None fuse wiring + knowledge + episodic memory + agents + crons into one rooted, live, bootable brain that's simultaneously a view, a wallpaper, an API, and an MCP source. That operational fusion is the novel part.
Key in hand (optional — everything above stays free)
Every feature is MIT and always will be. If you'd rather not do the setup yourself, Fractional HQ maps your stack: custom adapters, hosted snapshot, refresh pipeline. Same repo, same config schema, never a fork, never a gate.
License
MIT — built to be forked, adapted, and shipped. By Fractional HQ.
Available Tools
8 toolsbooboo_countA
Aggregate: filter the graph, then group and count. Use for 'how many', 'top N', 'most/least' and any date-window question — search ranks, this counts. e.g. major incidents in a date window: {type:'observation', where:{'data.kind':'incident','data.severity':'major'}, since:'2026-07-12'}; the biggest absence offender: {where:{'data.kind':'absence'}, groupBy:'data.subject'}.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| layer | No | ||
| limit | No | max groups returned, ranked by count (default 20) | |
| since | No | ISO date lower bound, inclusive | |
| until | No | ISO date upper bound, inclusive | |
| where | No | exact-match filters; node fields or dotted data paths like data.kind | |
| cluster | No | ||
| groupBy | No | field or data.* path to group by; omit for a plain total | |
| dateField | No | which field the window applies to (default data.date) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It clearly explains the aggregate-filter-group-count behavior and gives concrete examples showing `where`, `since`, `groupBy` and `type` usage. It does not explicitly state read-only/reversibility, but the 'count' semantics make side effects unlikely.
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 behavior and includes two concrete JSON examples that occupy most of the text. Each sentence earns its place, though the inline examples make it a bit dense; still clearly organized.
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?
For a 9-parameter tool with no output schema and no annotations, the description provides enough context for the primary use cases and even shows full request examples. It does not describe the return shape or all optional parameters, but the purpose and common syntax are well covered.
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 67%, and the description adds value by demonstrating how parameters combine in real examples (e.g., `where` with dotted data paths, `since` with ISO dates, `groupBy` with data.subject). It also gives meaning to the otherwise undocumented `type` parameter through the example `type:'observation'`, though `layer` and `cluster` remain unexplained.
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 ('Aggregate: filter the graph, then group and count') and explicitly contrasts with booboo_search: 'search ranks, this counts.' This makes the tool's function and scope clear and distinguishes it from sibling 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?
It provides explicit usage criteria: 'Use for how many, top N, most/least and any date-window question' and names the alternative ('search ranks, this counts'). This is direct when-to-use guidance with a clear exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
booboo_neighborsB
The neighbourhood around a node: connected nodes + links out to depth hops.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| depth | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions returning nodes and links up to depth hops but doesn't disclose whether starting node is included, direction of links, or performance implications of large depth.
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?
Single sentence with no unnecessary words. However, the sentence could be more structured to include parameter roles or usage hints.
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?
Lacks details on return format, parameter constraints, and behavior for edge cases. No output schema, so description should compensate but is insufficient for a 3-parameter 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 description coverage is 0%, and description only explains 'depth' conceptually but not 'id' or 'limit'. 'limit' parameter is not mentioned at all, leaving ambiguity about its role.
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 retrieves the neighborhood around a node, including connected nodes and links up to a specified depth. It distinguishes from siblings like 'booboo_node' (single node) and 'booboo_path' (path finding).
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?
No guidance on when to use this tool versus alternatives (e.g., booboo_search, booboo_node). Lacks explicit conditions or exclusions for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
booboo_nodeC
Fetch a single node (all fields + data) by its exact id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states it fetches a node with all fields but does not explain error handling (e.g., missing id), rate limits, authentication needs, or the exact return structure. This is insufficient for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence) and front-loaded with the main action. However, it leaves out important usage and behavioral details. While concise, it could be restructured to pack more information without adding length.
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 has a single parameter, no output schema, and no annotations, the description should cover the return value, error conditions, and any side effects. It only states 'all fields + data', which is vague. The description is incomplete for a simple fetch 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?
With 0% schema description coverage, the description should provide meaning for the 'id' parameter. It adds 'exact' indicating precision required, but does not explain the format, constraints, or typical examples. The value added is minimal.
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 'Fetch', the resource 'a single node', and the condition 'by its exact id'. It implies the return of all fields and data, and distinguishes it from siblings like booboo_neighbors or booboo_search which serve different purposes.
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 no guidance on when to use this tool versus the siblings. It does not mention alternatives, prerequisites, or situations where this tool is preferred. The agent is left to infer without explicit instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
booboo_pathB
Shortest path (chain of nodes) between two node ids; null if unreachable.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | ||
| from | Yes | ||
| maxHops | No | max BFS hops (default 64) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavioral traits. It mentions returning null for unreachable paths, which is a key behavior, but lacks details on computational cost, error handling, or how maxHops affects results. Minimal disclosure beyond the core 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?
Single sentence with 12 words, no waste. Efficiently communicates the core purpose. Every word earns its place.
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 of path-finding in a graph, the description is too sparse. It does not specify the return format (e.g., list of node ids), how maxHops is applied, or what constitutes a path. No output schema, so more detail is needed. Sibling tools provide some context but not enough for complete understanding.
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 only 33%; only maxHops has a description. The tool description mentions 'between two node ids' but does not explicitly link to the required 'from' and 'to' parameters or clarify their format. Description adds little meaning beyond the schema's minimal 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 clearly states the tool computes the shortest path between two node ids, specifying it returns null if unreachable. This is a specific verb+resource combination and distinguishes from sibling tools like booboo_neighbors and booboo_node.
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?
No explicit guidance on when to use this tool versus alternatives. The description does not mention that booboo_neighbors is for direct neighbors or booboo_node for single node details. Usage context is implied by the name but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
booboo_rememberA
Persist a memory to the brain — one durable, atomic fact/decision worth recalling later. Written to the append-only journal beside the snapshot; immediately queryable and survives every rebuild. Author [[node-id]] links inside the text where you know a connection.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | decision|bugfix|pattern|config|discovery|context… (free text) | |
| text | Yes | the fact to remember — one atomic note, written for the next reader | |
| agent | No | the agent id this memory belongs to (roots it under that agent) | |
| title | No | short label; derived from the text if omitted | |
| bucket | No | memory bucket — groups the note under an agent/topic (the node's cluster) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: writes to an append-only journal, is immediately queryable, and survives rebuilds. It also gives style guidance for embedding node links. These go beyond a simple 'persist' and provide meaningful behavioral context, though it does not cover potential duplicates or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, all of which earn their place: the first states the core purpose, the second explains the storage and durability model, and the third gives a content style tip. It is front-loaded with the primary objective and contains no redundancy or fluff.
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 that this is a write tool with 5 parameters and no output schema or annotations, the description covers the essential aspects: purpose, durability, queryability, and one content guideline. It does not detail relationships between bucket/agent/kind, but those are described in the schema. Overall, it is complete enough for an agent to use the 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 coverage is 100%, so the baseline is 3. The description adds minor value by suggesting `[[node-id]]` link formatting within the text, but the schema already provides clear descriptions for all parameters (kind, text, agent, title, bucket). The description does not substantially enhance parameter 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 opens with a specific verb and resource: 'Persist a memory to the brain' and elaborates with 'durable, atomic fact/decision worth recalling later.' It clearly distinguishes this write tool from the sibling read/query tools by emphasizing storage and persistence rather than retrieval or analysis.
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?
Clear context is provided: this tool is for storing a single, durable fact that should be queryable later. The mention of 'append-only journal' and 'survives every rebuild' implies long-term persistence. However, it does not explicitly state alternatives or when-not-to-use, though the sibling tool names make the contrast obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
booboo_reportA
File a report — a plain-English summary of what an agent just closed. Lands on the panel's Reports timeline; durable and immediately queryable. Call this as the last act of a session.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | plain-English summary of what was done | |
| agent | No | the agent id filing the report | |
| status | No | ok|warn|fail (default ok) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It states that reports are durable and immediately queryable, and that they land on the Reports timeline, indicating persistence. However, it does not disclose whether calls are append-only, any authentication requirements, rate limits, or the return value, leaving some behavioral gaps.
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 three concise sentences, with the main purpose front-loaded in the first sentence. It uses a dash to define the report and includes only necessary details about durability, queryability, and timing.
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 interface (3 parameters, no output schema), the description covers the tool's role, placement, and call timing. It could mention the return value or any response, but it doesn't need to for this simple tool. The high schema coverage further reduces the need for parameter explanation.
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 100%, so all parameters are documented in the schema. The description adds a bit of context by linking the report content to 'what an agent just closed,' but does not add significant meaning beyond the schema, so baseline 3 applies.
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 'File a report' and defines it as a plain-English summary of closed work, landing on the panel's Reports timeline. It distinguishes itself from siblings like booboo_remember and booboo_stats by specifying the timeline and session-closing context.
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 instructs to 'Call this as the last act of a session,' providing a clear when-to-use trigger. However, it does not name alternatives or exclusions, though the session-last context implicitly separates it from other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
booboo_searchA
Search nodes by label or id (ranked: exact > prefix > substring). Use this first to find a node's id.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | text to match in a node's label or id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the ranking order (exact > prefix > substring), which is useful, but lacks information about return format, pagination, or potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the primary action. 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 the absence of output schema and annotations, the description covers the tool's core function, search ranking, and usage priority. It could mention whether results are limited or paginated, but overall it is fairly 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 description coverage is 50% (only 'query' has a description, 'limit' does not). The description adds context about ranking but does not detail the 'limit' parameter. It provides some value beyond the schema but not full compensation.
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 it searches nodes by label or id, with a ranking order. This differentiates it from sibling tools like booboo_neighbors or booboo_node, which serve different purposes.
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 'Use this first to find a node's id,' providing clear usage context. It does not specify when not to use it, but the guidance 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.
booboo_statsA
Node/link counts for the whole graph, broken down by layer.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that output is broken down by layer, but with no annotations provided, it lacks details such as whether the operation is read-only, what happens if the graph is empty, or any rate limits. The description carries the full burden but is not exhaustive.
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 sentence that is concise, front-loaded, and contains no superfluous words. Every word earns its place.
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 that the tool has no parameters and no output schema, the description is fairly complete. It tells the user exactly what the tool returns: node/link counts per layer. A minor addition would be whether totals are included, but it is 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?
The tool has zero parameters and schema coverage is 100% (vacuously). The description adds no parameter information, which is acceptable because there are no parameters to document. Baseline for 0 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 that the tool provides node and link counts for the entire graph, broken down by layer. This specific verb+resource combination effectively distinguishes it from siblings like booboo_neighbors, booboo_node, booboo_path, and booboo_search.
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 implies usage when overall graph statistics are needed, but it does not explicitly state when to use this tool versus alternatives or provide any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v0.4.1- Added
booboo_count - Added
booboo_remember - Added
booboo_report
5 tool updates
v0.4.0- First observed
booboo_neighbors - First observed
booboo_node - First observed
booboo_path - First observed
booboo_search - First observed
booboo_stats
TDQS
Most tools have clearly distinct purposes, but booboo_stats and booboo_count both provide counting functionality. Stats gives whole-graph layer counts, while count allows filtered and grouped aggregations, reducing ambiguity but still potentially confusing at first glance.
All tools use the consistent 'booboo_' prefix, but the suffixes mix nouns (stats, node, neighbors, path) and verbs (search, count, remember, report). This inconsistency prevents a predictable verb_noun pattern, though the names remain readable and understandable.
With 8 tools covering graph statistics, search, fetching, aggregation, neighborhood traversal, pathfinding, memory persistence, and reporting, the count is well-scoped for the server's purpose without being excessive or insufficient.
The tool surface covers the primary graph query and persistence workflows well, including search, single-node retrieval, neighborhood analysis, pathfinding, and durable writes for memories and reports. Minor gaps exist, such as no explicit update/delete for persisted items and no way to list all nodes without a search query, but these are workable within the intended domain.
Maintenance
Related MCP Connectors
Governed personal world model and memory for your AI agent. Pair once, connect over MCP.
Persistent, portable memory for AI assistants — your private memory graph, from any MCP client.
Self-hosted AI-native knowledge workspace with hybrid search, GraphRAG, and MCP.
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceOpen-source MCP memory server providing persistent, cross-platform context for AI tools via a knowledge graph with encrypted storage.413AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceA local-first compiled knowledge graph MCP server that provides structured memory for AI agents with full-text search, vector embeddings, and timeline tracking.4158MIT
- AlicenseNot gradedqualityAmaintenanceA self-hosted MCP server that provides any LLM with a graph-backed memory layer of your life—tasks, email, finance, contacts, calendar—plus autonomous agent offices that act on your behalf.1Apache 2.0
- AlicenseNot gradedqualityAmaintenanceSelf-hosted, local-first knowledge graph and memory server for AI agents. Enables agents to persist, recall, and organize knowledge through MCP with automatic distillation, deduplication, and cross-linking.MIT
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/jessymariau/booboo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server

