Shared memory for AI agents on your own Postgres. The server never calls an LLM to write.
Setup
Choose your client, copy the config, then fill in any required environment variables.
Local
claude mcp add echo-memory --env ECHO_MEMORY_DATABASE_URL='<ECHO_MEMORY_DATABASE_URL>' --env ECHO_MEMORY_USER_ID='<ECHO_MEMORY_USER_ID>' --env ECHO_MEMORY_AGENT_ID='<ECHO_MEMORY_AGENT_ID>' -- uvx echo-mem~/.codex/config.toml
[mcp_servers.echo-memory]
command = "uvx"
args = ["echo-mem"]
env = { ECHO_MEMORY_DATABASE_URL = "<ECHO_MEMORY_DATABASE_URL>", ECHO_MEMORY_USER_ID = "<ECHO_MEMORY_USER_ID>", ECHO_MEMORY_AGENT_ID = "<ECHO_MEMORY_AGENT_ID>" }
# codex mcp add echo-memory --env ECHO_MEMORY_DATABASE_URL='<ECHO_MEMORY_DATABASE_URL>' --env ECHO_MEMORY_USER_ID='<ECHO_MEMORY_USER_ID>' --env ECHO_MEMORY_AGENT_ID='<ECHO_MEMORY_AGENT_ID>' -- uvx echo-mem~/.cursor/mcp.json
{
"mcpServers": {
"echo-memory": {
"command": "uvx",
"args": [
"echo-mem"
],
"env": {
"ECHO_MEMORY_DATABASE_URL": "<ECHO_MEMORY_DATABASE_URL>",
"ECHO_MEMORY_USER_ID": "<ECHO_MEMORY_USER_ID>",
"ECHO_MEMORY_AGENT_ID": "<ECHO_MEMORY_AGENT_ID>"
}
}
}
}.vscode/mcp.json
{
"servers": {
"echo-memory": {
"type": "stdio",
"command": "uvx",
"args": [
"echo-mem"
],
"env": {
"ECHO_MEMORY_DATABASE_URL": "<ECHO_MEMORY_DATABASE_URL>",
"ECHO_MEMORY_USER_ID": "<ECHO_MEMORY_USER_ID>",
"ECHO_MEMORY_AGENT_ID": "<ECHO_MEMORY_AGENT_ID>"
}
}
}
}~/.gemini/settings.json
{
"mcpServers": {
"echo-memory": {
"command": "uvx",
"args": [
"echo-mem"
],
"env": {
"ECHO_MEMORY_DATABASE_URL": "<ECHO_MEMORY_DATABASE_URL>",
"ECHO_MEMORY_USER_ID": "<ECHO_MEMORY_USER_ID>",
"ECHO_MEMORY_AGENT_ID": "<ECHO_MEMORY_AGENT_ID>"
}
}
}
}claude_desktop_config.json
{
"mcpServers": {
"echo-memory": {
"command": "uvx",
"args": [
"echo-mem"
],
"env": {
"ECHO_MEMORY_DATABASE_URL": "<ECHO_MEMORY_DATABASE_URL>",
"ECHO_MEMORY_USER_ID": "<ECHO_MEMORY_USER_ID>",
"ECHO_MEMORY_AGENT_ID": "<ECHO_MEMORY_AGENT_ID>"
}
}
}
}.trae/mcp.json
{
"mcpServers": {
"echo-memory": {
"command": "uvx",
"args": [
"echo-mem"
],
"env": {
"ECHO_MEMORY_DATABASE_URL": "<ECHO_MEMORY_DATABASE_URL>",
"ECHO_MEMORY_USER_ID": "<ECHO_MEMORY_USER_ID>",
"ECHO_MEMORY_AGENT_ID": "<ECHO_MEMORY_AGENT_ID>"
}
}
}
}Remote
claude mcp add --transport http echo-memory https://api.echo-mem.com/mcp --header 'Authorization: <AUTHORIZATION>'~/.codex/config.toml
[mcp_servers.echo-memory]
url = "https://api.echo-mem.com/mcp"
http_headers = { Authorization = "<AUTHORIZATION>" }
# codex mcp add echo-memory --url https://api.echo-mem.com/mcp~/.cursor/mcp.json
{
"mcpServers": {
"echo-memory": {
"url": "https://api.echo-mem.com/mcp",
"headers": {
"Authorization": "<AUTHORIZATION>"
}
}
}
}.vscode/mcp.json
{
"servers": {
"echo-memory": {
"type": "http",
"url": "https://api.echo-mem.com/mcp",
"headers": {
"Authorization": "<AUTHORIZATION>"
}
}
}
}~/.gemini/settings.json
{
"mcpServers": {
"echo-memory": {
"httpUrl": "https://api.echo-mem.com/mcp",
"headers": {
"Authorization": "<AUTHORIZATION>"
}
}
}
}claude_desktop_config.json · Customize › Connectors › Add custom connector
{
"mcpServers": {
"echo-memory": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.echo-mem.com/mcp",
"--header",
"Authorization:<AUTHORIZATION>"
]
}
}
}.trae/mcp.json
{
"mcpServers": {
"echo-memory": {
"url": "https://api.echo-mem.com/mcp",
"headers": {
"Authorization": "<AUTHORIZATION>"
}
}
}
}Environment variables
ECHO_MEMORY_DATABASE_URLECHO_MEMORY_USER_IDECHO_MEMORY_AGENT_ID
Replace the placeholders with your own credentials and keep them out of version control.