MarsNMe is a cross-tool memory layer that lets Claude, Cursor, Perplexity, and other MCP clients share context across sessions instead of starting fresh each time. It runs on your own Supabase instance and exposes 13 MCP tools including insert_memory, search_memories with Jina semantic embeddings, and recall for long-term retrieval. Memory is split into short-term TTL and long-term semantic tiers, with isolated profiles per agent via MCP_PROFILE. You get session_boot to preload context, health_check for conflict detection, and soft_forget for cleanup. Reach for this when you're juggling multiple AI tools on the same project and want them to remember decisions, preferences, and architecture choices without re-explaining. Fully self-hosted over streamable HTTP.
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
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)
| Tool | Description |
|---|---|
insert_memory | Store short-term memory |
list_memories | List recent memories |
search_memories | Semantic search via Jina embeddings |
recall | Long-term chunk recall — ~80-char preview per match |
get_summary | Medium excerpt (~300 chars) of a chunk by ID |
get_full | Complete text of a long-term chunk by ID |
memory_ingest | Ingest long-term insight chunks |
dream_ingest | Dream-mode long-term ingestion |
session_boot | Start a session with context pre-load |
session_close | Close session, summarize, auto-promote expiring memories |
health_check | Coverage, expiry, conflict diagnostics |
reload_source_registry | Refresh source whitelist at runtime |
demote_memory | Demote a memory to lower priority |
soft_forget | Soft-delete a memory |
explain_memory | Explain a memory's provenance |
batch_promote | Promote expiring short-term memories to long-term |
recall returns ~80-char previews, then get_summary (~300 chars), then get_full (complete). Avoids token-dumping full chunks on every recall; drill down only when a preview looks relevant.session_close(to=<body>, note=...) leaves a note that session_boot(body=<target>) delivers and marks read — one agent can hand context to another.batch_promote on session_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 + draft sources: added to the source whitelist so the Grok body and Draft lifecycle hooks can write memories natively.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.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 MCP_PROFILE | 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 |
| Folder | Runtime | Who uses it |
|---|---|---|
marsnme-supabase/ | Supabase + Jina gateway (@marsnme/mcp-gateway) | Mars Group dogfood — Proxmox CT101 (CoCo / Toto soul memory) |
marsnme-cf/ | Cloudflare Workers + D1 + Vectorize | Self-host template; not the Proxmox deploy path |
marsnme-supabase/cloudflare-routing-worker/ | mcp.marsnme.com routing proxy | 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.
| Package | Description |
|---|---|
marsnme-supabase/ | Core MCP gateway — agent-agnostic memory backend (this package is published to npm as @marsnme/mcp-gateway) |
marsnme-supabase/cloudflare-routing-worker/ | Cloudflare Worker for mcp.marsnme.com — username-based MCP routing proxy with setup wizard |
marsnme-cf/ | Self-hosted MCP memory server on Cloudflare Workers + D1 + Vectorize (no Supabase needed) |
Go to mcp.marsnme.com/setup — create your personal MCP URL in 4 steps:
https://mcp.marsnme.com/your-nameThen 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.
SUPABASE_BASE_URLservice_role key → SUPABASE_SERVICE_ROLE_KEYSUPABASE_SERVICE_ROLE_KEY private. Never commit it.JINA_API_KEYFor 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.
git clone https://github.com/Marsmanleo/MarsNMe.git
cd MarsNMe
node --version
cp .env.example .env
.env:
SUPABASE_BASE_URLSUPABASE_SERVICE_ROLE_KEYJINA_API_KEYnpx supabase db push --db-url "<your-supabase-db-connection-string>"
--db-url must be the Postgres database connection string from Project Settings → Database → Connection string.SUPABASE_BASE_URL (https://<project-ref>.supabase.co, REST API URL).supabase_admin (not postgres).vector extension is enabled first (Database → Extensions).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.sqlMCP_PROFILE separates memory by agent or use case.default, my-agent, profile-a).coco and toto are still supported for compatibility.PORT is omitted, default port is profile-based (coco=18790, toto=18791, other profiles deterministic in 20000-29999).MCP_PROFILE=profile-a PORT=18790 npx @marsnme/mcp-gateway
curl -sS http://127.0.0.1:18790/health
If you only want a local demo path, use Docker Compose.
One-line install (recommended):
curl -fsSL https://marsnme.com/install.sh | bash
Or manually:
cp .env.example .env
# fill JINA_API_KEY in .env
docker compose up
This starts:
supabase/migrations/http://127.0.0.1:18790/mcp)curl -sS http://127.0.0.1:18790/health
When you need a temporary public endpoint for remote AI tools:
docker compose --profile tunnel up
Expected output (from tunnel logs):
https://xxxx.trycloudflare.com
Get MCP endpoint:
docker compose --profile tunnel logs tunnel | grep -Eo 'https://[^ ]+trycloudflare.com' | head -n1
# append /mcp
Notes:
trycloudflare.com URL is temporary (demo only).http://127.0.0.1:18790/mcp.MCP_TUNNEL_PROFILE (default coco)MCP_TUNNEL_REQUIRE_BEARER (default false for demo convenience)Local endpoint:
http://127.0.0.1:18790/mcpIf bearer auth is enabled (MCP_REQUIRE_BEARER=true), include:
Authorization: Bearer <your-token>claude_desktop_config.json (macOS default path: ~/Library/Application Support/Claude/claude_desktop_config.json).{
"mcpServers": {
"marsnme-cf": {
"url": "http://127.0.0.1:18790/mcp"
}
}
}
marsnme-cfhttp://127.0.0.1:18790/mcpSettings > Agents > MCP servers.http://127.0.0.1:18790/mcphttp://127.0.0.1:18790/mcpUse a streamable HTTP/SSE MCP entry:
{
"marsnme-cf": {
"url": "http://127.0.0.1:18790/mcp"
}
}
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}}}'
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.
initialize, notifications/initialized, tools/list, tools/call, pingcoco, toto)insert_memory (short-term memory)list_memoriessearch_memories (Jina embedding search)recall (~80-char preview) then get_summary (~300-char excerpt) then get_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)perplexity, cursor, warp, openclaw, hermes, draft, grok<profile>.memories<profile>.marsvault_chunksinsert_memorymarsnme-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.env.example to your local .env (do not commit real secrets).MCP_PROFILE (your profile identifier; this repo ships with legacy coco/toto)SUPABASE_BASE_URLSUPABASE_SERVICE_ROLE_KEYJINA_API_KEYMCP_REQUIRE_BEARER=trueMCP_CLIENT_IDMCP_CLIENT_SECRETHermes is optional and disabled by default:
HERMES_ENABLED=falseHERMES_DIGEST_MCP_URLHERMES_DIGEST_MCP_BEARER_TOKENHERMES_DIGEST_ORIGINHERMES_DIGEST_SOURCE_DIRDream 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.py
If 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.
docs/onboarding-a-mcp-zero-to-recall.mddocs/onboarding-b-platform-skill-install.mdskills/README.mdskills/perplexity/memory-daily-boot/SKILL.mdskills/cursor/memory-daily-boot/rule.mdcskills/warp/memory-daily-boot/prompt.mdMCP_PROFILE=profile-a npx @marsnme/mcp-gateway
MCP_PROFILE=profile-b npx @marsnme/mcp-gateway
Health endpoints:
GET /healthPOST /mcpUse marsnme-supabase/deploy/systemd/memory-mcp-gateway@.service with instances:
memory-mcp-gateway@profile-a.servicememory-mcp-gateway@profile-b.serviceRecommended env files:
/opt/mars-memory-mcp/shared/.env/opt/mars-memory-mcp/shared/.env.profile-a/opt/mars-memory-mcp/shared/.env.profile-bbash marsnme-supabase/deploy/phase2/build_release_artifact.sh
npx supabase db push --db-url "<postgres://supabase_admin:<password>@<host>:5432/postgres>"
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_admin
bash marsnme-supabase/deploy/phase3/smoke_gate.sh --spawn-local
.github/workflows/publish-release.ymlv*marsnme-supabase/package.json versionmrel patch
mrel minor
mrel major
mrel 0.1.2
The helper updates marsnme-supabase/package.json and server.json, commits, tags, and pushes.
.env, runtime tokens, or oauth-clients.json.env.example committed as the only environment templateLICENSE)NOTICETRADEMARK.mdCONTRIBUTING.mdCLA.mdCHANGELOG.mdMCP_PROFILE*Profile ID used to separate memory data (for example: profile-a).
SUPABASE_BASE_URL*Supabase REST API project URL.
SUPABASE_SERVICE_ROLE_KEY*secretSupabase service role key.
JINA_API_KEY*secretJina AI API key for embedding-based tools.
PORTLocal HTTP port for the MCP endpoint. If omitted, defaults by MCP_PROFILE (coco=18790, toto=18791, others deterministic in 20000-29999).
io.github.ericm1018/skillfm-llm-cost-optimizer-openai-anthropic-usage
io.github.mikerawsonnz/llm-orchestration-agent
io.github.mikerawsonnz/authenticated-llm-agent
labforgedev/copilot-memory-mcp
csoai-org/agent-prompt-injection-firewall-mcp
io.github.mikerawsonnz/authenticated-multi-llm-agent