goldfish
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@goldfishdid we ever discuss the caching strategy?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
š Goldfish
Unified memory for AI coding agents. One MCP server, three tiers, no more guessing which tool remembers what:
āāāāāāāāāāāāāāāāāāāāāāāā
your agent āāāāŗ ā goldfish (MCP) ā
āāāāāāāāāāāā¬āāāāāāāāāāāā
ā
āāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāā
ā¼ ā¼ ā¼
āāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāā
ā brain ā ā claude-mem ā ā memory_notes ā
ā full history ā ā session context ā ā curated facts ā
ā cited search ā ā auto-compressed ā ā hand-written ā
ā (vendored) ā ā (vendored) ā ā (new) ā
āāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāāāāāāāThree different jobs, three different tools, one thing you actually call:
Tier | Tool | What it answers | Backing store |
Transcript history |
| "did we ever discuss X" ā cited, never hallucinated | brain-mcp's DuckDB + append-only JSONL lake |
Session context |
| "what was I just doing" ā recent auto-generated summaries | claude-mem's SQLite store (read-only) |
Curated notes |
| "what do we know about this user/project" ā small, hand-picked, durable | plain frontmatter markdown, this repo |
Everything |
| is each tier actually installed and healthy | aggregates all three |
Goldfish doesn't replace brain-mcp or claude-mem ā it vendors them as-is and gives you one server to point an agent at instead of three. See ATTRIBUTION.md for full upstream credit and licenses.
Noticing patterns (optional, and deliberately hands-off)
Goldfish can also help notice your own recurring patterns over time ā frustrations, habits, stated drives, things you keep saying you should do more or less of. The goal is that file is worth reading yourself: given enough real sessions, it should eventually surface something about your own patterns you hadn't consciously put together before. An agent using goldfish can also draw on it, when it's genuinely relevant, to let that shape how it talks to you ā but you reading it directly is just as much the point as any AI doing so. This isn't a hidden feature; here's exactly how it works and where the line is:
goldfish_reflectpulls raw, cited excerpts of things you've said (role="user"only ā never the agent's own words) across your full history. It runs a small default battery of angles (frustration, habit, drive, goal language), or one specificfocusyou give it.It never concludes anything itself ā no keyword-matched "you seem stressed" heuristics. Turning evidence into an actual observation is left to whichever LLM is using the tool, because that's the only part of this that requires real judgment.
If a pattern holds up across real evidence, the agent can write it with
goldfish_remember(type="insight", ...)ā a note type distinct from plainuserfacts specifically because insights are interpretive and should be revisited over time, not treated as settled truth.Every
insightnote also gets folded intoPERSONA.md, one evolving, plain-English document that accumulates everything noticed this way.goldfish_personareads it back in one call for an agent ā but it's just a markdown file at~/.goldfish/memory/PERSONA.md, so open it yourself whenever you want (uv run goldfish personaprints it straight to your terminal). That's exactly why it's held to a higher bar than a plain fact: tentative, cited, and meant to be pruned as it ages, never treated as a verdict ā it has to be worth you reading, not just an agent.Whether and when to draw on any of this ā
goldfish_reflect,goldfish_persona, or aninsightnote ā is left entirely to the calling agent's judgment. The server's own instructions say so explicitly: rare, well-placed, tied to real evidence, never a running commentary on who you are. Nothing here is forced into every response.Everything stays local.
PERSONA.mdand everyinsightnote live in the samememory_notesstore as everything else (~/.goldfish/memoryby default) ā never inside this repo, never committed, never sent anywhere.goldfish_reflectonly ever runs when an agent decides to call it; there's no background job scanning your history for this.
Don't want this at all? Just don't use goldfish_reflect, goldfish_persona,
or type="insight" ā everything else works exactly the same without it.
Related MCP server: bikky
Install
Paste this repo's link to Claude Code and say "use this" ā it'll run the installer itself. Or run it yourself:
curl -fsSL https://raw.githubusercontent.com/Vibes-lj/goldfish/master/install.sh | bashThat one command clones goldfish, syncs its Python env, turns on brain-mcp's
transcript-capture hooks for Claude Code, and registers goldfish as an MCP
server via claude mcp add ā restart Claude Code (or run /mcp) afterward
and the five tools below are live. Re-running it is safe (idempotent).
Prefer to wire it up by hand instead? See manual setup below.
claude-mem's own hooks/worker aren't installed by the script ā that's a
separate project with its own setup. goldfish_context just reads its
database read-only if you've already installed it yourself; see
packages/claude-mem/README.md.
Manual setup
git clone https://github.com/Vibes-lj/goldfish.git
cd goldfish
uv sync
uv run --directory packages/brain brain-mcp install cc # optional: transcript capture hooks
claude mcp add goldfish -s user -- uv run --directory "$(pwd)" goldfish serveOr hand-edit your MCP config (e.g. ~/.claude.json or a project .mcp.json):
{
"mcpServers": {
"goldfish": {
"command": "uv",
"args": ["run", "--directory", "/path/to/goldfish", "goldfish", "serve"]
}
}
}CLI
uv run goldfish status # health across all 3 tiers
uv run goldfish remember my-note "one-liner" --type project --content "..."
uv run goldfish recall --query "my-note"
uv run goldfish reflect --focus "decisions I keep reversing" # raw cited evidence, no synthesis
uv run goldfish persona # print the accumulated PERSONA.mdRepo layout
goldfish/
āāā goldfish/ # the unifying MCP server + CLI (new)
āāā memory_notes/ # curated-note store: frontmatter .md + index (new)
āāā packages/
ā āāā brain/ # vendored from mordechaipotash/brain-mcp (MIT)
ā āāā claude-mem/ # vendored from thedotmack/claude-mem (Apache-2.0)
āāā ATTRIBUTION.md
āāā LICENSE # MIT, covers goldfish/ + memory_notes/ onlyRoadmap
Rough priority order, none of this started yet unless marked:
One-command install (
install.shā clone, sync, hooks,claude mcp add)install.shalso registers goldfish for Codex (~/.codex/config.toml), not just Claude Codegoldfish uninstallā clean removal mirroringbrain-mcp uninstall(hooks, scheduler, MCP registration)Package goldfish as an installable Claude Code plugin (marketplace
.mcp.json+hooks.json) instead of raw MCP config editingOptional claude-mem auto-install path in
install.sh, for people who wantgoldfish_contextpopulated out of the boxgoldfish_remembercommitsmemory_notes/to a local git repo automatically, so curated notes get real version historySemantic (embedding) search over curated notes and recent context, not just brain's BM25 over raw transcript
Surface brain's other capture lanes (Cursor, ChatGPT, Pi) through
goldfish_statusmore prominently ā the data's already there, just under-exposedA small local dashboard to browse all three tiers side by side, for people who don't want to think in tool calls
goldfish_reflect+type="insight"ā cited evidence of the user's own recurring language, synthesized only by the calling agent, surfaced rarely and only in-contextLet
goldfish_reflectrun on an opt-in schedule instead of only when an agent calls it (still local-only, still no auto-surfacing)Auto-expire or flag stale
insightnotes so pattern-observations don't calcify into permanent "truth"
Have an idea or a use case this doesn't cover? Open an issue.
Why
Most setups end up with two or three memory tools installed for different reasons (a transcript recorder, a session-compression plugin, some markdown notes) and no single place to ask "what do we know." Goldfish is that single place ā a thin, honest layer on top of tools that already do the hard parts well.
Available Tools
7 toolsgoldfish_contextRecent session-compression summariesCRead-only
Recent session-compression summaries from claude-mem, if installed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe read. The description adds one genuinely useful behavioral fact beyond the annotations: the data source (claude-mem) and the conditional 'if installed', implying the tool may yield nothing on an unconfigured system. It stops short of describing ordering, freshness windows, or what an empty result means.
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?
A single short sentence with the source and the conditional caveat front-loaded; nothing is padded. It is efficient, though the brevity contributes to the gaps in purpose and parameter coverage rather than being a virtue in itself.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, so the main omissions are usage routing and parameter meaning. For a one-optional-parameter read tool this is minimally viable, but an agent still cannot tell how this differs from goldfish_recall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'limit' parameter, so the description carries the full burden and provides nothing. It never states that 'limit' bounds the number of summaries returned or what the default of 5 means in practice; 'recent' is the only sizing hint and it is vague.
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 phrase names the resource (session-compression summaries from claude-mem) but supplies no verb, leaving it ambiguous whether it lists, fetches, or filters them. It also does not distinguish itself from siblings like goldfish_recall or goldfish_search, which plausibly return similar memory 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?
The description gives no when-to-use guidance, no exclusions, and never names an alternative among the six siblings. The 'if installed' clause hints at a precondition but does not say when an agent should prefer this over goldfish_recall or goldfish_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
goldfish_personaPersona evaluation ā everything learned about the user so farARead-only
The cumulative persona file: every insight note, aggregated into one document.
Entirely optional and at your own discretion ā nothing requires you to call this or to use what it returns. It exists so a capable agent can occasionally draw on real, evidence-linked patterns about the user built up over goldfish_reflect calls over time ā to shape tone, or catch something worth mentioning ā the way a good long-term collaborator would.
Every entry traces back to cited evidence (see goldfish_reflect); nothing here is a diagnosis, and entries are meant to be revisited as they age, not treated as permanent truth. Use judgment about whether and when surfacing something from this file actually helps the user in the moment ā this is not a mandate to comment on who they are.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: entries are evidence-linked, explicitly 'not a diagnosis,' and meant to be revisited as they age ā framing the reliability and intent of the data the agent receives.
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?
Purpose is front-loaded in the opening sentence. A few sentences restate the discretionary nature of the call ('entirely optional,' 'at your own discretion,' 'nothing requires you to call this,' 'not a mandate'), which is mild redundancy, but the overall length is warranted for a tool whose entire value proposition is tonal/behavioral.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and with zero parameters there is no input surface to fill. The description supplies purpose, provenance, usage judgment, and behavioral framing ā everything an agent needs to decide whether and how to call 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 tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific resource ā a cumulative persona file aggregating insight notes into one document ā and explicitly ties it to goldfish_reflect as the source of the underlying entries. An agent can distinguish this retrieval tool from goldfish_reflect (which generates the insights) without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the call is 'entirely optional' and offers concrete conditions for use (shape tone, catch a pattern worth mentioning), plus the caveat not to treat surfaces as a mandate. It lacks an explicit when-NOT-to-use or a direct comparison to siblings like goldfish_recall or goldfish_context, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
goldfish_recallRead or search curated memory notesBRead-only
Read a curated memory note by name, or search/list curated notes.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| type | No | ||
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe read. The description adds essentially nothing beyond that ā no note on result limits, ordering, or what happens on a name miss. With annotations carrying the safety profile, this is adequate but thin.
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?
A single front-loaded sentence with no filler. It is arguably too terse for the ambiguity it needs to resolve, but nothing in it is wasted.
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?
An output schema exists, so return values need not be described, and the read-only annotation covers safety. Still, with 0% parameter description coverage and an unresolved overlap with goldfish_search, the definition leaves real gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the three parameters. It hints at 'name' and loosely at 'query' ('search/list'), but 'type' is never mentioned anywhere, leaving one of three parameters with zero 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?
States specific verbs (read, search, list) and a specific resource (curated memory notes), so the general purpose is clear. However, it does not differentiate itself from the sibling goldfish_search, and by using the word 'search' it actively blurs the boundary with that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies two modes ā lookup 'by name' vs 'search/list' ā which gives some usage signal. But it never says when to prefer this tool over goldfish_search or goldfish_context, leaving a genuine ambiguity for an agent choosing among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
goldfish_reflectGather raw cited evidence of the user's own recurring languageARead-only
Evidence for behavioral/preference patterns ā never this tool's own conclusion.
Searches role='user' only (their words, not the agent's) across full transcript
history via brain. Pass focus for one specific angle (e.g. "decisions I keep
reversing"); omit it to run a default battery covering frustration, habit, drive,
and goal language.
This tool does not diagnose, summarize, or conclude anything about the user ā it hands back excerpts with citations, same as goldfish_search. Turning that into an actual observation ā and judging whether it's even worth keeping ā is the calling agent's job. If a real pattern shows up across multiple citations, write it with goldfish_remember(type="insight", ...), phrased as tentative pattern-noticing anchored to the evidence, never as a firm psychological claim. Mention it in conversation rarely, only when it's genuinely useful in the moment ā this is not a running personality commentary.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | ||
| limit_per_query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only grant readOnlyHint=true; the description adds substantial context beyond that ā restricting to role='user' words, spanning full history via brain, and explicitly disclaiming that it does not diagnose, summarize, or conclude. This is exactly the 'what it does not do' information annotations cannot carry.
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?
Front-loaded with the core scope and the non-conclusion disclaimer, then usage guidance. Slightly long and the downstream workflow caveat borders on instruction creep, but every sentence carries actionable 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?
An output schema exists, so return-value explanation is unnecessary. Given the read-only annotations, the description covers scope, the focus/omit behavior, and the intended follow-up workflow, leaving no material gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It fully explains `focus` (a single angle vs. default battery of frustration/habit/drive/goal), but does not describe `limit_per_query`, leaving one of two parameters undocumented. Strong partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ā searches the user's own role='user' language across full transcript history to return cited evidence. It explicitly positions itself against siblings by noting it behaves 'same as goldfish_search' in returning excerpts, while previewing the downstream goldfish_remember step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (behavioral/preference pattern evidence), when to pass `focus` (one specific angle) vs. omit it (default battery), and even prescribes downstream handling: write with goldfish_remember as tentative pattern-noticing and mention rarely. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
goldfish_rememberWrite a curated, durable memory noteA
Write a curated, durable memory note (user/feedback/project/reference/insight).
Use this for facts worth carrying into future sessions ā not for raw transcript (that's captured automatically by brain) or session summaries (that's claude-mem's job) ā only hand-picked, still-true facts.
type="insight" is for tentative, evidence-linked pattern observations about the user (see goldfish_reflect) ā distinct from type="user" (settled facts) because insights are interpretive and should be revisited/pruned over time, not treated as permanent truth.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| content | Yes | ||
| description | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden; it does disclose the durability/lifecycle semantics (insights are tentative and should be revisited/pruned, unlike settled user facts) and points to goldfish_reflect for provenance. It does not cover write behavior such as deduplication/overwrite or permission prerequisites, leaving a gap 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?
Front-loaded with the core action and the type enumeration, then layered guidance. Dense and purposeful, though the final paragraph on insight/user distinction is somewhat verbose relative to the value it adds.
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?
Output schema exists so return values need no explanation, and the description handles routing and the trickiest parameter value (`type`) well. The remaining gap is the absence of any semantics for the other three required parameters on a write tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with four required params, so the description must compensate. It supplies the meaningful value set for `type` and explains the insight-vs-user distinction, but says nothing about `name`, `content`, or `description`, which remain undocumented in both description and 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?
States a specific verb+resource ('Write a curated, durable memory note') and immediately names the categorization scheme (user/feedback/project/reference/insight). It also positions the tool against non-siblings (brain for raw transcript, claude-mem for summaries), so an agent can distinguish it from surrounding memory 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 when-to-use ('facts worth carrying into future sessions') and when-not-to-use with named alternatives ('not raw transcript ā brain', 'not session summaries ā claude-mem'), plus a quality bar ('hand-picked, still-true facts'). This is textbook routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
goldfish_searchSearch full transcript history (cited or abstained)BRead-only
Search full AI conversation history (Claude Code, Codex, etc.) via brain-mcp.
Every result is a citation (file, line span, sha256) verifiable with the underlying brain-mcp toolset ā never a synthesized/paraphrased claim.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | ||
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description's guarantee that every result is a citation (file, line span, sha256) verifiable via the underlying brain-mcp toolset ā never synthesized or paraphrased ā is a real behavioral contract beyond the safety hint. It does not mention ranking, ordering, or pagination behavior, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action; the citation guarantee follows immediately. Nothing is padded, though the trailing clause about the brain-mcp toolset is slightly redundant with the opening mention.
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?
An output schema exists, so return structure need not be explained, and the citation claim partially covers result semantics. However, the absence of sibling routing and of any documentation for agent/limit leaves an agent under-equipped for a 3-parameter tool in a crowded family.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning and it does not. The agent filter and the limit (default 10) parameters are entirely undocumented in both schema and description; only the obvious 'query' string is inferable.
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?
Names a specific verb (Search) and resource (full AI conversation history) and scopes it to sources like Claude Code and Codex via brain-mcp. It does not differentiate from siblings such as goldfish_recall or goldfish_context, so an agent cannot tell from the description alone which of the family to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no exclusions are given. With six siblings in the same family (recall, context, remember, reflect, persona, status) the description offers nothing about which situations select search over recall or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
goldfish_statusHealth across all three memory tiersBRead-only
Health summary across all three memory tiers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe, non-mutating read, so the safety profile is covered. The description adds only the scope fact (three tiers) and says nothing about cost, freshness, or whether the check probes live backends versus returning cached health.
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?
A single front-loaded sentence with no filler ā appropriately sized for a trivial no-argument status call, though it is essentially a noun phrase rather than a sentence with an action verb.
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?
An output schema exists, so return-value detail belongs there, and with no parameters the only burden is stating what the call reports ā which it does (health across three memory tiers). It stops just short of explaining what 'health' means or why an agent should check 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 tool takes zero parameters, so the baseline of 4 applies; there is no argument semantics for the description to clarify or omit.
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?
Names a specific resource (health/status) and its scope (all three memory tiers), which no sibling covers ā goldfish_search, goldfish_remember, etc. are all distinct operations. It is distinguishable from siblings, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus alternatives such as goldfish_context or goldfish_recall, nor any stated trigger (e.g., diagnostics before recovery). The agent must infer the use case entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.0- First observed
goldfish_context - First observed
goldfish_persona - First observed
goldfish_recall - First observed
goldfish_reflect - First observed
goldfish_remember - First observed
goldfish_search - First observed
goldfish_status
TDQS
Scored across 7 tools
The seven tools map onto three distinct memory tiers (raw transcript, session summaries, curated notes), and read/write roles for notes are cleanly split between goldfish_recall and goldfish_remember. The main overlap is goldfish_search vs goldfish_reflect, which both query brain transcript history; descriptions differentiate them (reflect is restricted to role='user' and pattern-oriented), but an agent could still misselect between them.
All tools use a consistent goldfish_ prefix with snake_case, which is highly predictable. However, the suffix is a mix of verbs (search, recall, remember, reflect) and resource nouns (context, persona, status), so it is not a strict verb_noun pattern.
Seven tools is well-scoped for a three-tier memory server, with each tool earning its place across search, summarization, note read/write, reflection, aggregation, and health. No obvious redundancy or bloat.
The surface covers read/search, write, aggregation, and health across all three memory tiers. The one notable gap is the absence of a delete/prune or update operation for curated notes, despite the descriptions explicitly saying insights should be revisited and pruned over time.
Maintenance
Related MCP Connectors
- MemocoreOAuthai.memocore
Shared memory for all your AI agents, your whole team and every MCP client ā save, search, recall.
shared AI-context layer for teams ā persistent memory your agents search and update over MCP
Long-term memory for AI coding agents: durable project facts, recalled by every MCP client.
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA local MCP server that provides a shared context and learning foundation across multiple AI tools (Claude, Copilot, Codex) for multiple projects, enabling persistent knowledge, decisions, and gap reflection through note storage.MIT
- AlicenseAqualityBmaintenanceProvides persistent memory for AI coding agents via MCP, enabling teams to share and recall facts across sessions. Automatically captures, classifies, and curates knowledge from supported transcript sources.1818 npm1AGPL 3.0
- AlicenseNot gradedqualityAmaintenancePersistent memory MCP server that remembers decisions and context across coding sessions, automatically logging and surfacing relevant knowledge as you work.12 npmMIT
- AlicenseNot gradedqualityAmaintenanceProvides shared long-term memory for AI coding agents via MCP, allowing tools like Claude Code and Codex to store and retrieve distilled facts, notes, and conversation history to persist context across sessions.26 npm3MIT