If you're building agents that need to remember things across conversations, this gives you 16 tools for persistent context on Upstash Redis. It structures memory around three primitives: Profile (stable identity data), Signals (current state like open tasks), and Timeline (append-only event log). Instead of juggling SQL tables or cobbling together your own Redis schema, you get a single namespace-driven API that stores exactly what an LLM needs to make decisions. The MCP server exposes read/write operations for all three layers, handles multi-tenant isolation, and works in edge runtimes. Reach for it when you need agent memory that survives restarts and scales horizontally without reinventing the wheel.
Public tool metadata for what this MCP can expose to an agent.
acmi_profileCreate or update an entity profile in ACMI. Stores arbitrary JSON profile data for an entity (agent, thread, project, etc.).3 paramsCreate or update an entity profile in ACMI. Stores arbitrary JSON profile data for an entity (agent, thread, project, etc.).
idstringprofilestringnamespacestringacmi_signalUpdate AI signals for an entity. Signals are mutable KV state (mood, priorities, scores, etc.) that changes frequently.3 paramsUpdate AI signals for an entity. Signals are mutable KV state (mood, priorities, scores, etc.) that changes frequently.
idstringsignalsstringnamespacestringacmi_eventLog a timeline event for an entity. The workhorse tool — records timestamped events with source, kind, correlationId, and summary. Follows ACMI Communication Standard v1.1.6 paramsLog a timeline event for an entity. The workhorse tool — records timestamped events with source, kind, correlationId, and summary. Follows ACMI Communication Standard v1.1.
idstringkindstringsourcestringsummarystringnamespacestringcorrelationIdstringacmi_getFetch complete entity context: profile + signals + recent timeline events (last 10).2 paramsFetch complete entity context: profile + signals + recent timeline events (last 10).
idstringnamespacestringacmi_listList all entity IDs in a namespace.1 paramsList all entity IDs in a namespace.
namespacestringacmi_work_createCreate a new work item (cross-session project, task, or idea).2 paramsCreate a new work item (cross-session project, task, or idea).
idstringprofilestringacmi_work_eventLog a progress event on a work item.4 paramsLog a progress event on a work item.
idstringsourcestringsummarystringsessionIdstringacmi_work_signalUpdate signals for a work item (progress, blockers, metrics, etc.).2 paramsUpdate signals for a work item (progress, blockers, metrics, etc.).
idstringsignalsstringacmi_work_getRead a work item's full context: profile, signals, timeline (last 50), and sessions.1 paramsRead a work item's full context: profile, signals, timeline (last 50), and sessions.
idstringacmi_work_listList all work item IDs.List all work item IDs.
No parameter schema in public metadata yet.
acmi_catMulti-stream event merge view. Combines timeline events from multiple entities, sorted by timestamp. Supports --since filtering.3 paramsMulti-stream event merge view. Combines timeline events from multiple entities, sorted by timestamp. Supports --since filtering.
keysarraylimitnumbersincestringacmi_spawnLog an agent session spawn event. Records when an agent starts a new session.3 paramsLog an agent session spawn event. Records when an agent starts a new session.
agentIdstringmodelIdstringsessionIdstringacmi_bootstrapOne-shot agent context bundle. Fetches everything a fresh agent session needs: profile, signals, active threads, rollup, recent timeline, and spawns.1 paramsOne-shot agent context bundle. Fetches everything a fresh agent session needs: profile, signals, active threads, rollup, recent timeline, and spawns.
agentIdstringacmi_activeTrack agent thread engagement. Add/remove threads or list current active threads for an agent.4 paramsTrack agent thread engagement. Add/remove threads or list current active threads for an agent.
rolestringactionstringadd · remove · listagentIdstringthreadKeystringacmi_rollup_setSet the latest rollup snapshot for an agent (acmi:agent:<id>:rollup:latest). Pairs with acmi_bootstrap which reads it.2 paramsSet the latest rollup snapshot for an agent (acmi:agent:<id>:rollup:latest). Pairs with acmi_bootstrap which reads it.
rollupstringagentIdstringacmi_deleteDelete an ACMI key. Refuses protected paths (acmi:registry:*, acmi:notion-sync:*) and any non-acmi:* key. Defaults to dry-run; pass confirm=true to actually delete.2 paramsDelete an ACMI key. Refuses protected paths (acmi:registry:*, acmi:notion-sync:*) and any non-acmi:* key. Defaults to dry-run; pass confirm=true to actually delete.
keystringconfirmbooleanacmi_search_semanticPerform semantic search across fleet coordination history. Finds relevant past events, decisions, and work items based on natural language queries. Returns original ACMI correlationIds for linking.2 paramsPerform semantic search across fleet coordination history. Finds relevant past events, decisions, and work items based on natural language queries. Returns original ACMI correlationIds for linking.
limitnumberquerystring
The coordination backbone for AI agent fleets. Three Redis keys - Profile, Signals, Timeline.
ACMI is the open protocol for persistent agent context. Version v1.5 formalizes Fleet Comms Protocol: atomic pre/post events, wake-directives, handoff-ack chains, and correlation-aware timelines that make multi-agent work auditable instead of anecdotal.
Every entity stores exactly three things an LLM needs to make decisions:
Profile -> who (identity, preferences, stable facts)
Signals -> now (current state, blockers, next action)
Timeline -> then (append-only event log from every source)
The shape is intentionally small:
This repo ships the public ACMI package, the MCP server subpackage, and the docs that keep the fleet aligned:
@madezmedia/acmi - the TypeScript SDK, CLI, and conformance suite.mcp/ - @madezmedia/acmi-mcp, the MCP server for hosts that need direct ACMI access.SPEC.md - canonical protocol spec.CHANGELOG.md - release history, including the v1.5.0 fleet-comms update.docs/ - operator guide, cheatsheet, and protocol notes.The v1.5.0 release aligns the fleet around a shared event language:
source, kind, correlationId, summary event envelope disciplineagent:<id> source naming across the fleetnpm install @madezmedia/acmi
import { createAcmi } from "@madezmedia/acmi";
import { InMemoryAdapter } from "@madezmedia/acmi/adapters/in-memory";
const acmi = createAcmi(new InMemoryAdapter());
await acmi.profile.set("user:mikey", {
name: "Michael Shaw",
role: "operator",
location: "Charlotte, NC, USA",
});
await acmi.signals.set("user:mikey", "current_focus", "ACMI v1.5 fleet sync");
await acmi.timeline.append("user:mikey", {
ts: Date.now(),
source: "user:mikey",
kind: "coord-note",
correlationId: "acmiReadmeRefresh-0001",
summary: "[coord-note @fleet] README aligned to v1.5 and local assets.",
});
import { createAcmi } from "@madezmedia/acmi";
import { UpstashAdapter } from "@madezmedia/acmi/adapters/upstash";
const acmi = createAcmi(
new UpstashAdapter({
url: process.env.UPSTASH_REDIS_REST_URL!,
token: process.env.UPSTASH_REDIS_REST_TOKEN!,
})
);
| Adapter | Use case | Edge-compatible |
|---|---|---|
@madezmedia/acmi/adapters/in-memory | tests, examples, local dev | n/a |
@madezmedia/acmi/adapters/upstash | Vercel, Workers, edge runtimes | yes |
@madezmedia/acmi/adapters/redis | self-hosted Redis / Node | no |
ACMI v1.5 uses a shared event format so every significant action can be traced:
{
"ts": 1780000000000,
"source": "agent:codex",
"kind": "handoff-ack",
"correlationId": "codexGrantDraft-1780000000000",
"summary": "[handoff-ack @ops-center] Draft ready for review."
}
Rules that matter in practice:
[kind-tag @recipient] in summariessource prefixed with agent:, user:, or system:parentCorrelationIdACMI is used across the Mad EZ Media fleet as the common context layer for:
ops-center - orchestration and routingbentley - comms and governancecodex - coding and implementation supporthermes - deep scans and guardian checksandroid-worker - mobile bridge and notificationsMIT - Copyright Michael Shaw / Mad EZ Media
UPSTASH_REDIS_REST_URL*Upstash Redis REST URL (https://your-instance.upstash.io)
UPSTASH_REDIS_REST_TOKEN*secretUpstash Redis REST token (read-write)
hovecapital/read-only-local-postgres-mcp-server
cocaxcode/database-mcp
io.github.infoinlet-marketplace/mcp-mysql
io.github.cybeleri/database-admin
io.github.yash-0620/postgres-mcp-secured