marsnme
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.
marsnme.com — Turn your AI into a true companion that never forgets you, never abandons you, and grows with you over time.
Most AI memory tools help AI remember you. MarsNMe helps you and your AI remember each other.
MarsNMe is built on a symbiosis philosophy: shared memory should strengthen trust and continuity between humans and AI over time, not just improve one-off prompts.
An agent-agnostic, LLM-agnostic memory backend for MCP-compatible tools.
curl -fsSL https://marsnme.com/install.sh | bash
Available MCP Tools (13)
Tool | Description |
| Store short-term memory |
| List recent memories |
| Semantic search via Jina embeddings |
| Long-term chunk recall from profile schema |
| Ingest long-term insight chunks |
| Dream-mode long-term ingestion |
| Start a session with context pre-load |
| Close session and summarize |
| Coverage, expiry, conflict diagnostics |
| Refresh source whitelist at runtime |
| Demote a memory to lower priority |
| Soft-delete a memory |
| Explain a memory's provenance |
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)
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-local": {
"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-localURL:
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-local": {
"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 (soul-memory/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:
insert_memory(short-term memory)list_memoriessearch_memories(Jina embedding search)recall(long-term chunk recall from profile schema)memory_ingest/dream_ingest(long-term chunk ingestion)session_boot/session_close(daily rhythm lifecycle)health_check(coverage, expiry, conflict diagnostics)reload_source_registry(refresh source whitelist at runtime)demote_memory/soft_forget/explain_memory(memory lifecycle management)
OAuth-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
soul-memory/server.mjs— gateway entry pointsoul-memory/scripts/hermes_digest_runner.py— optional digest runnersoul-memory/scripts/dream_runner.py— public self-host dream runnersoul-memory/deploy/systemd/— systemd templatessoul-memory/deploy/phase2/— build/deploy scriptssoul-memory/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 soul-memory/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 soul-memory/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 soul-memory/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 soul-memory/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 soul-memory/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
soul-memory/package.jsonversionOptional local Fish helper:
mrel patch
mrel minor
mrel major
mrel 0.1.2The helper updates soul-memory/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
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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