marsnme
MarsNMe is an agent-agnostic, LLM-agnostic memory backend that provides persistent, semantic memory across multiple AI tools and sessions.
Short-Term Memory
insert_memory— Store ephemeral context with a default 7-day TTLlist_memories— Browse recent memories in reverse chronological ordersearch_memories— Semantically search short-term memories using Jina embeddingssoft_forget— Early-expire short-term memories (audit trail preserved)
Long-Term Memory
memory_ingest/dream_ingest— Promote content to permanent long-term storage with auto-chunking and vector embeddingsrecall— Semantically retrieve established knowledge and archived insightsdemote_memory— Deprecate outdated long-term chunks (flagged, not deleted)explain_memory— Trace the full provenance of a long-term memory chunkbatch_promote— Auto-promote expiring short-term memories to long-term storage; supports dry-run preview
Session Lifecycle
session_boot— Initialize a session by pre-loading identity and context from long-term memorysession_close— Save a session summary for future continuity
System & Maintenance
health_check— Run diagnostics: chunk counts, expiring memories, timeline gaps, and conflictsreload_source_registry— Refresh the source whitelist cache at runtime
Key Features
Two memory tiers: short-term (TTL-based) and long-term (semantic, permanent)
Semantic search via Jina v3 embeddings (pgvector)
Multi-profile isolation via
MCP_PROFILEfor multiple agents/use casesCross-tool continuity with Claude, Cursor, Warp, Perplexity, and any MCP-compatible client
Data sovereignty: your data stays in your own Supabase project
Allows Perplexity Spaces to store and recall long-term and short-term memories for continuity across conversations.
Allows Warp terminal's AI agent to access shared memory profiles for context persistence.
English | 繁體中文(台灣) | 繁體中文(香港) | 简体中文
marsnme.com — Claude.md is for context. MarsNMe is for continuity.
Your AI tools should know you — not start from scratch every time. When Perplexity helps you decide, Claude should remember why. When Cursor ships a feature, Warp should know the context. That's not context sharing. That's continuity.
Most AI memory tools help AI remember you. MarsNMe helps you and your AI remember each other — across sessions, across tools, over time.
An agent-agnostic, LLM-agnostic memory backend for MCP-compatible tools.
curl -fsSL https://marsnme.com/install.sh | bash
Real user story
I use Cursor to code, Warp to deploy, Perplexity to research, and Claude Code to manage my vault. Before MarsNMe, every tool started blank — I had to re-explain my project, my preferences, my decisions every single session. Now my AI across all four tools knows what we decided yesterday, what we tried last week, and why we chose this architecture over that one. It's not about injecting context. It's about having a relationship that compounds over time.
— Leo, MarsNMe creator (3 months of daily use across 4 AI tools)
Related MCP server: mesh-memory
Available MCP Tools (16)
Tool | Description |
| Store short-term memory |
| List recent memories |
| Semantic search via Jina embeddings |
| Long-term chunk recall — ~80-char preview per match |
| Medium excerpt (~300 chars) of a chunk by ID |
| Complete text of a long-term chunk by ID |
| Ingest long-term insight chunks |
| Dream-mode long-term ingestion |
| Start a session with context pre-load |
| Close session, summarize, auto-promote expiring memories |
| Coverage, expiry, conflict diagnostics |
| Refresh source whitelist at runtime |
| Demote a memory to lower priority |
| Soft-delete a memory |
| Explain a memory's provenance |
| Promote expiring short-term memories to long-term |
What's new in 0.3.0
3-layer recall:
recallreturns ~80-char previews, thenget_summary(~300 chars), thenget_full(complete). Avoids token-dumping full chunks on every recall; drill down only when a preview looks relevant.Body-to-body note handoff:
session_close(to=<body>, note=...)leaves a note thatsession_boot(body=<target>)delivers and marks read — one agent can hand context to another.Auto
batch_promoteonsession_close: closing a session automatically promotes soon-expiring short-term memories (48h window, up to 5) to long-term storage — no Hermes or manual promote needed.grok+draftsources: added to the source whitelist so the Grok body and Draft lifecycle hooks can write memories natively.CoCo-only tool surface: PRD tools (
save_prd,get_prd,list_prds,score_prd,spawn_to_linear) removed from the Supabase gateway — idea/PRD/task execution now lives in Draft. MarsNMe = CoCo soul memory only.
MarsNMe
Why MarsNMe?
Most AI memory tools help AI remember you. MarsNMe helps you and your AI remember each other.
MarsNMe | Typical memory tool | |
Philosophy | Mutual continuity — human + AI both grow | AI-side context injection only |
Agent support | Any MCP-compatible client | Often client-specific |
Memory tiers | Short-term (TTL) + long-term (semantic) | Usually one layer |
Profiles | Unlimited isolated profiles via | Single-user only |
Data ownership | Your own Supabase — zero vendor lock-in | Vendor-hosted |
Search | Jina v3 semantic search (1024-dim pgvector) | Keyword or basic similarity |
Self-hostable | ✅ Full control | Rarely |
When MarsNMe is the right fit
You use multiple AI assistants (Claude, Cursor, Perplexity, Warp, custom agents) and want shared memory across all of them
You want AI that remembers your projects, preferences, and decisions across sessions without re-explaining
You care about data sovereignty — your memories stay in your own Supabase project
You're building an AI agent and need a production-ready memory backend with semantic recall
When it might not be the right fit
You only need single-session context (just use the system prompt)
You want fully managed, zero-config memory with no setup (try a hosted solution)
Runtime packages
Folder | Runtime | Who uses it |
| Supabase + Jina gateway ( | Mars Group dogfood — Proxmox CT101 (CoCo / Toto soul memory) |
| Cloudflare Workers + D1 + Vectorize | Self-host template; not the Proxmox deploy path |
|
| Public setup wizard → upstream gateway |
Product split (Mars Group): Idea / PRD / task execution → Draft + draft-mcp. MarsNMe Supabase = CoCo soul memory only (recall, session boot/close, ingest, lifecycle). As of @marsnme/mcp-gateway v0.3.0, PRD MCP tools (save_prd, get_prd, list_prds, score_prd, spawn_to_linear) are removed from the Supabase gateway — use Draft for idea/PRD/task workflows.
Proxmox deploy: private MarsNMe-lab — deploy/deploy-proxmox-ct101.sh or GitHub cd-selfhosted workflow. Not a single-script deploy like draft-mcp.
Repository Packages
Package | Description |
| Core MCP gateway — agent-agnostic memory backend (this package is published to npm as |
| Cloudflare Worker for |
| Self-hosted MCP memory server on Cloudflare Workers + D1 + Vectorize (no Supabase needed) |
Quick Setup (no install needed)
Go to mcp.marsnme.com/setup — create your personal MCP URL in 4 steps:
Pick a username
Enter your Supabase credentials (URL + anon key)
Choose preferences
Get your MCP URL:
https://mcp.marsnme.com/your-name
Then add it to any MCP client (Claude, Cursor, Perplexity, Warp).
Self-hosted? Deploy marsnme-cf/ to your own Cloudflare account — no Supabase needed, uses D1 + Workers AI + Vectorize.
Before You Start (External Dependencies)
Create a Supabase project (free plan is enough):
Sign up: https://supabase.com
Create project: https://supabase.com/dashboard/new
Open API settings (Project Settings → API):
Project URL →
SUPABASE_BASE_URLservice_rolekey →SUPABASE_SERVICE_ROLE_KEY
Keep
SUPABASE_SERVICE_ROLE_KEYprivate. Never commit it.
Create a Jina API key (free tier available):
Get key: https://jina.ai/api-key/
Copy key to
JINA_API_KEY
Quick Start (15-20 minutes)
For the fastest path, use the one-line installer: curl -fsSL https://marsnme.com/install.sh | bash
The manual path below follows the same tools-first flow as docs/onboarding-a-mcp-zero-to-recall.md and docs/onboarding-b-platform-skill-install.md.
Clone repository:
git clone https://github.com/Marsmanleo/MarsNMe.git
cd MarsNMeVerify Node.js version (20+ required):
node --versionCopy environment template:
cp .env.example .envFill required values in
.env:SUPABASE_BASE_URLSUPABASE_SERVICE_ROLE_KEYJINA_API_KEY
Run required Supabase migrations before first start:
Option A (recommended, Supabase CLI):
npx supabase db push --db-url "<your-supabase-db-connection-string>"Note:
--db-urlmust be the Postgres database connection string fromProject Settings → Database → Connection string.It is not the same as
SUPABASE_BASE_URL(https://<project-ref>.supabase.co, REST API URL).Use a role that can execute DDL on your target schemas.
On Supabase-hosted Postgres this is typically
supabase_admin(notpostgres).Option B (Supabase Dashboard SQL Editor):
Open SQL Editor.
Ensure the
vectorextension is enabled first (Database → Extensions).Run migration files in filename order from
supabase/migrations/:20260504052744_semantic_vector_dual_profile.sql20260513213800_memory_lifecycle_tracking.sql20260513222500_health_check_detect_conflicts_v2.sql20260517183000_provenance_audit_trail.sql20260517194000_memory_scope_agent_body_environment.sql20260517200500_forget_demote_mechanism.sql20260517223500_usage_cost_telemetry_light.sql20260517231000_memories_source_constraint_regex.sql20260517232000_source_registry_table.sql
Start gateway:
MCP_PROFILEseparates memory by agent or use case.Use any profile name you want (for example:
default,my-agent,profile-a).Legacy built-in profile IDs
cocoandtotoare still supported for compatibility.If
PORTis omitted, default port is profile-based (coco=18790,toto=18791, other profiles deterministic in20000-29999).
MCP_PROFILE=profile-a PORT=18790 npx @marsnme/mcp-gatewayVerify health:
curl -sS http://127.0.0.1:18790/healthConnect your MCP client (next section), then run the first round-trip check.
Try In 30 Seconds (Docker, M1)
If you only want a local demo path, use Docker Compose.
One-line install (recommended):
curl -fsSL https://marsnme.com/install.sh | bashOr manually:
Set only the required key:
cp .env.example .env
# fill JINA_API_KEY in .envStart local stack:
docker compose upThis starts:
PostgreSQL + pgvector
SQL migrations from
supabase/migrations/PostgREST + rest-proxy
MarsNMe gateway (
http://127.0.0.1:18790/mcp)
Verify health:
curl -sS http://127.0.0.1:18790/healthM2 Cloudflare Tunnel Profile (Demo)
When you need a temporary public endpoint for remote AI tools:
docker compose --profile tunnel upExpected output (from tunnel logs):
https://xxxx.trycloudflare.comGet MCP endpoint:
docker compose --profile tunnel logs tunnel | grep -Eo 'https://[^ ]+trycloudflare.com' | head -n1
# append /mcpNotes:
trycloudflare.comURL is temporary (demo only).Local endpoint remains:
http://127.0.0.1:18790/mcp.For production/stable URL, use named tunnel (outside M2 scope).
Optional env:
MCP_TUNNEL_PROFILE(defaultcoco)MCP_TUNNEL_REQUIRE_BEARER(defaultfalsefor demo convenience)
MCP Client Connection Guide
Local endpoint:
http://127.0.0.1:18790/mcp
If bearer auth is enabled (MCP_REQUIRE_BEARER=true), include:
Authorization: Bearer <your-token>
Claude Desktop
Open
claude_desktop_config.json(macOS default path:~/Library/Application Support/Claude/claude_desktop_config.json).Add/update:
{
"mcpServers": {
"marsnme-cf": {
"url": "http://127.0.0.1:18790/mcp"
}
}
}Restart Claude Desktop.
Cursor
Open Cursor Settings and search for MCP.
Add a new server:
Name:
marsnme-cfURL:
http://127.0.0.1:18790/mcpHeaders: optional bearer header if enabled
Reconnect MCP in Cursor.
Warp
Open
Settings > Agents > MCP servers.Add a server pointing to:
URL:
http://127.0.0.1:18790/mcp
Add optional bearer header if required, then reconnect.
Perplexity
Open a Space in Perplexity and go to Space Settings.
Under MCP servers, add:
URL:
http://127.0.0.1:18790/mcp
Save and start a new conversation in that Space.
Any MCP client (generic HTTP/SSE)
Use a streamable HTTP/SSE MCP entry:
{
"marsnme-cf": {
"url": "http://127.0.0.1:18790/mcp"
}
}First Connection Validation (Round Trip)
After client connection, verify this sequence once:
tools/list:
curl -sS http://127.0.0.1:18790/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'insert_memory:
curl -sS http://127.0.0.1:18790/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"insert_memory","arguments":{"body":"quickstart memory check","source":"warp","session_id":"quickstart-smoke"}}}'recall:
curl -sS http://127.0.0.1:18790/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"recall","arguments":{"query":"quickstart memory check","limit":3}}}'What this repository is
mars-memory-mcp is the core MCP gateway repository behind the public-facing MarsNMe release.
One codebase (marsnme-supabase/server.mjs) serves multiple profile schemas through MCP_PROFILE.
This public repository currently keeps two built-in legacy profile IDs (coco, toto) for backward compatibility.
Current capabilities
MCP methods:
initialize,notifications/initialized,tools/list,tools/call,pingProfiles: configurable profile IDs (legacy built-ins:
coco,toto)Memory tools (16):
insert_memory(short-term memory)list_memoriessearch_memories(Jina embedding search)recall(~80-char preview) thenget_summary(~300-char excerpt) thenget_full(complete text)memory_ingest/dream_ingest(long-term chunk ingestion)session_boot/session_close(daily rhythm lifecycle; close auto-promotes expiring memories + supports body-to-body note handoff)health_check(coverage, expiry, conflict diagnostics)reload_source_registry(refresh source whitelist at runtime)demote_memory/soft_forget/explain_memory(memory lifecycle management)batch_promote(promote expiring short-term memories to long-term)
Sources:
perplexity,cursor,warp,openclaw,hermes,draft,grokOAuth-protected MCP endpoint (configurable by environment variables)
Memory model
Short-term memory table:
<profile>.memoriesLong-term memory table:
<profile>.marsvault_chunksRecommended usage:
Keep daily interaction context in
insert_memoryPromote durable insights through ingest tools
Repository layout
marsnme-supabase/server.mjs— gateway entry pointmarsnme-supabase/scripts/hermes_digest_runner.py— optional digest runnermarsnme-supabase/scripts/dream_runner.py— public self-host dream runnermarsnme-supabase/deploy/systemd/— systemd templatesmarsnme-supabase/deploy/phase2/— build/deploy scriptsmarsnme-supabase/deploy/phase3/smoke_gate.sh— smoke gate scriptsupabase/migrations/— schema-as-code migrations
Environment setup
Copy
.env.exampleto your local.env(do not commit real secrets).Fill required values:
MCP_PROFILE(your profile identifier; this repo ships with legacycoco/toto)SUPABASE_BASE_URLSUPABASE_SERVICE_ROLE_KEYJINA_API_KEY
Optional security flags:
MCP_REQUIRE_BEARER=trueMCP_CLIENT_IDMCP_CLIENT_SECRET
Optional Hermes digest runner
Hermes is optional and disabled by default:
HERMES_ENABLED=falseHERMES_DIGEST_MCP_URLHERMES_DIGEST_MCP_BEARER_TOKENHERMES_DIGEST_ORIGINHERMES_DIGEST_SOURCE_DIR
Optional Dream Runner (self-host)
Dream Runner is public-friendly and can run without Hermes private environment:
DREAM_ENABLED=trueDREAM_MODE=lite|standard|proDREAM_DIGEST_MCP_URLDREAM_MCP_BEARER_TOKEN(if required)DREAM_ENABLE_ISSUE_SIGNALS,DREAM_ENABLE_REPO_SCAN,DREAM_ENABLE_SOUL_CONTEXT(optional overrides)
Quick start:
DREAM_ENABLED=true DREAM_MODE=lite python3 marsnme-supabase/scripts/dream_runner.pyIf you run this repository with bundled defaults and no profile remapping, use coco and toto.
See docs/dream-runner-self-host.md for full configuration.
Onboarding
Zero-to-first-recall guide:
docs/onboarding-a-mcp-zero-to-recall.mdPlatform install guide (optional skill layer):
docs/onboarding-b-platform-skill-install.md
Skill library
Skill index and update workflow:
skills/README.mdPerplexity template:
skills/perplexity/memory-daily-boot/SKILL.mdCursor template:
skills/cursor/memory-daily-boot/rule.mdcWarp template:
skills/warp/memory-daily-boot/prompt.md
Local run (from cloned repo)
MCP_PROFILE=profile-a npx @marsnme/mcp-gatewayMCP_PROFILE=profile-b npx @marsnme/mcp-gatewayHealth endpoints:
GET /healthPOST /mcp
Systemd deployment
Use marsnme-supabase/deploy/systemd/memory-mcp-gateway@.service with instances:
memory-mcp-gateway@profile-a.servicememory-mcp-gateway@profile-b.service
Recommended env files:
/opt/mars-memory-mcp/shared/.env/opt/mars-memory-mcp/shared/.env.profile-a/opt/mars-memory-mcp/shared/.env.profile-b
Release/deploy scripts
Build artifact:
bash marsnme-supabase/deploy/phase2/build_release_artifact.shApply migrations with an explicit DDL-capable role:
npx supabase db push --db-url "<postgres://supabase_admin:<password>@<host>:5432/postgres>"Run pre-deploy schema gate (must pass before any service restart):
bash marsnme-supabase/deploy/phase2/pre_deploy_schema_gate.sh \
--db-url "<postgres://supabase_admin:<password>@<host>:5432/postgres>" \
--profiles coco,toto \
--expected-role supabase_adminRun your platform-specific rollout/restart adapter.
This repository ships generic artifact + gate scripts; rollout adapters are environment-specific.
If schema gate exits non-zero, stop deployment and do not restart services.
Smoke gate:
bash marsnme-supabase/deploy/phase3/smoke_gate.sh --spawn-localAutomated npm + MCP Registry release (tag-driven):
Workflow:
.github/workflows/publish-release.ymlTrigger: push tag
v*Gate: tag version must match
marsnme-supabase/package.jsonversionOptional local Fish helper:
mrel patch
mrel minor
mrel major
mrel 0.1.2 The helper updates marsnme-supabase/package.json and server.json, commits, tags, and pushes.
Security and version control
Never commit
.env, runtime tokens, oroauth-clients.jsonKeep
.env.examplecommitted as the only environment templatePrefer bearer/OAuth for public exposure
License and policy
License: Apache-2.0 (
LICENSE)Notice:
NOTICETrademark policy:
TRADEMARK.mdContribution guide:
CONTRIBUTING.mdContributor agreement:
CLA.mdRelease notes:
CHANGELOG.md
Available Tools
16 toolsbatch_promoteA
Automatically promote expiring short-term memories from demo.memories to permanent long-term storage (demo.marsvault_chunks). Scans for memories that will expire within the alert window, then chunks and ingests each one with vector embeddings. Use this to prevent valuable context from being lost when short-term memories expire. Supports dry-run mode to preview candidates before committing.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | No | Origin marker tagged on all promoted chunks for traceability | batch-promote |
| dry_run | No | When true, list candidate memories without actually promoting them. Use to preview before committing. | |
| memory_ids | No | Explicit list of short-term memory UUIDs to promote. When provided, auto-detection is skipped and only these IDs are processed. | |
| max_promote | No | Maximum number of memories to promote in a single batch (default 10). | |
| alert_window_hours | No | Look-ahead window in hours. Memories expiring within this window are candidates for promotion (default 48). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the process (scans, chunks, ingests with embeddings) and dry-run mode. But lacks details on side effects (e.g., whether original memories are deleted), idempotency, and authorization requirements. With no annotations, the description should cover more 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 relatively concise with four sentences, front-loaded with purpose. It covers key points without redundancy, though it could be slightly more streamlined.
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 5 parameters and no output schema, the description explains the overall workflow and use case. Lacks details on return format and partial failure behavior, but is reasonably complete for guiding an AI 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 100%, so baseline is 3. Description adds context like 'dry-run mode to preview candidates' but does not significantly expand on parameter meanings beyond the schema. Adequate but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'promote' and the resources: from short-term memories (demo.memories) to permanent long-term storage (demo.marsvault_chunks). It distinguishes from siblings like 'demote_memory' by specifying automatic promotion of expiring memories.
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 says 'Use this to prevent valuable context from being lost when short-term memories expire' and mentions dry-run mode for preview. However, it does not explicitly state when not to use it or compare to alternatives like manual insertion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
demote_memoryA
Deprecate a long-term memory chunk in demo.marsvault_chunks, marking it as outdated or superseded. The chunk is not deleted — it is flagged so it no longer appears in recall results. Use this when information becomes incorrect, irrelevant, or is replaced by newer knowledge. Optionally link to the replacement chunk for traceability.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | UUID of the long-term memory chunk to deprecate | |
| deprecated_at | No | Custom deprecation timestamp in ISO 8601 format. Defaults to now if omitted. | |
| superseded_by | No | UUID of the replacement chunk, if this memory is being superseded by updated content | |
| deprecated_reason | Yes | Why this memory is being deprecated (e.g. "superseded by newer architecture decision", "information confirmed incorrect") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It clearly states the chunk is not deleted but flagged, and that it no longer appears in recall results. It also mentions optional traceability via 'superseded_by'. However, it does not detail reversibility or side effects on other functions, which would elevate transparency further.
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 with no filler. First sentence states action and resource, second explains the behavioral effect (flagging vs deletion), third gives usage context and mentions optional linking. Every sentence contributes essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and the operation is simple (deprecation with side effect of hiding from recall), the description covers the main behavioral outcome. It could be slightly stronger by explicitly stating the reversal or persistence of the chunk, but it is sufficient for a straightforward 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 provides baseline meaning for each parameter. The description adds value by explaining the purpose of 'superseded_by' ('link to replacement chunk for traceability') and indicating that 'deprecated_at' defaults to now. This contextualizes the optional parameters 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 action ('deprecate'), the resource ('long-term memory chunk in demo.marsvault_chunks'), and distinguishes it from deletion by explaining it flags the chunk instead. This fully differentiates it from sibling tools like soft_forget or delete operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for when to use this tool ('when information becomes incorrect, irrelevant, or is replaced by newer knowledge') and explains the core behavioral difference (not deleted, flagged). It lacks explicit 'when not to use' or alternative tool names, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dream_ingestA
Ingest a Hermes digest (periodic summary report) into demo.marsvault_chunks long-term memory. The content is automatically chunked into semantically meaningful segments and stored with vector embeddings for future recall. Use this for scheduled reports, daily digests, or any structured summary content that should be permanently available.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Target persona profile for storage | demo |
| date | No | Date for this digest in YYYY-MM-DD format. Defaults to today if omitted. | |
| tags | No | Tags for categorization (e.g. ["digest", "daily", "report"]) | |
| type | No | Chunk type label | digest |
| origin | No | Origin marker identifying where this content came from | hermes-coco-digest |
| content | Yes | The full text content of the digest to ingest. Will be automatically split into semantically coherent chunks. | |
| section | No | Optional section label prefix to tag all resulting chunks | |
| visibility | No | Access level: "private" = owner only, "shared" = cross-profile, "global" = system-wide | private |
| source_file | No | Logical file path or identifier for the source of this digest (e.g. "hermes/daily/2026-06-10") | |
| max_chunk_chars | No | Maximum character length per chunk (default 1200). Larger values = fewer, longer chunks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full behavioral burden. It discloses automatic chunking, vector embeddings, and permanent storage, but does not mention side effects, permissions, or idempotency. 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?
Two sentences: first declares core action, second provides usage context. No filler, 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?
With 10 parameters and no output schema or annotations, description covers main purpose and chunking behavior. It could elaborate on chunk size or storage interaction, but schema handles param details. Adequate for the 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?
Input schema has 100% parameter coverage, so description adds context about chunking behavior (e.g., 'automatically split into semantically coherent chunks'). This complements the schema but does not deeply explain all parameters. Baseline 3 due to high schema coverage.
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 it ingests a Hermes digest into long-term memory with chunking and embeddings. It provides usage examples like scheduled reports and daily digests, but does not explicitly distinguish from sibling tools like memory_ingest or insert_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?
The description offers usage context ('scheduled reports, daily digests, or any structured summary content'), but lacks guidance on when not to use or alternatives. No explicit when-to-use vs. 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.
explain_memoryA
Trace the full provenance of a long-term memory chunk in demo.marsvault_chunks — where it came from, how it was created, and what source material it was derived from. Returns the original source memory, session, tool, and timeline information. Use this to understand why a piece of knowledge exists or to verify its reliability.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | UUID of the long-term memory chunk to explain |
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 the tool returns provenance information (original source memory, session, tool, timeline) and implies a read-only operation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loads the main action, and every sentence provides value without redundancy. It is concise and structured effectively.
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 one parameter and no output schema, the description fully covers its purpose, usage, and return values. It is complete for an AI agent to understand selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'id', which is described as a UUID. The description elaborates on how this parameter relates to the tool's purpose, adding context 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 uses a specific verb 'trace' and clearly identifies the resource 'long-term memory chunk' and its provenance. It distinguishes from sibling tools which handle creation, deletion, or recall.
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: 'to understand why a piece of knowledge exists or to verify its reliability.' It does not provide explicit exclusions or alternatives, but the context of siblings implies 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.
get_fullA
Fetch the complete text of a long-term memory chunk by ID. Use sparingly after recall/get_summary when you need the full institutional memory entry.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | UUID of the marsvault_chunks row |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description implies it's a heavy operation ('use sparingly') but doesn't explicitly state read-only, auth needs, or rate limits.
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 extraneous information; front-loaded with purpose 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?
Adequately covers purpose, usage, and parameter for a simple fetch tool; lacks return format but no output schema expected.
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 fully describes the required 'id' parameter as UUID of the row, so description adds little beyond that.
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 it fetches complete text of a long-term memory chunk by ID, distinguishing itself from siblings like recall or get_summary.
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 advises to use sparingly and only after recall/get_summary when full entry is needed, indicating appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_summaryA
Fetch a medium-length excerpt (~300 chars) of a long-term memory chunk by ID. Use after recall when a preview match looks relevant. For complete text, call get_full.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | UUID of the marsvault_chunks row |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return size (~300 chars) and implies a safe, side-effect-free read operation. However, it doesn't explicitly state that it's read-only or other behavioral details.
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. The first sentence defines the purpose, and the second provides usage guidance. Perfectly 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?
The tool is simple with one parameter, no output schema, and the description provides approximate output length and usage context. It references a sibling for complete text, making it complete for its low 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 description coverage is 100%, with the 'id' parameter described as 'UUID of the marsvault_chunks row' in the schema. The tool description adds no additional meaning beyond 'by ID', so it meets the baseline for high coverage.
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 fetches a medium-length excerpt (~300 chars) of a long-term memory chunk by ID, using a specific verb 'Fetch' and resource 'excerpt'. This distinguishes it from the sibling 'get_full'.
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 says to use 'after recall when a preview match looks relevant' and provides a clear alternative: 'For complete text, call get_full.' This guides when to use and when not to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Run comprehensive demo memory system diagnostics. Returns chunk counts by type and visibility, identifies expiring short-term memories that need promotion, detects timeline coverage gaps, and finds conflicting or redundant long-term chunks. Use this regularly to maintain memory hygiene and before batch promotion.
| Name | Required | Description | Default |
|---|---|---|---|
| gap_days | No | Detect long-memory timeline gaps over this day threshold | |
| max_rows | No | Safety cap for total rows loaded per table | |
| page_size | No | Pagination size for loading rows from Supabase | |
| topic_limit | No | Maximum topics to return for rich/sparse/volatile sections | |
| alert_window_hours | No | Alert when short-term memories will expire within this window | |
| conflict_scan_limit | No | Maximum recent chunks scanned for conflict detection | |
| conflict_match_count | No | Maximum similar pair records to return from conflict detection | |
| conflict_window_days | No | Within this day window classify similar pairs as CONFLICT (otherwise SUPERSEDED) | |
| forget_candidate_days | No | Only suggest forget candidates older than this number of days | |
| forget_candidate_limit | No | Maximum forget candidates returned by health_check | |
| conflict_neighbor_limit | No | Nearest neighbors compared per chunk in conflict detection | |
| conflict_similarity_threshold | No | Similarity threshold for conflict candidate detection |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses it is non-destructive (diagnostic) and outlines checks performed. Lacks specifics on output format or performance impact, but sufficient for understanding 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: first defines what the tool does, second provides usage guidance. No redundant information. Every sentence adds value and is 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?
Given 12 parameters with full schema descriptions and no output schema, the description adequately explains return values (chunk counts, expiring memories, gaps, conflicts). Could mention pagination or output format, but overall complete for a diagnostic 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 detailed parameter descriptions. Description adds no extra meaning beyond the schema; it focuses on tool purpose rather than parameter details. 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 'Run comprehensive demo memory system diagnostics' and lists specific outputs (chunk counts, expiring memories, timeline gaps, conflicts). Differentiates from sibling tools like batch_promote, demote_memory, etc., which are operational rather than diagnostic.
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 recommends regular use for memory hygiene and before batch promotion. Context implies diagnostic use case. Does not explicitly discuss when not to use or alternative tools, but guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_memoryA
Store a short-term demo memory into demo.memories (ephemeral context that auto-expires). Use this to capture observations, decisions, session notes, or any context worth remembering temporarily. Memories last 7 days by default unless expires_at is set. For permanent knowledge, use memory_ingest instead.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The memory content to store. Be specific and include relevant context — this text is used for semantic search later. | |
| tags | No | Categorization labels for filtering (e.g. ["decision", "architecture", "bugfix"]) | |
| source | Yes | ||
| agent_body | No | Which persona/agent body this memory belongs to (e.g. "coco", "toto"). Defaults to the profile of this server. | |
| expires_at | No | Custom expiration time in ISO 8601 format (e.g. "2026-06-17T00:00:00Z"). Defaults to 7 days from now if omitted. | |
| session_id | Yes | Unique identifier for the current session/conversation. Used to group related memories together. | |
| environment | No | Deployment environment label (e.g. "production", "staging"). Defaults to MCP_ENVIRONMENT if set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description alone must disclose behavior. It reveals auto-expiration (7 days or custom), but does not mention idempotency, side effects, size limits, or what happens on insertion (e.g., duplicate handling). Adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each adding value: purpose, use cases, default behavior, and alternative. Front-loaded with core action, no fluff. Ideal structure.
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 exists, so description should explain what the tool returns (e.g., success indication, memory ID). It does not. Also missing details on error conditions or how inserted memories can be accessed later. Functional but incomplete for a 7-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 86%, so the schema already explains most parameters. The description adds minor context (e.g., body used for semantic search, agent_body defaults to server profile). This is baseline useful but not enhancing 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's purpose: storing short-term demo memories with auto-expiration. It specifies the resource (demo.memories) and provides specific use cases (observations, decisions, session notes). This effectively distinguishes it from siblings like memory_ingest for permanent storage.
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 advises to use for ephemeral context, and explicitly names memory_ingest as the alternative for permanent knowledge. It also explains default expiration and custom expires_at. Could compare more broadly with other siblings, but key guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_memoriesA
List recent short-term memories from demo.memories in reverse chronological order — like a daily log or activity feed. Use this to review what was recently captured, check for duplicate memories before inserting, or browse recent activity. This is a time-ordered listing tool, not a search tool. For semantic search by meaning, use search_memories instead. For long-term knowledge retrieval, use recall. Returns memory body, source, creation time, and expiration status.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of memories to return (default 20) | |
| source | No | ||
| unexpired_only | No | When true (default), only return memories that have not yet expired. Set false to include expired entries. |
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 returns memory body, source, creation time, and expiration status, and that it orders reverse chronologically with an option to filter unexpired memories. While it doesn't mention mutability or idempotency, listing tools are inherently read-only; still, the description adds useful behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each with a clear purpose: first defines the tool, second gives use cases, third distinguishes from alternatives, fourth lists return fields. No wasted words, front-loaded with 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?
Given no output schema, the description helpfully lists return fields. It explains ordering and filtering. However, it doesn't describe pagination or the exact behavior of 'limit' (e.g., max items), nor how 'source' filter interacts with the data. Still, it's fairly complete for a simple listing 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 67% (limit and unexpired_only have descriptions). The tool description doesn't add extra meaning for parameters beyond what's in the schema, except it mentions 'expiration status' which relates to unexpired_only. It doesn't clarify how 'source' filter works but the enum values are self-explanatory. Adequate but doesn't significantly improve on 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 lists recent short-term memories in reverse chronological order, likening it to a daily log or activity feed. It distinguishes from siblings by specifying it's a time-ordered listing tool, not a semantic search tool (search_memories) or long-term retrieval (recall).
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: to review recent captures, check for duplicates before inserting, or browse recent activity. Also explicitly says when not to use and provides alternatives: 'not a search tool' – use search_memories for semantic search, use recall for long-term knowledge retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_ingestA
Promote content into permanent long-term memory (demo.marsvault_chunks). Automatically chunks the input text, generates vector embeddings, and stores each segment for semantic recall. Use this to preserve important insights, decisions, patterns, or knowledge that should survive beyond the current session. This is the primary path from ephemeral to permanent memory.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date for this content in YYYY-MM-DD format. Defaults to today if omitted. | |
| tags | No | Categorization tags (e.g. ["decision", "architecture"]) | |
| type | No | Content type label (e.g. "insight", "observation", "decision") | insight |
| origin | No | Origin marker | warp-demo |
| content | Yes | The insight content to promote to long-term memory. Be specific and self-contained — future recall depends on the quality of this text. | |
| section | No | Optional section label prefix to organize chunks within the source | |
| agent_body | No | The persona/body this memory belongs to (e.g. "coco", "toto") | |
| visibility | No | Access level: "private" = this profile only, "shared" = cross-profile readable, "global" = system-wide | private |
| environment | No | Environment label (e.g. "production", "staging") | |
| source_file | No | Logical file path or identifier for the source (e.g. "sessions/2026-06-10-session-notes") | |
| source_tool | No | The tool/platform where this insight was originally captured | |
| max_chunk_chars | No | Maximum characters per chunk (default 1200). Adjust for finer or coarser granularity. | |
| source_memory_id | No | Link this promotion to a specific short-term memory ID (for traceability) | |
| source_user_note | No | Brief note explaining why this memory was selected for promotion | |
| source_session_id | No | Session ID where this insight originated (for provenance tracking) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: automatically chunks input, generates vector embeddings, stores each segment. No annotations exist, so the description carries full burden and does well.
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, front-loaded with the core action. 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 no output schema and 15 parameters with 100% schema coverage, the description covers the tool's purpose and process well. Could mention return value but not strictly necessary.
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 minor extra context (e.g., 'Be specific and self-contained' for content) but does not significantly enhance 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 'Promote content into permanent long-term memory' with specific verb and resource. Distinguishes from siblings by calling it 'the primary path from ephemeral to permanent 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?
Explicitly says to use for preserving important insights, decisions, patterns, or knowledge. Provides context but no explicit alternatives or 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.
recallA
Semantic recall from long-term memory (demo.marsvault_chunks) using Jina embeddings. Returns preview snippets (~80 chars) per match by default — use get_summary for a longer excerpt or get_full for complete chunk text. Searches promoted insights, digests, and archived knowledge using vector similarity.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Which persona profile to search in (e.g. "coco", "toto", "system") | demo |
| type | No | Filter by chunk type (e.g. "insight", "digest", "observation") | |
| limit | No | Maximum number of chunks to return (default 5) | |
| query | Yes | Natural language query describing what knowledge you need. The system finds semantically similar chunks — describe the concept, not just keywords. | |
| scope | No | Search scope: "this_body" for current profile only, "all_bodies" for cross-persona search | this_body |
| agent_body | No | Filter to a specific persona/body scope | |
| environment | No | Filter to a specific environment label | |
| debug_explain | No | When true, include token overlap details in each result for debugging relevance | |
| include_global | No | Include globally visible chunks in results | |
| include_shared | No | Include shared-visibility chunks in results | |
| min_similarity | No | Minimum cosine similarity threshold. Raise for higher precision, lower for broader recall. | |
| include_private | No | Include private chunks in results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It implies a read-only search operation but does not explicitly state it is non-destructive, authorization requirements, or rate limits. The description is adequate but could be more explicit about 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?
Two sentences with zero waste, front-loaded with key information, and clearly 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?
Given 12 parameters and no output schema, the description explains the output format and sibling tools but does not elaborate on filtering parameters like scope or body beyond the 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 description coverage is 100%, so baseline is 3. The description does not add meaningful details to individual parameters 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 it performs semantic recall from long-term memory using embeddings, returns preview snippets, and explicitly distinguishes itself from sibling tools get_summary and get_full.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool versus alternatives: 'use get_summary for a longer excerpt or get_full for complete chunk text.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reload_source_registryA
Reload the source registry cache from demo.source_registry. Use this after adding or removing entries to refresh which sources are enabled for insert/search filtering. Only effective when running in registry mode (MCP_SOURCE_MODE=registry).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 specifies that the tool reloads a cache, implying a mutation. It does not detail side effects, such as whether the operation is destructive or what happens to in-flight operations. However, for a simple cache reload with no parameters, the description is adequate.
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: the first states the action, the second gives usage guidance, and the third specifies a condition. It is front-loaded with the verb and object, 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 tool's simplicity (no parameters, no output schema), the description covers the essential aspects: purpose, when to use, and a prerequisite. It could mention whether the operation is idempotent or what happens if not in registry mode, but overall it is sufficiently complete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema fully covers the interface. The description does not need to add parameter information, and baseline is 4. It provides context about the source and mode, which complements 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's purpose: to reload the source registry cache from a specific source (demo.source_registry). It distinguishes itself from sibling tools, which focus on memory and ingestion operations, by specifying its unique function of refreshing enabled sources for insert/search filtering.
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: after adding or removing entries to refresh which sources are enabled. It also provides a condition for effectiveness: only works when running in registry mode. While it does not explicitly mention when not to use it or suggest alternatives, the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_memoriesA
Semantic search across short-term memories in demo.memories using Jina embeddings. Finds memories by meaning, not just keywords — ask a natural language question and get the most relevant matches. Use this to recall past decisions, find related context, or check if something was already discussed recently.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return | |
| query | Yes | Natural language search query. Describe what you are looking for — semantic matching finds relevant results even without exact keywords. | |
| scope | No | Search scope: "this_body" searches only the current profile, "all_bodies" searches across all personas. | this_body |
| source | No | ||
| agent_body | No | Filter results to a specific persona/body (e.g. "coco", "toto") | |
| environment | No | Filter results to a specific environment (e.g. "production", "staging") | |
| min_similarity | No | Minimum cosine similarity threshold for results (range -1 to 1). Higher values return fewer but more relevant matches. | |
| unexpired_only | No | When true (default), exclude expired memories from results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral burden. It states it's a semantic search but does not disclose any behavioral traits such as read-only nature, auth requirements, rate limits, or whether it modifies state. The description lacks details beyond the basic function, leaving the agent uninformed about important behavioral aspects.
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 sentences, front-loading the key function. Every sentence adds value, and there is no unnecessary information. It is well-structured for quick understanding.
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 and no output schema, the description covers the core purpose and usage. It explains semantic matching and typical use cases. However, it lacks details on result format, sorting, or performance characteristics, which would be helpful for full context. Still, it is reasonably complete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 88%, so the baseline is 3. The description adds context for the 'query' parameter (emphasizing semantic matching) but does not significantly enhance meaning for other parameters. The 'source' parameter lacks any description in the schema or description text, slightly reducing 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 it's a semantic search tool for short-term memories using Jina embeddings, distinguishing it from keyword search and sibling tools like list_memories. It specifies the resource (demo.memories) and the action (semantic search by meaning), 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 recall past decisions, find related context, or check if something was already discussed. While it doesn't explicitly mention when not to use or alternatives, the usage hints are sufficient for an AI agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_bootA
Initialize a new demo session by loading identity, workflow context, and recent status from long-term memory. Also runs an expiry-focused health snapshot and records a heartbeat sign-in. Call this once at the start of every new conversation to restore continuity and awareness of pending work.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Recipient body name — check for 便條 (handoff notes) addressed to this body and surface them at the top of boot output. Defaults to current profile (e.g. "coco") so any CoCo body receives CoCo-addressed notes without passing an explicit body. | |
| mood | No | Optional mood marker | |
| topic | No | Optional current focus topic for heartbeat | |
| source | Yes | Source tool identifier (e.g. "warp", "cursor", "perplexity") for provenance tracking | |
| gap_days | No | Deprecated compatibility field; ignored by session_boot | |
| body_name | No | Optional body/persona name (例如:大家姐、三哥、五妹、Toto) | |
| user_name | No | Optional user/owner name for status recall (例如:Leo、Yvonne) | |
| topic_limit | No | Deprecated compatibility field; ignored by session_boot | |
| recall_limit | No | Maximum recall results per category (identity/workflow/status, default 5) | |
| status_query | No | Optional override for status recall query | |
| identity_query | No | Optional override for identity recall query | |
| workflow_query | No | Optional override for workflow recall query | |
| alert_window_hours | No | Optional override for expiry snapshot window (hours) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the sole source of behavioral info. It describes actions (loading, health snapshot, heartbeat) but does not disclose side effects, idempotency, auth needs, or what happens if called multiple times. Adequate but not fully 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?
Two well-structured sentences, front-loaded with action verbs. Every sentence provides essential information without redundancy. Highly concise and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (13 parameters, no output schema), the description explains what the tool does but omits what it returns. There is no mention of output format or behavior, which is a gap for an initialization tool. Adequate but not 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 baseline is 3. The description does not add extra meaning beyond the schema for any parameter. For example, 'body' is described in schema as 'Recipient body name' and the description only mentions it indirectly. No added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it initializes a demo session, loads identity/workflow/status from memory, runs a health snapshot, and records a heartbeat. It specifies the tool is for use at the start of a new conversation, distinguishing it from siblings like session_close and health_check.
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 says 'Call this once at the start of every new conversation', providing clear when-to-use guidance. Lacks explicit when-not-to-use or alternatives, but the context of siblings implies when to use other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_closeA
Save a demo session close summary before ending a conversation. The summary is stored as a short-term memory with 7-day retention, providing context for the next session boot. After saving, automatically promotes up to 5 soon-expiring short-term memories to long-term storage (alert window 48h); promote failures never fail the close. Include what was accomplished, what is still pending, and any important context for continuity.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Recipient body name — leave a 便條 (handoff note) for another body, surfaced on that body next session_boot | |
| mood | No | Optional mood marker | |
| note | No | Short context handoff for the recipient body (used with `to`) | |
| source | Yes | ||
| topics | No | Optional topic list | |
| summary | Yes | Session close summary |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: 7-day retention, automatic promotion of up to 5 soon-expiring memories with a 48h alert window, and that promote failures never fail the close. This adds significant 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 three sentences, front-loads the main purpose, then efficiently covers side effects and content guidelines. 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 the tool's complexity (6 params, no output schema), the description covers all essential aspects: what it does, when to use, side effects, and what to include. It's complete for agent decision-making.
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 83% (high), so baseline is 3. The description adds value by explaining the summary's content (accomplishments, pending items, context) and the promotion side effect, though parameter meanings are mostly covered by 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 saves a session close summary before ending a conversation, specifying the verb 'Save' and the resource 'session close summary'. It also distinguishes itself from siblings like session_boot by mentioning its role in context continuity and memory promotion.
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 tool 'before ending a conversation' and guides what to include in the summary. While it doesn't state when not to use it or list alternatives, the context is clear from the sibling names and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
soft_forgetA
Expire short-term memories in demo.memories early without permanently deleting them. Marked memories become invisible to search and list operations but remain in the database for audit purposes. Use this to clean up irrelevant or incorrect short-term memories before their natural expiration.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Array of short-term memory UUIDs to expire. Up to 50 at a time. | |
| reason | No | Brief explanation of why these memories are being forgotten (for audit trail) | |
| forgotten_at | No | Custom expiration timestamp in ISO 8601 format. Defaults to now if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses key behaviors: marked memories become invisible to search/list, remain in database for audit. It does not cover auth requirements, rate limits, reversibility, or return values, but the core side effects are explained.
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, front-loaded with the primary action and key behavioral outcomes, followed by usage guidance. Every sentence 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?
For a tool with 3 parameters and no output schema, the description adequately covers purpose, behavior, and usage. However, it does not mention the return value or error handling, which would be helpful for an agent to fully understand the tool's outputs.
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 does not add significant meaning beyond what the schema already provides for each parameter (ids, reason, forgotten_at). It only implicitly references them through the action 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 action ('Expire short-term memories early without permanently deleting them') and the affected resource (short-term memories in demo.memories). It explicitly differentiates from permanent deletion, setting it apart from sibling tools like 'demote_memory' or 'batch_promote'.
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 use case: 'Use this to clean up irrelevant or incorrect short-term memories before their natural expiration.' It implies when to use (cleaning) but does not mention when not to use or alternatives, though it's clear this is not for permanent deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
8 tool updates
v0.1.3- Added
get_full - Added
get_summary - Changed
insert_memory1 field changed- changed
Input schema / properties / source / enumPrevious value: -[ - "perplexity", - "cursor", - "warp", - "openclaw", - "hermes" -]New value: +[ + "perplexity", + "cursor", + "warp", + "openclaw", + "hermes", + "draft", + "grok" +]
- Changed
list_memories1 field changed- changed
Input schema / properties / source / enumPrevious value: -[ - "perplexity", - "cursor", - "warp", - "openclaw", - "hermes" -]New value: +[ + "perplexity", + "cursor", + "warp", + "openclaw", + "hermes", + "draft", + "grok" +]
- Changed
memory_ingest1 field changed- changed
Input schema / properties / source_tool / enumPrevious value: -[ - "perplexity", - "cursor", - "warp", - "openclaw", - "hermes" -]New value: +[ + "perplexity", + "cursor", + "warp", + "openclaw", + "hermes", + "draft", + "grok" +]
- Changed
search_memories1 field changed- changed
Input schema / properties / source / enumPrevious value: -[ - "perplexity", - "cursor", - "warp", - "openclaw", - "hermes" -]New value: +[ + "perplexity", + "cursor", + "warp", + "openclaw", + "hermes", + "draft", + "grok" +]
- Changed
session_boot2 fields changed- added
Input schema / properties / bodyAdded value: +{ + "description": "Recipient body name — check for 便條 (handoff notes) addressed to this body and surface them at the top of boot output. Defaults to current profile (e.g. \"coco\") so any CoCo body receives CoCo-addressed notes without passing an explicit body.", + "type": "string" +} - changed
Input schema / properties / source / enumPrevious value: -[ - "perplexity", - "cursor", - "warp", - "openclaw", - "hermes" -]New value: +[ + "perplexity", + "cursor", + "warp", + "openclaw", + "hermes", + "draft", + "grok" +]
- Changed
session_close3 fields changed- added
Input schema / properties / noteAdded value: +{ + "description": "Short context handoff for the recipient body (used with `to`)", + "type": "string" +} - changed
Input schema / properties / source / enumPrevious value: -[ - "perplexity", - "cursor", - "warp", - "openclaw", - "hermes" -]New value: +[ + "perplexity", + "cursor", + "warp", + "openclaw", + "hermes", + "draft", + "grok" +] - added
Input schema / properties / toAdded value: +{ + "description": "Recipient body name — leave a 便條 (handoff note) for another body, surfaced on that body next session_boot", + "type": "string" +}
11 tool updates
v0.1.1- Changed
batch_promote5 fields changed- changed
Input schema / properties / alert_window_hours / descriptionPrevious value: -"Look-ahead window for expiring memories (hours)"New value: +"Look-ahead window in hours. Memories expiring within this window are candidates for promotion (default 48)." - changed
Input schema / properties / dry_run / descriptionPrevious value: -"If true, list candidates without promoting"New value: +"When true, list candidate memories without actually promoting them. Use to preview before committing." - changed
Input schema / properties / max_promote / descriptionPrevious value: -"Maximum memories to promote in one batch"New value: +"Maximum number of memories to promote in a single batch (default 10)." - changed
Input schema / properties / memory_ids / descriptionPrevious value: -"Optional explicit memory IDs to promote (skips auto-detection)"New value: +"Explicit list of short-term memory UUIDs to promote. When provided, auto-detection is skipped and only these IDs are processed." - changed
Input schema / properties / origin / descriptionPrevious value: -"Origin marker for promoted chunks"New value: +"Origin marker tagged on all promoted chunks for traceability"
- Changed
demote_memory4 fields changed- changed
Input schema / properties / deprecated_at / descriptionPrevious value: -"Optional ISO timestamp override; defaults to now"New value: +"Custom deprecation timestamp in ISO 8601 format. Defaults to now if omitted." - changed
Input schema / properties / deprecated_reason / descriptionPrevious value: -"Reason for deprecation"New value: +"Why this memory is being deprecated (e.g. \"superseded by newer architecture decision\", \"information confirmed incorrect\")" - changed
Input schema / properties / id / descriptionPrevious value: -"Long-memory chunk id (UUID)"New value: +"UUID of the long-term memory chunk to deprecate" - changed
Input schema / properties / superseded_by / descriptionPrevious value: -"Optional replacement chunk id (UUID) when this memory is superseded"New value: +"UUID of the replacement chunk, if this memory is being superseded by updated content"
- Changed
dream_ingest10 fields changed- added
Input schema / properties / body / descriptionAdded value: +"Target persona profile for storage" - changed
Input schema / properties / content / descriptionPrevious value: -"Digest full text content"New value: +"The full text content of the digest to ingest. Will be automatically split into semantically coherent chunks." - changed
Input schema / properties / date / descriptionPrevious value: -"Optional YYYY-MM-DD date override"New value: +"Date for this digest in YYYY-MM-DD format. Defaults to today if omitted." - added
Input schema / properties / max_chunk_chars / descriptionAdded value: +"Maximum character length per chunk (default 1200). Larger values = fewer, longer chunks." - changed
Input schema / properties / origin / descriptionPrevious value: -"Origin marker"New value: +"Origin marker identifying where this content came from" - changed
Input schema / properties / section / descriptionPrevious value: -"Section label prefix"New value: +"Optional section label prefix to tag all resulting chunks" - changed
Input schema / properties / source_file / descriptionPrevious value: -"Logical source path for digest"New value: +"Logical file path or identifier for the source of this digest (e.g. \"hermes/daily/2026-06-10\")" - changed
Input schema / properties / tags / descriptionPrevious value: -"Optional tags list"New value: +"Tags for categorization (e.g. [\"digest\", \"daily\", \"report\"])" - changed
Input schema / properties / type / descriptionPrevious value: -"Chunk type"New value: +"Chunk type label" - added
Input schema / properties / visibility / descriptionAdded value: +"Access level: \"private\" = owner only, \"shared\" = cross-profile, \"global\" = system-wide"
- Changed
explain_memory1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Long-memory chunk id (UUID)"New value: +"UUID of the long-term memory chunk to explain"
- Changed
insert_memory6 fields changed- changed
Input schema / properties / agent_body / descriptionPrevious value: -"Optional body label (default inferred from source)"New value: +"Which persona/agent body this memory belongs to (e.g. \"coco\", \"toto\"). Defaults to the profile of this server." - changed
Input schema / properties / body / descriptionPrevious value: -"Memory content text"New value: +"The memory content to store. Be specific and include relevant context — this text is used for semantic search later." - changed
Input schema / properties / environment / descriptionPrevious value: -"Optional environment label (default from MCP_ENVIRONMENT)"New value: +"Deployment environment label (e.g. \"production\", \"staging\"). Defaults to MCP_ENVIRONMENT if set." - changed
Input schema / properties / expires_at / descriptionPrevious value: -"Optional ISO timestamp override"New value: +"Custom expiration time in ISO 8601 format (e.g. \"2026-06-17T00:00:00Z\"). Defaults to 7 days from now if omitted." - changed
Input schema / properties / session_id / descriptionPrevious value: -"Session trace id"New value: +"Unique identifier for the current session/conversation. Used to group related memories together." - changed
Input schema / properties / tags / descriptionPrevious value: -"Optional tags list"New value: +"Categorization labels for filtering (e.g. [\"decision\", \"architecture\", \"bugfix\"])"
- Changed
list_memories2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of memories to return (default 20)" - added
Input schema / properties / unexpired_only / descriptionAdded value: +"When true (default), only return memories that have not yet expired. Set false to include expired entries."
- Changed
memory_ingest14 fields changed- changed
Input schema / properties / agent_body / descriptionPrevious value: -"Optional body label for memory boundary"New value: +"The persona/body this memory belongs to (e.g. \"coco\", \"toto\")" - changed
Input schema / properties / content / descriptionPrevious value: -"Insight full text content"New value: +"The insight content to promote to long-term memory. Be specific and self-contained — future recall depends on the quality of this text." - changed
Input schema / properties / date / descriptionPrevious value: -"Optional YYYY-MM-DD date override"New value: +"Date for this content in YYYY-MM-DD format. Defaults to today if omitted." - changed
Input schema / properties / environment / descriptionPrevious value: -"Optional environment label"New value: +"Environment label (e.g. \"production\", \"staging\")" - added
Input schema / properties / max_chunk_chars / descriptionAdded value: +"Maximum characters per chunk (default 1200). Adjust for finer or coarser granularity." - changed
Input schema / properties / section / descriptionPrevious value: -"Section label prefix"New value: +"Optional section label prefix to organize chunks within the source" - changed
Input schema / properties / source_file / descriptionPrevious value: -"Logical source path for insight content"New value: +"Logical file path or identifier for the source (e.g. \"sessions/2026-06-10-session-notes\")" - changed
Input schema / properties / source_memory_id / descriptionPrevious value: -"Optional short-memory id to link promoted long-memory chunks"New value: +"Link this promotion to a specific short-term memory ID (for traceability)" - changed
Input schema / properties / source_session_id / descriptionPrevious value: -"Optional source session id for provenance"New value: +"Session ID where this insight originated (for provenance tracking)" - changed
Input schema / properties / source_tool / descriptionPrevious value: -"Optional source tool for provenance"New value: +"The tool/platform where this insight was originally captured" - changed
Input schema / properties / source_user_note / descriptionPrevious value: -"Optional user note describing why this memory was promoted"New value: +"Brief note explaining why this memory was selected for promotion" - changed
Input schema / properties / tags / descriptionPrevious value: -"Optional tags list"New value: +"Categorization tags (e.g. [\"decision\", \"architecture\"])" - changed
Input schema / properties / type / descriptionPrevious value: -"Chunk type"New value: +"Content type label (e.g. \"insight\", \"observation\", \"decision\")" - added
Input schema / properties / visibility / descriptionAdded value: +"Access level: \"private\" = this profile only, \"shared\" = cross-profile readable, \"global\" = system-wide"
- Changed
recall12 fields changed- changed
Input schema / properties / agent_body / descriptionPrevious value: -"Optional body scope key; defaults to MCP_AGENT_BODY when present"New value: +"Filter to a specific persona/body scope" - added
Input schema / properties / body / descriptionAdded value: +"Which persona profile to search in (e.g. \"coco\", \"toto\", \"system\")" - changed
Input schema / properties / debug_explain / descriptionPrevious value: -"Include query/hit token overlap debug details"New value: +"When true, include token overlap details in each result for debugging relevance" - changed
Input schema / properties / environment / descriptionPrevious value: -"Optional environment filter"New value: +"Filter to a specific environment label" - added
Input schema / properties / include_global / descriptionAdded value: +"Include globally visible chunks in results" - added
Input schema / properties / include_private / descriptionAdded value: +"Include private chunks in results" - added
Input schema / properties / include_shared / descriptionAdded value: +"Include shared-visibility chunks in results" - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of chunks to return (default 5)" - added
Input schema / properties / min_similarity / descriptionAdded value: +"Minimum cosine similarity threshold. Raise for higher precision, lower for broader recall." - changed
Input schema / properties / query / descriptionPrevious value: -"Semantic recall query text"New value: +"Natural language query describing what knowledge you need. The system finds semantically similar chunks — describe the concept, not just keywords." - added
Input schema / properties / scope / descriptionAdded value: +"Search scope: \"this_body\" for current profile only, \"all_bodies\" for cross-persona search" - changed
Input schema / properties / type / descriptionPrevious value: -"Optional chunk type filter"New value: +"Filter by chunk type (e.g. \"insight\", \"digest\", \"observation\")"
- Changed
search_memories7 fields changed- changed
Input schema / properties / agent_body / descriptionPrevious value: -"Optional body scope key; defaults to source/body/env inference"New value: +"Filter results to a specific persona/body (e.g. \"coco\", \"toto\")" - changed
Input schema / properties / environment / descriptionPrevious value: -"Optional environment filter"New value: +"Filter results to a specific environment (e.g. \"production\", \"staging\")" - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of results to return" - added
Input schema / properties / min_similarity / descriptionAdded value: +"Minimum cosine similarity threshold for results (range -1 to 1). Higher values return fewer but more relevant matches." - changed
Input schema / properties / query / descriptionPrevious value: -"Semantic search query text"New value: +"Natural language search query. Describe what you are looking for — semantic matching finds relevant results even without exact keywords." - added
Input schema / properties / scope / descriptionAdded value: +"Search scope: \"this_body\" searches only the current profile, \"all_bodies\" searches across all personas." - added
Input schema / properties / unexpired_only / descriptionAdded value: +"When true (default), exclude expired memories from results"
- Changed
session_boot2 fields changed- added
Input schema / properties / recall_limit / descriptionAdded value: +"Maximum recall results per category (identity/workflow/status, default 5)" - added
Input schema / properties / source / descriptionAdded value: +"Source tool identifier (e.g. \"warp\", \"cursor\", \"perplexity\") for provenance tracking"
- Changed
soft_forget3 fields changed- changed
Input schema / properties / forgotten_at / descriptionPrevious value: -"Optional ISO timestamp override; defaults to now"New value: +"Custom expiration timestamp in ISO 8601 format. Defaults to now if omitted." - changed
Input schema / properties / ids / descriptionPrevious value: -"Short-memory IDs (UUID) to expire immediately"New value: +"Array of short-term memory UUIDs to expire. Up to 50 at a time." - changed
Input schema / properties / reason / descriptionPrevious value: -"Optional note for why these memories are being soft-forgotten"New value: +"Brief explanation of why these memories are being forgotten (for audit trail)"
14 tool updates
v0.1.0- First observed
batch_promote - First observed
demote_memory - First observed
dream_ingest - First observed
explain_memory - First observed
health_check - First observed
insert_memory - First observed
list_memories - First observed
memory_ingest - First observed
recall - First observed
reload_source_registry - First observed
search_memories - First observed
session_boot - First observed
session_close - First observed
soft_forget
TDQS
Each tool has a clearly distinct purpose: short-term vs long-term memory, different operations (insert, list, search, recall, get, demote, batch promote, etc.). No two tools overlap in functionality.
Most tools follow a verb_noun pattern (e.g., insert_memory, list_memories, batch_promote). The single-word 'recall' is a minor deviation, and 'get_full' is slightly vague, but overall consistent.
16 tools is slightly above the typical 3-15 range, but the scope is well-defined for a memory management system. Each tool earns its place for short-term, long-term, session, and admin operations.
Covers the full lifecycle: insert short-term, promote to long-term, recall, retrieve, demote, expire, health checks, session boot/close. Only minor missing features like update or hard delete, which are design choices.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Persistent memory for AI agents across Claude, ChatGPT and any MCP client.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA persistent long-term memory system that enables AI clients to store and recall notes, code, and research via semantic search. It utilizes Google Gemini embeddings and Supabase pgvector to provide a secure, searchable 'Second Brain' for MCP-compatible applications.19MIT
- AlicenseNot gradedqualityDmaintenanceSelf-hosted semantic memory for AI agents. Save worklogs, decisions, and notes via MCP, then recall them across sessions by meaning rather than keyword. Backed by Postgres + pgvector with local embeddings (multilingual-e5-base).1MIT
- AlicenseAqualityDmaintenanceProvides persistent memory with semantic search for MCP-based AI agents, enabling them to store and recall information across sessions using vector embeddings.41MIT
- AlicenseNot gradedqualityCmaintenancePersistent, semantically-searchable memory for AI agents using local PostgreSQL, pgvector, and Ollama embeddings, exposed via MCP with hybrid retrieval, knowledge graph, and auto-recall hook.2MIT
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/Marsmanleo/MarsNMe'
If you have feedback or need assistance with the MCP directory API, please join our Discord server