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.
1. Open the deploy link
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 name | Value |
|---|---|---|
mcp-memory-api-key | MCP_API_KEY | 32 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/mcpin 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>orX-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 do | What happens |
|---|---|
Change MCP_API_KEY under Secrets in the dashboard sidebar, then Restart | Every connected client is signed out and logs in again with the new key. The memories stay. |
| Restart or deploy with the key unchanged | Nothing. Clients stay logged in. |
| Remove the secret, or set one shorter than 32 characters | The 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
torchorsentence-transformersis 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/mcpand the health check at/health. Upstream's web dashboard is a separate server that it does not start.