Skip to content

Claude Code and Cursor

Claude Code and Cursor both start MCP servers from a JSON entry, and both use the same entry for Meaning Memory. Set up an agent workspace and an access policy first: steps 1 to 4 of the Quickstart.

{
"mcpServers": {
"meaning-memory": {
"command": "mm-mcp",
"env": {
"MM_AGENT": "support-bot",
"MM_ACTOR": "support-bot",
"MM_BACKEND": "file",
"MM_WORKSPACE": "/srv/support-bot-mm",
"MM_CONFIG_DIR": "/srv/support-bot-mm",
"MM_SCOPE_AUTH_CONFIG": "/srv/scope_auth.yaml",
"MM_ALLOW_INTERNAL": "1"
}
}
}
}
Variable What it sets
MM_AGENT The agent the server runs as. Searches and writes are scoped to it.
MM_ACTOR The name recorded on every write and status change. Set it to the agent’s id, or to the name of the person or tool using it.
MM_BACKEND file or postgres. For Postgres, also set MM_POSTGRES_DSN.
MM_WORKSPACE, MM_CONFIG_DIR The workspace meaning-memory init created.
MM_SCOPE_AUTH_CONFIG The access policy.
MM_ALLOW_INTERNAL 1 turns on the tools that write memory and manage commitments.

If mm-mcp is not on the PATH the editor uses, give its full path as command, for example the bin/mm-mcp inside the virtual environment you installed into.

Add the entry to .mcp.json at the root of your project, which shares it with everyone working there, or run:

Terminal window
claude mcp add -s project meaning-memory \
-e MM_AGENT=support-bot -e MM_ACTOR=support-bot -e MM_BACKEND=file \
-e MM_WORKSPACE=/srv/support-bot-mm -e MM_CONFIG_DIR=/srv/support-bot-mm \
-e MM_SCOPE_AUTH_CONFIG=/srv/scope_auth.yaml -e MM_ALLOW_INTERNAL=1 \
-- mm-mcp

-s project writes the same .mcp.json shown above. Use -s user to make the server available in all your projects instead. Run /mcp inside Claude Code to see whether the server connected.

Put the same entry in .cursor/mcp.json in your project, or in ~/.cursor/mcp.json to use it in every project. Cursor lists the server and its tools under Settings → MCP.

Leave out MM_ALLOW_INTERNAL to give an assistant search without the ability to change anything. It can then use mm_search and the reporting tools, but not mm_remember, and not the commitment tools: listing what is due is turned off along with closing. Those calls return:

**Error:** 'mm_remember' is an internal agent-facing tool and is disabled by default. …

The tools stay in the assistant’s tool list; only the calls are refused. If your client can filter an MCP server’s tools, list just the ones you want the assistant to see, so it doesn’t keep trying the others.

Ask the assistant to run mm_status. A connected server answers with the agent’s name and its number of entries:

# Meaning Memory Status
- **Agent:** support-bot
- **Phase:** 2
- **Organization:** (not set)
- **Pipeline:** enabled
- **Total entries:** 8
- **Active entries:** 8
…

mm_status works without MM_ALLOW_INTERNAL, so it also checks a read-only connection. Then try a search:

mm_search({"query": "Acme"})
| # | mem_id | Sig | Eligible | Category | Date | Text |
|---|--------|-----|----------|----------|------|------|
| 1 | `140036cca0d9321b` | 0.80 | - | fact | 2026-10-03 | Call Acme about the renewal. |

If the server does not start, the editor’s MCP log shows why. The two usual causes are a missing access policy (MM_SCOPE_AUTH_CONFIG) and a command the editor cannot find.