cf-memory
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 testIntegraciones 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 cardLo 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_deleteon_session_end— ingesta automática de toda la sesión para extraer hechosInyecció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 9120Agent 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
Crea un token con permiso de Agent Memory
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? |
| 0ms | No — caché + segundo plano |
| 0ms | No — hilo de demonio |
| 1.3–3.8s | Iniciada por el usuario |
| ~5s | Iniciada por el usuario |
| ~0.4s | Iniciada por el usuario |
| ~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 cardDesarrollo
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/ -vLicencia
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 testIntegraciones 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 cardLo 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_deleteon_session_end— ingesta automática de toda la sesión para extraer hechosInyecció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.gitEl 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 9120Ficha 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 |
| Sí | Token de API de Cloudflare con permiso de Agent Memory |
| No | ID de cuenta de Cloudflare (por defecto: Iceberg Media) |
| No | Nombre del namespace (por defecto: |
| No | Nombre del perfil (por defecto: |
Obtener un token de API de Cloudflare
Crea un token con permiso de Agent Memory
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? |
| 0ms | No — caché + segundo plano |
| 0ms | No — hilo de demonio |
| 1.3–3.8s | Iniciada por el usuario |
| ~5s | Iniciada por el usuario |
| ~0.4s | Iniciada por el usuario |
| ~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 cardDesarrollo
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/ -vLicencia
MIT
This server cannot be installed
Maintenance
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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