Hebbrix MCP Server
OfficialThe Hebbrix MCP Server provides AI agents with persistent long-term memory, a temporal knowledge graph, and reasoning capabilities. You can:
Manage memories: Store facts, decisions, or preferences (
remember), batch-store multiple at once (remember_many), perform hybrid semantic search (vector + BM25 + graph) with optional score filtering (search), retrieve by ID (get), update with version history (update), delete (forget), list recent (list), view change history (history), reinforce recall (mark_used), and export/import data in JSON or Markdown (export,import).Leverage the knowledge graph: List known entities (
search_entities), view bi-temporal entity timelines (entity_timeline), traverse relationships with point-in-time queries (graph_query), and detect contradictions (contradictions).Reason and decide: Answer natural-language questions with cited answers via GraphRAG (
ask), assess confidence for actions based on past outcomes (confidence), and log decisions to improve future assessments (log_decision).Manage account and collections: List available memory collections (
list_collections) and check account status, usage, and limits (account_status).
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Hebbrix MCP Serverremember that the meeting is at 3pm"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Hebbrix MCP Server
A Model Context Protocol server that gives any AI agent persistent memory, a temporal knowledge graph, and outcome-based learning, backed by Hebbrix.
This repository is the MIT-licensed MCP adapter. Durable storage, retrieval, graph processing, reasoning, and Outcome Memory are provided by the Hebbrix cloud API; this repository does not claim that the backend is self-hostable or open source.
Your agent forgets everything when the session ends. This fixes that, and goes further than a plain memory store:
Memory — store, search, correct, and version facts across sessions
Knowledge graph — entities, relationships, timelines, and "what was true at time X"
Reasoning — ask how confident the agent should be before acting, and log outcomes so it improves
Outcome Memory — learn which action works for each customer and context from delayed results, with safe baselines and inspectable uncertainty
Works with Claude Desktop, Claude Code, Cursor, Cline, Continue, and any other MCP client.
Release compatibility
MCP package | Hosted/API contract | Tool surface | Migration |
0.5.11 | Hebbrix API 1.1.3 / search-safety-v1 / claim-grounding-v28 | 33 | Consistent evidence verification, failure categories, request diagnostics |
0.5.8 | Hebbrix API 1.0.0 / search-safety-v1 | 32 | Adds procedure lifecycle tools |
Version 0.5.10 preserves upstream indexing receipts across writes, updates, and polling. Graph status distinguishes related memories from entity relationships. The companion API's claim-grounding-v28 contract verifies named-subject evidence consistently across cold and cached retrieval and preserves purpose and direction; the adapter never bypasses upstream grounding to manufacture an answer.
Version 0.5.11 adds response-local diagnostics (request ID, build, grounding and
safety versions, and search cache path). An ask fallback includes separate
reasoning and retrieval diagnostics. No credentials or memory content are
included in diagnostics. synthesis_status distinguishes synthesized,
retrieval_only, and abstained. failure_category distinguishes unknown facts,
unverified candidates, unavailable verification, service failures, quota
exhaustion, and malformed evidence receipts. Legitimate abstention is not a
transport error. These labels do not weaken the evidence gate.
Reproduce the full customer set and additional distractor checks with
python scripts/verify_recall.py --require-graph against a local API first;
use --mcp http://localhost:8099/mcp for HTTP. Remote fixture writes require
--allow-remote. The verifier creates isolated guests, tests both result limits
before and after asynchronous processing, then deletes its collections.
This targeted regression suite is not a representative accuracy benchmark;
conservative abstentions and probabilistic synthesis remain possible.
Version 0.5.9 makes structured failures real MCP errors over both stdio and hosted HTTP, preserves authoritative recall when GraphRAG abstains by returning an explicitly retrieval-only result, and adds bounded graph-enrichment status polling. Version 0.5.8 added the complete tenant-scoped procedure lifecycle (including idempotent deletion), and preserves authoritative batch readiness receipts. It also retains 0.5.7's API-owned grounding and abstention envelope: missing, malformed, degraded, or ungrounded receipts fail closed with empty evidence.
The hosted server and PyPI package expose their exact package version during
MCP initialization. The API exposes its immutable deployment build through
X-Hebbrix-Build and GET /v1/health/build; OpenAPI info.version identifies
the stable HTTP contract rather than a mutable deployment.
Fastest setup: hosted, no account
For an HTTP-capable MCP client, this is the entire setup:
{ "mcpServers": { "hebbrix": { "url": "https://mcp.hebbrix.com/mcp" } } }On the first MCP handshake, Hebbrix creates an isolated free guest memory and keeps its credential in a Secure, HttpOnly session cookie. There is no signup, email, dashboard, local process, or API key to paste. A compatible MCP HTTP client automatically sends that cookie on later requests. Add your own bearer key at any time if you want to use an existing Hebbrix account instead.
Quick start (no account needed)
Add this to your MCP client config. On first run with no API key, the server mints a free agent account automatically (no email, no dashboard, ~2-4 seconds via proof-of-work) and saves it to ~/.hebbrix/config.json.
{
"mcpServers": {
"hebbrix": { "command": "uvx", "args": ["hebbrix-mcp"] }
}
}uvx (from uv) runs the server with no install step. If you prefer, pip install hebbrix-mcp and use "command": "hebbrix-mcp" instead.
Restart the client. Done — your agent now has persistent memory.
The free agent account includes 300 learning events and 2,000 retrievals, and expires 14 days after last use if unclaimed. The first tool result, material quota/status changes, and every constrained-state result carry a hebbrix_usage block; hebbrix_account_status returns it on demand at any time.
Keep it forever (same key, all memories carry over, unlocks the free monthly tier):
uvx hebbrix-mcp claim --email you@example.comRelated MCP server: Bi-Temporal Knowledge Graph MCP Server
Claude Code plugin (recommended)
Install as a Claude Code plugin and Claude starts every session already
knowing you — a SessionStart hook auto-loads your compiled Hebbrix profile
into context, and the memory tools are wired up in one step:
/plugin marketplace add Hebbrix/hebbrix-mcp
/plugin install hebbrix@hebbrixThat's it. No account needed (agent mode mints one on first run); set your
api_key in the plugin config to use your own account instead. The hook degrades
gracefully — a brand-new profile just shows (none yet) until you've saved a few
facts, and it never blocks a session.
Configuration
Get an API key at hebbrix.com/dashboard/api-keys to use your own account instead of agent mode.
{
"mcpServers": {
"hebbrix": {
"command": "uvx",
"args": ["hebbrix-mcp"],
"env": {
"HEBBRIX_API_KEY": "mem_sk_...",
"HEBBRIX_COLLECTION_ID": "your-default-collection-uuid"
}
}
}
}claude mcp add hebbrix -- uvx hebbrix-mcp{
"mcpServers": {
"hebbrix": { "command": "uvx", "args": ["hebbrix-mcp"] }
}
}Point your MCP servers config at the uvx hebbrix-mcp command (stdio). Same shape as above. Set HEBBRIX_API_KEY in env to skip agent mode.
The env var always wins over saved agent-mode credentials.
Environment variables
All optional. With nothing set, the server starts in agent mode.
Variable | Default | Purpose |
| (agent mode mints one) | Your Hebbrix bearer token |
| (agent mode sets one) | Default collection for writes/reads |
|
| API endpoint override |
|
| Where agent-mode credentials are saved |
|
| Bind host (HTTP transports) |
|
| Bind port (HTTP transports) |
| off | Hosted mode: per-request |
| off | Hosted mode: mint a bounded guest identity on unauthenticated |
| (required for accountless) | HMAC secret for stateless Secure guest cookies |
| (required for accountless) | HMAC trust bridge for original-client signup throttling |
Available Tools
A server-level instruction block teaches the model when to reach for each tool, so a well-behaved agent searches before answering and remembers what matters without being told.
Memory
hebbrix_remember- Store a fact, decision, or preference.content(string, required): the memory texttags(list, optional),collection_id(string, optional)extract(bool, default false): false stores the text exactly (one memory); true starts a tracked fact-extraction job and may create several atomic memorieswait_for_extraction(bool, default true): for smart ingestion, poll for up to 20 seconds and return normalized atomic memories. Set false for immediate acknowledgement, then callhebbrix_extraction_statuswith the returned job id.wait_for_index(bool, default true): requests a bounded wait for memory-search availability. Check the returnedsearchableacknowledgement: if false, the write is durable but indexing is not confirmed; pollhebbrix_get(id)and do not repeat the write. It does not cover asynchronous knowledge-graph enrichment; usehebbrix_graph_statusfor durable completion. Itsrelated_memory_countcounts neighboring memories, not entity relationships; zero neighbors does not mean zero extracted edges.
hebbrix_extraction_status- Poll a smart-ingestion job until its created/updated memories or terminal error are available.hebbrix_remember_many- Store many facts in one call (one round-trip, one rate-limit hit). Passfacts(list of strings). Falls back to sequential writes on free/agent tiers.hebbrix_search- Semantic search (hybrid vector + BM25 + graph retrieval).query(string, required),limit(int, optional),collection_id(string, optional)min_score(float, default 0.0): drop weak matches — zero-relevance padding is always dropped; raise this to filter noise so you don't pay tokens for it.
hebbrix_get- Fetch one memory by id, with metadata.hebbrix_update- Correct a memory in place (old versions are kept).hebbrix_forget- Delete a memory by id.hebbrix_list- List recent memories.hebbrix_history- See how a memory changed over time.hebbrix_mark_used- Reinforce a memory you actually used (helpful=Truestrengthens it,Falseweakens it) so recall improves over time.hebbrix_export- Export a whole collection (memories + graph entities + profile) as JSON or Markdown, in one call.hebbrix_import- The inverse of export: import a list of facts, an export JSON, or notes/markdown into a collection (restore a backup, migrate, or seed fromCLAUDE.md).
Knowledge graph — Hebbrix automatically extracts entities and relationships from the memories you write, on every tier including agent mode, so all the graph reads below (entities, timelines, traversal, contradictions) work in agent mode too. Only explicit graph write / inference operations require a Pro plan.
hebbrix_search_entities- List known entities (people, orgs, tools, places).hebbrix_entity_timeline- What was true about an entity, and when.hebbrix_graph_query- Traverse relationships out from a named entity; pass atimestampfor point-in-time truth. Results are trimmed (from/to/type/valid_from), not raw backend payloads. (Free-text questions: usehebbrix_ask.)hebbrix_graph_status- Check one memory's asynchronous graph readiness, optionally polling for up to 30 seconds. Readiness comes from durable, source-revision-bound delivery acknowledgements—not elapsed time, search readiness, or an empty graph query. It distinguishes successful enrichment with no related facts from a still-processing, failed, or temporarily unreadable graph.hebbrix_contradictions- Surface facts that conflict with each other.
Procedural memory
hebbrix_create_procedure- Store a scoped condition/action procedure.hebbrix_list_procedures/hebbrix_get_procedure- Inspect owned procedures.hebbrix_update_procedure- Update mutable fields; ownership scope is immutable.hebbrix_execute_procedure- Execute a procedure and record the execution.hebbrix_delete_procedure- Idempotently delete a procedure and its executions. The API returns the same 204 for deleted, absent, and foreign-tenant IDs so the tool cannot reveal another tenant's identifier.
Reasoning & account
hebbrix_ask- One-call GraphRAG. Ask a natural-language question; it searches memory, synthesizes an answer with an LLM, and cites the memory ids it used. If synthesis abstains while authoritative search has grounded evidence, it returns that evidence assynthesis_status: "retrieval_only"instead of silently losing recall or pretending synthesis succeeded.hebbrix_confidence- How confident should the agent be before acting? Grounded in memory + past outcomes.hebbrix_log_decision- Record a decision and its outcome; feeds future confidence. Right after ahebbrix_confidencecheck you can log just theoutcome— the description auto-fills from what you asked.hebbrix_choose_action- Safely choose among repeatable strategies and create a causal decision receipt before acting. Supports per-user/context policies and explicitly bounded exploration.hebbrix_report_outcome- Close that decision loop later withsuccess, a bounded reward, or configured business metrics. Corrections replace prior evidence instead of double-counting it.hebbrix_learning_insights- Inspect posterior probabilities, credible intervals, effective evidence, and optional chronological-holdout policy readiness checks for one customer policy.hebbrix_list_collections- List the memory spaces this key can use.hebbrix_account_status- Tier, usage, limits, and expiry.hebbrix_claim_start/hebbrix_claim_verify- Optionally keep an accountless guest memory permanently, without changing its collection or losing data.
Every tool publishes explicit MCP safety annotations. hebbrix_claim_start is
marked as an external side effect because it sends email; deletion is marked
destructive; reads are marked read-only. The six-digit claim code is declared
as a write-only password field and is never logged or returned by this server.
MCP hosts still control their own tool-call history, so configure the host to
redact secret inputs if it persists conversation or tracing data.
The server also exposes a hebbrix://profile resource and a context prompt that inject the user's compiled profile.
Make Hebbrix the agent's memory
The server ships an instruction block telling the model to use Hebbrix for anything it would "remember." But some hosts (notably Claude Code) have their own file-based memory whose instructions live at the system-prompt level and can outrank an MCP server's instructions — so the agent may quietly write notes to a local file instead of Hebbrix.
The reliable fix is one line in your project's CLAUDE.md (or your assistant's system prompt / rules file):
## Memory
Use the Hebbrix MCP server as the single source of truth for long-term memory.
When you would remember, note, or save anything durable, call `hebbrix_remember`
(and `hebbrix_search` to recall). Do not write memory to local files or the
host's built-in memory.Cursor users: add the same to .cursorrules. This puts the preference at the level the host respects, so Hebbrix wins consistently.
Running modes
Local (default) — stdio. What the quick start does: one process per client.
Self-hosted HTTP — one instance, your machines:
HEBBRIX_API_KEY=mem_sk_... uvx hebbrix-mcp --transport streamable-http
# serves http://127.0.0.1:8080/mcpHosted — nothing to run and no account required. Point any HTTP-capable MCP client at the official hosted endpoint. The first handshake creates an isolated guest memory and a Secure, HttpOnly session cookie automatically:
{ "mcpServers": { "hebbrix": {
"url": "https://mcp.hebbrix.com/mcp"
}}}To use an existing Hebbrix account instead, add its API key (get one at hebbrix.com/dashboard/api-keys):
{ "mcpServers": { "hebbrix": {
"url": "https://mcp.hebbrix.com/mcp",
"headers": { "Authorization": "Bearer mem_sk_..." }
}}}Self-hosted multi-tenant — one instance, many users. Same shape on your own
infra. By default every request authenticates with its own Authorization
header:
HEBBRIX_MCP_MULTI_TENANT=1 HEBBRIX_MCP_HOST=0.0.0.0 uvx hebbrix-mcp --transport streamable-httpOr run the container (multi-tenant by default, GET /healthz for load-balancer probes):
docker build -t hebbrix-mcp . && docker run -p 8080:8080 hebbrix-mcpIn multi-tenant mode, the server resolves each authenticated key's default
collection automatically. An explicit collection_id still overrides it.
How it works
┌──────────────────┐ MCP (stdio or HTTP) ┌─────────────┐ HTTPS ┌──────────┐
│ Claude / Cursor / │ ───────────────────────→│ hebbrix-mcp │─────────────→│ Hebbrix │
│ Cline / any agent │ tool calls │ (this) │ REST API │ cloud │
└──────────────────┘ └─────────────┘ └──────────┘This package owns no durable memory state. Tool calls become REST calls against your Hebbrix tenant; memories, embeddings, the knowledge graph, and retrieval all live in the Hebbrix backend. The hosted accountless path keeps only a signed identity cookie in the MCP client so multiple stateless replicas can serve it. Delete the local package and your backend memories are still there.
Agent-mode accounts never break mid-task: when a limit is reached you get a structured error with a resolve field, not a failure. Writes stop before reads; reads keep working; the account goes read-only before it expires.
Debugging
Inspect the server with the MCP Inspector:
npx @modelcontextprotocol/inspector uvx hebbrix-mcpCommon issues:
HTTP 401on every call — the key is wrong or revoked. UnsetHEBBRIX_API_KEY, delete~/.hebbrix/config.json, and restart to re-provision, or paste a fresh key from the dashboard.Agent mode won't start (
auto-signup unavailable) — signup may be at daily capacity or your network blocks the API. SetHEBBRIX_API_KEYinstead.claimsaysEMAIL_IN_USE— claiming needs an email with no existing Hebbrix account. Use a fresh address (ayou+agent@gmail.comalias works).A memory isn't searchable immediately —
wait_for_index=truerequests a bounded wait, not an unconditional guarantee. Checksearchable; if false, pollhebbrix_get(id)and preserve the receipt. Do not repeat an accepted write.A just-written fact's entities aren't in the graph yet — knowledge-graph enrichment (entities, timelines, graph queries) runs asynchronously after the write and is not covered by
wait_for_index. It typically lands within ~30s; the write response'sgraph_enrichment: "processing"signals it's still in flight.
Development
git clone https://github.com/Hebbrix/hebbrix-mcp
cd hebbrix-mcp
python -m pip install uv==0.8.4
uv sync --frozen --extra dev
uv run --frozen pytest tests/ -q -W error # offline; no network or key needed
hebbrix-mcp # starts in agent mode on stdioSee CONTRIBUTING.md and CHANGELOG.md.
An opt-in integration check reproduces conversational recall, corrections, fresh-process retrieval, abstention, isolation, and disposable collection cleanup:
uv run --frozen python scripts/verify_recall.py --api http://localhost:8000It creates synthetic data in two new guest collections and deletes them in a
cleanup block. Remote targets require --allow-remote; --mcp URL selects the
hosted transport and --require-graph checks asynchronous graph enrichment too.
License
MIT — see LICENSE.
Links
Available Tools
33 toolshebbrix_account_statusARead-onlyIdempotent
Tier, usage, limits, and expiry for this agent's account. In agent mode (auto-provisioned account), relay the claim command to the human when usage status is 'warning' or worse — claiming is one command and keeps all memories.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, making the safe-read nature clear. The description adds behavioral context beyond annotations by explaining the claim command relay behavior and the consequence ('keeps all memories') in agent mode. No contradiction with 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?
The description is two sentences with no wasted words. The first sentence front-loads the core purpose, and the second adds a crucial conditional instruction. Every clause earns its place, and the structure is 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?
For a zero-parameter status tool with annotations and an output schema present, the description is complete. It explains what the tool reports, when to act on the result, and what the act achieves. The output schema can handle field-level details, so the description doesn't need to repeat them.
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, so the schema already covers everything (100% coverage trivially). Baseline for 0 params is 4; the description doesn't need to add parameter semantics since none exist. It correctly focuses on the output and the conditional action.
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: it reports 'Tier, usage, limits, and expiry' for the agent's account. This is a specific verb+resource combination and distinguishes it from sibling memory/action tools. The additional instruction about relaying the claim command is a secondary actionable, but the core purpose is 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 for when to use the tool in agent mode: 'relay the claim command to the human when usage status is "warning" or worse.' It gives a concrete condition and subsequent action, but does not explicitly name alternatives or exclusions. This is strong contextual guidance, though not a full when/when-not matrix.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_askARead-onlyIdempotent
Answer a natural-language question from memory in ONE call. Searches memories, synthesizes an answer with an LLM, and CITES the memory ids it used — so you don't have to orchestrate hebbrix_search + hebbrix_graph_query + profile yourself. Use for questions like "who works with me on Atlas and what did we decide?".
Returns {"question", "answer", "citations":[{"id","content","score"}]} plus the same authoritative safety envelope as search. If reasoning or its evidence receipt is unavailable, the tool fails closed with no citations.
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | ||
| collection_id | No | ||
| include_graph | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only, idempotent, non-destructive annotations, the description discloses that the tool synthesizes answers with an LLM, cites the memory ids used, inherits the safety envelope of hebbrix_search, and fails closed with no citations if reasoning or evidence receipt is unavailable. This is substantial behavioral context that annotations alone do not provide.
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 a concise one-sentence summary, followed by a clear example, alternatives, and failure mode. The inline return JSON is somewhat redundant given the output schema, but the overall structure is scannable and each sentence 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?
The description covers purpose, usage, return shape, and failure behavior well, but the unexplained collection_id and include_graph parameters are a real gap for an agent deciding how to invoke the tool. The output schema mitigates return-value ambiguity, but parameter-level guidance is still 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?
The input schema has three parameters but 0% description coverage, and the tool description does not explain collection_id or include_graph at all. It only indirectly implies what the question parameter should contain through the natural-language example, which is insufficient for correct invocation.
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 ('Answer'), the resource ('a natural-language question from memory'), and the key constraint ('in ONE call'). It explicitly differentiates itself from sibling tools by naming the orchestration it replaces (hebbrix_search + hebbrix_graph_query + profile), so an agent can easily tell what it does.
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 an explicit example of when to use the tool ('who works with me on Atlas and what did we decide?') and names the alternative composition it avoids. It does not include a 'when not to use' clause, but the substitution guidance is direct and unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_choose_actionA
Choose and RECORD an action before its result is known.
Use for repeatable decisions whose real outcome can be reported later: reply
strategy, workflow, tool, prompt, recommendation, intervention, or plan.
policy_key identifies that decision type (for example support.reply).
actions are stable machine keys. context contains only factors that may
change which action works. The first action is the safe baseline unless
baseline_action is supplied. Only offer actions already authorized by the
host agent; learning optimizes among candidates and never grants permission.
Normal use: omit chosen_action; Hebbrix recommends conservatively. To log a
choice made elsewhere, pass chosen_action and its exact behavior-policy
action_probability (required with multiple actions). Set exploration_rate
to at most 0.2 only when controlled randomized learning is acceptable.
Keep the returned decision_id, perform chosen_action_key, then call
hebbrix_report_outcome when the real result arrives—even minutes or days
later. Missing outcomes are censored, never counted as failures.
| Name | Required | Description | Default |
|---|---|---|---|
| actions | Yes | ||
| context | No | ||
| user_id | No | ||
| policy_key | Yes | ||
| chosen_action | No | ||
| collection_id | No | ||
| baseline_action | No | ||
| idempotency_key | No | ||
| exploration_rate | No | ||
| action_probability | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring false hints, the description carries full responsibility. It reveals behavioral traits: records the action, recommends conservatively, never grants permissions, censors missing outcomes (not failures), and limits exploration to ≤0.2. These are meaningful and go beyond the schema. No contradiction with 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?
The description is well-structured into paragraphs that flow logically: purpose, usage modes, exploration constraints, and follow-up workflow. It front-loads the main purpose and avoids redundancy, though it is longer than minimal due to the complexity. Every sentence adds value without unnecessary 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?
The description covers the complete decision-recording loop: choose, get decision_id, perform action, report outcome later. It explains the main parameters and the safe baseline. Given that an output schema exists, return values are not required. Missing parameters like idempotency_key and collection_id would benefit from brief notes, but overall it is nearly complete for the tool's intended use.
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 explains key parameters (policy_key, actions, context, baseline_action, chosen_action, action_probability, exploration_rate) with semantic context (e.g., 'actions are stable machine keys', 'context contains only factors that may change which action works'). However, it omits details for user_id, collection_id, and idempotency_key, which are left entirely to the schema. Since schema description coverage is 0%, the description compensates for most but not all.
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's purpose: 'Choose and RECORD an action before its result is known.' It lists specific use cases (reply strategy, workflow, etc.) and differentiates from siblings like hebbrix_log_decision and hebbrix_report_outcome by focusing on the decision recording before outcome.
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 guidance: normal use (omit chosen_action) vs logging an external choice (pass chosen_action and action_probability), sets an exploration_rate cap (≤0.2), and instructs to call hebbrix_report_outcome later. It also clarifies that outcomes are censored when missing, giving clear when-to-use vs when-not-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_claim_startADestructive
Keep an accountless guest memory permanently by starting email claim.
Only call this after the human explicitly asks to claim/keep the guest
memory and provides the email address. Hebbrix sends a six-digit code to
that address; pass the code to hebbrix_claim_verify. The same memory,
collection, and guest credential carry over—nothing is migrated or reset.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation contradiction: The description explicitly states 'nothing is migrated or reset,' while annotations declare destructiveHint: true. This directly contradicts the system's destructive behavior hint, which could confuse the agent about the tool's safety profile. The description also usefully mentions sending a six-digit code, but the contradiction overrides this positive contribution.
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?
Three sentences, front-loaded with the purpose, no filler. Every sentence adds essential information: what the tool does, when to call it, and what side effects to expect. This is a model of concise, structured writing.
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 description covers prerequisites, the code-sending side effect, and the carry-over of memory/guest credential. The output schema handles return values, so no need to describe them. However, the contradiction with destructiveHint creates a slight gap in safety context, and it doesn't address potential error cases (e.g., invalid email). Still, for a simple one-parameter tool, it is fairly complete.
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 a single parameter (email) and 0% schema coverage, the description adds meaning by explaining that the email is where the six-digit code is sent and that the human must provide it. This goes beyond the bare schema, though it does not specify format or validation rules.
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: 'Keep an accountless guest memory permanently by starting email claim.' It uses a specific verb (start) and resource (email claim), and distinguishes itself from the sibling tool hebbrix_claim_verify by explaining that this tool initiates the process and the verification code is passed to verify.
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 guidance: 'Only call this after the human explicitly asks to claim/keep the guest memory and provides the email address.' It also explains the follow-up step (pass the code to hebbrix_claim_verify), giving clear context for how this tool fits into the overall flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_claim_verifyA
Finish claiming a guest memory with the emailed six-digit code.
Only call after hebbrix_claim_start and after the human supplies the
code. On success the same memories remain available and guest expiry/caps
are replaced by the normal claimed-account tier.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since the annotations are only false flags, the description defines the actual behavioral effect: same memories remain available, and guest expiry/caps are replaced by a regular claimed-account tier. It doesn't describe failure modes, but the main success state and the state mutation are made clear.
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?
Two concise sentences: the first states the operation, the second gives the comparator and postcondition. Everything is front-loaded and every sentence contributes; no unnecessary detail.
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?
Although the description is short, it includes the mandatory predecessor, the user-code precondition, the success state, and the type of security tier change. Since the output schema is provided the description does not need to explain the return value, and it is sufficient for a simple verification step.
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 merely defines a required code string with format password, so the description adds crucial semantics by stating the code is 'emailed' and 'six-digit'. This is enough for a single parameter, though it doesn't literally map the parameter name in the prose.
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 'Finish claiming' and identifies the target resource as 'guest memory with an emailed six-digit code', which makes its purpose clear. It should be executed after hebbrix_claim_start, so it is unambiguous when compared with that sibling.
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 says 'Only call after hebbrix_claim_start and after the human supplies the code', giving a definitive ordering and an exact precondition. This tells the agent exactly when to use the tool and not to use it beforehand.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_confidenceARead-onlyIdempotent
Ask how confident the agent should be before acting on something, grounded in stored memory and past decision outcomes. Call this before a consequential autonomous action. Returns a confidence score and a recommended action.
If the action VIOLATES a stored numeric rule (e.g. opening a 600-line PR when
a memory says "PRs must be < 400 lines"), the result includes a
constraint_conflict block and recommended_action is do_not_act.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| collection_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, non-destructive behavior. The description adds valuable context: it returns a confidence score and recommended action, and it handles constraint violations with a dedicated block and do_not_act recommendation. This goes beyond annotation-provided safety info, with 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 concise and well-structured: first paragraph covers purpose and usage, second paragraph details a special edge case. No redundant sentences; every sentence 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 tool's moderate complexity and the presence of an output schema, the description covers purpose, when to use, return value, and conflict behavior. The main gap is parameter semantics, but overall it is sufficiently complete for an agent to select the tool confidently. Slightly docked for not explaining query/collection_id.
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. However, it never explains what the 'query' parameter should contain (e.g., the proposed action or situation) or the purpose of 'collection_id'. The high-level phrasing implies query is the action, but this is not explicit, leaving agents guessing at invocation details.
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 function: asking how confident the agent should be before acting, grounded in stored memory and past outcomes. It distinguishes itself from siblings by specifying the return of a confidence score and recommended action, and the constraint_conflict block for numeric rule violations.
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 an explicit when-to-use directive: 'Call this before a consequential autonomous action.' It does not explicitly name alternatives or exclusion cases, but the context makes the intended usage clear. A minor gap versus naming a specific alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_contradictionsARead-onlyIdempotent
Surface contradicting facts in the knowledge graph (e.g. two different values for the same attribute). Pass a memory_id to check one memory, or omit to scan. Use before trusting a fact that feels ambiguous.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | No | ||
| collection_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and idempotent behavior. The description adds value by specifying scoping behavior (one memory vs. full scan) and an example of what constitutes a contradiction. No contradiction with 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?
Two concise sentences that are front-loaded with purpose and usage. No redundant phrases or filler. Every clause contributes meaning.
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, return details are not needed. The description covers the main functionality and usage modes, but misses explaining the second parameter (collection_id). Slight gap but overall sufficient for a read-only 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%, so the description must compensate. It explains 'memory_id' as an optional filter, but 'collection_id' is not mentioned at all, leaving its role ambiguous. This partial clarification earns a 3.
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 'surface' and resource 'contradicting facts in the knowledge graph' with a concrete example ('two different values for the same attribute'). This is specific and distinguishes it from sibling tools like heaprix_confidence or heaprix_ask.
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 contextual guidance: 'Use before trusting a fact that feels ambiguous.' Also explains the two usage modes (pass a memory_id or omit to scan), which is a clear condition for invocation. Though no alternatives are named, the situational cue is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_create_procedureB
Create a tenant-scoped learned procedure using canonical API fields.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| action | Yes | ||
| run_id | No | ||
| user_id | No | ||
| agent_id | No | ||
| category | No | ||
| condition | Yes | ||
| parameters | No | ||
| description | No | ||
| collection_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description correctly indicates a write operation, consistent with readOnlyHint=false, and adds that the object is tenant-scoped. However, it does not explain creation semantics such as duplicate behavior, required tenant context, or how 'learned' affects persistence, so it adds only modest context beyond the 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?
The description is a single front-loaded sentence with no redundant words. It loses one point because the phrase 'canonical API fields' is vague and could mislead, but it is otherwise economically structured.
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 description identifies the resource type and tenant scope, and output schema provides return-shape context, but it is far too thin for a 10-parameter create tool with two free-form nested objects. The agent is left without guidance on required field semantics, relationships between run_id/user_id/agent_id, or how condition and action are structured.
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 10 parameters and 0% schema description coverage, the description needed to explain the open-ended condition/action objects and the optional identifiers, but it only says 'canonical API fields' without identifying any of them. An agent cannot determine what to place in name, condition, action, parameters, or collection_id.
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 names a clear action ('Create'), a specific resource ('tenant-scoped learned procedure'), and the required input style ('canonical API fields'). It is readily distinguished from siblings like hebbrix_update_procedure, hebbrix_delete_procedure, and hebbrix_get_procedure.
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 when-to-use guidance is provided: it does not say when to choose this over hebbrix_update_procedure, hebbrix_remember, or hebbrix_execute_procedure, and it gives no prerequisites or constraints. The intended usage must be inferred solely from the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_delete_procedureADestructiveIdempotent
Idempotently delete a tenant-owned procedure and its executions.
The API returns the same 204 for deleted, absent, and foreign-tenant ids so this destructive tool cannot disclose another tenant's procedure identity.
| Name | Required | Description | Default |
|---|---|---|---|
| procedure_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description explains that the API returns the same 204 for deleted, absent, and foreign-tenant ids and that this prevents disclosure of another tenant's procedure identity. This adds meaningful behavioral context that annotations alone do not provide.
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?
Two short sentences, zero filler, and the core operation is front-loaded. Every clause adds value, especially the security-relevant 204 note.
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 one-parameter destructive tool, the description, annotations, and output schema cover what an agent needs: the delete semantics, idempotency, tenant scoping, response-code uniformity, and privacy guarantee. No material gap remains.
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 the description must compensate. While it does not explicitly restate that procedure_id identifies the procedure, the second sentence clarifies important semantics: foreign or absent ids are treated identically, and the idempotent delete behavior directly affects how the result of any procedure_id should be interpreted.
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 opening phrase 'Idempotently delete a tenant-owned procedure and its executions' names a specific verb, resource, and scope, making it unmistakable and distinct from sibling create/update/get/list/execute procedure 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 clearly establishes the tool's use case: removing a tenant-owned procedure and its executions. It does not explicitly name alternatives or exclusions, but the delete semantics are unambiguous and sufficient to route an agent to this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_entity_timelineARead-onlyIdempotent
Bi-temporal timeline for one entity: what facts were true about it and when. Use this for "what changed" / "what was true at time X" questions about a person, company, or thing. Case-insensitive.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_name | Yes | ||
| collection_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false), the description adds the meaningful 'bi-temporal' semantic (dual time dimensions — valid time and assertion time), clarifies the scope ('one entity'), and reveals the case-insensitive matching behavior. This enriches the agent's understanding beyond the structured 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?
Three tight sentences. The crucial purpose is front-loaded in sentence one, usage guidance in sentence two, and a valuable behavioral note (case-insensitivity) in the final sentence. Zero filler, every sentence 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?
The tool has moderate complexity (2 params, output schema present). The description covers core purpose and usage, and the case-insensitivity detail is useful, but collection_id is completely unaddressed, which is necessary for a complete picture. The output schema mitigates return-structure concerns, but the param gap makes this only minimally complete.
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 the description must compensate. It partially documents entity_name ('for one entity', 'case-insensitive') but never mentions collection_id, its purpose, or its effect on the query. With two parameters and zero schema descriptions, this is a significant gap leaving the optional parameter undocumented.
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: 'Bi-temporal timeline for one entity: what facts were true about it and when.' This is a specific verb+resource (timeline of a single entity) and distinguishes it from siblings like hebbrix_get (current state) and hebbrix_list (multiple entities). However, it doesn't explicitly contrast with hebbrix_history, which could be overlapping, preventing a 5.
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 gives explicit usage context: 'Use this for "what changed" / "what was true at time X" questions about a person, company, or thing.' This tells the agent when to invoke the tool. However, it doesn't state when NOT to use it or name alternative sibling tools, so the guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_execute_procedureB
Execute one tenant-owned procedure and record its execution.
| Name | Required | Description | Default |
|---|---|---|---|
| parameters | No | ||
| input_state | No | ||
| procedure_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'record its execution,' a behavioral detail not present in the annotations, and notes the tenant-ownership constraint. It does not mention authentication needs, what happens on failure, or whether execution may mutate external state beyond the record, so transparency is only partial.
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 front-loaded sentence that conveys the core purpose and the key side effect without filler. It loses one point because its brevity leaves important operational detail unstated.
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 tool with three parameters, no schema descriptions, and only minimal annotations, the description is incomplete: it does not clarify what goes into 'parameters' versus 'input_state', whether the procedure must already exist, or what execution entails beyond being recorded. The presence of an output schema reduces the need to describe return values but does not close these 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 description coverage is 0%, so the description needed to explain the free-form 'parameters' and 'input_state' objects, but it does not. It adds no meaning beyond the parameter names and procedure_id requirement already visible in 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 states a specific action ('Execute'), a clearly bounded resource ('one tenant-owned procedure'), and a distinctive side effect ('record its execution'). This separates it from procedure-management siblings like hebbrix_get_procedure, hebbrix_create_procedure, and hebbrix_list_procedures.
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 intended use is implied: call this when you want to run a tenant-owned procedure. However, there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as viewing a procedure first with hebbrix_get_procedure or choosing an action via hebbrix_choose_action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_exportARead-onlyIdempotent
Export EVERYTHING in a collection in one call — all memories, the knowledge-graph entities, and the compiled profile. Data portability: use it to back up or migrate a memory space, nothing is locked in.
format="json" (default) returns structured data; format="markdown" returns a single human-readable document under the "document" key.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | json | |
| collection_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already define it as read-only, idempotent, and non-destructive. The description adds that 'nothing is locked in' and explains the markdown return format, corroborating the annotations. It lacks details on potential pagination or output size limits, but the core behavior is transparent.
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, consisting of two sentences that deliver purpose and key parameter details. It is well-structured, with no redundancy or irrelevant information.
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 an output schema and minimal description of collection_id, the description is not fully complete. It mentions 'structured data' for JSON but does not detail the structure or specify how collections are identified. The markdown return key is noted, but overall context for a complex export operation is lacking.
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 explains the 'format' parameter (json vs markdown) and its impact on the return structure. However, the 'collection_id' parameter is not described beyond the vague 'collection' in the purpose, leaving ambiguity about its role (e.g., what happens when null, or whether it is required for non-default collections).
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 exports everything in a collection (memories, knowledge-graph entities, compiled profile), making its core function unambiguous. This distinguishes it from sibling tools like get, list, or search which handle subsets.
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 mentions data portability for backup or migration, giving a clear use case. However, it does not explicitly contrast with alternatives or state when not to use it, though the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_extraction_statusARead-onlyIdempotent
Poll a smart-ingestion job returned by hebbrix_remember(extract=True).
Returns queued/processing/indexing_pending until terminal, then returns the created/updated atomic memories on completed or an actionable error on failed. Jobs expire after the backend retention window, so poll promptly.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| collection_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals behavior beyond the safe annotations: it describes the status lifecycle (queued/processing/indexing_until terminal), what happens at completion vs failure, and a retention-window expiration. This gives the agent crucial information about repeated polling and timeout risks that would otherwise be invisible.
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?
Three crisp sentences, not a single redundant word. The main purpose is front-loaded, then state-transition and expiration hazards are explained in two more lines. Ideal for parsing by an agent and compared to verbose 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?
For a simple polling tool with an output schema available, the description fully covers the workflow context: how the job is created, what states it transitions through, the terminal results, and the warning about expiry. No critical context appears to be 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 carry parameter semantics. It only implies that job_id is the job returned by hebbrix_remember, but it never mentions collection_id, its purpose, or usage. Two parameters, one optional, are left mostly undocumented semantically.
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 action, 'Poll a smart-ingestion job returned by hebbrix_remember(extract=True)', which clearly defines the resource and provenance. This makes the tool obvious distinct from all sibling memory-management tools, which focus on reading, writing, searching, or deleting rather than polling a job.
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 tells users exactly when to invoke this tool: after hebbrix_remember(extract=True). It also gives an imperative 'poll promptly' because jobs expire. It doesn't list alternatives or explicit when-not scenarios, but this is naturally the only polling tool in the set, so the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_forgetADestructiveIdempotent
Delete a memory by id.
A successful deletion returns deleted=true and the requested memory id;
an already-absent id retains the structured 404 error and adds
already_absent=true. This stable tool shape does not depend on whether
the API's successful DELETE response has a JSON body.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by detailing the exact successful response (deleted=true and id), the already-absent edge case (structured 404 plus already_absent=true), and response-body independence. This gives an agent a stable model of both success and failure behavior, which is highly valuable for a destructive operation.
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 short and front-loaded with the core purpose, followed by two compact sentences covering response semantics and an important edge case. Every sentence adds distinct and useful 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?
For a one-parameter delete tool, the description plus the destructive and idempotent annotations give a complete picture of what happens on success, what happens on missing id, and what type of error to expect. No critical selection or invocation behavior 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?
The schema has one obvious parameter, memory_id, and the description reinforces that it is the identifier of the memory being deleted. It adds little format or constraint detail, but the low complexity and self-explanatory parameter name make this a minimally acceptable level.
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?
"Delete a memory by id" uses a specific action verb and clear resource, and the semantic distinction from sibling tools like hebbrix_update or hebbrix_remember is obvious. The purpose is immediately understandable and not redundant with the tool name.
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 clearly implies the tool should be used when a memory needs to be deleted by its id, and the error handling text adds operational context. However, it does not explicitly contrast with alternatives or say when not to use it, e.g. when only marking a memory used or updating it instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_getARead-onlyIdempotent
Fetch one memory by id, including its full content and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that it returns 'full content and metadata,' providing useful behavioral context beyond the annotations. 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 a single, front-loaded sentence with no unnecessary words. It states the action, resource, and return content efficiently.
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 simple single-parameter get tool with strong annotations and an output schema, the description is complete. It covers the core functionality and return content, and the output schema handles detailed return format. No major 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 description coverage is 0% and the description only says 'by id,' which largely repeats the parameter title 'Memory Id.' It does not explain the format, example, or how to obtain a valid memory_id, failing to add meaningful semantics 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 'Fetch one memory by id, including its full content and metadata.' It specifies a precise verb (fetch) and resource (memory by id), distinguishing it from sibling tools like hebbrix_list (which likely lists multiple) or hebbrix_search (which searches).
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 you have a specific memory id, but it does not explicitly mention when not to use it or provide alternatives such as hebbrix_list or hebbrix_search. Context is clear but lacks explicit exclusions or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_get_procedureARead-onlyIdempotent
Get one tenant-owned procedure by id.
| Name | Required | Description | Default |
|---|---|---|---|
| procedure_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already communicate readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to repeat those. It does add the tenant-ownership scoping, but provides no further behavioral context such as errors, permissions, or absence of side effects beyond what the annotations imply.
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 with no filler. The verb, resource, and retrieval method are front-loaded, making the tool's purpose immediately obvious.
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 simple single-entity fetch tool with one well-named parameter, a supporting output schema, and safety annotations, the description is nearly complete. It could be stronger by explicitly naming sibling alternatives or noting what happens when no procedure matches, but no critical information needed to call it correctly 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?
There is a single parameter, procedure_id, with 0% schema description coverage. The description's 'by id' clarifies that the parameter is the lookup key, but it does not describe the ID format, how to obtain it, or any constraints, so the description only partially compensates for the missing schema documentation.
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 ('Get'), a specific resource ('one tenant-owned procedure'), and a clear retrieval method ('by id'). The singular scope and resource type distinguish it from sibling tools like hebbrix_list_procedures, hebbrix_search, and hebbrix_execute_procedure.
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 'by id' phrase implies this tool is for retrieving a single known procedure rather than listing or searching, and 'tenant-owned' scopes the use case. However, there is no explicit guidance on when not to use it or which alternative to choose when an ID is unavailable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_graph_queryARead-onlyIdempotent
Traverse the knowledge graph OUT FROM a named entity to find its
relationships and facts. Pass an ISO timestamp to ask what was true at
that point in time (bi-temporal). depth = graph hops (1-5).
For a free-text question ("who works at Sequoia?"), use hebbrix_ask (it does search + graph + profile and synthesizes an answer) — this endpoint traverses from a known entity, not from prose.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| entity | Yes | ||
| timestamp | No | ||
| collection_id | No | ||
| relation_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a read-only, idempotent, non-destructive operation. The description adds useful behavior context beyond annotations by explaining bi-temporal timestamp semantics and depth range (1-5), which are not inferable from the schema alone.
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?
Two concise paragraphs: the first introduces the core function and key parameters; the second provides a clear use-case differentiation. No word is wasted, making it easy to scan and understand quickly.
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 graph traversal tool with an output schema present, the description covers the essential usage: what it does, how to use the primary parameters, and when to choose an alternative. Minor omissions like relation_type and collection_id filtering options prevent a perfect score, but these are intuitive from their names.
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 the description must illuminate parameters. It effectively explains 'timestamp' (ISO format, bi-temporal) and 'depth' (graph hops, 1-5), but omits 'relation_type' and 'collection_id' which are left entirely to the schema. This partially compensates for the missing parameter documentation.
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 traverses a knowledge graph from a named entity to find relationships and facts, with a specific verb-resource pairing. It explicitly distinguishes itself from hebbrix_ask by contrasting entity-based traversal vs free-text querying.
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 guidance by directing free-text questions to hebbrix_ask while clarifying this tool is for known entities. This direct comparison with a specific sibling alternative makes the usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_graph_statusARead-onlyIdempotent
Check whether one memory's asynchronous graph enrichment is ready.
wait_seconds optionally performs bounded polling (maximum 30 seconds).
ready means durable enrichment completed and the graph read succeeded.
graph_check.related_memory_count counts neighboring memories, NOT extracted
entity relationships. A zero count does not mean no edges were extracted.
This tool never fabricates edges from spelling conventions.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | ||
| wait_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint and idempotentHint annotations by explaining that ready requires durable enrichment plus a successful graph read, that related_memory_count counts neighboring memories rather than extracted relationships, and that a zero count does not imply missing edges. It also discloses that the tool never fabricates edges from spelling conventions and that wait_seconds is capped at 30 seconds. This is substantial behavioral 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 compact and front-loaded with the core purpose. Every subsequent sentence adds decision-relevant clarification: the definition of ready, the polling bound, the count semantics, and the fabrication caveat. There is no filler or redundant restatement.
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 and annotations already declare the operation read-only, idempotent, and non-destructive, the description supplies the remaining context an agent needs: async readiness semantics, polling behavior, and the meaning of a potentially confusing count field. Nothing critical is missing for correct invocation.
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 carry parameter meaning. It explains wait_seconds as optional bounded polling up to 30 seconds, which is not inferable from the schema alone. memory_id is not elaborated, but its role as the target memory identifier is clear from the opening sentence and parameter 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 opens with a specific verb and resource: "Check whether one memory's asynchronous graph enrichment is ready." This clearly distinguishes the tool from siblings like extraction_status by targeting graph enrichment readiness rather than extraction progress. It further defines what "ready" means, so an agent knows exactly what state is being tested.
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 a clear usage context: poll or check the status of asynchronous graph enrichment for a single memory. It also documents bounded polling via wait_seconds. However, it does not explicitly explain when to prefer this tool over similar siblings such as hebbrix_extraction_status or hebbrix_graph_query, leaving some routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_historyARead-onlyIdempotent
Show the version history of a memory (how it changed over time, including supersessions). Useful to see what a fact used to be.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds that it shows historical changes and supersessions, providing additional behavioral insight beyond the annotations without contradiction.
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 to the point—two sentences with no redundancy. It efficiently communicates purpose and use case.
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 an output schema present (not shown), return values are covered. The description explains the operation's purpose and behavior sufficiently for a memory history tool, though it omits edge cases like ordering or deleted versions, which are minor.
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 only parameter 'memory_id' has no description in the schema, and the description does not clarify its meaning, format, or any constraints. It relies solely on the parameter name, offering no added 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?
The description clearly states the tool shows version history of a memory, including supersessions, and its use case ('see what a fact used to be'). This distinguishes it from siblings like get, list, or update.
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 a clear use case ('useful to see what a fact used to be'), implying when to use it. However, it doesn't explicitly contrast with alternatives (e.g., 'use get for current value') but the intent is clear given the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_importA
Import memories into a collection — the inverse of hebbrix_export. Use it to restore a backup, migrate a collection, or seed a new one from notes/CLAUDE.md.
data may be: a list of fact strings; a list of {"content": ...} objects; a
hebbrix_export JSON object (its "memories" are imported); or a plain/markdown
string (each non-empty, non-heading line becomes a memory, bullets stripped).
Returns {"imported", "failed", "memory_ids"}.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| collection_id | No | ||
| wait_for_index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details accepted data types, transformation rules (e.g., bullets stripped, non-heading lines become memories), and return format, adding substantial behavioral context beyond the sparse 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?
Concise and front-loaded, with each sentence adding value. The description is free of fluff while covering critical usage details.
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 the primary input formats and return values, but the lack of documentation for `collection_id` and `wait_for_index` leaves minor gaps. Given the output schema exists and the main parameter is well-covered, it's mostly complete.
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 `data` parameter is thoroughly explained with multiple accepted formats and transformations, but `collection_id` and `wait_for_index` are not described at all. With 0% schema coverage, the description compensates strongly for one parameter but ignores the other two.
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 'Import memories into a collection' and identifies itself as the inverse of hebbrix_export, distinguishing it from siblings. It also lists concrete use cases like restoring a backup, migrating, and seeding from notes.
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 use cases and positions itself against hebbrix_export, giving clear context for when to use it. However, it doesn't mention alternatives for similar operations (e.g., hebbrix_remember) or state when NOT to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_learning_insightsARead-onlyIdempotent
Explain what one customer policy has learned, with uncertainty.
Returns each action's posterior success probability, 90% credible interval,
effective evidence, and observation count for this exact tenant/user/context.
evaluate_readiness=true additionally runs chronological-holdout doubly
robust checks and refuses promotion when samples, randomized overlap, or
effective sample size are inadequate.
| Name | Required | Description | Default |
|---|---|---|---|
| actions | No | ||
| context | No | ||
| user_id | No | ||
| policy_key | Yes | ||
| collection_id | No | ||
| evaluate_readiness | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. The description adds details about the readiness check and refusal behavior, enhancing transparency beyond 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?
The description is concise, with two clear sentences. It structures purpose first, then return details and the extra check. No redundant information.
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 description covers output and the evaluate_readiness behavior, but omits explanations for several optional parameters. Given the relatively simple tool (read-only analytics), it partially fulfills context but has 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?
Only policy_key and evaluate_readiness are implicitly or explicitly described. Other parameters (actions, context, user_id, collection_id) are not explained despite having no schema descriptions. The description references 'tenant/user/context' but does not map to specific parameters.
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: explaining what a policy has learned, with uncertainty. It differentiates from siblings by focusing on learning insights with probabilistic outcomes.
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. It does not mention sibling tools or provide contextual triggers for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_listBRead-onlyIdempotent
List recent memories in a collection.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| collection_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the main behavioral aspects. The description adds minimal extra context (recent, collection) without contradicting 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?
The description is a single, clear sentence with no unnecessary words. It is well-structured and directly to the point.
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 having an output schema, the description is minimal. It does not explain what 'memories' or 'collection' refer to, nor does it provide any filtering or pagination details beyond the parameter names. The overall context is insufficient for a 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?
The parameters limit and collection_id are not explained in the description. With zero schema descriptions, the description fails to clarify their purpose or constraints, leaving the agent without adequate 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 action (list), the resource (memories), and the scope (recent, in a collection). It effectively distinguishes from sibling tools like hebbrix_get or hebbrix_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 does not indicate when to use this tool versus alternatives such as hebbrix_search or hebbrix_history. It lacks contextual guidance on appropriate use cases or boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_list_collectionsARead-onlyIdempotent
List the collections (memory spaces / tenants) available to this API key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only, idempotent, and non-destructive; the description adds scoping context (API key) which is useful but not extensive beyond what annotations convey.
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 concise sentence, no fluff, direct and to the point.
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 parameter-less list operation, the description is fully sufficient, and output schema is present to cover return details.
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?
No parameters exist, so there is nothing to clarify; the description adds no ambiguity.
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 lists collections and clarifies that they are memory spaces/tenants scoped to the API key, distinguishing it from other list operations.
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 for enumerating collections but does not explicitly mention when to prefer this over alternatives or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_list_proceduresBRead-onlyIdempotent
List learned procedures owned by the current tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No | ||
| limit | No | ||
| category | No | ||
| active_only | No | ||
| collection_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare the operation as read-only, idempotent, and non-destructive. The description adds that the result is scoped to the current tenant and only to learned procedures, which is useful context. However, it does not disclose behavior such as pagination semantics, default filtering by active_only, or how category and collection_id interact.
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 front-loaded sentence with no filler. It efficiently communicates the action, object, and scope, and 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?
The output schema covers the return shape and all parameters have defaults, so a basic call is feasible without further info. Still, the overall context is thin: five filtering parameters are undocumented, and no usage guidance or behavior details are provided, leaving an agent to infer important semantics.
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 the description does not explain any of the five parameters. Parameter names like skip, limit, category, active_only, and collection_id are somewhat self-explanatory, but the description itself adds no parameter-level meaning, so it does not compensate 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 verb ('List'), the resource ('learned procedures'), and the scope ('owned by the current tenant'), which distinguishes it from procedure-specific siblings like hebbrix_get_procedure and hebbrix_delete_procedure. However, it does not explicitly contrast itself with similar list/search siblings such as hebbrix_list or hebbrix_search, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like hebbrix_get_procedure, hebbrix_list, or hebbrix_search_entities. The listing purpose is implied, but no exclusions or alternative routing are stated, which is a significant gap given the large sibling tool set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_log_decisionA
Record a decision the agent made and, if known, its outcome (success | failure | partial). This feeds hebbrix_confidence so future recommendations improve. Log both the choice and how it turned out.
Shortcut: right after a hebbrix_confidence check you can log just the outcome (e.g. outcome="success") with no description — it auto-fills from the thing you just asked about, closing the confidence -> action -> outcome loop with one call.
| Name | Required | Description | Default |
|---|---|---|---|
| outcome | No | ||
| description | No | ||
| collection_id | No | ||
| decision_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, so description must carry the transparency burden. It discloses that logs feed hebbrix_confidence, affecting future recommendations—a key side effect. It also explains the auto-fill shortcut behavior. It doesn't mention database persistence, overwrites, or other edge cases, but for a logging tool this is reasonable. No contradictions with 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?
The description is two short paragraphs: the first states the core purpose, the second provides a usage shortcut. It's front-loaded with the main purpose, and every sentence adds value. Slightly repetitive (mentions outcome twice) but overall 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 that annotations offer no hints (all false, though readOnly is correctly false as it's a write), the description does explain the side effect on hebbrix_confidence, which is important. It doesn't detail output or error conditions, but for a logging tool with output schema available, this is 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?
Schema description coverage is 0%, so the description must compensate. It mentions 'decision' and 'outcome' with allowed values (success | failure | partial) but does not explain the other parameters (collection_id, decision_type presumably). The shortcut hints at omitting description when outcome is provided, but doesn't clarify what each parameter contains or requiredness. The description under-explains the parameter semantics.
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 logs a decision and its outcome, with a specific verb (record) and resource (decision). It distinguishes itself from siblings like hebbrix_choose_action (which likely selects an action) and hebbrix_report_outcome (which may report results separately). The link to hebbrix_confidence adds purpose 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?
The description explains the primary use case (logging decisions and outcomes to improve confidence) and provides a shortcut for logging right after a confidence check. It lacks explicit 'when not to use' or comparisons against alternatives like hebbrix_report_outcome, but the context is clear enough for most scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_mark_usedA
Reinforce a memory you actually USED to answer (Hebbian recall): call this
when a retrieved memory was helpful (helpful=True, strengthens it) or was noise
(helpful=False, weakens it). Over time this makes the memories you rely on rank
higher and unused ones fade. query is the question it helped answer, if handy.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| helpful | No | ||
| memory_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the Hebbian learning effect where memories are strengthened or weakened based on feedback—an appropriate side effect for the tool. However, it lacks explicit disclosure of whether the operation is a write-ahead log, partial update, or appends; it just says 'strengthens it' without detailing back-end behavior. No contradiction with annotations found.
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, moderately long paragraph without line breaks or bolding to aid scanning. It front-loads the most important information but adds a somewhat conversational 'if handy' at the end, which slightly dilutes the formality. It's adequate but not elegantly structured.
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 straightforward feedback tool with 3 parameters (1 required), the description covers the key dimensions: the `helpful` side effect, the `query` purpose, and the meta-insight about memory ranking. Since an output schema exists, the lack of return-value documentation is not a gap.
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 carries the full burden, and it delivers well. It clarifies the `helpful` boolean as a strengthen/weaken switch and describes `query` as 'the question it helped answer.' However, it only implicitly covers memory_id by referring to 'a memory' without explicitly naming the parameter.
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 clear action verbs like 'Reinforce a memory you actually USED' and explains the mechanism of strengthening/weakening, distinguishing it from sibling tools like hebbrix_remember or hebbrix_log_decision. It could be more explicit by using the tool's name 'mark_used' directly, but it's unambiguous about the core action.
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 when-to-use guidance: 'call this when a retrieved memory was helpful... or was noise.' However, it fails to mention exclusions or alternatives like 'use hebbrix_get for retrieval instead.' The guidance is implied from sibling names but never confirmed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_rememberA
Store a memory. Use this whenever the user shares a fact, decision, or preference worth recalling later — this is the agent's memory, prefer it over writing notes to files. Prefer one clear fact per call.
extract=False (default): stores the text exactly as given (fast, one memory). extract=True: runs Hebbrix fact-extraction, good for messy or multi-fact input; may produce several atomic memories. Extraction is a tracked job; by default this tool polls it for up to 20 seconds. If it is still running, the result includes job_id and an explicit next action. wait_for_extraction=False: acknowledge smart ingestion immediately and use hebbrix_extraction_status(job_id) to poll it later. wait_for_index=True (default): asks the API to wait for MEMORY SEARCH availability within its bounded deadline. Inspect searchable: a durable write can return searchable=false if indexing is still pending. Poll hebbrix_get(id) rather than repeating the write. Set False for bulk writes.
Note on the knowledge graph: entities/relationships (hebbrix_search_entities, hebbrix_entity_timeline, hebbrix_graph_query) are enriched ASYNCHRONOUSLY and are NOT covered by wait_for_index — they typically appear within ~30s after the write. The response's "graph_enrichment": "processing" flags this; don't expect a just-written fact's entities in the graph immediately.
Saving several facts at once? Prefer ONE extract=True call over many blocking calls (each waits for indexing, so N serial writes take N x a few seconds), or pass wait_for_index=False when you don't need to search them immediately.
Returns {"id", "status", "searchable", "graph_enrichment", ...} or {"error"}.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| content | Yes | ||
| extract | No | ||
| collection_id | No | ||
| wait_for_index | No | ||
| wait_for_extraction | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only establish write, non-idempotent, non-destructive semantics; the description adds the full async behavior: extraction polling up to 20s with a job_id result, the searchable flag meaning indexing is still pending, and knowledge-graph enrichment being asynchronous (~30s) and NOT covered by wait_for_index. It also discloses the return contract ({'id','status','searchable','graph_enrichment',...} or {'error'}) and warns against repeating writes, all consistent with idempotentHint=false, so there is no contradiction.
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?
Around 350 words, but every unit earns its place: purpose and trigger first, then one focused explanation per boolean flag, then async graph caveats, the multi-fact efficiency rule, and the return format. The density is justified by the tool's complexity (three behavioral flags, tracked jobs, async indexing), and there is no filler or repetition.
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 six-parameter tool with async jobs, indexing, and graph enrichment, the description covers the full decision tree: when to call, which flags to set in which scenario, how to interpret searchable and graph_enrichment in the response, how to follow up via the documented poll tools, and when to avoid blocking serial writes. The only residual gaps are the semantics of tags and collection_id and an explicit cross-reference to hebbrix_remember_many, both minor against an output schema that already documents the return shape.
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%, and the description compensates for the three behavior-controlling booleans: extract (exact-store vs fact-extraction with job_id polling), wait_for_extraction (defer to hebbrix_extraction_status), and wait_for_index (searchable semantics, bulk-write advice). However, tags and collection_id are never mentioned in the description, so two of six parameters rely solely on their generated names.
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?
Opens with the crisp verb+resource pair 'Store a memory' and immediately broadens into a triggering condition ('user shares a fact, decision, or preference worth recalling later'). It differentiates itself from the obvious alternative (writing notes to files) and, via the multi-fact guidance, carves out when heavy extraction is preferred, so an agent can tell this apart from hebbrix_remember_many without opening either schema.
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?
Gives an explicit when-to-use trigger ('user shares a fact, decision, or preference worth recalling later') and an explicit precedence rule ('prefer it over writing notes to files'). It routes follow-up work to named siblings hebbrix_extraction_status(job_id) when wait_for_extraction=False and hebbrix_get(id) when searchable=false, and tells the agent not to repeat the write, preventing duplicate-memory mistakes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_remember_manyA
Store MANY facts in one call. When you've extracted several distinct facts from one user message, use this instead of calling hebbrix_remember N times — it's one round-trip and one rate-limit hit, not N.
Pass a list of short, self-contained facts (one fact per string). Returns {"created", "failed", "memory_ids", ...}. wait_for_index defaults to False here (bulk writes are usually fire-and-forget); set True to block until all are searchable.
Tier note: the single-round-trip batch endpoint requires Starter+; on the free / agent tier this transparently falls back to sequential writes (the result carries "fallback": "sequential"), so it still works but isn't one round-trip on that tier.
| Name | Required | Description | Default |
|---|---|---|---|
| facts | Yes | ||
| collection_id | No | ||
| wait_for_index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (non-read-only, not idempotent), so the description carries the burden. It discloses return fields, the wait_for_index default and blocking behavior, the tier-based fallback to sequential writes, and the 'fallback': 'sequential' result field. This adds substantial context beyond 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?
The description is compact and front-loaded with the most important point. Each paragraph adds distinct value: usage guidance, parameter behavior, and tier-specific fallback. No fluff or redundant restatement of the schema.
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, the presence of an output schema, and sibling-tool context, the description provides sufficient operational context: when to use it, what it returns, how wait_for_index works, and the tier caveat. Only minor param detail (collection_id) is left to the schema, which is acceptable here.
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 clearly explains the facts array format and wait_for_index behavior, but collection_id is not mentioned in the description. Since 2 of 3 parameters receive meaningful semantic elaboration, this is strong but not complete.
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's first sentence, 'Store MANY facts in one call,' uses a specific verb and resource while immediately distinguishing this batch tool from the single-fact sibling hebbrix_remember. It clearly states the batching purpose and avoids ambiguity.
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 this tool when extracting several distinct facts from one user message instead of calling hebbrix_remember N times. It also explains the trade-off, including one round-trip and one rate-limit hit, and notes the tier-dependent fallback behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_report_outcomeADestructive
Report the REAL delayed result of a prior hebbrix_choose_action.
The 30-second path is success=true/false, or reward in [-1, 1]. Custom
metrics must first be defined through the Outcome Memory REST API so their
direction and scale are explicit. Set final=false for an early signal and
report the settled value later. Set correction=true to replace previously
learned evidence without double-counting it. Reusing an idempotency_key is
safe; conflicting reuse is rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| final | No | ||
| reward | No | ||
| metrics | No | ||
| success | No | ||
| confidence | No | ||
| correction | No | ||
| decision_id | Yes | ||
| idempotency_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds specific behavioral details: how to avoid double-counting via correction, safe reuse of idempotency_key, and rejection of conflicting reuse. It also clarifies that this is a writing operation for outcomes. These details go beyond the raw annotation flags, providing operational context that helps agents handle side effects appropriately.
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 purpose in the first sentence, followed by structured parameter-specific guidance. It consists of six sentences, each adding distinct value (value ranges, metrics prerequisite, final/correction semantics, idempotency). It is slightly lengthy but remains efficient and organized, avoiding 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 high parameter count (8) and zero schema coverage, the description is notably complete: it explains most parameters, their interactions, and prerequisites. It does not describe the output (though an output schema exists) or detail confidence, but these gaps are minor. Overall, the description provides enough context 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?
With schema description coverage at 0%, the description takes over parameter explanation entirely. It covers success/reward values, metrics declaration requirement, final and correction flags, and idempotency_key behavior. Though it omits confidence and decision_id, these are self-explanatory from names and the required status of decision_id. The description fully compensates 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 it 'Report the REAL delayed result of a prior hebbrix_choose_action', specifying the exact verb ('report') and resource ('prior hebbrix_choose_action'). This distinguishes it from siblings like hebbrix_choose_action (which selects actions) and hebbrix_remember (which stores general memories). It precisely communicates the tool's role in the workflow.
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 gives clear context: use after a hebbrix_choose_action, with explicit options for early vs. final reporting ('Set final=false for an early signal and report the settled value later') and correction ('Set correction=true to replace previously learned evidence'). It also mentions a prerequisite for custom metrics (must be defined via REST API). While it doesn't name alternative tools, it clearly frames this as the outcome-reporting tool, making when-to-use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_searchARead-onlyIdempotent
Semantic search over memories. Always call this BEFORE answering questions that depend on prior context, decisions, or user preferences.
Zero-relevance padding rows are always dropped. If the fast API returns only
uncalibrated nearest-neighbour candidates with no lexical anchor, Hebbrix
automatically verifies them with calibrated retrieval and suppresses noise.
Raise min_score (0.0-1.0) to request an explicit absolute relevance floor.
Returns {"query", "count", "results": [{"id","content","score"}]}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| min_score | No | ||
| collection_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint=true and destructiveHint=false, the description adds significant behavioral detail: zero-relevance padding rows are always dropped, automatic verification with calibrated retrieval is disclosed, and the meaning of the min_score parameter is explained ('absolute relevance floor'). This goes well beyond what annotations provide.
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?
Three well-structured paragraphs flow from top-level purpose to behavior to parameters, then output format. Every sentence adds value with the most critical usage directive positioned first after the summary. Zero 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?
The description fully compensates for the 0% schema coverage by documenting the key parameter (min_score), return format, edge behavior (zero-relevance row dropping, noise suppression), and use case. With annotations confirming read-only, non-destructive behavior and an output schema present, the description fills all remaining 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 description coverage is 0%, so the description must compensate. It does explain min_score ('Raise min_score (0.0-1.0) to request an explicit absolute relevance floor'), but doesn't elaborate on query, limit, or collection_id. The return format is documented, and the 0% coverage means the description carries the full burden, which it mostly does for the most important parameter.
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 specific verb+resource ('Semantic search over memories') and clearly differentiates from siblings by stating when to use it: BEFORE answering questions depending on prior context, decisions, or preferences. This strongly distinguishes it from sibling tools like hebbrix_history, hebbrix_get, and hebbrix_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?
The description explicitly says 'Always call this BEFORE answering questions that depend on prior context, decisions, or user preferences.' This is a clear when-to-use directive. It also contrasts with alternatives by noting this is the primary semantic search entry point among many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_search_entitiesARead-onlyIdempotent
List entities in the knowledge graph (people, organizations, tools, places), optionally filtered by entity_type. Use for "who/what do I know about" questions.
Note: entities are enriched ASYNCHRONOUSLY after a write (not covered by hebbrix_remember's wait_for_index) — a just-written fact's entities typically appear here within ~30s, so an empty result right after a write is expected.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| entity_type | No | ||
| collection_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description discloses non-obvious behavior: entities are enriched asynchronously after a write, not covered by hebbrix_remember's wait_for_index, and may appear within ~30s. This explains why an empty result right after a write is expected, adding valuable context beyond the schema.
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 compact and well-structured: a clear purpose sentence with optional filter, followed by a relevant note about asynchronous behavior. Every sentence adds value and there is no redundant or filler content.
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 description covers purpose, usage, and the key behavioral caveat, while the output schema likely handles return-value details and annotations cover safety. However, collection_id remains unexplained, which is a minor gap for a tool that otherwise feels complete.
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 0% description coverage for its parameters. The description clarifies only entity_type (as an optional filter with examples) but does not explain collection_id or limit. Since the description fails to compensate for the low schema coverage, especially for collection_id, the parameter semantics are insufficiently defined.
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 identifies the tool's action ('List') and resource ('entities in the knowledge graph'), with concrete examples of entity types (people, organizations, tools, places). It effectively distinguishes this tool from siblings like hebbrix_search or hebbrix_graph_query by focusing on entity listing for 'who/what do I know about' questions.
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 gives usage context with 'Use for "who/what do I know about" questions' and provides a crucial caveat about asynchronous enrichment after writes. It does not name alternative tools or explicitly say when not to use it, but the guidance is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_updateADestructive
Update a memory in place (keeps version history). Use this to CORRECT a stored fact instead of remembering a contradicting copy. Pass the new content.
wait_for_index=True (default) requests a bounded indexing wait. Check searchable; if false, poll hebbrix_get(id) instead of repeating the update.
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | ||
| memory_id | Yes | ||
| importance | No | ||
| wait_for_index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so mutation is disclosed. The description adds meaningful behavioral context: it preserves version history and may perform an indexing wait. It does not fully describe side effects of updating importance/content, but the description goes beyond annotation basics.
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 compact and front-loaded with the core purpose before diving into indexing behavior. The wait_for_index guidance is a bit dense but earns its place as it prevents repeated update calls.
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 description covers the core purpose, the alternative tool relationship, the indexing wait behavior, and the fallback polling method. Given the output schema exists and annotations describe destructiveness, this is complete enough for an agent to call 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?
The input schema has no descriptions for parameters, and schema description coverage is 0%, so the description carries the burden. It explains content meaning implicitly (new content), and explicitly explains wait_for_index semantics. It does not explain memory_id or importance, but memory_id is self-evident and importance is reasonably inferable as a numeric priority.
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 updates a memory in place while keeping version history, and explicitly distinguishes it from remembering a contradicting copy. Among siblings like hebbrix_remember and hebbrix_forget, this distinguishes the corrective update operation.
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 says when to use it: to CORRECT a stored fact instead of remembering a contradicting copy. It also provides guidance on the wait_for_index behavior and tells the agent to poll hebbrix_get(id) if searchable is false, which is actionable usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hebbrix_update_procedureADestructive
Update mutable fields on one tenant-owned procedure; scope is immutable.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| action | No | ||
| category | No | ||
| condition | No | ||
| is_active | No | ||
| parameters | No | ||
| description | No | ||
| procedure_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark this as destructive, so the description's added context about tenant ownership, mutability of fields, and immutable scope is valuable. It clearly tells the agent that not everything on the procedure can be changed, which is a meaningful behavioral trait beyond the structured fields.
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 focused sentence with no filler. The core operation, resource type, and the key immutability constraint are all front-loaded and easy for an agent to parse quickly.
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 tool with eight parameters, zero schema description coverage, and a large sibling set, this description is too sparse. It provides no guidance on parameter semantics, no usage differentiation, and no hints about how the optional fields interact. The output schema helps, but the agent still lacks enough context to call this tool confidently.
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 should compensate for the eight parameters, but it only says 'mutable fields' generically. It does not explain procedure_id as the required scope identifier, nor the meaning of action, condition, or parameters objects, leaving the agent with only parameter names 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 states a specific verb ('Update'), a specific resource ('tenant-owned procedure'), and a clear scope ('mutable fields' vs immutable scope). It also distinguishes itself from related siblings like create/delete/execute by focusing on updating only mutable fields of an existing procedure.
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 the tool is for updating existing tenant-owned procedures and that the procedure scope cannot be changed. However, it does not explicitly state when to choose this over hebbrix_update, hebbrix_create_procedure, or hebbrix_execute_procedure, nor does it specify any exclusions or prerequisites.
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.
1 tool update
v0.5.11- Added
hebbrix_graph_status
6 tool updates
v0.5.8- Added
hebbrix_create_procedure - Added
hebbrix_delete_procedure - Added
hebbrix_execute_procedure - Added
hebbrix_get_procedure - Added
hebbrix_list_procedures - Added
hebbrix_update_procedure
1 tool update
v0.5.6- Changed
hebbrix_claim_verify2 fields changed- added
Input schema / properties / code / formatAdded value: +"password" - added
Input schema / properties / code / writeOnlyAdded value: +true
7 tool updates
v0.5.1- Added
hebbrix_choose_action - Added
hebbrix_claim_start - Added
hebbrix_claim_verify - Added
hebbrix_extraction_status - Added
hebbrix_learning_insights - Changed
hebbrix_remember1 field changed- added
Input schema / properties / wait_for_extractionAdded value: +{ + "default": true, + "title": "Wait For Extraction", + "type": "boolean" +}
- Added
hebbrix_report_outcome
11 tool updates
v0.3.20- Added
hebbrix_ask - Changed
hebbrix_contradictions1 field changed- added
Input schema / properties / collection_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Collection Id" +}
- Added
hebbrix_export - Changed
hebbrix_graph_query5 fields changed- removed
Input schema / properties / entity / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / entity / defaultRemoved value: -null - added
Input schema / properties / entity / typeAdded value: +"string" - removed
Input schema / properties / queryRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Query" -} - added
Input schema / requiredAdded value: +[ + "entity" +]
- Added
hebbrix_import - Changed
hebbrix_log_decision4 fields changed- added
Input schema / properties / description / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / description / defaultAdded value: +null - removed
Input schema / properties / description / typeRemoved value: -"string" - removed
Input schema / requiredRemoved value: -[ - "description" -]
- Added
hebbrix_mark_used - Changed
hebbrix_remember3 fields changed- added
Input schema / properties / extractAdded value: +{ + "default": false, + "title": "Extract", + "type": "boolean" +} - removed
Input schema / properties / verbatimRemoved value: -{ - "default": false, - "title": "Verbatim", - "type": "boolean" -} - added
Input schema / properties / wait_for_indexAdded value: +{ + "default": true, + "title": "Wait For Index", + "type": "boolean" +}
- Added
hebbrix_remember_many - Changed
hebbrix_search1 field changed- added
Input schema / properties / min_scoreAdded value: +{ + "default": 0, + "title": "Min Score", + "type": "number" +}
- Changed
hebbrix_update1 field changed- added
Input schema / properties / wait_for_indexAdded value: +{ + "default": true, + "title": "Wait For Index", + "type": "boolean" +}
15 tool updates
v0.3.3- First observed
hebbrix_account_status - First observed
hebbrix_confidence - First observed
hebbrix_contradictions - First observed
hebbrix_entity_timeline - First observed
hebbrix_forget - First observed
hebbrix_get - First observed
hebbrix_graph_query - First observed
hebbrix_history - First observed
hebbrix_list - First observed
hebbrix_list_collections - First observed
hebbrix_log_decision - First observed
hebbrix_remember - First observed
hebbrix_search - First observed
hebbrix_search_entities - First observed
hebbrix_update
TDQS
Most tools are carefully described and serve distinct purposes, but there are several overlapping clusters: hebbrix_log_decision vs hebbrix_choose_action both record decisions/actions, hebbrix_history vs hebbrix_entity_timeline both address 'what changed', and hebbrix_confidence vs hebbrix_contradictions both gate trust. The descriptions help, but the boundaries are not obvious from names alone.
The hebbrix_ prefix and snake_case convention are consistent, and most tools use a verb_phrase pattern. However, objectless names like hebbrix_list and hebbrix_get sit next to hebbrix_list_procedures and hebbrix_get_procedure, and several tools are bare nouns like hebbrix_history, hebbrix_confidence, and hebbrix_account_status. This mixed convention makes the naming pattern less predictable.
32 tools is a heavy surface for an MCP server, and several entries are conveniences or variants that could be consolidated, such as hebbrix_remember_many, hebbrix_extraction_status, hebbrix_ask, and the overlapping decision tools. The broad scope of memories, graph, procedures, learning, and accounts explains some of the count, but it exceeds the range where an agent can easily keep all options in mind.
The server covers memory CRUD, search, history, graph traversal, procedures, decision/outcome logging, import/export, and account claiming with no major dead ends. The main gaps are minor: procedure executions are recorded but not directly retrievable, and logged decisions/outcomes cannot be queried outside the learning insights endpoint.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Persistent memory and knowledge graphs for AI agents. Hybrid search, context checkpoints, and more.
Company brain for AI agents — temporal knowledge graph search, exploration, and durable memory.
Shared long-term memory for AI agents: save and recall context as a searchable knowledge graph.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides AI agents with persistent, searchable memory that survives across conversations using semantic search, temporal versioning, and smart organization. Enables long-term context retention and cross-session continuity for AI assistants.14-
- FlicenseNot gradedqualityNot gradedmaintenanceGives AI agents persistent memory with bi-temporal tracking, automatically extracting entities from natural language and enabling time-travel queries to understand facts as they existed at any point in history.2-
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to build and query temporally-aware knowledge graphs from conversations and data, maintaining persistent memory of entities, relationships, and facts across interactions.-

Memsolus MCP Serverofficial
AlicenseAqualityDmaintenanceProvides persistent long-term memory for AI agents through semantic search and automated knowledge graph extraction. It enables agents to store, recall, and reason over facts, preferences, and relationships across multiple conversations and sessions.1419MIT
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/Hebbrix/hebbrix-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server