Skip to main content
Glama

CF Memory Plugin

Cloudflare Agent Memory para todos los agentes de codificación de IA y frameworks de LLM.

Dale a tu agente una memoria persistente y transversal entre sesiones gracias a Cloudflare Agent Memory, un servicio gestionado que se encarga de la recuperación, la extracción de hechos y los resúmenes de perfil. Sin base de datos vectorial que ejecutar, sin embeddings que gestionar y sin Worker que desplegar.

Para quién es

  • Agentes de codificación de IA (Claude Code, Codex, Cursor, Hermes, OpenClaw, TRAE, OpenCode, pi) que necesitan recordar contexto entre sesiones

  • Frameworks de LLM (LangChain, LangGraph) para construir agentes con memoria persistente

  • Clientes MCP (cualquier herramienta compatible con Model Context Protocol)

  • Sistemas agente a agente que usan el protocolo A2A

  • Cualquier persona que quiera un backend de memoria alojado y sencillo para su agente de IA

Qué hace

Capacidad

Descripción

Recordar

Almacena hechos, instrucciones y eventos: CF los clasifica automáticamente

Recuperar

Búsqueda semántica con respuestas sintetizadas (no solo coincidencias en bruto)

Ingerir

Alimenta los turnos de conversación: CF extrae hechos/eventos/instrucciones/tareas

Resumen

Perfil Markdown generado automáticamente con todo lo almacenado

Namespaces

Aísla la memoria por aplicación, usuario o entorno

Inicio rápido (con cualquier agente)

pip install git+https://github.com/hansakoch/cf-memory-plugin.git

# Set credentials
export MCP_CLOUDFLARE_API_KEY="your-cf-api-token"
export CF_ACCOUNT_ID="your-account-id"

# Test it works
cf-memory test

Integraciones con agentes

Clientes MCP (universal)

Funciona con cualquier cliente compatible con MCP: Claude Desktop, Cursor, Windsurf, Continue, Zed y más.

{
  "mcpServers": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID": "your-account-id"
      }
    }
  }
}

Herramientas expuestas: remember, recall, list_memories, get_memory, delete_memory, ingest, summary, list_namespaces, create_namespace, delete_namespace

Hermes

Se autodetecta mediante el punto de entrada de pip. No hay archivos que copiar.

# Install
pip install git+https://github.com/hansakoch/cf-memory-plugin.git

# Activate
hermes config set memory.provider cloudflare-memory

# Verify
hermes memory status

# Management
hermes cloudflare-memory status
hermes cloudflare-memory test
hermes cloudflare-memory namespaces
hermes cloudflare-memory card

Lo que Hermes obtiene:

  • prefetch() — 0ms (en caché + recuperación en segundo plano)

  • sync_turn() — 0ms (hilo de demonio para la ingesta)

  • 6 herramientas de agente: cf_remember, cf_recall, cf_list, cf_get, cf_summary, cf_delete

  • on_session_end — ingesta automática de toda la sesión para extraer hechos

  • Inyección del prompt de sistema con el estado del proveedor

Claude Code

Añade a .claude/mcp.json en tu proyecto:

{
  "mcpServers": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID": "your-account-id"
      }
    }
  }
}

O añádelo globalmente: claude mcp add cf-memory -- cf-memory serve

Codex (OpenAI)

Añade a ~/.codex/config.toml:

[mcp_servers.cf-memory]
command = "cf-memory"
args = ["serve"]
env = { MCP_CLOUDFLARE_API_KEY = "your-token", CF_ACCOUNT_ID = "your-account-id" }

Cursor

Añade a .cursor/mcp.json en tu proyecto:

{
  "mcpServers": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID": "your-account-id"
      }
    }
  }
}

OpenClaw

Añade a tu configuración de OpenClaw:

{
  "mcpServers": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID": "your-account-id"
      }
    }
  }
}

TRAE / TRAE CN / TraeCode CLI 2.0

Añade un servidor MCP en la configuración de TRAE o en .trae/mcp.json:

{
  "mcpServers": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID": "your-account-id"
      }
    }
  }
}

OpenCode

Añade a ~/.opencode/config.json:

{
  "mcp": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID": "your-account-id"
      }
    }
  }
}

pi

Añade un servidor MCP a la configuración de pi:

{
  "mcpServers": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID = "your-account-id"
      }
    }
  }
}

Agent Plugins 1.0

Instálalo como plugin:

pip install git+https://github.com/hansakoch/cf-memory-plugin.git

El paquete se registra mediante el punto de entrada hermes_agent.memory_providers. Cualquier host compatible con Agent Plugins 1.0 lo descubre automáticamente.

LangChain / LangGraph

import asyncio
from cloudflare_memory import CloudflareMemoryClient

# Use as a memory backend in your LangChain/LangGraph agent
client = CloudflareMemoryClient(
    account_id="your-account-id",
    api_token="your-token",
    namespace="my-agent",
    profile="user-123",
)

# Store a fact
entry = asyncio.run(client.remember("User prefers Python over JavaScript."))

# Recall
result = asyncio.run(client.recall("What programming language does the user prefer?"))
print(result.answer)  # "Python"

# Ingest a conversation
asyncio.run(client.ingest([
    {"role": "user", "content": "I'm building a RAG pipeline."},
    {"role": "assistant", "content": "Great! Let me help with that."},
]))

# Get summary
summary = asyncio.run(client.get_summary())

A2A (Agente a Agente)

Inicia el servidor A2A para que los agentes pares puedan descubrirlo y llamarlo:

cf-memory a2a --port 9120

Agent card at http://localhost:9120/.well-known/agent.json

Habilidades: remember, recall, ingest, list, get, summary

Python (independiente)

import asyncio
from cloudflare_memory import CloudflareMemoryClient

async def main():
    async with CloudflareMemoryClient(
        account_id="your-account-id",
        api_token="your-token",
        namespace="my-app",
        profile="default",
    ) as client:
        # Remember
        entry = await client.remember("User is based in London.")
        print(f"[{entry.type}] {entry.summary}")

        # Recall
        result = await client.recall("Where is the user based?")
        print(result.answer)

        # Ingest conversation (async — memories appear 3-8s later)
        await client.ingest([
            {"role": "user", "content": "I prefer dark mode."},
            {"role": "assistant", "content": "Noted!"},
        ])

        # Summary
        print(await client.get_summary())

asyncio.run(main())

Configuración

Variables de entorno

| Variable | | Obligatoria | Descripción | | ------------------------ | -------- | ------------------------------------------------- | | MCP_CLOUDFLARE_API_KEY | Sí | Token de API de Cloudflare con permiso de Agent Memory | | CF_ACCOUNT_ID | No | ID de cuenta de Cloudflare (por defecto: Iceberg Media) | | CF_MEMORY_NAMESPACE | No | Nombre del namespace (por defecto: hermes) | | CF_MEMORY_PROFILE | No | Nombre del perfil (por defecto: default) |

Cómo obtener un token de API de Cloudflare

  1. Ve a Cloudflare Dashboard → API Tokens

  2. Crea un token con permiso de Agent Memory

  3. Necesitas una suscripción de Workers de pago y acceso beta a Agent Memory

Límites (oficiales)

Característica

Límite

Messages ingest()

500

Tamaño de los mensajes

32 KB UTF-8

Consulta de recall

1 KB UTF-8

Identificador de sesión

64 caracteres

Nombre del perfil

100 caracteres

Nombre del namespace

32 caracteres


Rendimiento

La arquitectura está diseñada para no añadir nunca latencia a los turnos de tu agente:

Operación

Latencia

¿Bloquea?

prefetch()

0ms

No — caché + segundo plano

sync_turn()

0ms

No — hilo de demonio

remember

1.3–3.8s

Iniciada por el usuario

recall

~5s

Iniciada por el usuario

list

~0.4s

Iniciada por el usuario

summary

~0.8s

Iniciada por el usuario


Referencia de CLI

# Standalone
cf-memory test                          # Connectivity check
cf-memory serve [--transport stdio|sse] # MCP server
cf-memory a2a [--port 9120]             # A2A agent server
cf-memory card                          # Print agent card JSON

# Hermes plugin
hermes cloudflare-memory status         # Provider status
hermes cloudflare-memory test           # Full connectivity test
hermes cloudflare-memory namespaces     # List namespaces
hermes cloudflare-memory create-ns NAME # Create namespace
hermes cloudflare-memory delete-ns NAME # Delete namespace
hermes cloudflare-memory card           # Print agent card

Desarrollo

git clone https://github.com/hansakoch/cf-memory-plugin.git
cd cloudflare-memory
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest tests/ -v

Licencia

MIT

Wait, there are several issues in my attempted final: I inserted "> GXP11" with a blockquote. But the original "GXP11" is not a blockquote. I must not alter formatting. It should be just GXP11 on its own line. Also the first table header line "Variable | | Obligatoria" has an extra empty column, because I wrote "Variable | | Obligatoria | Descripción" - need correct table. I have "Obligatoria" and "Variable" should be 3 columns. Original header: | Variable | Required | Description |. So should be: | Variable | Obligatoria | Descripción |. I wrote "Variable | | Obligatoria | Descripción" including empty cell. Need fix.

Also I mistakenly used "Namespaces" instead of "Espacios de nombres" in translated table? I wrote Namespaces in final. I needed to decide. Let's finalize with "Espacios de nombres" as I decided. Also "temas" vs "eventos" in Ingerir row: "Alimenta los turnos de conversación: CF extrae hechos, eventos/instructions/tareas" — I earlier translated "eventos" not "temas". Need correct. Also in "Qué hace": "Alfred" no.

Need also "Nombres de namespace" vs "namespaces" in configure table. It should be "Nombre del namespace" maybe acceptable. But "namespace" is technical word, often used in Spanish. The original row "CF_MEMORY_NAMESPACE | No | Namespace name (default: hermes)" Could keep "Namespace name" as "Nombre del namespace" in Spanish. This is acceptable. But table header "Feature" etc.

Need "Iceberg Media" maybe "Iceberg Media" keep.

Need "Condition" "in the variables table" "No" -> "No" is not translated? "No" is same in English and Spanish. Yes. "Sí" for "Yes". Good.

Need "MCP server" vs "servidor MCP" good.

Need " Line " maybe "Enter" no.

Potential issue in "A2A (Agent-to-Agent)" heading: If translate to "A2A (Agente a Agente)", then "A2B" no. Good.

Need "OpenClaw" no.

Need "Linearize" no.

Let's carefully produce a corrected final with no extra formatting.

Also "GXP11" should not be inside blockquote; but if I write > GXP11 has changed formatting. Need avoid.

Also "Agent card at" should be Spanish: "Tarjeta de agente en" and then URL. Not "Agent card at".

Also "Brain" no.

Also I used double spaces in some lines, fine.

Another nuance: At "The package registers via hermes_agent.memory_providers entry point. Any Agent Plugins 1.0 compatible host discovers it automatically." I wrote "El paquete se retira mediante el punto de entrada hermes_agent.memory_providers."

Need "System prompt" maybe must keep "prompt de system"? Not code, but okay. "Injection" = "inyección".

Need "unavailable" rod.

Let's now write final clean version.

Potential issue "entidades" in "events". Use "hechos, eventos, instrucciones".

Another nuance: "Fact extraction" at bottom "para extraer hechos" correct.

Convoluted "What does it do" description: "Massage into" no.

Now final with careful formatting.

I'll output text without code fence. Make sure no ">" before GXP11. Use exactly line breaks.

Let's produce final# CF Memory Plugin

Cloudflare Memory para todos los agentes de codificación de IA y frameworks de LLM.

Dale a tu agente una memoria persistente y global entre sesiones con Cloudflare Agent Memory, un servicio gestionado que se encarga de la recuperación, la extracción de hechos y los resúmenes de perfil. Sin base de datos vectorial que ejecutar, sin embeddings que gestionar y sin Worker que desplegar.

Para quién está pensado

  • Agentes de codificación de IA (Claude Code, Codex, Cursor, Hermes, OpenClaw, TRAE, OpenCode, pi) que necesitan recordar el contexto entre sesiones

  • Frameworks de LLM (LangChain, LangGraph) para construir agentes con memoria persistente

  • Clientes MCP (cualquier herramienta compatible con Model Context Protocol)

  • Sistemas agente a agente que usan el protocolo A2A

  • Cualquier persona que quiera un backend de memoria alojado y sencillo para su agente de IA

Qué hace

Capacidad

Descripción

Recordar

Almacena hechos, instrucciones y eventos: CF los clasifica automáticamente

Recuperar

Búsqueda semántica con respuestas sintetizadas (no solo coincidencias en bruto)

Ingerir

Alimenta los turnos de conversación: CF extrae hechos, eventos, instrucciones y tareas

Resumen

Perfil Markdown de todo lo almacenado, generado automáticamente

Namespaces

Aísla la memoria por aplicación, usuario o entorno

Inicio rápido (cualquier agente)

pip install git+https://github.com/hansakoch/cf-memory-plugin.git

# Set credentials
export MCP_CLOUDFLARE_API_KEY="your-cf-api-token"
export CF_ACCOUNT_ID="your-account-id"

# Test it works
cf-memory test

Integraciones con agentes

Clientes MCP (universal)

Funciona con cualquier cliente compatible con MCP: Claude Desktop, Cursor, Windsurf, Continue, Zed y más.

{
  "mcpServers": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID": "your-account-id"
      }
    }
  }
}

Herramientas expuestas: remember, recall, list_memories, get_memory, delete_memory, ingest, summary, list_namespaces, create_namespace, delete_namespace

Hermes

Se detecta automáticamente mediante el punto de entrada de pip. No hay que copiar archivos.

# Install
pip install git+https://github.com/hansakoch/cf-memory-plugin.git

# Activate
hermes config set memory.provider cloudflare-memory

# Verify
hermes memory status

# Management
hermes cloudflare-memory status
hermes cloudflare-memory test
hermes cloudflare-memory namespaces
hermes cloudflare-memory card

Lo que Hermes obtiene:

  • prefetch() — 0ms (caché + recuperación en segundo plano)

  • sync_turn() — 0ms (hilo de demonio para la ingesta)

  • 6 herramientas de agente: cf_remember, cf_recall, cf_list, cf_get, cf_summary, cf_delete

  • on_session_end — ingesta automática de toda la sesión para extraer hechos

  • Inyección del prompt de system con el estado del proveedor

Claude Code

Añade a .claude/mcp.json en tu proyecto:

{
  "mcpServers": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID": "your-account-id"
      }
    }
  }
}

O añádelo globalmente: claude mcp add cf-memory -- cf-memory serve

Codex (OpenAI)

Añade a ~/.codex/config.toml:

[mcp_servers.cf-memory]
command = "cf-memory"
args = ["serve"]
env = { MCP_CLOUDFLARE_API_KEY = "your-token", CF_ACCOUNT_ID = "your-account-id" }

Cursor

Añade a .cursor/mcp.json en tu proyecto:

{
  "mcpServers": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID": "your-account-id"
      }
    }
  }
}

OpenClaw

Añade a tu configuración de OpenClaw:

{
  "mcpServers": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID": "your-account-id"
      }
    }
  }
}

TRAE / TRAE CN / TraeCode CLI 2.0

Añade un servidor MCP en los ajustes de TRAE o en .trae/mcp.json:

{
  "mcpServers": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID": "your-account-id"
      }
    }
  }
}

OpenCode

Añade a ~/.opencode/config.json:

{
  "mcp": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID": "your-account-id"
      }
    }
  }
}

pi

Añade un servidor MCP a la configuración de pi:

{
  "mcpServers": {
    "cf-memory": {
      "command": "cf-memory",
      "args": ["serve"],
      "env": {
        "MCP_CLOUDFLARE_API_KEY": "your-token",
        "CF_ACCOUNT_ID = "your-account-id"
      }
    }
  }
}

Agent Plugins 1.0

Instálalo como plugin:

pip install git+https://github.com/hansakoch/cf-memory-plugin.git

El paquete se registra mediante el punto de entrada hermes_agent.memory_providers. Cualquier host compatible con Agent Plugins 1.0 lo descubre automáticamente.

LangChain / LangGraph

import asyncio
from cloudflare_memory import CloudflareMemoryClient

# Use as a memory backend in your LangChain/LangGraph agent
client = CloudflareMemoryClient(
    account_id="your-account-id",
    api_token="your-token",
    namespace="my-agent",
    profile="user-123",
)

# Store a fact
entry = asyncio.run(client.remember("User prefers Python over JavaScript."))

# Recall
result = asyncio.run(client.recall("What programming language does the user prefer?"))
print(result.answer)  # "Python"

# Ingest a conversation
asyncio.run(client.ingest([
    {"role": "user", "content": "I'm building a RAG pipeline."},
    {"role": "assistant", "content": "Great! Let me help with that."},
]))

# Get summary
summary = asyncio.run(client.get_summary())

A2A (Agente a Agente)

Inicia el servidor A2A para que los agentes pares puedan descubrirlo y llamarlo:

cf-memory a2a --port 9120

Ficha del agente en http://localhost:9120/.well-known/agent.json

Habilidades: remember, recall, ingest, list, get, summary

Python (standalone)

import asyncio
from cloudflare_memory import CloudflareMemoryClient

async def main():
    async with CloudflareMemoryClient(
        account_id="your-account-id",
        api_token="your-token",
        namespace="my-app",
        profile="default",
    ) as client:
        # Remember
        entry = await client.remember("User is based in London.")
        print(f"[{entry.type}] {entry.summary}")

        # Recall
        result = await client.recall("Where is the user based?")
        print(result.answer)

        # Ingest conversation (async — memories appear 3-8s later)
        await client.ingest([
            {"role": "user", "content": "I prefer dark mode."},
            {"role": "assistant", "content": "Noted!"},
        ])

        # Summary
        print(await client.get_summary())

asyncio.run(main())

Configuración

Variables de entorno

Variable

Obligatoria

Descripción

MCP_CLOUDFLARE_API_KEY

Token de API de Cloudflare con permiso de Agent Memory

CF_ACCOUNT_ID

No

ID de cuenta de Cloudflare (por defecto: Iceberg Media)

CF_MEMORY_NAMESPACE

No

Nombre del namespace (por defecto: hermes)

CF_MEMORY_PROFILE

No

Nombre del perfil (por defecto: default)

Obtener un token de API de Cloudflare

  1. Ve a Cloudflare Dashboard → API Tokens

  2. Crea un token con permiso de Agent Memory

  3. Necesitas una suscripción de Workers de pago y acceso beta a Agent Memory

Límites (oficiales)

Característica

Límite

Mensajes por ingest()

500

Tamaño del mensaje

32 KB UTF-8

Consulta de recall

1 KB UTF-8

ID de sesión

64 caracteres

Nombre del perfil

100 caracteres

Nombre del namespace

32 caracteres


Rendimiento

Diseñado para no añadir jamás latencia a los turnos de tu agente:

Operación

Latencia

¿Bloquea?

prefetch()

0ms

No — caché + segundo plano

sync_turn()

0ms

No — hilo de demonio

remember

1.3–3.8s

Iniciada por el usuario

recall

~5s

Iniciada por el usuario

list

~0.4s

Iniciada por el usuario

summary

~0.8s

Iniciada por el usuario


Referencia de CLI

# Standalone
cf-memory test                          # Connectivity check
cf-memory serve [--transport stdio|sse] # MCP server
cf-memory a2a [--port 9120]             # A2A agent server
cf-memory card                          # Print agent card JSON

# Hermes plugin
hermes cloudflare-memory status         # Provider status
hermes cloudflare-memory test           # Full connectivity test
hermes cloudflare-memory namespaces     # List namespaces
hermes cloudflare-memory create-ns NAME # Create namespace
hermes cloudflare-memory delete-ns NAME # Delete namespace
hermes cloudflare-memory card           # Print agent card

Desarrollo

git clone https://github.com/hansakoch/cf-memory-plugin.git
cd cloudflare-memory
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest tests/ -v

Licencia

MIT

-
license - not tested
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.

  • Shared long-term memory vault for AI agents with 20 MCP tools.

  • Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.

View all MCP Connectors

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/hansakoch/cf-memory-plugin'

If you have feedback or need assistance with the MCP directory API, please join our Discord server