Prism MCP
The BCBA server is an AI-driven MCP platform combining real-time web search, enterprise AI services, data transformation, and optional persistent session memory.
Search & Discovery
Web search (
brave_web_search): Real-time searches via Brave Search API with pagination, filtering, and up to 20 results per requestLocal business search (
brave_local_search): Find nearby businesses with addresses, ratings, phone numbers, and hours; auto-falls back to web search if no local resultsAI-grounded answers (
brave_answers): Concise, direct answers grounded in live web results via Brave's AI GroundingEnterprise search: Domain-specific document retrieval via Vertex AI Discovery Engine, with a hybrid pipeline that combines and deduplicates web + curated results
Data Transformation
Code-mode search variants (
brave_web_search_code_mode,brave_local_search_code_mode): Run a search and immediately apply a custom JavaScript script (in a secure QuickJS sandbox) to extract only needed fields, reducing context window usage by 85–95%Universal transformer (
code_mode_transform): Apply custom JavaScript extraction to raw output from any MCP tool — useful for GitHub issues, DOM snapshots, transcripts, and more
AI Analysis & Orchestration
Research paper analysis (
gemini_research_paper_analysis): Deep academic analysis using Gemini 2.0 Flash — summaries, critiques, key findings, literature reviews, or comprehensive analysisMulti-model orchestration: Supports Google Gemini and Claude via Vertex AI infrastructure with secure Application Default Credentials (ADC)
Session Memory (optional, requires Supabase)
Save immutable session logs, update project state for continuity, progressively load prior context, search accumulated knowledge, and prune old memories
Integrations: Brave Search, Google Gemini, Vertex AI, Gmail, Chrome DevTools Protocol, and Supabase
Provides real-time web and local search capabilities, including AI-powered answers, to enhance model context.
Facilitates data extraction and automated pipeline processing through Gmail OAuth integration.
Orchestrates various Google ecosystem services, including Gemini and Gmail, for cross-platform data retrieval.
Leverages Vertex AI infrastructure, specifically Discovery Engine for enterprise search and managed generative model deployment.
Enables deep research paper analysis and structured data synthesis using the Google Gemini API.
Provides a session memory layer for progressive context loading, work ledgers, and persistent state handoffs via Supabase REST APIs.
Prism Coder
Give your AI agent memory that lasts — and see the cloud tokens it never had to spend. Persistent sessions, knowledge graphs, offline tool-routing, and an auditable savings meter. Fully local and free.
Prism Coder is an MCP server that gives Claude, Cursor, and other AI tools long-term memory that survives across sessions. It ships with the open-weight prism-coder model fleet (2B–27B) for fast, offline tool-routing — no cloud required. And it keeps score: every call served locally is metered, so prism savings shows the token volume that never reached your cloud model — measured honestly, in tokens.
No account needed. No API keys. Runs on your machine.
A paid subscription adds cloud sync, higher model tiers, and team features through the Synalux portal.
What Prism gives you
Session memory that survives restarts — resume projects with handoff notes, recent work, open TODOs, and configurable quick, standard, or deep context.
Local-first inference — bounded work is routed through local Ollama models first, with automatic 2B/4B/9B/27B selection based on installed models, available RAM, context fit, and subscription entitlements.
A savings meter you can audit —
prism savings(or thelocal_savingstool from any host) reports the token volume local serving kept off your cloud model: headline, local share, per-model breakdown. It reports tokens, never an invented dollar figure, and prints its assumptions and known undercounts inline — a number you can check, not marketing.Route-output enforcement — route mode returns only well-formed calls to tools the host actually advertised. Standard and higher plans can add authenticated deterministic correction;
route_guard: "local"keeps the prompt and draft entirely on-device.One setup for every agent —
prism connectconfigures Claude Code, Claude Desktop, Cursor, Gemini CLI, and Codex while preserving unrelated settings.Subscription-aware skills — entitled skills are synchronized before the host launches, with safe upgrades, downgrades, conflict preservation, and offline last-good recovery.
Hook-free startup — MCP metadata and native instructions request Prism's startup context without requiring lifecycle hooks or a Prism-owned launcher. Where a host offers hooks (Claude Code, Codex),
prism connectadds two small ones on top: mid-session prompt routing, and a post-compaction re-injection of the protected-floor digest.Safe escalation and observability — inference outcomes are explicit, reserved content remains fail-closed, and local/cloud usage is recorded for review.
Related MCP server: Knowledge Graph MCP Server
Get started
npm install -g prism-mcp-server
prism connectUse prism connect --dry-run to preview changes, prism connect --all to
configure every detected host, or prism connect --refresh to reconcile
Prism-managed entries after an upgrade. Restart the host after connecting.
Prism works locally without an account, API key, or cloud subscription. Add a Synalux subscription when you want cloud memory, paid-tier skills, or team features.
After a few sessions, ask what it's been worth:
prism savings --period month💾 Local serving — LAST 30 DAYS
~510K tokens kept off your cloud model
53 call(s) served locally of 58 routed (91%)Your numbers will differ — that's the point: it reports what your machine
actually served, not a projection. Full report anatomy and the honesty rules
behind it are in the
local_savings section.
Install as a plugin
Prism also ships as a plugin, which registers the MCP server and the startup skill for you.
Claude Code — from the community marketplace:
/plugin marketplace add anthropics/claude-plugins-community
/plugin install prism-coder@claude-communityCodex — this repository is itself a plugin marketplace:
codex plugin marketplace add dcostenco/prism-coder
codex plugin add prism-coder@prismThe plugin registers prism-mcp via npx -y prism-mcp-server. If you already
configured Prism by hand — prism connect writes an mcp_servers.prism-mcp
entry — you have that server twice under one key. Install the plugin or
run prism connect, not both.
What prism connect changes about host subagents
connect steers bounded work to prism_infer on your machine rather than to
host-spawned agents. What it writes differs per host, and it does not disable
subagents everywhere — Claude Code keeps them and is pointed at an economy
model instead. Prism's local workers stay available over MCP in every case.
Host | Setting written | Effect |
Claude Code |
| Subagents stay enabled, pinned to an economy model. Fan-out is discouraged by policy text, not by config |
Gemini CLI |
| Subagents off. Gemini exposes one boolean, so that is all there is to set |
Codex |
| Subagents off, with a bounded profile underneath so a deliberate re-enable lands somewhere sane |
Two things worth knowing:
experimentalis Gemini's namespace, not ours. Prism is not enabling anything experimental — it writesfalseto a flag Gemini already defines at that path. Writing anywhere else would have no effect.That namespace is by definition temporary. If Gemini promotes
enableAgentsout ofexperimental, Prism keeps writing the old path, Gemini reads the new one, and host subagents quietly turn back on. Nothing errors and the settings file still looks correct. If you see host subagents running whileenableAgentsreadsfalse, check whether the key has moved before assumingconnectfailed to write it.
Both writes are idempotent in the sense that a host already configured this way
is left untouched — but they are re-applied on every prism connect run,
not only on --refresh. If you deliberately re-enable host subagents, the next
connect will turn them off again. Keep them on by not re-running connect,
or by re-enabling after each run.
What's New in v20.18.0
The protected floor rides the bootstrap — and survives compaction
session_bootstrapnow inlines a digest of the protected floor on paid tiers at standard and deep depth: one inert line per rule, derived from each skill's first paragraph (or its pinneddigest:), plus its section map, ~5.6K chars for the full floor. Small-context hosts such as Codex were re-reading the sixteen SKILL.md files every session (median 8 re-reads / 36KB, worst 823 / 5.1MB in rollout logs) because the bootstrap only named them. The digest is paid for on top of the context budget, so the ledger/handoff share at every depth is byte-identical to before. Quick depth stays names-only — the opt-out.A second hook re-injects the digest after compaction.
prism connectregisters the prism-route script onSessionStartmatched tocompact(Claude Code and Codex); it runsprism floor-digest, which applies the same tier and depth decisions as the bootstrap, and adds nothing on startup/resume/clear. Hosts without hooks (Gemini, Cursor) still get the digest on every bootstrap. Codex: UNVERIFIED against a live compaction. The hook is registered and the script accepts the documented payload spellings, but no Codex compaction has been observed end-to-end; on a payload it does not recognise it re-injects nothing rather than something wrong. If the digest comes from a generation whose skill files never finished syncing, the re-injected block carries the same STALE warning the bootstrap shows.Codex trust is reported honestly after a hook rewrite. Approvals are keyed by definition hash, so a rewritten
hooks.json— this release adds the SessionStart entry — voids prior trust: connect prints AWAITING TRUST for both entries instead of a green ✓ for a hook Codex would silently skip, and trust recorded for an older hook version is never mistaken for current.A host config that no longer parses is left alone. If
~/.claude/settings.jsonor~/.codex/hooks.jsonexists but is not valid JSON, connect keeps it byte-identical, registers no hook there, and says so — it no longer replaces the file with a minimal hooks-only one. The npm postinstall notice says the same, instead of asking you to trust a Codex hook it never registered.Fixed: a symptom-routed skill whose closing frontmatter fence is its last line was inlined with its YAML (triggers included) as if it were the rule.
Fixed: a digest line that crosses into a new section keeps that section's heading in front of it — whatever opened the section (an H2, a mid-document H1, an empty heading, a setext underline) — so "Delegate to" / "Do NOT delegate" rules cannot read with the wrong polarity once joined. A skill file on disk is used only when it digests: empty, cut off inside its frontmatter, or frontmatter-only files fall back to the stored copy instead of rendering YAML as the rule.
Fixed: on Windows, a Codex hook approval is recognised even though Codex stores the path with escaped backslashes.
The publish gate now refuses release notes that run ahead of the package version (CHANGELOG, README, translated READMEs) — reading the newest version on the heading line, so a
v20.17.3 – v20.18.0range counts as 20.18.0, and surviving a typographic apostrophe or a BOM.
What's New in v20.17.3
A plugin install can no longer enable the prompt-routing hook. The package's maintenance paths (npm postinstall, server startup) now only refresh a hook that an explicit
prism connectpreviously installed — a prism MCP registration in host config no longer counts as consent. First install of the hook happens throughprism connector not at all.The Claude Code plugin launcher is fully deterministic. It runs the exact pinned server version with npm lifecycle scripts disabled, and the plugin now documents its security posture in
plugins/prism/README.md.
What's New in v20.17.2
Pasted logs can no longer falsely activate skills. Symptom-triggered routing now strips fenced blocks and routable skill-name mentions (including inside compound identifiers like container/pod names) from the routing view of a prompt, so quoting an agent log or a skill list doesn't load skills the text merely mentions. Skills named by ordinary words keep routing normally.
Symptom-routed skills now arrive whole. Startup budgets deliver the full rule text at every depth that fits; when a rule genuinely cannot fit, the display says exactly how much is missing and how to load the rest, instead of silently truncating.
Routing can no longer be silently disabled by one bad skill. Corrupt or hostile trigger tables — wrong value shapes, patterns named after object prototype properties — are skipped per entry instead of taking down all prompt routing (or, in one case, the vault export) for the session.
What's New in v20.17.1
Fixes a broken CLI in 20.17.0 — a command-name collision made every
prismCLI invocation exit with a commander error at startup (the MCP server was unaffected). The handoff-sync command isprism handoff …;prism syncremains cross-backend data synchronization. If you installed 20.17.0, update.
What's New in v20.17.0
Cross-Machine Session Handoff — End-to-End Encrypted
Resume a session on any of your machines. With
prism handoff enable(paid, off by default), eachsession_save_handoffseals the handoff to all your account's device keys and relays the CIPHERTEXT; another machine pulls withsync_pull_handoff(orprism handoff pull <project>) and opens it locally.The relay stores ciphertext only — X25519 + AES-256-GCM sealed envelopes. No key that opens a handoff ever exists server-side. The channel is deliberately separate from savings sync, which carries counters only.
TOFU device pinning surfaces a compromised relay: sealing to a key this machine has never seen warns loudly, keyed on the client-derived recipient id so a swapped key can't hide behind a familiar device name.
prism handoff status|devicesto inspect; revoke a lost machine from the portal.
What's New in v20.16.0
See What Local Serving Saves You — Meterable, Auditable, Team-Wide
local_savingstool +prism savingsCLI — the token volume local serving kept off your cloud model: all time, trailing 30/7 days, or any--days Nwindow. Tokens, never an invented dollar figure, with the assumptions and known undercounts printed inline.Team roll-up (paid) —
prism savings --sync-enableuploads per-day counters only (never content; the payload is a closed field set the server also enforces);prism savings --teamshows the workspace-wide total with per-member share. Off by default.E2E sync foundation — sealed multi-recipient envelopes (X25519 + HKDF-SHA256 + AES-256-GCM on node:crypto, no new dependency) and per-device identities, adversarially reviewed: cross-machine session sync will ship on a relay that only ever stores ciphertext.
Push-time public-leak guard — outgoing diffs AND commit messages are scanned before anything leaves the machine.
What's New in v20.12.1
prism connect --refreshnow converges every registration it owns, not just the top-level one — directory-scoped entries could otherwise keep launching an old build indefinitely.prism updatechecks the installed package, not the CLI that happens to be running, so it can no longer report "current" while the install is stale.The opt-in scheduled updater can actually start — the LaunchAgent now carries a PATH that includes node and npm.
What's New in v20.12.0
Prism now tells you when it's out of date. Session startup shows a one-line update notice when a newer release exists — cache-backed, at most one registry check per day, silent offline.
PRISM_NO_UPDATE_CHECK=1opts out.Hands-free updates, if you want them.
prism autoupdate enablesets up a dailyprism update --if-idle: it updates only the global npm package, defers while any Prism server is running, and never touches host configuration — that stays behind a visibleprism connect.
What's New in v20.11.1
Saving memory never gets refused. The save path used to reject
session_save_ledger/save_handoffcalls when its path-to-project heuristic disagreed with the project you declared — and the registry the heuristic trusted could contain junk from earlier auto-registration, so legitimate sessions ended unsaved. Your declaration now always wins; the disagreement is returned as an advisory warning, and auto-registration only accepts real repository roots.Screenshots are evidence again.
prism browsercaptures on macOS were silently upscaled to the size cap, so a screenshot no longer showed what actually rendered. Only genuinely oversized captures are resized now, and the cap no longer clips a standard 1920-wide viewport.
What's New in v20.10.0 – v20.11.0
Skill routing now works mid-session. New prompts are matched on-device as the conversation moves — not just on turn one — and injected within each host's real context limits (Claude Code caps hook output at 10k chars; Codex truncates by default), with pointer-first delivery when a payload can't fit inline.
prism connectis a converge command. It self-updates first, re-execs, then reconciles MCP registration, skills, and hooks — no more "fresh config, stale code" machines.Scoped skills route on prompts too, and startup output survives hosts that discard structured tool content.
What's New in v20.9.0 – v20.9.3
Your skills follow your account.
skill_savestores a skill at the scope you choose: this machine only (local, works offline and signed out), your account (user— every machine you sign into receives it), or a workspace (team— shared with members, admin-managed, optionally targeted to specific people).Trim the catalog you don't use.
skill_managecan release platform skills you never touch — freeing host skill-catalog budget — and restore them any time, losslessly. Deleting a scoped skill archives its final content locally first, so nothing is ever silently unrecoverable.Delivery that queues instead of failing. Concurrent sessions no longer starve skill sync on the local config store (WAL + busy-timeout) — a failure that previously reported only "partial" where nobody could see it.
Withheld rules still bind. When the context budget can't inline a skill's text, the manifest of withheld names now states that those skills still govern the work and names every way to load them before completion claims.
The budget the floor never spent. A long-standing accounting bug meant no unprotected skill ever inlined at any normal context level — the always-inlined protected floor was debiting the budget meant for everything else. Task-matched skills (like the completion-evidence checklist) now actually arrive.
What's New in v20.8.2
Skill delivery now admits failure instead of hiding it. A filesystem permission edge case (a umask stripping the owner-execute bit) could leave skill sync writing nothing while reporting itself current — measured at nine days on a real machine. Broken managed directories are repaired in place, every directory is created umask-proof, and the repair path refuses symlinks via an
O_NOFOLLOWdescriptor.A stale install tells you at startup. Prism now tracks the generation that actually reached disk separately from the one the database accepted; if they diverge, the startup banner says so in a warning placed where display truncation cannot cut it. A successful sync clears it automatically.
What's New in v20.7 – v20.8.0
First run proves the memory instead of describing it —
session_bootstrapseeds one demo memory and shows it recalled from disk, so the save→recall loop is felt in session 1. One-shot, contained in its ownprism-demoproject, removable with one call.Dashboard fixed — a quoting typo (shipped 2026-05-29) killed the inline script at parse time, so every dashboard since rendered "Loading projects..." forever. Fixed, and the ES5 lint now
node --checks the built inline script so an unparseable dashboard can never ship again.Trusted Publishing — npm releases authenticate via GitHub OIDC. No stored token to expire or leak, and every release carries a signed provenance attestation — you can verify the tarball you install was built from this repo by CI (
npm audit signatures).TLS enforced for cloud sync — a remote
http://storage URL is upgraded tohttps://instead of silently sending session content in the clear.Codex plugin collision + enabled-state detection —
prism connectskips its own registration only when a plugin actually providesprism-mcp(cache present and enabled), preventing both duplicate and missing servers.Windows CI stabilized; registry/npm listings realigned and deduplicated.
What's New in v20.6.0
Delivery Is Not a Suggestion
An audit of a real incident (an agent wiped demo data after announcing the wipe — with the ask-first rule committed, bundled, and absent from what any agent actually received) found the protected floor had outgrown every delivery budget: "unprotected" had quietly come to mean "never delivered".
ask-firstandfeature-preservationjoin the protected floor (14 → 16). Protected skills are always inlined; these two now reach every session.Sync conflicts are loud and named. Startup used to say "· 2 local conflicts preserved" while safety skills sat months stale; it now names each frozen skill and states how to resume updates.
--storageacceptsautoandsynalux— the CLI rejected its own documented default and the production backend.Disclosure: skill delivery informs; it does not gate. A live probe showed a host agent still edit unverified source with the rule loaded. If your threat model includes an agent acting against a loaded rule under task pressure, pair this package with mechanical gates (hooks, permissions, least-privilege roles). True of every prior release; stated from this one.
What's New in v20.5.3
Grounding Evidence Carries Its Age
Memory-grounded answers labelled their sources but never dated them, so a two-year-old note and yesterday's reached the model identically. Nothing in the evidence let it discount the stale one. Prompted by an external review naming the right risk for local-first memory: the data stays local, but bad grounding becomes permanent — storing everything on your machine removes the outside pressure that would otherwise surface a stale note.
Evidence now reads:
[SOURCE 1: ledger:8286581d (recorded 2025-05-29, 431 days ago)]The date already existed in storage and was being dropped at the snippet layer, so this is plumbing rather than new data collection. Zone-less SQLite timestamps are normalised to UTC — read as local, a ten-minute-old record parsed hours into the future and its age was suppressed entirely, meaning the feature silently did nothing on the freshest memories. An absent or unparseable date renders as nothing rather than defaulting to now; defaulting would make the oldest memories, the ones most likely to be stale, appear freshest.
tests/integration/grounding-staleness.test.ts runs the reviewer's own probe —
seed a deliberately outdated note beside a contradicting fresh one and assert
the model receives both, visibly dated. Anyone can run it.
Not solved, and not claimed: retrieval does not weight recency. A stale note
shown beside a fresh one is the easy case — the model sees both dates and can
weigh them. The hard case is a stale note retrieved alone, because ranking is
by keyword match and an old store returns old results; then the age label is the
only defence and there is no fresher record to compare against. Tracked as
TECH_DEBT.md #4.
What's New in v20.5.0 – v20.5.2
The First Message Never Leaves Your Machine
Symptom-triggered skills — the rules that fire on "can't see X", "no rows",
"the list is empty" — are meant to load on the turn an incident report arrives.
They never did: every host template called session_bootstrap with {}, so
there was no prompt to match against.
Fixing that raised the question of where matching happens. It now happens
locally. The 28 keyword rules are already public, so there was nothing a local
match could not compute, and callPortal() has no prompt parameter at all —
the guarantee is structural, not a promise. The portal request carries the
project and role only.
A matched rule now arrives as content, not as a name. Native hosts outside the skill-file mirror had no way to read a rule they were only told about, so the rule body is inlined into the startup display, bounded and sized against the real per-project budget.
What's New in v20.4.0
An Explicitly Named Cloud Backend Fails Loud
Setting PRISM_STORAGE=synalux or =supabase with incomplete credentials used
to downgrade silently to local SQLite. The switch was logged to stderr, which
MCP hosts discard, so nothing surfaced it: sessions kept serving stale local
context while the cloud held newer history, and context_source read local
rather than any kind of warning. A session could run that way for weeks.
Naming a backend outright is a strong statement of intent, so it now throws —
naming the missing variables and the PRISM_STORAGE=local opt-out — instead of
quietly splitting your session history. auto is unchanged: it keeps its
documented synalux > supabase > local degradation, pinned by a test.
Upgrade note: if you explicitly set PRISM_STORAGE=synalux|supabase and
your credentials are incomplete, startup now fails with a named error instead
of silently using local data. That error is the fix — set the missing variable,
or choose PRISM_STORAGE=local deliberately. Default (auto) configs are
unaffected.
The throw is deliberately not treated as a recoverable startup fault: that path exists for transient errors (rate limits, 5xx, DNS), which may degrade behind a visible notice. A missing credential is a configuration fault and must not be papered over.
Also: the skill block is now budgeted by default rather than only on request, so a large skill payload cannot crowd out briefing and history.
What's New in v20.3.2
Web Scholar: SSRF Hardening
Security release. Web Scholar scrapes article URLs that come from search-engine output, so the target is attacker-influenceable through SEO poisoning — and because what it scrapes is written into the memory corpus and passed to the configured LLM, a redirection to a local address meant reading an internal service and sending the result onward.
The host guard matched string prefixes instead of parsing the address, and six
spellings of a local address got through: [::1] (URL.hostname keeps the
brackets), 127.0.0.2 (only .1 was enumerated, not all of 127.0.0.0/8),
0.0.0.0, [::ffff:127.0.0.1], localhost. (a trailing dot defeated every
suffix check at once), and [64:ff9b::7f00:1] (NAT64 embeds IPv4 in its low
bits). Host classification now parses addresses and also covers CGNAT,
benchmarking, multicast, reserved, and IPv6 unique-local and link-local ranges.
DNS rebinding is closed too. Every check read the URL string, so a hostname the
attacker controls passed all of them and could still resolve to 127.0.0.1.
Targets are now resolved first, every returned address is validated, and the
connection is pinned to those addresses so the name is never resolved a second
time — which also shuts the window between the check and the connect.
Scrape failures no longer vanish into a bare catch {}, a run is bounded by
PRISM_SCHOLAR_SCRAPE_BUDGET_MS (default 60s) instead of stalling on a raised
article count, and responses are capped at 8 MiB.
This is reachable only when scholar actually runs — scholar_research, or the
background loop under PRISM_SCHOLAR_ENABLED=true — and when the attacker also
controls DNS or a search result. Upgrade if you use Web Scholar.
What's New in v20.3.1
Prism Browser Reports Real Failures
prism browser could not fail a test. eval 1 === 2 returned status: ok
with exit code 0, a page serving HTTP 500 reported status: ok, and console
errors and uncaught page exceptions were discarded entirely. This release adds
assertions — assert-text, assert-visible, assert-count, assert-url,
assert-title, assert-eval, assert-no-page-errors — that return
status: failed and a non-zero exit. open now reports http_status and
fails on 400 or higher, screenshots are validated rather than assumed, and
eval returns native JSON with its type instead of a Python repr.
The fingerprint layer had never been applied: a wrong keyword argument made
the stealth library throw on every launch — 1,139 failures and 0 successes
since April — while the runner reported it as active. It is fixed, and a layer
that cannot be applied now fails loudly. The headless build no longer
advertises itself through navigator.userAgentData or the Sec-CH-UA header,
and a patch that corrupted Object.getOwnPropertyDescriptor on every page
under test has been removed. These remain best-effort test aids, not a
guarantee against bot detection.
--local-only now actually isolates: WebSocket, EventSource, WebRTC and
sendBeacon egress bypass request routing and were never blocked, and service
workers were allowed through. --cleanup was a no-op in the two modes agents
use. Site isolation, phishing detection and popup blocking are no longer
disabled by default, since these profiles hold live authenticated cookies.
New for test runs: --ephemeral-profile and --storage-state for hermetic
authenticated flows, pages/switch-page so OAuth popups are reachable,
--fail-fast, --fast, --trace/--video/--har, and
profiles --prune-older-than for profile maintenance.
What's New in v20.2.7
Session Saves Survive Agent Restarts
Prism now remembers that a conversation successfully loaded its project context
when the MCP server restarts or another Prism process handles the next request.
session_save_ledger and session_save_handoff no longer fail with a false
context_not_loaded error in that flow.
The recovery remains fail-closed: authorization is limited to the exact project and conversation, expires with the existing context window, and stores no plaintext conversation identifier. Cross-project, forged, malformed, expired, or future-dated receipts are still rejected. The release also updates PostCSS to the patched 8.5.23 release.
What's New in v20.3.0
Hybrid Memory Search (Portal Tier)
session_search_memory on the portal tier (Synalux-backed installs) now
fuses semantic similarity with exact-term lexical matching via weighted
reciprocal-rank fusion. Measured on blind probes against a real
8.5k-entry corpus: fused retrieval was never worse than semantic
alone at top-5, and exact identifiers — TPNs, function names, error
strings — now rescue queries that embedding similarity blurs. Results say how they were found — hybrid retrieval
headers, per-hit sem#/lex# arms — and a lexical-only rescue is labelled
exact-term match instead of pretending to a similarity score. Local
SQLite installs keep pure vector search; hybrid needs the portal's
lexical index.
What's New in v20.2.6
Safer Configuration Updates Across Every Agent
prism connect now reads Claude, Cursor, Gemini, and Codex configuration
through a single verified file snapshot, preventing another process from
swapping a file between Prism's safety check and its read. Supported symlinked
dotfiles still work, while dangling or planted symlinks fail loudly instead of
being followed or overwritten. This release also carries the patched
dependencies and cross-platform release checks introduced in v20.2.5.
Cloud fallback is now documented consistently as Gemini 3.6 Flash. Plan
ceilings govern automatic prism_infer routing; direct use of any downloaded
model through local Ollama remains free on every tier.
What's New in v20.2.4
Reliable Session Memory That Shows Work, Not Greetings
Greeting-only assistant replies are skipped before ledger writes. Existing
greeting rows are filtered at read time across native startup, MCP context, and
prism load --json, while entries containing decisions, TODOs, changed files,
or non-session events remain visible. Historical rows are not destructively
deleted. If Synalux has a transient startup failure, Prism displays one bounded
local last-good snapshot and clearly labels it; permanent authorization or
validation failures still fail loud, and later writes remain cloud-routed.
What's New in v20.2.2
One Local-First Workflow Across Every Agent
prism connect now installs one orchestration contract for Claude Code,
Claude Desktop, Cursor, Gemini CLI, and Codex. Bounded delegated work goes to
session_task_route and the local prism_infer worker first; routine work must
not create background host agents. Local workers can receive the active
project's dashboard-configured quick, standard, or deep memory and select a
RAM-safe 2B/4B/9B/27B model at call time. The router forwards complexity but
does not choose the model; prism_infer owns the final decision using memory
and context fit, installed models, live RAM, entitlements, and explicit caller
overrides.
Codex and Gemini native agent fan-out are disabled during connect. Codex keeps
a two-thread, one-level Terra/low fallback profile if the developer explicitly
re-enables native agents later. Claude Code keeps native agents as a last-resort
path but pins their model to Sonnet. Cursor and Claude Desktop do not expose a
supported global subagent-policy file, so they receive the identical workflow
through Prism's MCP server instructions. prism_infer safety boundaries and
the host's final verification responsibility are unchanged.
Subscription-Tier Skills Arrive Before the First Host Launch
prism connect now downloads the authoritative Synalux skill manifest and
materializes entitled packages in the native ~/.agents/skills directory
before the command exits. Codex therefore sees the current skillset on its
first launch instead of requiring a second restart. Prism rechecks the same
snapshot at MCP startup, session load, and every five minutes—skill delivery
never depends on a host lifecycle hook.
On the first user turn, Prism's native skill, MCP metadata, and managed host
instructions request one session_bootstrap({}) call. Prism then uses the
dashboard's developer name, Auto-Load Projects, and quick, standard, or deep
setting. The response stays focused on greeting and session state because tier
skills are already present in the host's native skill directory.
Hook-free MCP can provide and prioritize that ready-to-display block, but the host model still owns the final assistant message and may summarize it. Prism does not claim a deterministic verbatim greeting on third-party chat surfaces; that would require a host lifecycle hook, launcher, extension, or Prism-owned panel. Context loading itself remains complete even when a host shortens the visible reply.
Free accounts receive only the public hook-free prism-startup package; the MCP
server still supplies a compact, non-proprietary safety and evidence contract.
Authenticated paid accounts receive the protected behavioral and engineering
packages plus the current subscribed routing set. The paid
evidence-first-protocol keeps ordinary coding lightweight: one correlated
reproduction is enough to begin an edit, while strict acceptance starts only
before a completion claim, push, or release and inspects only the exact artifacts
used as proof. Upgrades install newly entitled packages; verified downgrades
remove only Prism-owned packages while preserving local skills and locally
modified conflicts.
When upgrading an older Claude Code installation, prism connect removes only
the exact Prism-owned startup, skill-sync, handoff, and drift hook actions from
the legacy bootstrap. It also removes the recognized legacy Prism startup
sections from ~/CLAUDE.md, preserves every other instruction, and installs a
small ownership-marked native block that selects session_bootstrap({}) on the
first turn. User hooks, custom instruction sections, and near matches remain
untouched; native skills and server-side reminders preserve those Prism
features without depending on host lifecycle hooks. On Claude Code and Codex
connect additionally registers the prism-route script twice: on every prompt
(mid-session skill routing) and on SessionStart matched to compact only
(post-compaction protected-floor digest). Because hosts expose no native
session-end callback, handoff at shutdown is instruction-driven rather than a
guaranteed lifecycle event.
After Claude Code's native user registration succeeds, the same default or
--refresh command checks the nearest .mcp.json from the current directory
through the home directory. It removes only the exact legacy
prism-mcp entry { "command": "npx", "args": ["-y", "prism-mcp-server"] }
that would otherwise shadow the user registration. Custom Prism entries and
their additional fields, plus unrelated servers, are preserved; malformed
files fail loud without changes. --dry-run reports the recognized migration
without changing the file.
What's New in v20.2.1
Subscription-Aware Memory Storage
prism connect now carries an explicit PRISM_STORAGE=auto|local|synalux|supabase
into every managed host registration and rejects invalid values before changing a
config file. In auto, a portal-confirmed free tier uses local SQLite, while
Standard, Advanced, and Enterprise use Synalux cloud memory. If entitlement
resolution is unavailable, Prism fails closed instead of splitting history across
backends. Storage remains independent of local-first model routing.
What's New in v20.2.0
One Command Connects Every Supported Host
Install Prism globally and run prism connect. It detects Claude Code, Claude
Desktop on macOS, Windows, and Linux (beta), Cursor, Gemini CLI, and Codex, then safely registers the
server from the installed package. Existing custom entries are untouched;
--dry-run previews changes and --refresh updates only Prism-managed entries.
What's New in v20.1.0
Every Inference Outcome Is Now Observable
prism_infer gains a failure contract: pass escalation: "report" and every call returns a structured gate_outcome — success, degraded (gate-failed output served anyway, explicitly flagged), or refused (typed, with reason, instead of a thrown error). Degraded output can no longer serve silently.
Big Prompts Work Locally
Prompts over 4000 chars were blanket-refused when cloud was off. Now the full text gets a deterministic reserved-keyword scan plus a head+middle+tail excerpt classification — clean oversize prompts serve locally with a distinct UNCERTAIN_LENGTH audit marker. Clinical/reserved handling is unchanged (and its keyword floor got stronger).
No More Silent Truncation
Tier context limits now match the live Modelfiles (27b/9b are 4096-token models; 4b/2b are 32768 — the old table had it backwards). Tiers that can't hold your prompt are skipped with a visible ctx_insufficient reason; if nothing fits, you get the full prompt on cloud or a loud error — never an answer computed from a silently-clipped prompt.
Know Which Plan You're Actually Running Under
Entitlements carry a source field: portal (real), unconfigured (free by design), or fallback_free (portal unreachable — free limits ASSUMED). Pass strict_entitlements: true to fail loud instead of running degraded.
What's New in v20.0.8
verify_behavior Works Again
The verify_behavior tool crashed on every call (-32602 expected object, received string) — the handler returned a bare string instead of an MCP CallToolResult object. Fixed, with contract + fail-closed regression tests so the safety gate can never silently break again. If you're on 20.0.6/20.0.7, update.
From v20.0.7: Reserved-Content Safety, Skills Auth, Delegation Metrics
Reserved clinical content is now Claude-or-refuse (never served by a smaller model than the one that refused it), skill delivery gained a JWT auth fallback (paid-tier skills now reach machines using only PRISM_SYNALUX_API_KEY), and every prism_infer call is recorded in a persistent infer_metrics ledger. Full details in CHANGELOG.md.
What's New in v20.0.5
Local-First Delegation — 15 Categories, Measured Rate
The local-inference-first skill covers 15 hard-trigger categories (code gen, regex, format conversion, summarization, documentation, factual lookup, classification, shell commands, config gen, and more). Pasted code blocks now trigger delegation regardless of question phrasing. Measured delegation rate: 30-35% on engineering sessions, 40-60% on transform/content sessions. Rate depends on prompt mix, not the skill — the instruments now self-validate with nonDelegatedCount to prevent curated-set tautologies.
Think-Only Retry (v20.0.4)
Qwen 3.5 models (9B/27B) with thinking enabled could burn all tokens on <think> blocks and return empty content, causing a cascade to 4B. Now detects think-only responses and retries the same tier with thinking disabled — preserving model quality instead of falling to a smaller model.
What's New in v20.0.3
Layer 1 Cold-Model Resilience
The reserved-category classifier now retries once with a longer timeout on cold-model failure, then falls back to a deterministic keyword backstop before refusing. Over-length prompts (>4K chars) are classified as UNCERTAIN before reaching the classifier — prompt padding can no longer force the ERROR branch. This eliminates the cold-start refusal problem without weakening the safety gate.
Keyword Backstop for Reserved Content
When the LLM classifier fails (timeout, injection, resource pressure), a deterministic regex floor catches reserved vocabulary (restraint, seclusion, self-harm, suicide, overdose, crisis de-escalation, etc.) including inflected and verb forms. Blocks prompt-padding and classifier-injection attacks on the ERROR path.
Single-Source Safety Text
The safety statement in the MCP server instructions field now imports from boundaries.ts — one source of truth instead of two hand-maintained copies. Boundaries version bumped to v3 with an explicit delivery decision documented in code.
Reserved-Category Safety Gate — All Tiers (v20.0.2)
The Layer 1 semantic classifier now runs for every user, not just paid tiers. Reserved clinical content is refused on free tier when cloud is unavailable — fail-closed.
Ledger Dedup (v20.0.2)
session_save_ledger deduplicates identical entries within a 5-minute window.
Evidence Script (v20.0.2)
scripts/generate-evidence.sh regenerates all 5 evidence files with built-in assertions. Run bash scripts/generate-evidence.sh to verify the full pipeline.
What's New in v20.0.0
License: AGPL-3.0 → Apache-2.0
Prism MCP is now Apache-2.0. The thin-client architecture means all proprietary value (skill resolution, tier gating, billing, cloud inference) lives server-side — the open client carries no moat to protect. Apache-2.0 removes the enterprise adoption friction that AGPL caused.
Thin Client Architecture
Skill routing, budget management, and content resolution have moved server-side to the Synalux portal. The MCP client is now a thin API caller — simpler, smaller, and portable across any host (Claude Code, Gemini, Cursor, autonomous scripts). Offline fallback reads the last successful response from local SQLite.
Clean-Room Voyage AI Adapter
The Voyage AI embedding adapter was independently reimplemented from the Voyage API docs to ensure 100% project-owned copyright. Default model updated to voyage-3.5. See PROVENANCE.md for details.
Server-Side Drift Detection
Session drift detection (GATE 5) no longer requires Claude Code hooks. The timer runs server-side per conversation, piggybacked on every MCP tool response. Works for any host.
CLA Requirement
External contributions now require signing the Individual CLA. The CLA check is merge-blocking on the main branch.
Quickstart
The free tier needs no account, no API key, and no cloud. Install Prism, then register it with every supported MCP host already installed on your machine:
npm install --global prism-mcp-server
prism connectprism connect detects Claude Code, Claude Desktop (macOS/Windows/Linux), Cursor,
Gemini CLI, and Codex.
Use prism connect --all to target all five, --host <name> for one host, or
--dry-run to preview the files that would change. Existing prism and
prism-mcp entries are never overwritten by default. --refresh updates only
an entry previously created by Prism; custom entries remain untouched.
For Claude Code, both the default command and --refresh also remove the exact
legacy project-scoped npx -y prism-mcp-server entry from the effective
ancestor .mcp.json after the native user registration succeeds. No custom or
near-match project entry is changed.
Close the target MCP hosts before a non-dry-run registration so they cannot
edit their configuration at the same time.
The same connection installs the local-first orchestration contract:
Host | Managed containment |
Codex |
|
Gemini CLI |
|
Claude Code |
|
Cursor | Canonical policy delivered through MCP initialize instructions |
Claude Desktop | Canonical policy delivered through MCP initialize instructions |
All five receive PRISM_AGENT_POLICY=local-first in their managed Prism MCP
entry. Routine tasks use the RAM-aware local worker; native/background fan-out
is not the default workflow. session_task_route supplies a complexity hint;
prism_infer remains the single owner of model and thinking selection and can
choose 27B when its viability gates support it.
Set PRISM_STORAGE before running prism connect to preserve an explicit
storage choice in the generated host entries. This does not change local-model
routing; Synalux cloud storage separately requires an active cloud-memory
entitlement.
Codex registration preserves unrelated ~/.codex/config.toml content, appends
only the marked Prism MCP block, and updates only the documented local-first
feature/agent keys. CODEX_HOME is respected when set and must already exist,
matching Codex's own contract. Restart Codex CLI, the
IDE extension, or the ChatGPT desktop app after connecting.
Restart the connected host and your agent now has memory backed by a local
SQLite database (~/.prism-mcp/data.db). See IDE setup
for manual configuration and host-specific paths.
Optional — local model fleet for offline tool-routing. Pull whichever fits your hardware:
ollama pull dcostenco/prism-coder:2b # 3.3 GB · on-device / lowest RAM · sees images (100% on our routing suite)
ollama pull dcostenco/prism-coder:4b # 3.5 GB · verifier · sees images (100%)
ollama pull dcostenco/prism-coder:9b # 6.7 GB · default router · sees images (95.7%, reasons before answering)
ollama pull dcostenco/prism-coder:27b # 16.8 GB · complex code / quality · text only (100%)Prism detects both the namespaced (dcostenco/prism-coder:9b) and bare (prism-coder:9b) Ollama tags automatically.
The 2b/4b/9b tiers carry a vision tower and accept screenshots through
prism_infer({ images: [...] }) — pass absolute paths or base64. Image
requests are refused rather than answered blind when no tier (or the Layer 1
safety classifier) can actually see the image, so a text-only model is never
handed a prompt about a screenshot it never received. The 27b is text only.
What it does
Your AI agent forgets everything between sessions. Prism fixes that — and adds verification, drift detection, and multi-agent coordination on top.
Mind Palace — persistent memory that survives across sessions
Every conversation feeds a persistent store. The next session loads the right context automatically — no re-explaining.
The dashboard shows your current project state, pending TODOs, intent health, and a neural knowledge graph — all built automatically from your agent sessions.
It runs on loopback and is gated by a per-startup token by default — open the
tokenized URL printed in the startup log (http://localhost:3000/?token=…).
Requests with an untrusted Host/Origin are refused, closing the DNS-rebinding
exposure fixed in GHSA-9cvx-7x8q-3g6m. See docs/IDE_SETUP.md
to pin the token, disable it, or configure Basic Auth / JWKS.
Export — read the record outside the agent
session_export_memory writes your memory out as plain files you can read,
diff, and commit. Nothing goes through a model to produce it.
markdown human-readable — drop it in a PR to show what the agent actually did
json machine-readable — import into another Prism instance
vault zipped Markdown with YAML frontmatter and [[wikilinks]] (Obsidian, Logseq)This is the surface to reach for when you want to answer "did the agent verify this, or is it claiming it did?" — the export is a record you review after the fact, in a diff or a pull request, rather than a live view you have to go and open. The same data is available from the dashboard's Export ZIP and Export Vault buttons.
Knowledge Graph — semantic + keyword + graph search
Ask "what did I decide about the auth flow last month?" and get an answer with citations, combining vector similarity, full-text search, and graph traversal.
Session History — immutable audit trail
Every session is logged with files changed, decisions made, and TODOs. Search, filter, and replay any past session.
Inference Metrics — see where your tokens go
Every prism_infer call tracks which model handled it (local Ollama vs cloud) and how many tokens were consumed. When you save a session, Prism shows a summary:
📊 Inference Metrics (this session):
Total calls: 12 — Local: 10 (83%) | Cloud: 2 (17%)
Prompt tokens: 7,840 evaluated / 8,420 submitted est.
Completion tokens: 3,150
Cloud tokens saved (est.): 11,570 — token volume handled locally instead of cloud
Avg latency: 1,240ms
By model:
prism-coder:27b: 6 calls, 7,200 tokens, avg 1,800ms
prism-coder:9b: 4 calls, 2,870 tokens, avg 620ms
synalux-27b: 2 calls, 1,500 tokens, avg 1,100msCloud tokens saved is the honest routing metric — it accrues only when local Ollama handles a call that would otherwise have gone to Synalux cloud inference. A compact version appears inline after every 5th prism_infer call: 📊 local 10 (83%) · cloud 2 (17%) · ~11,570 tok · avg 1,240ms · 11,570 cloud tok saved.
Local calls use actual Ollama token counts (prompt_eval_count / eval_count from Ollama); cloud calls use char/4 estimates. Metrics are tracked locally — no portal dependency, no env vars, works offline. Per-call data is also forwarded to the Synalux portal as best-effort analytics (independent of the display).
Session Drift Detection
Long agent sessions can wander from their original goal. session_detect_drift compares current work against the stated goal and returns on_track / minor_drift / major_drift so the agent can self-correct.
Behavioral Verification — catch bad edits before they happen
AI agents apply patterns from checklists without understanding the real-world impact. The verify_behavior tool challenges the agent with a scenario it must answer before editing — forcing it to think through what the end user will experience.
Agent: "I'll revert this kitchen display change"
Prism: "⚠️ Scenario: A cook sees a 3-item ticket. One item is voided.
What should the cook see after the void?"
Agent: "The ticket stays visible with the remaining 2 items."
Prism: "Correct — your revert would hide the ticket entirely."17 built-in domains (billing, auth, ordering, clinical, HR, and more). Custom domains per workspace on Enterprise. No hooks needed — works in any MCP client.
Time Travel
Roll back to any previous session state. Compare diffs between versions. Restore a known-good state with one click.
Cognitive Routing
Three memory types, automatically sorted: episodic (what happened — session logs, decisions), semantic (what's true — facts, architecture), and procedural (how to do X — workflows, patterns). When you search, the router picks the right store instead of dumping everything.
Multi-Agent Hivemind
Coordinate multiple AI agents working on the same project. Each agent has its own session, but they share memory through the knowledge graph. The Hivemind Radar shows real-time agent status, tasks, and activity.
Neural Search
Search across all memories with highlighted results, knowledge graph editing, and memory density metrics.
Local-first and privacy
The free tier runs entirely on your machine. Paid tiers add cloud sync through the Synalux portal, which is what enables cross-device memory and team sharing.
Local tier (free) | Cloud tier (paid) | |
Memory storage | Local SQLite | Synalux portal (Supabase-backed) |
Inference | Local Ollama models | Local models + Gemini 3.6 Flash fallback |
API keys required | None | Synalux subscription key |
Web search / scrape | Not included | Via Synalux portal (provider keys server-side) |
What leaves your machine | Nothing | Memory text, file paths, search queries, and inference prompts/drafts when their cloud feature is used, sent to the portal over TLS. Cloud memory writes are PHI-redacted; inference and route requests are transient. |
Works offline | ✅ | Local features yes; sync/cloud no |
Handling sensitive data. Cloud memory writes pass through automatic
redaction (SSNs, dates of birth, medical record numbers, phone numbers, emails,
and clinical identifiers are stripped before storage). Cloud inference and
route correction send the request over TLS for processing and do not store it
as Prism memory; use route_guard: "local" or the local tier for a full
air-gap. Enterprise includes a HIPAA Business Associate Agreement.
Models
The prism-coder fleet uses Qwen3.5 for MCP tool-routing AND general inference. The 9B and 27B are fine-tuned; the 2B and 4B use stock Qwen3.5-4B at different quantization levels. The 27B scored 100% on our internal 115-case tool-routing suite and 100% on an internal 15-problem coding eval, at $0 inference cost. These are self-run evaluations, not BFCL leaderboard submissions.
prism_infer supports three modes: route (tool routing, fast), chat (conversation) and code (code generation). Reasoning is decided by the tier, not the mode: a tier carrying MODEL_TIERS.prefersThinking also carries a minLocalTokens floor so reasoning cannot crowd out the answer, and only those tiers use <think> blocks (stripped before the response is served). The 9B does; the 4B and 2B do not, because on those tiers reasoning drew down the same num_predict budget the answer needed and returned an empty response. An explicit think: true still overrides, for a caller who has sized max_tokens for it. If the local model fails a quality gate (empty, think-only, or truncated), paid tiers automatically escalate to Gemini 3.6 Flash via the Synalux portal.
Every route-mode result is parsed locally and checked against allowed_tools
before it reaches the host. Malformed or unadvertised calls become NO_TOOL.
With route_guard: "auto" (the default), Standard and higher plans also send
a well-formed draft for one of Prism's seven trained tools—or an unadvertised
draft that may need correction—to Synalux for authenticated deterministic
correction. Advertised custom host tools remain local. Set
route_guard: "local" for a fully on-device route path.
Model | Ollama tag | Size | Vision | Routing accuracy¹ | Role | Automatic routing tier |
Qwen3.5-4B Q4_K_S |
| 3.3 GB | ✅ | 100% | On-device / lowest RAM (4.5 GiB free) | Free |
Qwen3.5-4B Q4_K_M |
| 3.5 GB | ✅ | 100% | Verifier (5.2 GiB free) | Free |
Qwen3.5-9B (LoRA) |
| 6.7 GB | ✅ | 95.7%² | Default router / workhorse (9 GiB free) | Standard+ |
Qwen3.5-27B (LoRA) |
| 16.8 GB | — | 100% | Complex code / quality (21 GiB free) | Advanced+ |
¹ Self-run on a narrow 115-case MCP tool-selection suite, temperature: 0,
measured through the call path prism_infer actually uses (/api/chat, each
model's own template). It says these models pick the right tool on our own eval,
nothing more — not a general capability measure, and not an independent
benchmark result. Earlier revisions of this table quoted 99.1–100% from a
harness that hand-rolled a ChatML prompt with raw: true, bypassing the
template; those numbers described a path no caller exercises. Full methodology
caveats below.
² The 9B is the one tier that reasons before answering, and it is measured with
reasoning enabled: 95.7% with thinking, 83.5% without. prism_infer sets this
per-tier (MODEL_TIERS.prefersThinking), so callers get the 95.7% path by
default. Reasoning costs roughly 600 tokens, which is why the 9B also carries a
2,048-token local floor.
Vision. The 2B/4B/9B tags ship a separate projector layer (0.68–0.92 GB)
and read images; the 27B is text-only. prism_infer probes for that layer and
skips a tier with no vision rather than sending it an image — asked directly, a
text-only model will still answer confidently about pixels it never received.
Exercised against the real models in tests/integration/visionScreenshot.test.ts.
These tiers control automatic prism_infer selection, not Ollama itself. Any
user can run any downloaded on-device model directly through Ollama on every
plan.
Weights: huggingface.co/dcostenco (public GGUF). Latency depends on model size and hardware — see Benchmarks to measure it on your own machine rather than trusting a printed number.
Cascade
query → prism-coder:9b (local router, default)
→ prism-coder:4b (grounding verifier)
→ prism-coder:2b (iPhone / mobile, auto-selected by RAM)
→ prism-coder:27b (complex tasks, on demand)
→ Gemini 3.6 Flash cloud fallback (paid tiers, for max quality)Multi-Layer Verification
Route output and evidence-grounded answers use separate gates. Every tier gets the local route parser and advertised-tool registry; Standard and higher plans can add the private deterministic route correction. Evidence verification is opt-in (or automatic when evidence is supplied) and remains separate from route selection.
Layer | What | Model | Cost |
L1 | Crisis/medical safety gate | None (regex) | 0 ms |
L3-Registry | Envelope validation + advertised-tool enforcement (all tiers) | None | 0 ms |
L3-Route | Authenticated deterministic route correction (Standard+) | None | Network latency |
L3-Tier0 | Integer grounding (set membership) | None (deterministic) | 0 ms |
L3-Tier2 | NLI verifier (claim → ENTAILED/NEUTRAL/CONTRADICTED) | prism-coder:2b | ~200 ms |
L4 | Hallucination judge (opt-out for clinical) | prism-coder:4b | ~500 ms |
Fail-closed on the verified path: when the grounding verifier runs, timeout, ambiguity, or missing evidence yields a refusal, not pass-through. If the paid route correction is unavailable, the local registry still blocks malformed and unadvertised calls and reports an allowed preserved route as degraded.
Benchmarks
Published benchmark numbers are concise summaries of internal deterministic evaluation. Evaluators, exhaustive cases, exact tier-routing matrices, and raw model outputs stay in the private engineering repository and are not included in the npm package or public source tree.
Routing evaluation. On a narrow tool-selection suite, the fleet achieved near-saturated results across three seeds. This measures offline MCP routing reliability, not general model capability.
Model | Routing accuracy | Notes |
prism-coder:2b (Q4_K_S) | 100% | The 2B was requantised when vision shipped; the old 99.1% was Q3_K_M |
prism-coder:4b | 100% | |
prism-coder:9b | 95.7% with reasoning | 83.5% without — the only tier where this differs |
prism-coder:27b | 100% | |
Claude (frontier, same eval) | ~98% | Stronger everywhere outside this narrow task |
Measured through /api/chat with each model's own template — the path
prism_infer uses. temperature: 0, so the three seeds only reshuffle case
order and cannot disagree; earlier revisions cited that agreement as
confirmation, which it never was.
Memory uplift (LoCoMo-Plus, self-published). A separate long-context dialogue benchmark (dcostenco/Locomo-Plus) measures how much structured memory helps a base model retain multi-day context. Results show large gains when a model is paired with Prism memory versus running raw. Note this benchmark is authored, run, and LLM-judged by this project — treat it as a reproducible demonstration, not an independent third-party result, and run it yourself with the commands in that repo.
Code generation evaluation. In a small July 2026 deterministic execution check, the local 9B passed 2/3 tasks; the local 27B and Gemini 3.6 Flash each passed 3/3. This is a self-published regression signal, not an independent leaderboard or a claim of broad model equivalence.
Cloud Escalation (cloud_fallback: true)
Prism always tries an eligible local model first. If the quality gate detects an empty, truncated, think-only, or looping response, paid tiers can retry the request through Gemini 3.6 Flash. Free-tier routing stays local and reports the quality-gate outcome without making a cloud call.
Why Prism Coder
vs AI coding assistants
Product capabilities and plans change frequently. The comparison below is intentionally limited to publicly documented differences; it is not a claim that another product lacks an unlisted feature.
Legend: ✅ documented, ◐ conditional or plan-dependent, — not compared, ? verify with the provider.
Capability | Prism Coder | GitHub Copilot | Cursor | Amazon Q Developer |
Local/open-weight inference | ✅ | ◐ | ◐ | ◐ |
Offline workflow | ✅ | ◐ | ? | ? |
Cross-session memory | ✅ | ◐ (docs) | ◐ | ◐ |
MCP integration | ✅ | ✅ (docs) | ✅ (pricing) | ◐ |
Local-first model routing | ✅ | ◐ | ◐ | ◐ |
Session drift and grounding checks | ✅ | — | — | — |
Setup surface | ✅ five hosts | ✅ CLI/IDE | ✅ editor/agents | ✅ IDE/CLI (overview) |
Pricing model | ✅ Synalux tiers | ◐ | ◐ (pricing) | ✅ free + $19 Pro (pricing) |
Prism-specific compliance, contractual, and pricing terms are documented in the Synalux service agreement. Do not infer a competitor's HIPAA, BAA, or data handling status from this table.
vs local AI / memory tools
Feature | Prism Coder | Ollama | LM Studio | Mem0 | Zep |
Local inference cascade | ✅ | ✅ runtime | ✅ app | — | — |
Cloud fallback | ✅ optional | — | ◐ provider-dependent | ◐ | ◐ |
Persistent memory | ✅ | — | ◐ project context | ✅ | ✅ |
Knowledge/tool integration | ✅ MCP + ingestion | ◐ APIs | ◐ integrations | ✅ SDK/API | ✅ SDK/API |
MCP server | ✅ native | — | ◐ client integration | ◐ client integration | ◐ client integration |
Pricing
Prism's current published tiers are listed below. Competitor pricing is usage- and plan-dependent, so consult the provider directly: GitHub Copilot, Cursor, and Amazon Q Developer.
Plans
All on-device models are free to run locally via Ollama on every tier. A subscription gates cloud features, higher automatic-routing ceilings, and increased limits. On-device models run through your Ollama regardless of plan; the ceiling applies only to cloud inference and automatic prism_infer routing.
Free | Standard $19/mo | Advanced $49/mo | Enterprise $99/mo | |
Seats | 1 | 1 | up to 5 | up to 25 |
Automatic | up to 4b | up to 9b | up to 27b | up to 27b |
Cloud inference | -- | ✅ | ✅ | ✅ (priority) |
Cloud Coder (Web IDE) | -- | ✅ | ✅ | ✅ (priority) |
Cloud search | -- | ✅ | ✅ | ✅ |
Max output tokens | 512 | 1,024 | 2,048 | 4,096 |
Cloud fallback | -- | Gemini 3.6 Flash | Gemini 3.6 Flash | Gemini 3.6 Flash (priority) |
Grounding verifier (fact-check AI output) | -- | ✅ | ✅ | ✅ |
Memory sync (cloud) | -- | ✅ | ✅ | ✅ |
Knowledge / session memory | limited | unlimited | unlimited | unlimited |
Analytics dashboard | -- | ✅ | ✅ | ✅ |
HIPAA BAA | -- | -- | -- | ✅ |
14-day free trial on paid plans. 25+ seats: contact sales
How agents use it
Prism exposes 40+ MCP tools. The core memory loop:
Tool | What it does |
| Hook-free first-turn greeting and dashboard-configured context |
| Explicit project reload or older-server startup fallback |
| Append an immutable session log entry |
| Save live state for the next session |
| Semantic + keyword search over all memories |
| Memory-first Q&A with a grounded live-source fallback on paid tiers |
| Detect when a session has drifted from its goal |
| Pre-edit scenario challenge — catch bad changes before they happen |
| Teach Prism a codebase or document |
| Local-first inference (route/chat/code modes, thinking, cloud escalation) |
| Session delegation or persisted MCP + VS Code panel local/cloud stats |
| Token volume local serving kept off your cloud model, all time / 30 days / session |
query_memory_natural — memory first, current sources when needed
Ask one natural-language question instead of choosing separate memory, search, scrape, and inference tools. Prism searches its accumulated project memory first. If no useful evidence exists, paid tiers run one bounded Synalux search (Firecrawl, Gemini 3.6 Google Search grounding, then legacy Brave fallback), resolve and preserve the source URLs, scrape the leading page, and ask a RAM-safe local Prism Coder model to answer from that evidence. The paid-tier Gemini 3.6 verifier checks the draft before it is served. Reserved or uncertain clinical content never enters the web-grounded local path; it follows Prism's cloud-or-refuse safety boundary.
prism_infer — local-first inference with cloud escalation
prism_infer({
prompt: "Write a binary search in Python",
mode: "code", // "route" | "chat" | "code"
think: true, // enable <think> reasoning (default: true for chat/code)
model_ceiling: "27b", // use the quality tier
})
// → 27B generates code locally ($0), with thinking for quality
// → If quality gate fails + paid tier → auto-escalate to Gemini 3.6 FlashMode | Think | Model | Use case |
| Off (fast) — except a tier that reasons better, e.g. 9B | 9B default | MCP tool routing |
| Per tier: on for 9B, off for 4B/2B | 27B preferred | Conversation, reasoning |
| Per tier: on for 9B, off for 4B/2B | 27B preferred | Code generation, debugging |
Think is a tier property, not a mode property. Tiers with
prefersThinking also declare a minLocalTokens floor that reserves budget for
the answer; tiers without it spend the whole num_predict allowance inside
<think> and return nothing. Pass think explicitly to override either way.
Full TypeScript signatures live in src/tools/; architecture in docs/ARCHITECTURE.md.
inference_metrics — see your local-model usage on demand
Call inference_metrics anytime mid-session to see how many prism_infer calls ran locally vs cloud. Use period: "all" to atomically import the Synalux VS Code panel spool and include its local-serve rate in the persisted totals:
📊 Inference Metrics — local-model delegation (this session):
Total calls: 5 — Local: 5 (100%) | Cloud: 0 (0%)
Tokens: 1,240 in + 380 out = 1,620 total
Avg latency: 420ms
By model:
prism-coder:27b: 3 calls, 1,100 tokens, avg 520ms
prism-coder:9b: 2 calls, 520 tokens, avg 270msThe same block also appears automatically in session_save_ledger and session_save_handoff responses at session end.
Note: The default session view tracks this MCP process's prism_infer delegation. The all-time view combines persisted MCP calls with Synalux VS Code panel inference. Neither view includes the host agent's own token spend; use that host's native usage reporting when available.
local_savings — what local serving actually displaced
inference_metrics reports raw counters. local_savings answers the question
behind them: how much work never reached your cloud model. Call the tool in any
host, or run prism savings from a terminal — --period all|month|week|session,
--days N for any custom trailing window (e.g. --days 90 for a quarter), and
--json for machine-readable output:
💾 Local serving — LAST 30 DAYS (2026-08-02 → 2026-08-26)
~510K tokens kept off your cloud model
53 call(s) served locally of 58 routed (91%)
Breakdown: 461,400 prompt + 48,400 completion
By model:
prism-coder:9b: 41 call(s), ~505K tokens
prism-coder:4b: 12 call(s), ~4.8K tokens
Counts tokens a local model handled instead of your cloud model. On the token
axis, the token count is measured — a floor, with known undercounts listed
when present. On the displacement axis, prism cannot observe the call your
host would have made, so whether all of it would have hit the cloud is an
assumption. Read it as: at most this much displacement, of at least this
token volume.
Caveats:
· 12 local call(s) hit the KV cache, so Ollama reported 0 prompt tokens for
context that was really submitted — prompt tokens are undercounted.
· 3 refused call(s) excluded — nothing was served, so nothing was displaced.Why tokens and not money. Prism reports token volume and never a dollar figure, because it cannot honestly produce one: published rates change and a bundled price table would be wrong on a timer; prism never observes which model your host would have used, and that choice alone is a multiple-fold spread on the same tokens; and most users are on flat plans where a currency figure means nothing at all. Tokens are the one unit prism measured itself. If you know your own effective rate, multiply — the split is printed for exactly that reason.
Refused calls are excluded, the VS Code panel-playground share is disclosed
separately, and the known sources of undercount are listed inline rather than
left implicit — so the durable (week/month/all/--days) headline is a
measured floor rather than a number that merely looks precise. Figures are
per-machine: each machine reports its own local ledger.
Team roll-up (paid). On paid plans, prism savings --sync-enable opts this
machine into savings sync: once a session, prism uploads per-day counters —
call counts and token totals, never prompts, completions, project names, or
model output (the upload payload is a closed field set; the server rejects
anything else). prism savings --team (or the local_savings tool with
scope: "team") then shows the roll-up across your workspace: total tokens
kept off cloud models, per-member share, device counts. Members who haven't
opted in simply aren't counted, so the team figure is a floor. Sync is off by
default, --sync-disable stops it, and the deeper session-content sync
(handoffs) is a separate channel with end-to-end encryption — the two are
deliberately not unified, because an E2E blob cannot be aggregated and a
counter channel must never carry content. The session view is the one
exception: on KV-cache hits it estimates submitted prompt tokens from text
(the ledger counts the measured 0 instead), so it is marked (est.) and says
so whenever that happens.
Local-model delegation (default)
Prism routes qualifying bounded work—bulk classification, field extraction,
mechanical formatting, test generation, and similar tasks—to local Ollama
models before any host-native subagent. The agent checks gate_outcome,
verifies the result, and continues in the current host thread when the local
worker is unavailable, refused, or degraded.
Pass project memory when the subtask depends on prior work:
{
"prompt": "Generate the bounded regression-test cases.",
"project": "prism-mcp",
"context_depth": "standard",
"conversation_id": "<from session_bootstrap>",
"mode": "code",
"cloud_fallback": false,
"escalation": "report"
}Omit context_depth to use the dashboard setting. Turn off the dashboard Task
Router toggle or set PRISM_TASK_ROUTER_ENABLED=false for an explicit opt-out.
Guardrails:
Local by default — an explicit operator opt-out is preserved
Never delegates: code/text that ships to the user, security/safety logic, planning/reasoning, anything where a silent quality drop isn't obvious
Always verifies: checks
quality_gate_failedandused_cloudbefore trusting local output
The LLM context window is treated as ephemeral scratch space; durable state lives in the persistent store (SQLite locally, the portal in the cloud). Every session begins with a mandatory no-argument session_bootstrap call, so Prism applies the dashboard's project and quick/standard/deep setting before the agent writes a response. When a project exceeds a threshold (default 50 entries), session_compact_ledger summarizes old entries into a rollup, soft-archives the originals, and links them in the graph. See docs/COMPACTION.md
CLI
prism load <project> # load session context
prism save # save ledger + handoff
prism search <query> # search code across repos (exact / regex / symbol / semantic)
prism review <files...> # AI code review — security, performance, style
prism scan <files...> # security scan — secrets, licenses, Dockerfile
prism browser ... # persistent local browser testing and structured automation
prism push # push local SQLite to the cloud backend
prism register-models # alias dcostenco/prism-coder:* -> prism-coder:*prism browser — local browser testing
The npm package includes Prism's Python/Playwright browser runner; no separate Prism Browser app or DMG is required. It adds a stable agent-facing CLI around Playwright with reusable named profiles, multi-action pipe/REPL sessions, redacted local audit logs, and guarded preload scripts for local apps. Use pipe or REPL mode when several actions must share one page session:
printf 'open http://127.0.0.1:3000\nwait-for #app\nread-dom #app\n' | \
prism browser --headless --local-only pipeLocal apps can load repeatable pre-navigation test helpers with
--inject ./tests/browser-init.js. Custom injection requires --local-only;
public navigation and non-loopback requests are rejected in that mode. Install
the local runtime once with pip3 install playwright playwright-stealth and
python3 -m playwright install chromium.
Use raw Playwright for authored suites that need its full assertion, tracing,
fixture, and parallel-worker APIs. Use prism browser when an AI agent needs a
small, persistent, auditable local browser session through one consistent CLI.
The compatibility patches are best effort; they are not a CAPTCHA-bypass
guarantee. See Prism Browser local testing for the
command surface, safety model, and verified acceptance cases.
prism search — semantic code search
prism review — AI code review with HIPAA checks
prism scan — security scanner for secrets, Dockerfiles, licenses
Companions
Prism works alongside these tools — use whichever fits your workflow.
Web IDE — Prism Coder
A browser-based IDE at synalux.ai/coder. Import any GitHub repo and get:
Monaco editor with multi-tab, split view, syntax highlighting, and VS Code keybindings
In-browser Node.js via WebContainer (your code runs in the browser sandbox, not on a server)
Integrated terminal — WebContainer shell in-browser; optional server PTY via WebSocket when connected to a dev server
AI Agent Mode — describe a task and the agent creates files, runs type-checks, and verifies
Source control — commit, branch, push/pull, stash, blame, tag management
Live Share — real-time collaborative editing with session links
Node.js debugger via Chrome DevTools Protocol
Tasks runner (VS Code
tasks.jsoncompatible), Problems panel (Monaco diagnostics)12-language i18n — full UI localization
Standard+ plans get cloud AI and higher rate limits. Free tier works with local Ollama. Code execution uses the in-browser WebContainer by default; Live Share and the optional PTY terminal connect to external servers when explicitly enabled.
VS Code Extension — Synalux
Memory-augmented AI inside VS Code with clinical practice management features. Install from the marketplace:
code --install-extension synalux-ai.synaluxAI chat, voice input, SOAP note generator, team collaboration, and video calls — all inside VS Code. Routes through local Ollama by default; cloud on paid tiers.
AI: Chat participant (
@synalux), multi-agent pipeline, voice input, model switching, 10 tonesClinical: SOAP note generator, role-based access, document signing, patient board
Collaboration: Team chat, DMs, video calls, customer board, visual builder, DevContainers
Privacy: Local Ollama by default.
preferLocal=truetries local first. Enterprise BAA available.
Prism AAC
Communication app for non-speaking users, powered by the on-device prism-coder fleet for phrase prediction. macOS / iOS / web.
See github.com/dcostenco/prism-aac
Git Hooks (Portable)
Pre-commit and pre-push security hooks that work with any editor, any AI tool, and direct CLI. No Claude Code dependency.
# Install in all repos (one-time)
bash hooks/install.sh
# Or install manually in a single repo
cp hooks/pre-commit .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit
cp hooks/pre-push .git/hooks/pre-push && chmod +x .git/hooks/pre-pushHook | What it checks | Mode |
| Dead code, orphan services, scaffold code, missing auth |
|
| 19-rule security audit (SSRF, SQL injection, secrets, IDOR, etc.) |
|
Default mode is advisory (warn but allow). Set *_MODE=block for hard enforcement. Hooks look for full audit scripts in the repo first (hooks/lib/), then ~/.claude/hooks/ fallback, then minimal inline checks.
Self-hosting (Enterprise)
Run the full model stack on your own hardware — no cloud, full data sovereignty.
Requirements: Mac M2 Pro+ (48 GB recommended) or Linux + NVIDIA GPU, plus Ollama.
ollama pull dcostenco/prism-coder:9b # default router
export LOCAL_LLM_URL=http://localhost:11434Self-hosted routing stays local: 9b → 4b on desktop/server and 2b on
mobile/iPhone, with 27B available when installed and RAM-safe. Synalux-hosted
paid tiers can use Gemini 3.6 Flash as the cloud fallback. For iOS or another
machine on the same network, run OLLAMA_HOST=0.0.0.0 ollama serve and point
LOCAL_LLM_URL at the host's IP.
Configuration reference
Variable | Purpose | Default |
|
|
|
| Paid-tier portal key ( | -- (local if unset) |
| Ollama endpoint |
|
| Force local SQLite regardless of credentials |
|
| Portal analytics token (optional — metrics display works without it) | -- |
With no variables set, Prism runs fully local. With an active cloud-memory subscription, set PRISM_SYNALUX_API_KEY (and leave PRISM_STORAGE=auto) to use the Synalux backend; a portal-confirmed free tier remains on local SQLite.
Testing
npm test # full suite (vitest) — 95 files, 2841 tests
npm test -- --coverage # coverage reportCoverage spans HRR retrieval, knowledge ingestion, the inference cascade and grounding verifier, inference metrics, telemetry allowlist, delegation gate, compaction, the model picker, and storage round-trips.
Migration: local to cloud
To move free-tier history into the paid portal:
node scripts/migrate-local-to-portal.mjs --dry-run # preview, no network
PRISM_SYNALUX_API_KEY=synalux_sk_... \
node scripts/migrate-local-to-portal.mjs # push ledger + handoffsIt reads ~/.prism-mcp/data.db and POSTs entries to the portal. Ledger entries are append-only and de-duped server-side; handoffs use last-write-wins per project. Re-running on the same DB is safe. This is a one-shot migration, not a sync daemon — after it, set PRISM_STORAGE=synalux (or leave it on auto).
License & Tiers
This repository (the Prism MCP client) is licensed under Apache-2.0.
Free (no account)
Feature | Details |
Local inference | Direct Ollama use is unrestricted; automatic |
Session memory | Persistent sessions, handoffs, ledger — all local SQLite |
Knowledge search | Semantic search across session history |
Skills | All skills available locally (run |
Drift detection | Server-side GATE 5 reminders |
Paid (Synalux subscription)
Everything in Free, plus:
Feature | Details |
Model ceiling | Automatic |
Skill routing | Portal resolves which skills to load based on your project and prompt |
Cross-device memory | Supabase cloud sync — sessions survive across machines |
Grounding verifier | L3 NLI verification on model outputs |
Team features | Multi-agent Hivemind, workspace collaboration |
The paid tier adds intelligent routing — the Synalux portal determines which skills are relevant to your current project and prompt, so your agent gets domain expertise (stripe patterns, training protocols, clinical standards) instead of loading everything. Free users with the repo can run sync-skills.sh to populate all skills locally; paid routing adds project-aware and prompt-aware selection.
Contributions require signing the CLA.
"Prism" and "Synalux" are trade names of Synalux LLC; the Apache license does not grant trademark rights (see §6 of the license).
License change (v20)
As of this release, prism-mcp is relicensed from AGPL-3.0 to Apache-2.0. Prior versions remain under AGPL-3.0. Existing forks retain all rights received under the original license.
Product | License |
prism-mcp-server (this repo) | |
VS Code extension (synalux-ai.synalux) | BSL-1.1 |
Web IDE (synalux.ai/coder) | Synalux Terms of Service |
Prism AAC | Apache-2.0 |
This repository is licensed under Apache-2.0. Cloud features (hosted inference, cross-device memory, team features) are provided by the Synalux cloud service under separate terms.
© 2026 Synalux, LLC.
Available Tools
43 toolsapi_analyticsA
View API usage analytics per project or system-wide. Shows call counts, success rates, latency, token usage, top tools, and daily trends.
Scopes:
project— Analytics for a specific projectsystem— System-wide aggregate analytics
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to analyze (default: 30). | |
| scope | Yes | Analytics scope: 'project' for per-project, 'system' for global. | |
| project | No | Project identifier (required when scope='project'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It implies a read-only operation ('View') and lists data provided. It does not mention side effects, auth, or rate limits, but for a simple query tool, it is fairly 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 two concise sentences plus a bullet list, front-loaded with key information. Every part adds value with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description specifies the metrics returned (call counts, success rates, latency, etc.), which is adequate for tool selection. It does not detail output format but covers expectations well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with all parameters already described. The description adds context for scope values and project identifier but does not significantly enhance understanding beyond the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'View API usage analytics per project or system-wide' and lists the specific metrics (call counts, success rates, latency, token usage, top tools, daily trends). It distinguishes between project and system scopes, making the purpose clear and differentiating from siblings.
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 details two scopes ('project' and 'system') with clear distinctions, guiding when to use each. However, it does not explicitly mention when not to use the tool or provide alternatives, though no direct siblings exist for analytics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backup_databaseA
Create, list, or restore SQLite database backups.
Actions:
create— Create a new backup nowlist— List available backups with sizes and agesrestore— Restore from a specific backup fileconfigure— Set backup schedule (hourly/daily/weekly)
Backups are stored in ~/.prism/backups/ by default. Automatic retention pruning keeps only the configured maximum.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Backup action to perform. | |
| schedule | No | Backup schedule (for 'configure' action). | |
| backup_path | No | Path to backup file (required for 'restore' action). | |
| max_backups | No | Maximum number of backups to retain (for 'configure' action). Default: 7. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the burden of disclosing behavior. It mentions storage location and retention pruning but does not clarify whether restore is destructive, authentication needs, or error conditions. This is adequate but lacks detail for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at about 70 words, using a bullet list for actions. It is front-loaded with the main purpose. Could be slightly tighter but no significant waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no annotations, the description covers the essential actions, storage path, and retention policy. It mentions that 'list' returns sizes and ages, which is helpful. It is reasonably complete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all four parameters described. The description adds brief context for each action (e.g., 'Create a new backup now') but does not substantially extend beyond the schema meanings. Baseline 3 is appropriate since schema already documents 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 is for creating, listing, or restoring SQLite database backups. It then lists each action with a one-line explanation, making the purpose specific and distinct from unrelated sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly conveys that the tool is for backup operations, but it does not provide explicit guidance on when to use it versus alternatives, nor does it mention prerequisites or when not to use it. Given the sibling tools are unrelated, the lack of explicit guidelines is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brave_answersB
Returns direct AI answers grounded in Brave Search using Brave AI Grounding. Uses an OpenAI-compatible chat completions endpoint and is best for concise answer generation with live web grounding.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model name for Brave AI Grounding (default: brave) | brave |
| query | Yes | Question or prompt to answer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It discloses the use of an OpenAI-compatible endpoint and live web grounding, but fails to mention any behavioral traits like rate limits, authorization requirements, or whether the operation is read-only. The description is insufficient for full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at two sentences, with no filler. It front-loads the core purpose and immediately explains the technical mechanism.
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 no output schema, the description should explain the return format or structure of the answer. It does not, leaving agents uncertain about what to expect. The description is adequate for a very simple tool but incomplete for full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (query and model) adequately described in the schema. The tool description adds minimal value beyond restating that it uses AI grounding, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns direct AI answers grounded in Brave Search, using an OpenAI-compatible endpoint. It distinguishes from sibling search tools like brave_web_search by emphasizing answer generation rather than raw results.
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 mentions it is 'best for concise answer generation with live web grounding,' which implies a specific use case. However, it does not explicitly state when not to use it or suggest alternatives, leaving some ambiguity about when to choose this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brave_local_searchA
Searches for local businesses and places using Brave's Local Search API. Best for queries related to physical locations, businesses, restaurants, services, etc. Returns detailed information including:
Business names and addresses
Ratings and review counts
Phone numbers and opening hours Use this when the query implies 'near me' or mentions specific locations. Automatically falls back to web search if no local results are found.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results (1-20, default 5) | |
| query | Yes | Local search query (e.g. 'pizza near Central Park') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses automatic fallback to web search and lists returned information (names, ratings, hours). It lacks details on rate limits or authorization, but the key 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 a concise paragraph with bullet points. It front-loads the purpose, then gives usage context, return info, and a fallback note. No unnecessary words, well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description explains return details (business names, addresses, ratings, etc.) and fallback behavior. It misses error handling or pagination, but for a local search tool with two simple params, it is sufficiently 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 100% (both params described), baseline 3. The description adds meaning by specifying query examples ('pizza near Central Park') and default count behavior, plus clarifies what the return values include. This goes beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for local businesses and places using Brave's Local Search API. It distinguishes from siblings like brave_web_search by specifying physical locations and business entities, and notes a fallback to web 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 explicitly says 'Best for queries related to physical locations' and 'Use this when the query implies "near me" or mentions specific locations,' providing clear when-to-use guidance. It does not explicitly state when not to use, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brave_local_search_code_modeA
Performs a local search using Brave APIs, and then runs a custom JavaScript code string against the RAW API RESPONSE in a secure QuickJS sandbox. This reduces context window usage by only returning the output of your script. Use this for local/business lookups when you only need specific fields from large local payloads. Your script should read the 'DATA' global variable (a JSON string payload) and use console.log() to print the desired output.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | JavaScript code to execute against the 'DATA' variable. | |
| count | No | Number of results (1-20, default 5) | |
| query | Yes | Local search query (e.g. 'pizza near Central Park') | |
| language | No | Language of the code. Only 'javascript' is supported. | javascript |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, description fully discloses behavior: performs search, runs JS in QuickJS sandbox, returns only script output. It explains the purpose of reducing context. It does not mention rate limits or authentication, but for a search tool this is acceptable. The sandbox and script execution are clearly described.
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 4 sentences, front-loaded with the main action, followed by usage guidance and script instructions. Every sentence provides value with no redundant information. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool combines search and code execution, and the description covers the main workflow and intent. It lacks details on error handling or script failure behavior, but it mentions the sandbox and output mechanism. Given the complexity and absence of output schema, 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?
Schema coverage is 100%, so baseline is 3. Description adds context for 'code' parameter by mentioning 'DATA' variable and console.log, and gives a query example. But overall it doesn't add significant meaning beyond the schema's own descriptions. The language parameter is explicitly noted as only supporting JavaScript.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states that the tool performs a local search via Brave APIs and runs custom JS on the raw response, reducing context window usage. It distinguishes itself from siblings like 'brave_local_search' and 'brave_web_search_code_mode' by specifying 'local search' and 'code mode'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use: 'local/business lookups when you only need specific fields from large local payloads.' It implies not to use when full payload is needed. Provides instructions on how to write the script (read DATA global, use console.log). However, it does not explicitly mention when not to use or alternatives beyond the use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brave_web_searchA
Performs a web search using the Brave Search API, ideal for general queries, news, articles, and online content. Use this for broad information gathering, recent events, or when you need diverse web sources. Supports pagination, content filtering, and freshness controls. Maximum 20 results per request, with offset for pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results (1-20, default 10) | |
| query | Yes | Search query (max 400 chars, 50 words) | |
| offset | No | Pagination offset (max 9, default 0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions pagination, content filtering, freshness controls, and maximum results (20). However, does not explicitly state it is a read-only operation or discuss rate limits/auth. Adequate but not comprehensive.
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 concise sentences: first states purpose, second provides usage scenarios, third mentions capabilities. No fluff, well-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?
Tool has 3 params and no output schema. Description covers purpose, usage, and constraints but lacks explanation of return value format or structure. Could be more complete for agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; baseline 3. Description adds slight value by reiterating max 20 results and offset usage, but no new parameter details beyond schema. Content filtering and freshness controls are mentioned but are not 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?
Clearly states 'Performs a web search using the Brave Search API' with specific verb+resource. Distinguishes from siblings like brave_answers and brave_local_search by stating 'ideal for general queries, news, articles, and online content.'
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 usage context: 'ideal for general queries, news, articles, and online content. Use this for broad information gathering, recent events, or when you need diverse web sources.' Lacks explicit when-not-to-use or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brave_web_search_code_modeA
Performs a web search using the Brave Search API, and then runs a custom JavaScript code string against the RAW API RESPONSE in a secure QuickJS sandbox. This drastically reduces context window usage by only returning the output of your script. Use this for broad information gathering, recent events, or when you need diverse web sources and only need specific parts of the result. Your script should read the 'DATA' global variable (a JSON string of the API response), process it, and use console.log() to print the desired output.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | JavaScript code to execute against the 'DATA' variable. E.g. `const r = JSON.parse(DATA); console.log(r.web.results.map(x => x.title).join(', '));` | |
| count | No | Number of results (1-20, default 10) | |
| query | Yes | Search query (max 400 chars, 50 words) | |
| offset | No | Pagination offset (max 9, default 0) | |
| language | No | Language of the code. Only 'javascript' is supported. | javascript |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adequately explains the sandbox execution, the DATA variable, and console.log output. It mentions 'secure QuickJS sandbox' but does not detail error behavior, rate limits, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with two paragraphs: first explains functionality, second gives usage guidance and a code example. No superfluous content; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of executing custom code, the description covers the core workflow and distinguishes from plain search. It lacks details on output format and error handling, but provides enough context for basic 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?
Schema coverage is 100%, so baseline is 3. The description adds value by providing a concrete JavaScript example for the 'code' parameter and explaining the 'DATA' variable, which goes beyond the schema's basic description.
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 performs a web search and then executes custom JavaScript on the raw response, distinguishing it from plain search tools. It gives a specific use case ('broad information gathering... needing specific parts of the result') which differentiates it from siblings like brave_web_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 explicitly states when to use (broad information gathering, recent events, needing specific parts) and implies when not to (for full results, use non-code version). However, it does not explicitly mention sibling names or provide contraindications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
code_mode_transformA
A universal code-mode transformer. Takes RAW TEXT or JSON output from ANY MCP tool (GitHub, Firecrawl, chrome-devtools, camoufox, codegraphcontext, videoMcp, arxiv, etc.) and runs a custom JavaScript code string against it in a secure QuickJS sandbox. Use this as a second step after calling any tool that returns large payloads — pass the raw output as 'data' and a JS extraction script as 'code'. Your script reads the 'DATA' global variable (a string of the tool output) and uses console.log() to print only the fields you need. NEW in v2.1: Pass 'template' instead of 'code' for instant extraction. Available templates: github_issues, github_prs, jira_tickets, dom_links, dom_headings, api_endpoints, slack_messages, csv_summary. Example: { data: '', template: 'github_issues' } — no custom code needed.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | JavaScript code to execute. The 'DATA' global variable contains the raw data string. Use console.log() to output your extraction. Optional if using a template. | |
| data | Yes | The raw text or JSON output from another MCP tool to process. | |
| language | No | Language of the code. Only 'javascript' is supported. | javascript |
| template | No | Name of a pre-built extraction template. Use instead of writing custom 'code'. Options: github_issues, github_prs, jira_tickets, dom_links, dom_headings, api_endpoints, slack_messages, csv_summary. | |
| source_tool | No | Optional. Name of the MCP tool that produced the data (for logging/metrics only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details the secure sandbox, the DATA global variable, console.log output, and template usage. It does not explicitly state non-destructive behavior, but the processing nature is implied. Good but not exhaustive on side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but well-structured. It front-loads the main purpose, then explains usage, then introduces new features. Every sentence adds information, though minor redundancy could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 5 parameters, the description covers the usage pattern, parameter roles, and template options. Missing explicit output format or error behavior, but overall sufficient for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but description adds value: explains how 'code' interacts with 'data' via the DATA global, introduces templates as an alternative to 'code', and clarifies the role of 'source_tool' for logging. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'A universal code-mode transformer' that takes raw text/JSON from any MCP tool and runs custom JavaScript or uses templates for extraction. It differentiates from sibling tools like brave_local_search_code_mode by being universal, explicitly listing many source 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?
Explicit guidance: 'Use this as a second step after calling any tool that returns large payloads'. Provides clear when-to-use context, mentions templates for common cases, and alternatives (custom code vs template).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_notificationsA
Configure real-time notifications for memory events via webhook, Slack, or email.
Actions:
status— Show current notification configurationadd_channel— Add a notification channel (webhook/slack/email)remove_channel— Remove a channel by URLtest— Send a test notification to all configured channels
Events: health_degradation, compaction_complete, backup_complete, backup_failed, memory_threshold, new_graduated_insight, scheduler_error
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Configuration action to perform. | |
| channel_url | No | Channel URL (webhook endpoint, Slack webhook, or email relay). | |
| channel_type | No | Channel type (for add_channel). | |
| min_severity | No | Minimum severity to notify. Default: 'warning'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral traits. It fails to disclose side effects (e.g., persistence of configuration, idempotency, rate limits, authentication requirements, or what happens on channel removal). The actions are listed but their behavioral implications are missing.
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, with a clear purpose sentence followed by a bulleted list of actions and events. It is front-loaded and each sentence contributes meaning without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, no output schema, and zero annotations, the description covers the actions and events adequately but lacks behavioral completeness. Information about return values, persistence, or error handling is absent, leaving gaps for a configuration 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 100%, so the schema already documents all parameters. The description adds an overview of actions and events but does not enhance parameter meaning beyond what the schema provides. The description's extra context on events adds minor value, so score is baseline 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 tool configures real-time notifications for memory events via webhook, Slack, or email. It lists specific actions and events, making its purpose unambiguous and distinct from sibling tools, none of which relate to notification configuration.
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 actions (status, add_channel, remove_channel, test) that an agent can use to decide which operation to perform. However, it does not explicitly state when to use this tool versus alternatives or include prerequisites, though the context (no sibling notifications tools) supports implicit usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deep_storage_purgeA
v5.1 Deep Storage Mode: Purge high-precision float32 embedding vectors for entries that already have TurboQuant compressed blobs, reclaiming ~90% of vector storage. Only affects entries older than the specified threshold (default: 30 days, minimum: 7). Entries without compressed blobs are NEVER touched. Use dry_run=true to preview the impact before executing.
When to use: After running TurboQuant backfill (session_backfill_embeddings), call this tool to reclaim disk space from legacy float32 vectors that are no longer needed for search.
Safety: Tier-2 search (TurboQuant) maintains 95%+ accuracy with compressed blobs. Tier-3 (FTS5 keyword) search is completely unaffected.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, reports eligible count and estimated byte savings without purging any data. Default: false. | |
| project | No | Optional project filter. When omitted, purges across all projects. | |
| older_than_days | No | Only purge entries older than this many days. Default: 30. Minimum: 7 (enforced). Entries younger than this threshold keep full float32 precision for Tier-1 native vector search. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description fully discloses conditions: never touches entries without compressed blobs, default/minimum thresholds, safety notes on accuracy and unaffected search tiers, and reclaim percentage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections, bold key terms, and no superfluous sentences. Every sentence adds value, including safety and usage guidance.
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 no output schema, description explains expected behavior, preview with dry_run, and impact on storage and search. Covers all needed context for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 3 parameters (100%), and description adds context: default values, minimum enforcement, dry_run behavior, and project filter omission meaning. Adds significant meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool purges high-precision float32 embedding vectors for entries with TurboQuant compressed blobs, specifying the exact resource and action. It distinguishes from siblings by focusing on post-backfill space reclamation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: after TurboQuant backfill (session_backfill_embeddings). Also mentions dry_run for previewing impact, giving clear context for safe execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_entitiesA
Extract named entities from raw text using rule-based + optional LLM extraction. Automatically identifies technologies, file paths, decisions, TODOs, people, projects, and configuration values without explicit tagging.
Entity types: PERSON, PROJECT, TECH, FILE, DECISION, TODO, CONFIG
Use this to auto-enrich session context with structured metadata from raw conversation text.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Raw text to extract entities from. | |
| project | No | Optional project to auto-save extracted entities to. | |
| use_llm | No | If true, also uses local LLM for higher-quality extraction. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility. It explains the extraction methods (rule-based + optional LLM) and auto-save behavior, but lacks details on potential side effects, performance implications, or output format.
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 paragraphs that efficiently convey the tool's action and use. It is front-loaded and every sentence adds value, though minor trimming is possible.
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 entity types and basic behavior, but lacks details about return values (no output schema) and does not mention edge cases or error handling. For a tool with 3 parameters, it is adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds context about entity types and overall purpose, but doesn't significantly enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool extracts named entities from raw text, listing specific entity types (PERSON, PROJECT, TECH, etc.). It effectively distinguishes itself from siblings, none of which offer similar functionality.
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 a clear use case: auto-enrich session context. While it doesn't explicitly mention when not to use or alternatives, the sibling tools are mostly unrelated, making the guidance sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gemini_research_paper_analysisA
Performs in-depth analysis of research papers using Google's Gemini-2.0-flash model. Ideal for academic research, literature reviews, and deep understanding of scientific papers. Can extract key findings, provide critical evaluation, summarize complex research, and place papers within the broader research landscape. Best for long-form academic content that requires expert analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| analysisType | No | Type of analysis to perform (summary, critique, literature review, key findings, or comprehensive) | comprehensive |
| paperContent | Yes | The full text of the research paper to analyze | |
| additionalContext | No | Optional additional context or specific questions to guide the analysis |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It names the model (Gemini-2.0-flash) and enumerates capabilities (extract findings, critique, etc.) but lacks details on output format, token limits, cost, or any limitations. This provides moderate transparency but leaves important behavioral aspects unspecified.
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 extremely concise: two sentences with no filler. It front-loads the main action and immediately conveys core purpose. Every sentence adds value, making it efficient for an AI agent 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?
Despite having no output schema, the description fails to explain what the tool returns (e.g., text response, structured data). It also omits prerequisites like paper length limits or document format requirements. For a tool with three parameters and no output schema, this omission leaves the agent without a complete picture of the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes all three parameters. The description does not add any extra meaning or context beyond what's in the schema (e.g., explaining enum values or how to use additionalContext). Per guidelines, baseline 3 is appropriate when schema coverage is high.
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 performs in-depth analysis of research papers using Gemini-2.0-flash, listing specific capabilities like extracting key findings, critical evaluation, and summarization. It distinguishes itself from sibling tools, which are unrelated (e.g., backup, search, memory), making the purpose unique and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool: 'Ideal for academic research, literature reviews, and deep understanding of scientific papers' and 'Best for long-form academic content that requires expert analysis.' However, it does not explicitly state when not to use it or mention alternatives, which is acceptable given no direct sibling competitor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inference_metricsA
Returns the current session's local-model inference metrics — call count, local vs cloud split, token totals, per-model breakdown, and average latency. Read-only, no arguments. Reflects prism_infer delegation usage only, not the host model's (Claude's) own token spend (use /cost for that).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It explicitly states 'Read-only, no arguments' and clarifies that it reflects prism_infer delegation usage only. This provides sufficient behavioral disclosure beyond what annotations would supply.
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: the first lists the returned metrics, the second clarifies scope and exclusions. It is concise, front-loaded, and every sentence adds value with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although no output schema exists, the description enumerates the types of metrics returned (call count, split, token totals, per-model breakdown, latency). This provides reasonable completeness for a read-only metrics tool, though a brief note on response format would slightly improve it.
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 parameters, so baseline is 4. The description does not need to add parameter meaning, and it appropriately explains that no arguments are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns inference metrics for the current session, listing specific metrics (call count, local vs cloud split, token totals, per-model breakdown, average latency). It distinguishes itself by explicitly noting what it does not cover (Claude's own token spend), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (to get inference metrics) and what not to use it for (host model's token spend, directing to /cost instead). However, it does not explicitly mention when-not or alternative sibling tools, though the only related sibling is prism_infer, which is different.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_downvoteA
Downvote a memory entry to decrease its importance. Importance cannot go below 0.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The UUID of the ledger entry to downvote. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the main effect and a constraint (minimum 0), but does not mention error conditions, idempotency, or what happens when already at 0. No annotations to supplement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise, two sentences with no filler. Front-loaded with action verb and key 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?
Simple tool but lacks information about return values or confirmation of action. No output schema, so agent may need to know if operation succeeded.
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 provides 100% coverage with clear description of the 'id' parameter. Tool description does not add extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (downvote a memory entry), the effect (decrease importance), and a constraint (cannot go below 0). Distinguishes from sibling "knowledge_upvote" by name and opposite 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?
No explicit guidance on when to use this tool vs alternatives (e.g., knowledge_upvote or other memory tools). Context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_forgetA
Selectively forget (delete) accumulated knowledge entries. Like a brain pruning bad memories — remove outdated, incorrect, or irrelevant session entries to keep the knowledge base clean and relevant.
Forget modes:
By project: Clear all knowledge for a specific project
By category: Remove entries matching a category (e.g. 'debugging')
By age: Forget entries older than N days
Full reset: Wipe everything (requires confirm_all=true)
⚠️ This permanently deletes ledger entries. Handoff state is preserved unless explicitly cleared.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, only count what would be deleted without actually deleting. Default: false. | |
| project | No | Project to forget entries for. Required unless using confirm_all. | |
| category | No | Optional: only forget entries in this category (e.g. 'debugging', 'resume'). | |
| confirm_all | No | Set to true to confirm wiping ALL entries for the project (safety flag). | |
| clear_handoff | No | Also clear the handoff (live state) for this project. Default: false. | |
| older_than_days | No | Optional: only forget entries older than this many days. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the destructive nature ('permanently deletes ledger entries'), the safety mechanism (confirm_all), and the behavior regarding handoff state (preserved unless clear_handoff is set). It also mentions dry_run for safe preview. This is thorough behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a vivid metaphor, bullet-pointed modes, and a clear warning. It front-loads the core purpose and each sentence adds value without redundancy. No 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 purpose, modes, parameters, and side effects thoroughly. However, it does not specify the output format after deletion (e.g., how many entries were deleted or a confirmation message). Given the destructive nature, this minor gap prevents a perfect score.
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 adds significant meaning beyond the 100% covered schema: it groups parameters into usage modes (by project, category, age, full reset) and explains the purpose of dry_run, confirm_all, and clear_handoff. This turns schema fields into actionable guidance.
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 'forget' (delete) accumulated knowledge entries, and defines four specific modes (project, category, age, full reset). It is specific about the verb and resource, and distinguishes itself from sibling knowledge tools that perform different operations (search, upvote, downvote, set retention).
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 when to use the tool ('remove outdated, incorrect, or irrelevant session entries') and details each forget mode with its use case. It lacks explicit when-not-to-use statements or references to alternative tools, but the context 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.
knowledge_ingestA
Ingest source code or documentation into the knowledge graph. Feed your codebase to Prism so knowledge_search can retrieve it at inference time. Accepts raw source code, file paths, or a git repo URL. The content is chunked, Q&A pairs are generated, and stored in the knowledge graph. Use this when the user says 'learn this code', 'index my repo', or 'ingest this file'.
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | Raw source code or documentation text to ingest. Max 50,000 chars. | |
| project | Yes | Project identifier for the knowledge namespace (e.g. 'my-backend', 'prism-aac'). | |
| file_path | No | Local file path to read and ingest. Alternative to providing content directly. | |
| chunk_size | No | Characters per chunk (default: 4000). Smaller chunks = more granular Q&A. | |
| source_label | No | Human-readable label for the source (e.g. 'auth-middleware', 'payment-flow'). Used in search results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral traits. It discloses that content is chunked, Q&A pairs generated, and stored in the knowledge graph. However, it omits details on idempotency, overwrite behavior, authentication requirements, rate limits, or error handling, leaving gaps for an agent to infer.
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 four sentences, front-loaded with the core purpose, and contains no redundant or verbose phrasing. Every sentence adds value: purpose, inputs, process, and usage trigger phrases.
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 5-parameter ingestion tool with no annotations or output schema, the description covers purpose, input types, processing steps, and when to use. It lacks output details and error conditions, but given the tool's moderate complexity, it provides sufficient completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds context by mentioning input types (raw code, file paths, git URL) which map to parameters, but does not significantly enhance understanding of chunk_size or source_label beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: ingesting source code or documentation into the knowledge graph for later retrieval by knowledge_search. It lists accepted input types (raw code, file paths, git URL) and explicitly distinguishes from sibling tools like knowledge_search by stating its role in populating the graph.
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 usage cues: 'Use this when the user says learn this code, index my repo, or ingest this file.' It implies this tool is for ingestion only, not search or deletion, and contrasts with knowledge_search. However, it does not explicitly exclude other use cases or mention alternatives beyond implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_searchA
Search accumulated knowledge across all sessions by keywords, category, or free text. The knowledge base grows automatically as sessions are saved — keywords are extracted from every ledger and handoff entry. Use this to find related past work, decisions, and context from previous sessions.
Categories available: debugging, architecture, deployment, testing, configuration, api-integration, data-migration, security, performance, documentation, ai-ml, ui-frontend, resume
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return (default: 10, max: 50). | |
| query | Yes | Free-text search query. Searched against session summaries using full-text search. | |
| project | No | Optional project filter. If omitted, searches across all projects. | |
| category | No | Optional category filter (e.g. 'debugging', 'architecture', 'ai-ml'). Filters results to sessions in this category. | |
| activation | No | Configuration for ACT-R inspired Spreading Activation. Use this to find structurally related memories beyond direct semantic/keyword hits. | |
| enable_trace | No | If true, returns a separate MEMORY TRACE content block with search strategy, latency breakdown, and scoring metadata for explainability. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains that keywords are automatically extracted from ledger and handoff entries, and lists available categories. It does not contradict any annotations (none provided) and provides good insight into behavior 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 concise and well-structured, with a main paragraph explaining purpose and a list of categories. Every sentence adds information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (6 parameters, nested object) and no output schema, the description covers the tool's capabilities well. It explains search behavior, categories, and optional features, though detailed output format is not described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining spreading activation in plain language and highlighting the trace option, which goes beyond the schema's technical descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches accumulated knowledge across sessions using keywords, category, or free text. It distinguishes itself from other search tools by emphasizing cross-session search and automatic knowledge base growth.
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 specifies using this to find related past work, decisions, and context from previous sessions. It does not explicitly mention when not to use or alternatives, but the context is clear enough for an agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_set_retentionA
Set an automatic data retention policy (TTL) for a project's memory. Entries older than ttl_days will be soft-deleted (archived) automatically on every server startup and every 12 hours while running.
Use cases:
Set
ttl_days: 90to auto-expire sessions older than 3 monthsSet
ttl_days: 0to disable auto-expiry (default)
Note: Rollup/compaction entries are never expired — only raw sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project to set retention policy for. | |
| ttl_days | Yes | Entries older than this many days are auto-expired. Set to 0 to disable. Minimum: 7 days when enabled. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the behavioral trait: entries are soft-deleted (archived) automatically on a schedule. It specifies the retention check frequency and the exclusion of rollup entries. Missing details include whether changes are immediately applied or reversible, but the main 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 and well-structured: a single sentence defining the tool, followed by bullet-point use cases and a note. Every sentence adds essential information, and the structure aids scanning. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description adequately covers the tool's purpose, usage, and behavior. It is complete for a simple two-parameter tool. Minor omissions: no mention of required permissions or impact on existing entries, but these are not critical for basic understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by clarifying the effect of ttl_days=0 (disable auto-expiry) and giving a real-world example (ttl_days=90 for 3-month expiry). This goes beyond the schema's minimal descriptions and helps agents understand 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's purpose: setting an automatic data retention policy (TTL) for a project's memory. It defines the action (set retention), resource (project memory), and behavior (soft-delete entries older than ttl_days). This distinguishes it from sibling tools like knowledge_forget (individual deletion) or memory_history (viewing history).
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 concrete use cases for ttl_days values (90 and 0) and explains when auto-expiry occurs (server startup and every 12 hours). It also notes that rollup entries are never expired. However, it does not explicitly mention contraindications or alternative tools for similar tasks, leaving some ambiguity about 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.
knowledge_sync_rulesA
Auto-sync graduated insights (importance >= 7) into your project's IDE rules file (.cursorrules or .clauderules). This bridges behavioral memory with static IDE context — turning dynamic agent learnings into always-on rules.
How it works:
Fetches graduated insights from the ledger
Formats them as markdown rules inside sentinel markers
Idempotently writes them into the target file at the project's configured repo_path
Requirements: The project must have a repo_path configured in the dashboard.
Idempotency: Uses <!-- PRISM:AUTO-RULES:START --> / <!-- PRISM:AUTO-RULES:END --> sentinel markers. Running this tool multiple times produces the same file. User-maintained content outside the sentinels is never touched.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, returns a preview of the rules block without writing to disk. Default: false. | |
| project | Yes | Project identifier. Must have a repo_path configured in the dashboard. | |
| target_file | No | Target rules filename (default: '.cursorrules'). Common values: '.cursorrules', '.clauderules'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains idempotency via sentinel markers, the three-step process, and dry_run behavior. Missing details on file creation or error handling, but still strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with front-loaded purpose, followed by how-it-works, requirements, and idempotency. Slightly verbose but efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, mechanism, requirements, and idempotency. Lacks edge cases like file creation or error handling, but is complete for a sync tool given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with thorough descriptions for all three parameters. The description adds no new semantic information beyond what the schema already provides.
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 specific verb 'Auto-sync' and resource 'graduated insights into IDE rules file'. It distinguishes itself from sibling tools as the only tool that syncs insights to static rules files.
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 clear context: bridges behavioral memory with IDE context, and lists a requirement (repo_path configured). However, it does not explicitly state when not to use it or mention alternatives, though alternatives may not exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_upvoteA
Upvote a memory entry to increase its importance (graduation). Entries with importance >= 7 become 'graduated' insights that always surface in behavioral warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The UUID of the ledger entry to upvote. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that upvoting can lead to graduation at importance >=7 and that graduated insights always surface in behavioral warnings. This goes beyond a simple 'increase importance' but does not address reversibility or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, consisting of two sentences. It is front-loaded with the main action and provides key behavioral context without any wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required param, no output schema, no annotations), the description adequately explains the purpose and outcome. It covers the graduation mechanism but could mention whether the tool returns any confirmation or error messages.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'id', and the description only repeats the schema description ('The UUID of the ledger entry to upvote'). No additional information about the parameter is provided, so it adds no extra meaning beyond what the schema already gives.
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 ('Upvote a memory entry') and its effect ('increase its importance (graduation)'). It also explains the consequence of reaching importance >=7, which distinguishes it from sibling tools like knowledge_downvote or knowledge_forget.
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 when to use (to increase importance of a memory entry) and mentions the graduation threshold, but does not explicitly state when not to use or mention alternative tools like knowledge_downvote. However, 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.
maintenance_vacuumA
Reclaim disk space after large purge operations by running VACUUM on the local SQLite database.
Best called after deep_storage_purge removes many entries — SQLite reclaims page allocations only when explicitly vacuumed, so the file size stays the same until you call this tool.
For remote (Supabase) backends, returns guidance on triggering maintenance via the dashboard.
Note: On large databases this may take up to 60 seconds. The tool runs synchronously so you will know when it is safe to proceed.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, reports the current database file size without running VACUUM. Use this to preview how large the database is before committing to a full vacuum. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description discloses the synchronous nature, potential up-to-60-second delay, and the effect of reclaiming disk space. It does not mention potential locking or concurrency effects, but overall 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 well-structured with a clear lead sentence and follow-up details. It is moderately concise; every sentence adds value, though some minor redundancy could be trimmed.
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 performance, but does not mention the return value or output format (e.g., what the tool returns after vacuum or dry run). Since no output schema is provided, this gap reduces completeness.
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 already describes the dry_run parameter, but the description adds practical context: 'Use this to preview how large the database is before committing to a full vacuum.' This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Reclaim disk space after large purge operations by running VACUUM on the local SQLite database.' It specifies a specific verb and resource, and distinguishes itself from sibling tools like deep_storage_purge and backup_database.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises calling after deep_storage_purge and explains why (SQLite doesn't reclaim pages automatically). It also notes remote backend behavior. However, it lacks explicit when-not-to-use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_checkoutA
Time travel! Restores the project's memory to a specific past version. This overwrites the current handoff state with the historical snapshot, like a Git revert — the version number moves forward (no data is lost). Call memory_history first to find the correct target_version.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project identifier to revert. | |
| target_version | Yes | The version number to restore from history (get this from memory_history). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool overwrites the current handoff state and that no data is lost (version number moves forward). This adequately informs the agent of the behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: the first states the core action, the second provides an analogy and critical behavioral note. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides enough context for a revert tool, including the prerequisite and behavior. No output schema exists, but the return value is not essential for invocation. Slight gap: could mention the version increment explicitly, but it's implied by 'version number moves forward'.
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 already describes both parameters, and the description adds valuable context: target_version should be obtained from memory_history. This goes beyond the schema's description, improving clarity.
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 restores a project's memory to a past version, using an analogy to Git revert. It distinguishes itself from siblings like memory_history by explicitly referencing it as a prerequisite.
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 advises calling memory_history first to find the correct target_version, providing clear usage context. While it does not explicitly list when not to use it, the guidance is sufficient for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_historyA
View the timeline of past memory states for this project. Use this BEFORE memory_checkout to find the correct version to revert to. Shows version numbers, timestamps, and summaries of each saved state.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of history entries to return (default: 10, max: 50). | |
| project | Yes | Project identifier to view history for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it shows version numbers, timestamps, and summaries. No annotations present, so description bears full burden. It describes a read-only operation but doesn't explicitly state non-destructive nature, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main purpose. Every sentence adds value, no filler.
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 2 parameters and no output schema, the description is fairly complete: it explains what the tool does, when to use it, and what information is returned. Could explicitly note the read-only nature, but otherwise comprehensive.
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 covers 100% of parameters with descriptions. The tool description adds no additional meaning beyond the schema; it just reinforces the overall purpose. Baseline 3 is appropriate.
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: viewing the timeline of past memory states. It distinguishes from sibling tool memory_checkout by specifying this is for finding the correct version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: BEFORE memory_checkout, and mentions the alternative tool. Provides clear context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onboarding_wizardA
Interactive setup wizard for new Prism users. Provides a step-by-step guided experience to get productive in under 3 minutes.
Actions:
start— Begin the wizard from step 1next— Advance to the next stepstatus— Check current wizard progressskip— Skip to completion
Each step returns instructions, code snippets, and progress percentage.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Wizard action to perform. | |
| ide_client | No | IDE client for config generation. | |
| project_name | No | Optional project name to use in setup examples. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explains that each step returns instructions, code snippets, and progress, but does not disclose side effects, authentication needs, or behavior on error. For a wizard that likely creates data, persistence details are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear bullet list of actions, efficiently communicating the tool's purpose. It is front-loaded with the main function and avoids unnecessary 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?
Given the tool's simplicity (no output schema, few parameters), the description covers basic operation but lacks information on error states, behavior when wizard has already been completed, or how to handle invalid action sequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds some value by listing actions and explaining return content, but largely echoes the schema enums. No additional detail on parameter format or constraints 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 it is an interactive setup wizard for new Prism users, listing specific actions and their purposes. It distinguishes itself from sibling tools, which are unrelated to onboarding.
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 implicitly suggests use for new users during setup but provides no explicit guidance on when to use this tool versus alternatives or when not to use it. Additional context about prerequisites or completion status would improve this dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prism_inferA
Run an inference on a local prism-coder model (Ollama) to save cloud tokens. Picks the largest viable tier — 27B / 9B / 4B / 2B — based on free RAM at call time, clamped by model_ceiling and what is actually pulled in Ollama. Falls through to the synalux portal cloud cascade (9B → 27B → Claude Opus 4.7) only when local is unviable AND cloud_fallback=true. Use this for code generation, summarisation, classification, or any synth task you would otherwise hand to the cloud model — it costs $0 when the local hit succeeds.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Execution mode. 'route' (default) for MCP tool routing — fast, nothink. 'chat' for general conversation — uses thinking, escalates to cloud on failure. 'code' for code generation — uses thinking, larger context. In chat/code modes, prefers the 27B tier and enables <think> reasoning. | route |
| think | No | Enable thinking mode (<think> blocks). Default: true for chat/code, false for route. Thinking improves quality on complex tasks but adds latency (~2-5s). | |
| prompt | Yes | The user prompt. Required. | |
| system | No | Optional system instruction prepended to the prompt. | |
| verify | No | Enable the L3 grounding verifier. Default: true when `evidence` is provided, false otherwise. When enabled, the model's draft is checked by a different model (qwen3.5:4b by default) against the supplied `evidence`. Drafts with NEUTRAL or CONTRADICTED claims are refused. | |
| evidence | No | Optional evidence snippets the model output must be grounded in. When supplied with `verify: true`, every assertive claim in the draft (numbers, names, dates, codes, $ amounts) must be ENTAILED by one of these snippets or the draft is refused. | |
| max_tokens | No | Max output tokens (default 1024, hard cap 8192). | |
| timeout_ms | No | Override per-call timeout. Default scales with model size: 27B=120s, 9B=60s, 4B=20s, 2B=15s. | |
| temperature | No | Sampling temperature, 0 = deterministic (default 0). | |
| model_ceiling | No | Cap the largest tier the picker may select. e.g. '9b' forbids 27B even if RAM allows. | |
| cloud_fallback | No | If true, fall through to synalux portal cascade on local fail. Default false — token-saving mode is the point of this tool. | |
| verifier_model | No | Override the verifier model. Default: qwen3.5:4b. | |
| verifier_timeout_ms | No | Override the verifier hard timeout. Default 2000 ms. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description fully discloses behavioral traits: tier selection based on RAM, thinking modes, verification with evidence, cloud fallback conditions. It covers safety, cost implications, and edge cases 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 (4-5 sentences) with no fluff. It front-loads the core purpose and tier logic, then covers fallback. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (13 parameters, no output schema), the description covers model selection, modes, verification, fallback, and parameter defaults. It provides sufficient context for an AI agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context beyond the schema by explaining the overall inference flow, tier selection, and mode-specific behaviors, enhancing understanding of parameter interactions.
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 runs inference on a local model to save cloud tokens, selects tiers based on RAM, and falls back to cloud when needed. It specifies use cases like code generation, summarisation, classification, and differentiates from siblings by being the local inference tool.
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 when to use the tool (for any synth task that would otherwise go to cloud) and when fallback occurs. However, it does not explicitly mention alternatives or scenarios where this tool should be avoided, leaving some ambiguity for edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_memory_naturalA
Query memories using natural language instead of structured tool syntax. Automatically classifies intent, extracts keywords, and executes the appropriate search strategy.
Examples:
"What did we decide about authentication?"
"What's still open on the billing project?"
"What files did we change last week?"
"Show me recent work on the API"
Returns the parsed intent, search results, and optionally an LLM-synthesized answer.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project scope for the query. | |
| question | Yes | Natural language question about your memories. | |
| synthesize | No | If true, use local LLM to synthesize a natural language answer. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool classifies intent, extracts keywords, executes search, and returns parsed intent, results, and optional LLM answer. It does not explicitly state that it is a read-only operation or disclose any side effects, but the read-only nature is implied by 'query.'
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, starting with the main purpose, then examples, and finally the return value. It is not overly wordy, though the examples take space. Front-loading the core action is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description sufficiently covers the tool's behavior, parameters, and usage. It explains what the tool does, how it works, and what it returns. No critical gaps for a query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with descriptions for all three parameters. The description adds value by providing example questions and explaining the 'synthesize' parameter's default behavior. It clarifies the optional 'project' scope, going beyond the schema's brief description.
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: 'Query memories using natural language instead of structured tool syntax.' It specifies the verb (query), resource (memories), and method (natural language). This distinguishes it from sibling tools that likely use structured queries.
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 examples of natural language questions and explains that the tool automatically classifies intent and executes search strategies. It implies usage for informal queries but lacks explicit guidance on when not to use it or alternatives. However, the context with sibling names like knowledge_search suggests structured alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_backfill_embeddingsA
Repair ledger entries that are missing vector embeddings. This can happen if the Gemini API was temporarily unavailable when the entry was saved.
How it works:
Scans for active ledger entries where embedding IS NULL
Generates embeddings via Gemini text-embedding-004
Patches each row with the generated embedding
Run this periodically or after known API outages to ensure full semantic search coverage.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum entries to repair in one call (default: 20, max: 50). Keeps API costs predictable. | |
| dry_run | No | If true, only count missing embeddings without generating them. Default: false. | |
| project | No | Optional: repair only a specific project. If omitted, repairs all projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must fully disclose behavior. It outlines the three-step process (scan, generate, patch) and mentions API cost considerations via the limit parameter. However, it does not disclose potential side effects like whether the operation is idempotent or if it logs changes, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a brief header and numbered steps. It is concise, with no redundant sentences, though the bullet list could be more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should clarify the return value (e.g., count of repaired entries or success status). It does not, leaving an agent uncertain about what to expect after 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 coverage is 100%, so the baseline is 3. The description adds minor context beyond the schema, explaining that the limit parameter 'keeps API costs predictable', but does not significantly enhance understanding of 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 repairs ledger entries missing vector embeddings, with a specific verb 'repair' and resource 'ledger entries'. It distinguishes from siblings like session_backfill_links and session_compact_ledger.
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 context: 'Run this periodically or after known API outages'. It does not specify when not to use, but the guidance is clear and actionable for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_backfill_linksA
Retroactively create graph edges (memory links) for all existing entries in a project. This builds the associative memory graph from your existing session history.
Three strategies are run:
Temporal Chaining: Links consecutive entries within the same conversation
Keyword Overlap: Links entries sharing ≥3 keywords (bidirectional)
Provenance: Links rollup summaries to their archived originals
All strategies use INSERT OR IGNORE — safe to re-run multiple times.
When to use: Run once after upgrading to v6.0 to populate the graph for existing memories. New entries are auto-linked on save (no manual action needed).
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project to backfill links for. Required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses INSERT OR IGNORE behavior (safe to re-run), three strategies, and retroactive nature. However, it could mention potential performance impact on large projects or if it locks the database, but overall transparent for a low-risk 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?
Description is well-structured with sections: purpose, strategies, safety note, when to use. Every sentence adds value, no fluff. Concise but informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required param, no output schema), the description fully explains what the tool does, how it works (three strategies), safety (INSERT OR IGNORE), and when to use it. Contextually complete for an agent to decide and invoke.
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 one parameter 'project' with full schema coverage. The description does not add new semantics beyond the schema; it merely restates the purpose. With high schema coverage, baseline score of 3 is appropriate.
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 verb 'retroactively create graph edges (memory links)' and specifies it operates on all existing entries in a project. It distinguishes from auto-linking on save and from sibling tools like session_synthesize_edges by mentioning 'backfill' and 'after upgrading to v6.0'.
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 'When to use' section: 'Run once after upgrading to v6.0 to populate the graph for existing memories. New entries are auto-linked on save (no manual action needed).' Provides clear context and when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_cognitive_routeB
Resolve an HDC compositional state into a nearest semantic concept with policy-gated routing. Returns concept, confidence, distance, ambiguity, convergence steps, and route outcome. Use this for explainable cognitive recall decisions in v6.5.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | Role concept key used for transition binding. | |
| state | Yes | Current state concept key (e.g. 'State:ActiveSession'). | |
| action | Yes | Action concept key used for transition binding. | |
| explain | No | If true, include expanded explainability details in the response. Default: true. | |
| project | Yes | Project identifier. | |
| clarify_threshold | No | Optional route clarify threshold override (0 <= fallback < clarify <= 1). | |
| fallback_threshold | No | Optional route fallback threshold override (0 <= fallback < clarify <= 1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. While it mentions 'resolve' and lists return fields, it does not clarify whether the operation is read-only or has side effects, nor does it disclose authorization needs or rate limits. This is insufficient for a tool with no 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 three sentences long, front-loaded with the core action and output, and each sentence serves a purpose. No extraneous words or 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 tool has 7 parameters and no output schema. The description lists the return fields, which helps, but it lacks details on the routing algorithm, how thresholds interact, and whether the operation is safe. It is adequate but leaves gaps for an agent to fully understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds context about 'policy-gated routing' and 'explainable', which indirectly relates to parameters like 'explain' and thresholds, but it does not add specific parameter-level meaning beyond what the schema already provides.
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: resolving an HDC compositional state into a nearest semantic concept with policy-gated routing. It specifies the return fields. However, it does not explicitly differentiate from sibling tools, so it's slightly below a perfect score.
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 advises using this tool for 'explainable cognitive recall decisions in v6.5', which provides context. But it lacks when-not-to-use scenarios or alternative tools, resulting in only implied usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_compact_ledgerA
Auto-compact old session ledger entries by rolling them up into AI-generated summaries. This prevents the ledger from growing indefinitely and keeps deep context loading fast.
How it works:
Finds projects with more entries than the threshold
Summarizes old entries using Gemini (keeps recent entries intact)
Inserts a rollup entry and archives the originals (soft-delete)
Use dry_run=true to preview what would be compacted without executing.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, only preview what would be compacted without executing. Default: false. | |
| project | No | Optional: compact a specific project. If omitted, auto-detects all candidates. | |
| threshold | No | Minimum entries before compaction triggers (default: 50). | |
| keep_recent | No | Number of recent entries to keep intact (default: 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully discloses behavior: it uses Gemini for summarization, archives originals with soft-delete, and keeps recent entries intact. The step-by-step explanation and mention of dry_run preview add transparency. However, it does not cover failure modes or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a single-sentence overview, a clear bulleted list of how it works, and a practical tip. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, the description does not specify the return format, which would be helpful for a summarization tool. However, it adequately covers behavior, parameters, and a preview option, making it fairly complete for selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not elaborate on parameter details beyond mentioning dry_run in the usage note. The schema already describes each parameter, and the description adds minimal additional meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'auto-compact old session ledger entries by rolling them up into AI-generated summaries.' It uses specific verbs ('compact', 'roll up') and identifies the resource ('old session ledger entries'), distinguishing it from siblings like session_save_ledger or session_backfill_links.
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 a clear usage hint: 'Use dry_run=true to preview without executing,' which guides the agent on when to use preview mode. While it does not explicitly state when not to use the tool or compare to alternatives, the steps and context imply it is for maintenance to prevent ledger growth.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_detect_driftA
Detect whether the current agent session has semantically drifted from its original goal. Scores recent ledger entries against the goal using synalux's HRR embedding stack (GloVe → Gemini/Voyage → cosine similarity), then runs the rolling-window drift detector algorithm.
Triggers:
goal-drift— cumulative alignment loss is high and monotonic (not random tangents)context-collapse— average output quality has dropped below floor
Pre-warning:
quality-degrading— quality slope steeply negative before collapse
Returns: drifted, reason, warning, drift_score (0..1), goal_alignment, quality_avg, sample_count, adaptive_threshold, recommendation.
Use alongside GATE 5 (60-minute drift check): call this tool instead of session_cognitive_route for goal-alignment drift detection.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | The original session goal — the task you started this session to accomplish. Used as the semantic reference vector. Be specific: 'implement drift detection for prism-mcp' is better than 'work on prism'. | |
| domain | No | Optional domain for domain-specific drift signals. 'coder' adds file_entropy, summary_vagueness, test_coverage_ratio, trajectory_divergence. 'bcba' adds clinical_specificity, function_aligned, contraindication_safe (requires behavior_functions, contraindications, client_descriptors params). 'aac' is reserved for future AAC prediction drift (use the AAC-specific endpoint instead). | |
| project | Yes | Project identifier. Must match the project used in session_save_ledger. | |
| window_hours | No | How many hours of ledger history to evaluate. Default 1. Range 0.083–24 (5 min to 24 h). | |
| assessment_type | No | BCBA domain only: assessment instrument name (e.g. 'vb-mapp', 'vineland', 'ablls-r'). | |
| conversation_id | No | Optional. Session key (same id used in session_load_context). When provided, resets the server-side drift timer for this conversation. | |
| contraindications | No | BCBA domain only: known medical conditions (e.g. ['epilepsy', 'pica']). | |
| behavior_functions | No | BCBA domain only: identified behavior functions for this client (e.g. ['escape-maintained', 'attention-maintained']). | |
| client_descriptors | No | BCBA domain only: client-specific terms to check for specificity (e.g. ['7-year-old', 'aggression at transitions']). | |
| min_directional_ratio | No | Directional ratio floor for the tremor filter (0..1). Random topic tangents that return to the goal are suppressed below this threshold. Default 0.2. Set to 0 to disable filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains the algorithm and return values but does not disclose side effects, permissions, rate limits, or error conditions. It implies a read operation but does not explicitly confirm safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections: purpose, triggers, pre-warning, returns. Each sentence adds value. Slightly long but no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers detection logic, triggers, return fields, parameters, and usage. Lacks details on error handling and performance, but sufficient for selection among siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed property descriptions. The tool description adds extra context (e.g., specificity recommendation for goal, domain-specific signals), improving understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool detects semantic drift from the original goal using specific methods. It distinguishes itself from sibling tool 'session_cognitive_route' by explicitly saying to call this tool instead for goal-alignment drift detection.
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 triggers (goal-drift, context-collapse) and pre-warning (quality-degrading). It gives direct usage guidance: 'Use alongside GATE 5... call this tool instead of session_cognitive_route for goal-alignment drift detection.' This tells when and 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.
session_export_memoryA
Export all of a project's memory to a local file. Fulfills GDPR Article 20 (Right to Data Portability) and the 'local-first' portability promise.
What is exported:
All session ledger entries (summaries, decisions, TODOs, file changes)
Current handoff state (live project context)
System settings (API keys are "REDACTED" for security)
Visual memory index (descriptions, captions, timestamps; not the raw files)
Formats:
json— machine-readable, suitable for import into another Prism instancemarkdown— human-readable, ideal for static archivingvault— Prism-Port: exports a compressed.zipof interrelated Markdown files with proper Obsidian/Logseq YAML frontmatter and[[Wikilinks]]
⚠️ Output directory must exist and be writable. Filenames are auto-generated: prism-export-<project>-<date>.(json|md|zip)
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Export format: 'json' (single file), 'markdown' (single human doc), 'vault' / 'obsidian' / 'logseq' (zip with wikilinked .md files + YAML frontmatter — drop into your PKM vault). Default: json. | json |
| project | No | Project to export. If omitted, exports ALL projects into separate files. | |
| output_dir | Yes | Absolute path to the directory where the export file(s) will be written. Must exist and be writable. Example: '/Users/admin/Desktop'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses what is exported, including redaction of API keys, file format details, and a prerequisite warning about output directory existence and writability. This provides comprehensive behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections and lists, but slightly verbose. All sentences add value, but some redundancy could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description thoroughly covers what is exported, formats, and operational constraints (directory must exist, auto-generated filenames). It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description enriches each parameter: it explains format variations in detail, clarifies default and project omission behavior, and gives an absolute path example for output_dir.
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 'Export' and resource 'memory' with clear scope 'of a project's memory to a local file'. It uniquely identifies the tool's purpose among siblings like session_load_context or session_save_handoff.
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 ties usage to GDPR Article 20 and 'local-first' portability, providing clear context. It does not explicitly state when to avoid using it or name alternative tools, but the context is sufficient for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_forget_memoryA
Forget (delete) a specific memory entry by its ID. Supports two modes:
Soft delete (default): Tombstones the entry — it stays in the database for audit trails but is excluded from all search results. Reversible.
Hard delete: Permanently removes the entry from the database. Irreversible. Use only when GDPR Article 17 requires complete erasure.
⚠️ Soft delete is recommended for most use cases. The entry can be restored in the future if needed.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional GDPR Article 17 justification for the deletion. Examples: 'User requested', 'Data retention policy', 'Outdated information'. Stored alongside the tombstone for audit trail purposes. | |
| memory_id | Yes | The UUID of the memory (ledger) entry to forget. You can find this ID in search results returned by session_search_memory or knowledge_search. | |
| hard_delete | No | If true, permanently removes the entry (irreversible). If false (default), soft-deletes by setting deleted_at timestamp. Soft-deleted entries are excluded from searches but remain in the database. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses both modes: soft delete tombstones entries (reversible, excluded from search), hard delete removes permanently (irreversible). It also explains audit trail implications and GDPR 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 concise (6 sentences), front-loaded with the core action, uses markdown for emphasis, and every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 3 parameters and no output schema, the description comprehensively covers purpose, modes, usage guidelines, and behavioral transparency. An agent has all needed information to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds no extra semantic detail beyond the schema for parameters like reason, memory_id, and hard_delete.
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 forgets (deletes) a specific memory entry by ID, and distinguishes between soft and hard delete modes. This differentiates it from sibling tools like session_search_memory or session_save_ledger.
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 recommends soft delete for most cases and specifies hard delete only for GDPR Article 17 compliance. This provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_health_checkA
Run integrity checks on the agent's memory (like fsck for filesystems). Scans for missing embeddings, duplicate entries, orphaned handoffs, and stale rollups.
Checks performed:
Missing embeddings — entries that can't be found via semantic search
Duplicate entries — near-identical summaries wasting context tokens
Orphaned handoffs — handoff state with no backing ledger entries
Stale rollups — compaction artifacts with no archived originals
Use auto_fix=true to automatically repair missing embeddings and clean up orphans.
| Name | Required | Description | Default |
|---|---|---|---|
| auto_fix | No | If true, automatically repair issues (backfill embeddings, remove orphaned handoffs). Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that integrity checks are run and that auto_fix=true will mutate state (backfill embeddings, remove orphans). It does not detail rollback or impact on unrelated data, but covers the main behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a summary sentence, a bulleted list of checks, and a final line about auto_fix. Every sentence adds 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 diagnostic tool with one optional parameter, the description covers the checks and the effect of auto_fix. However, it lacks information about output (e.g., report or success message) and could mention if the checks are read-only by default. Overall sufficient given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and schema describes auto_fix as boolean with default false. The description adds value by specifying what 'repair' entails (backfill embeddings, remove orphaned handoffs), which goes beyond the schema's text.
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 'Run integrity checks on the agent's memory' and lists four specific checks (missing embeddings, duplicate entries, orphaned handoffs, stale rollups). This distinguishes it from sibling tools like 'maintenance_vacuum' or 'session_compact_ledger' by focusing on health diagnosis.
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 what checks are performed and when auto_fix=true can be used to repair issues. However, it does not explicitly state when not to use this tool or suggest alternatives among siblings, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_load_contextA
Load session context for a project using progressive context loading. Use this at the START of a new session to recover previous work state. Three levels available:
quick: Just the latest project state — keywords and open TODOs (~50 tokens)
standard: Project state plus recent session summaries and decisions (~200 tokens, recommended)
deep: Everything — full session history with all files changed, TODOs, and decisions (~1000+ tokens)
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Optional. Agent role for Hivemind scoping (e.g., 'dev', 'qa', 'pm'). Omit to let the server auto-resolve from dashboard settings. When set, also injects active_team roster. | |
| level | No | How much context to load: 'quick' (just TODOs), 'standard' (recommended — includes recent summaries), or 'deep' (full history). Default: standard. | |
| prompt | No | Optional. User prompt text for keyword-triggered skill loading. When provided, the server matches against prompt_keywords in the routing table and loads additional skills. Fires on every call — enables mid-session re-routing when the user's focus changes. | |
| project | Yes | Project identifier to load context for. | |
| max_tokens | No | Maximum token budget for context response. Uses 1 token ≈ 4 chars heuristic. When set, the response is truncated to fit within the budget. Default: unlimited. | |
| toolAction | Yes | Brief 2-5 word summary of what this tool is doing. Capitalize like a sentence. | |
| toolSummary | Yes | Brief 2-5 word noun phrase describing what this tool call is about. | |
| conversation_id | No | Optional. Session key for this conversation (same id used in session_save_ledger). When provided, marks the session as context-loaded server-side so project-scoped tools can verify working context without relying on hook-based enforcement. Required on non-Claude hosts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must bear the full burden. It discloses three context loading levels with token costs and mentions progressive loading. However, it does not detail permissions, side effects, or whether it modifies state (likely not, as it's loading).
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, front-loaded with the main purpose, and uses a bulleted list for the three levels. Every sentence adds value without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (progressive loading, multiple parameters, enum), the description covers the main use case and token budgets. It lacks an output schema but mentions truncation behavior, making it sufficient for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds some value by explaining the three levels in narrative form and recommending 'standard', but the schema already describes each parameter adequately. The description does not significantly supplement parameter meaning beyond what the schema provides.
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 loads session context for a project using progressive context loading. It specifies it should be used at the start of a new session to recover previous work state, distinguishing it from siblings like session_save_ledger or session_compact_ledger.
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 to use this at the START of a new session and recommends the 'standard' level. It provides clear context but does not explicitly state when not to use it or mention alternatives among the many sibling session tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_save_experienceA
Record a typed experience event. Unlike session_save_ledger (flat logs), this captures structured behavioral data for pattern detection.
Event Types:
correction: Agent was corrected by user
success: Task completed successfully
failure: Task failed
learning: New knowledge acquired
validation_result: Verification sandbox passed or failed
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Optional. Agent role for Hivemind scoping. Omit to let the server auto-resolve from dashboard settings. | |
| action | Yes | What action was tried. | |
| context | Yes | What the agent was doing when the event occurred. | |
| outcome | Yes | What happened as a result. | |
| project | Yes | Project identifier. | |
| correction | No | What should have been done instead (for correction type). | |
| event_type | Yes | Type of behavioral event. | |
| confidence_score | No | Agent's confidence in the outcome (1-100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It explains the nature of events but omits details on side effects, authentication needs, idempotency, or error handling, which are important for a mutation tool.
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?
Very concise with a clear structure: a title, a contrast sentence, and a succinct bullet list of event types. No superfluous 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?
Given 8 parameters (5 required) and no output schema, the description adequately explains purpose and differentiation but fails to mention what the tool returns or any post-conditions, leaving some 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?
With 100% schema description coverage, baseline is 3. The description adds value by elaborating on event types and their meaning, supplementing the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records typed experience events and explicitly distinguishes it from the sibling tool 'session_save_ledger' by contrasting flat logs with structured behavioral data.
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 clear context on when to use this tool (for structured behavioral data and pattern detection) and contrasts it with a specific sibling, implying when not to use it. It lacks explicit exclusion criteria for other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_save_handoffA
Upsert the latest project handoff state for the next session to consume on boot. This is the 'live context' that gets loaded when a new session starts. Calling this replaces the previous handoff for the same project (upsert on project).
v5.4 CRDT Merge: On version conflict, a CRDT OR-Map engine automatically merges your changes with concurrent work (Add-Wins OR-Set for arrays, Last-Writer-Wins for scalars). Pass expected_version to enable concurrency control.
v0.4.0 OCC: If you received a version number from session_load_context, /resume_session prompt, or memory resource attachment, you MUST pass it as expected_version to prevent overwriting another session's changes.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Optional. Agent role for Hivemind scoping (e.g., 'dev', 'qa', 'pm'). Omit to let the server auto-resolve from dashboard settings. | |
| project | Yes | Project identifier — must match the project used in session_save_ledger. | |
| open_todos | No | Current open TODO items that need attention in the next session. | |
| key_context | No | Free-form critical context the next session needs to know. | |
| last_summary | No | Summary of the most recent session — used for quick context recovery. | |
| active_branch | No | Git branch or context the next session should resume on. | |
| disable_merge | No | Set to true to disable automatic CRDT merging and fail strictly on version conflict (original OCC behavior). Default: false. | |
| conversation_id | No | Optional. Session key for this conversation (same id used in session_load_context). When provided, the server verifies that session_load_context was called for this conversation before accepting the write. | |
| expected_version | No | v0.4.0: The version number you received when loading context. Pass this to enable optimistic concurrency control. If omitted, version check is skipped (backward compatible). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: upsert semantics, CRDT merge, OCC, version control, disable_merge, and conversation_id verification. It clearly explains what happens on version conflict and the concurrency control mechanisms.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for CRDT and OCC, and the main purpose is front-loaded. It is slightly verbose but every sentence adds value, making it appropriately concise for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters and no output schema, the description covers the behavioral and parameter usage thoroughly. However, it does not describe the return value (e.g., success or version number), which slightly limits completeness for an upsert operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the role auto-resolution, the necessity of expected_version when a version number is known, and the effect of disable_merge. This goes beyond the schema's basic 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 'Upsert the latest project handoff state for the next session to consume on boot,' specifying the verb, resource, and context. It distinguishes from sibling tools like session_load_context by focusing on saving state.
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 mentions when to use (after a session to save context for next boot) and provides conditions for expected_version. However, it does not explicitly mention when not to use or list alternative tools, which would raise it to a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_save_imageA
Save a local image file into the project's permanent visual memory. Use this to remember UI states, diagrams, architecture graphs, or bug screenshots. The image is copied into Prism's media vault and indexed in the handoff metadata. On the next session_load_context, the agent will see a lightweight index of available images.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project identifier — must match an existing project. | |
| file_path | Yes | Absolute or relative path to the image file (png, jpg, jpeg, webp, gif, svg). | |
| description | Yes | What does this image show? Used for indexing and context display. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. It explains that the image is copied into Prism's media vault, indexed in handoff metadata, and becomes visible on the next session_load_context. This sufficiently discloses the tool's effects and downstream behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences and no fluff. The purpose is front-loaded in the first sentence. Every sentence provides unique, actionable information without 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?
No output schema; the description explains the post-save lifecycle (media vault storage, indexing, visibility on next context load). Given the tool's simplicity and the presence of a sibling for viewing (session_view_image), the description is fully 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 100%, so the description adds value beyond structural details. For the description parameter, it clarifies purpose ('What does this image show? Used for indexing'). For file_path, it repeats 'absolute or relative path' from the schema but reinforces the accepted formats. This adds helpful context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a clear verb+resource ('Save a local image file into the project's permanent visual memory') and enumerates specific use cases (UI states, diagrams, architecture graphs, bug screenshots). This differentiates it from siblings like session_save_experience or session_save_handoff.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('Use this to remember UI states, diagrams...'). It does not explicitly state alternatives or exclusions, but the sibling list includes session_view_image (viewing) and session_save_experience (saving experiences), so usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_save_ledgerA
Save an immutable session log entry to the session ledger. Use this at the END of each work session to record what was accomplished. The ledger is append-only — entries cannot be updated or deleted. This creates a permanent audit trail of all agent work sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Optional. Agent role for Hivemind scoping (e.g., 'dev', 'qa', 'pm'). Omit to let the server auto-resolve from dashboard settings. | |
| todos | No | Optional list of open TODO items remaining after this session. | |
| project | Yes | Project identifier (e.g. 'bcba-private', 'my-app'). Used to group and filter sessions. | |
| summary | Yes | Brief summary of what was accomplished in this session. | |
| decisions | No | Optional list of key decisions made during this session. | |
| files_changed | No | Optional list of files created or modified during this session. | |
| conversation_id | Yes | Unique conversation/session identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses critical behaviors: immutability, append-only nature, inability to update/delete, and permanent audit trail. This is exemplary transparency for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, each adding value: purpose, usage context, and behavioral constraints. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description sufficiently covers return behavior implicitly. It explains the ledger's permanence and usage timing, but could optionally mention indexing or confirmation. Overall, very complete for a save operation.
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?
Input schema has 100% coverage with clear descriptions for all 7 parameters. The description does not add additional parameter semantics beyond what the schema already provides, meeting the baseline.
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 saves an immutable session log entry to the session ledger, differentiating it from sibling tools like session_save_experience or session_compact_ledger. It uses specific terms like 'session ledger' and 'audit trail', making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises use 'at the END of each work session', providing clear context. It does not list alternatives or when not to use, but the timing instruction is strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_search_memoryA
Search session history semantically (by meaning, not just keywords). Uses vector embeddings to find sessions with similar context, even when the exact wording differs. Requires pgvector extension in Supabase.
Complements knowledge_search (keyword-based) — use this when keyword search returns no results or when the query is phrased differently from stored summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return (default: 5, max: 20). | |
| query | Yes | Natural language search query describing what you're looking for. | |
| project | No | Optional: limit search to a specific project. | |
| activation | No | Configuration for ACT-R inspired Spreading Activation. Use this to find structurally related memories beyond direct semantic/keyword hits. | |
| enable_trace | No | If true, returns a separate MEMORY TRACE content block with search strategy, latency breakdown (embedding vs storage), and scoring metadata. Default: false. | |
| context_boost | No | If true, appends current project and working context to the search query before embedding generation, naturally biasing results toward contextually relevant memories. Useful when searching within a specific project context. Default: false. | |
| similarity_threshold | No | Minimum similarity score 0-1 (default: 0.7). Higher = more relevant, fewer results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description discloses the semantic search mechanism, vector embedding usage, and optional trace feature. It does not explicitly state read-only behavior, but that is implied. Overall, it provides good behavioral context beyond the bare minimum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with purpose and mechanism, followed by prerequisites and usage guidance. Every sentence adds value with no redundant or unnecessary 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 explains purpose, mechanism, and usage well but does not describe the return format or structure of results. Given that there is no output schema, a brief note on what the tool returns would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds valuable context for parameters like activation (ACT-R spreading activation) and context_boost (biasing toward contextual relevance), enhancing understanding beyond the schema definitions.
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 searches session history semantically using vector embeddings, distinguishing from keyword-based search. The verb 'Search' and resource 'session history' are specific and 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?
Explicitly tells when to use this tool vs the sibling `knowledge_search` (keyword-based) — use when keyword search fails or query phrasing differs. Also mentions requirement of pgvector extension, providing clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_synthesize_edgesA
Step 3A Edge Synthesis: Scans recent project entries with embeddings, finds high-similarity but currently disconnected entries, and creates inferred links as 'synthesized_from'.
On-Demand Graph Enrichment: Use this tool periodically to discover semantic relationships between structurally disconnected memory nodes. It batch processes the newest active entries.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project identifier. | |
| max_entries | No | Maximum number of recent entries to scan as sources. Default: 50. Max cap: 50. | |
| randomize_selection | No | If true, randomly sample active entries instead of taking the newest (default false). Ideal for wide-coverage background sweeps. | |
| similarity_threshold | No | Minimum cosine similarity score (0.0 to 1.0) to create a link. Default: 0.7. | |
| max_neighbors_per_entry | No | Maximum number of links to synthesize per source entry. Default: 3. Max cap: 5. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains the scanning, similarity detection, and link creation process, but does not disclose whether it modifies existing links, destroys data, or requires specific permissions. It could be more transparent about side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short paragraphs. The first explains the process, the second provides usage guidance. Every sentence adds value with no 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 purpose and usage context but lacks details on return values, error handling, and prerequisites (e.g., existence of embeddings). Given no output schema, more completeness would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description adds value by explaining that max_entries relates to 'recent' entries and that randomize_selection is for wide-coverage sweeps, enhancing meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it synthesizes edges by scanning recent entries, finding similar but disconnected entries, and creating inferred links. It uses specific verbs and resource terms, and the 'Step 3A' labeling distinguishes it from other tools like session_backfill_links.
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 recommends using the tool periodically for discovering semantic relationships, providing clear context for when to use it. However, it does not mention when not to use it or direct comparisons to alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_view_imageA
Retrieve an image from visual memory using its ID. Returns the image as Base64 inline content for the LLM to analyze. Use session_load_context first to see available image IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project identifier. | |
| image_id | Yes | The short image ID (e.g., '8f2a1b3c') from the visual memory index. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description discloses the return format (Base64 inline content) for LLM analysis, which is sufficient for understanding the tool's behavior, though no limits or side effects are mentioned.
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 with no wasted words, efficiently conveying purpose, output, and prerequisite.
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?
No output schema, but description explains return value; covers essentials for a simple retrieval tool with clear dependency hint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds example '8f2a1b3c' for image_id, clarifying it's a short ID from the memory index, adding value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves an image by ID and returns it as Base64 inline content, distinguishing it from sibling tools that save or search memory.
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 directs users to first use 'session_load_context' to see available image IDs, providing clear context for when to use this tool, though no explicit when-not criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_behaviorA
Call BEFORE editing behavioral source files (API routes, ordering logic, billing, auth, migrations). Returns a domain-specific scenario you must answer to demonstrate understanding of the end-user impact. Example: editing a KDS route returns 'A cook has a 3-item ticket. One item is voided. What should the cook see?' Answer the scenario concretely before proceeding with the edit.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project identifier for workspace-scoped scenarios. | |
| file_path | Yes | Path of the file about to be edited. | |
| workspace_id | No | Optional workspace ID for custom scenarios. | |
| change_summary | Yes | Brief description of the intended change. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description explains the tool returns a scenario and requires an answer, but does not explicitly state if it's read-only or has other side effects. Still adds significant behavioral context beyond 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?
Description is very concise (2 sentences + example) with no extraneous information. Critical usage instruction and example are front-loaded.
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 verification tool, description fully explains the workflow: call before editing, receive a scenario, answer concretely. No output schema needed as return type is described.
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?
Input schema covers all 4 parameters with descriptions. Description adds no new parameter-specific details beyond the schema, but the overall context helps clarify usage. Schema coverage is 100%, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool should be called before editing behavioral source files and provides a specific example, distinguishing it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('BEFORE editing behavioral source files') and what to do after ('Answer the scenario concretely'), with a clear alternative: not editing behavioral files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have clearly distinct purposes, with detailed descriptions clarifying their roles. However, there is some overlap between search-related tools (e.g., brave_web_search, brave_local_search, brave_answers) and multiple memory search tools (knowledge_search, session_search_memory, query_memory_natural), which could cause minor confusion. Overall, the ambiguity is low.
Naming follows a mostly consistent snake_case pattern with verb_noun or noun_verb combinations (e.g., backup_database, knowledge_search). There are some variations like 'gemini_research_paper_analysis' and 'deep_storage_purge', but they are still readable and predictable. The pattern is largely coherent, earning a score of 4.
With 37 tools, the server is well above the recommended range for good coherence. While each tool has a distinct function, the sheer number can overwhelm an agent and makes it harder to quickly understand the full capability set. The scope is broad, but the count feels excessive for a single server.
The tool set covers a wide array of operations for memory, session, and knowledge management, including search, backups, notifications, and maintenance. There are minor gaps (e.g., no direct memory update tool, no project listing), but the core workflows are well-supported. The surface is fairly comprehensive for the intended domain.
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
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Cloud-hosted MCP server for durable AI memory
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceA sophisticated MCP server providing advanced memory capabilities with RAG, hallucination detection, and enterprise-grade AI infrastructure for intelligent agent ecosystems.
- AlicenseAqualityDmaintenanceEnables creating, managing, analyzing, and visualizing knowledge graphs with support for multiple graph types (topology, timelines, changelogs, requirements, knowledge bases, ontologies) including node/edge management and resource association.15221MIT
- AlicenseBqualityCmaintenanceProduction-grade, autonomous Model Context Protocol (MCP) server that elevates AI models from stateless code generators into persistent, self-verifying software engineers.211MIT
- AlicenseNot gradedqualityDmaintenanceProduction-ready MCP server enabling LLM text generation, template management, context-aware conversations, and memory storage with enterprise quality assurance.212MIT
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/dcostenco/prism-coder'
If you have feedback or need assistance with the MCP directory API, please join our Discord server