Deploy MCP Memory Service

One long-term memory for all your AI assistants, running on the free plan.

MCP Memory Service gives your AI assistants a memory they share. Save a decision in one conversation and find it again by meaning in the next, from claude.ai, ChatGPT, Claude Code or any MCP client. This template runs the maintainer's published image as a remote MCP server with OAuth login, and adds a start script that wires it to Dockhold's port, App storage, public address and your API key. Nothing upstream is changed.

Start from the mcp-memory-service-starter template. Open the deploy link and sign in if asked.

2. Size the app and turn on App storage

Under App size, keep 256 MB. Under App storage, turn it on and pick 10 GB. The free plan covers both if your account has no managed database yet. The memories and your assistants' logins live on that storage, so they stay through every restart and deploy.

3. Add your API key

Under Environment, in the Secrets list, click New secret, tick it, and set its Env var name to MCP_API_KEY. Give the entry a name that belongs to this app, for example mcp-memory-api-key, because secrets are shared across your apps by name.

Secret (your name)Env var nameValue
mcp-memory-api-keyMCP_API_KEY32 or more random characters, for example the output of openssl rand -hex 32

The key is the password on your app's login page, and a client may also send it directly. Treat it as the key to every memory in the app.

4. Deploy and check it

Click Deploy and wait until the app shows as running. Open https://<your app>/health. It answers {"status":"ok"}.

If the app refuses to start, its page shows one line saying what is missing. App storage is on the app's Size tab; secrets are attached on its Variables tab. Fix it and click Restart.

5. Connect your assistant

The MCP address is https://<your app>/mcp. Each client logs in once: it opens your app's login page, you paste the API key, and the client keeps the session from then on.

  • claude.ai: in claude.ai's Settings, open Connectors and add a custom connector with the MCP address.
  • Claude Code: run claude mcp add --transport http memory https://<your app>/mcp, then run /mcp in Claude Code and log in.
  • ChatGPT: turn on Developer Mode and add a connector with the MCP address.
  • Clients without OAuth send the key itself, as Authorization: Bearer <key> or X-API-Key: <key>.

Try it

In one conversation, ask your assistant to remember something. Open a new conversation, or a different assistant, and ask what it remembers about it. Search works by meaning, so the question does not have to repeat the words you stored.

Two ways to use it

Run it. Deploy the repository as it is. You get a hosted memory server with nothing to maintain. The app stays on the version it was built with; a Restart does not pull new code. This is the way to try it.

Develop it. Click Use this template on GitHub to make your own copy, connect that repository in Dockhold, and deploy it. From then on every push redeploys the app, and an upgrade is a one-line change you merge. MCP Memory Service ships security fixes in its latest release only, so a server you use every day belongs on this path. A daily check in the template opens an issue when upstream releases a new version, with the exact line to change.

Only the second path gives you push-to-deploy. The first path never reads your GitHub account.

Your API key

What you doWhat happens
Change MCP_API_KEY under Secrets in the dashboard sidebar, then RestartEvery connected client is signed out and logs in again with the new key. The memories stay.
Restart or deploy with the key unchangedNothing. Clients stay logged in.
Remove the secret, or set one shorter than 32 charactersThe app refuses to start and its page says why.

A login gives the client an access token for 60 minutes and a refresh token for 30 days, and the client renews both by itself. The key that signs those tokens is created on the first start and kept on App storage, which is why restarts and deploys never sign anyone out.

Your data and upgrades

Your data is the mcp-memory folder on App storage (the memories and the logins) plus the API key secret. To keep your own copy of the memories, ask a connected assistant to page through them with the memory_list tool and save the result.

Upgrades happen on the Develop path: change the FROM line in your copy's Dockerfile to the version and digest the issue names, or merge the template's main into your copy, and push. The template's changelog says whether an upgrade changes your data. If a deploy rolls back because the new version doesn't come up healthy, read the app's log before you retry: a newer version may already have changed the database.

Troubleshooting

  • App refuses to start, asks for App storage: the memories live in a database file that needs somewhere durable. Turn on App storage on the app's Size tab; the app restarts on its own.
  • App refuses to start, names MCP_API_KEY: the secret is missing or shorter than 32 characters. Add or fix it on the app's Variables tab and restart.
  • The log warns that torch or sentence-transformers is missing: expected. The template runs upstream's slim image, which uses a smaller embedding engine on purpose. Search still works by meaning.
  • Nothing at https://<your app>/: this template serves the MCP endpoint at /mcp and the health check at /health. Upstream's web dashboard is a separate server that it does not start.

Next

Suggested guides
↑↓ to move ↵ to open Esc to close From the Dockhold docs