MCP Server
ACMI ships as a Model Context Protocol server. The hosted path is Streamable HTTP at /api/mcp (17 tools, OAuth 2.1). Local agents use stdio @madezmedia/acmi-mcp. Both talk to Redis by POSTing a JSON command array — Polar HTTPS exec is canonical; Upstash Cloud REST still works as a secondary.
Canonical Redis
POST https://acmi-redis-u70402.vm.elestio.app/bridge/exec
Authorization: Bearer vm-local-bridge
Content-Type: application/json
["PING"] → {"result":"PONG"}
/bridge/exec/ (trailing slash) is a hard 404. Path-style Upstash /GET/key is not implemented.
Hosted MCP (Smithery / Claude.ai)
Endpoint: https://acmi-product.vercel.app/api/mcp
Listing: smithery.ai/servers/madezmediapartners/acmi-mcp
initializeandtools/listare public (Smithery scan).tools/callneeds Polar exec (or Upstash) creds via Smithery?config=,x-upstash-*/x-acmi-bridge-*headers, or OAuth 2.1 + PKCE.- OAuth discovery:
/.well-known/oauth-authorization-serverand/.well-known/oauth-protected-resource.
Smithery form values (madez fleet)
upstashRedisRestUrl = https://acmi-redis-u70402.vm.elestio.app/bridge/exec upstashRedisRestToken = vm-local-bridge
Field names stay upstashRedisRest* so existing Smithery connections do not break. The values are Polar exec, not Upstash Cloud.
Local stdio (Claude Desktop / Grok / Codex / OpenClaw)
{
"mcpServers": {
"acmi": {
"command": "acmi-mcp",
"env": {
"ACMI_BRIDGE_URL": "https://acmi-redis-u70402.vm.elestio.app/bridge/exec",
"ACMI_BRIDGE_TOKEN": "vm-local-bridge",
"ACMI_DEFAULT_TENANT": "madez",
"ACMI_ALLOWED_TENANTS": "madez,client:duane,client:suzanne"
}
}
}
}
UPSTASH_REDIS_REST_URL / _TOKEN pointing at the same Polar exec URL also work. Do not set ACMI_REDIS_HOST.
Tool Reference (17 hosted tools)
1. acmi_profile
Create or update an entity's hard state (name, stage, specs).
Params: namespace id profile (JSON string)
2. acmi_signal
Update AI-synthesized soft state (sentiment, priorities, scores). Mutable, changes frequently.
Params: namespace id signals (JSON string)
3. acmi_event
The workhorse. Log a timestamped event to the timeline. Follows Communication Standard v1.1.
Params: namespace id source summary kind (optional) correlationId (optional)
4. acmi_get
Fetch complete entity context: profile + signals + last 10 timeline events.
Params: namespace id
5. acmi_list
List all entity IDs in a namespace.
Params: namespace
6. acmi_work_create
Create a cross-session project, task, or idea.
Params: id profile (JSON string)
7. acmi_work_event
Log progress on a work item. Optionally bind to a session ID.
Params: id source summary sessionId (optional)
8. acmi_work_signal
Update work item signals (progress, blockers, metrics).
Params: id signals (JSON string)
9. acmi_work_get
Read a work item's full context: profile + signals + timeline (last 50) + sessions.
Params: id
10. acmi_work_list
List all work item IDs.
Params: none
11. acmi_cat
Multi-stream merge view. Combines timeline events from multiple entities, sorted by timestamp. Supports time filtering.
Params: keys (string array) since (e.g. "24h", "7d") limit
12. acmi_spawn
Log an agent session start. Records when an agent boots, with model and session info.
Params: agentId sessionId (optional) modelId (optional)
13. acmi_bootstrap
One-shot agent context bundle. Fetches everything a fresh session needs: profile, signals, active threads, rollup, recent timeline, and spawns.
Params: agentId
14. acmi_active
Track agent thread engagement. Add/remove threads or list current active threads.
Params: agentId action ("add"|"remove"|"list") threadKey role
15. acmi_rollup_set
Write the latest session rollup for an agent (read by acmi_bootstrap).
Params: agentId rollup (JSON string)
16. acmi_delete
Delete an ACMI key. Dry-run by default; pass confirm=true to actually delete. Protected prefixes refused.
Params: key confirm (optional)
17. acmi_search_semantic
Semantic search across fleet coordination history. Returns original correlationIds.
Params: query
Local stdio also exposes acmi_mcp_status and acmi_tenant_list.
Package
{
"name": "@madezmedia/acmi-mcp",
"version": "2.0.2"
}
Example: Multi-Agent Coordination
# Agent 1 claims a task acmi_event("thread", "agent-coordination", "claude-engineer", "Claiming README rewrite for batch execution", { kind: "coord-claim", correlationId: "lock-readme-1745947200000" }) # Agent 2 sees the claim and defers acmi_cat(["thread:agent-coordination"], { since: "10m" }) # → sees coord-claim from claude-engineer → defers # Agent 1 completes the task acmi_event("thread", "agent-coordination", "claude-engineer", "[done] README.md v1.2 — 320 lines", { kind: "coord-release", correlationId: "lock-readme-1745947200000" })