poke-conduit

The durable brain Poke consults.

A production-shaped, multi-agent MCP server that Poke calls as a client — the inversion that turns an iMessage front-end into a durable agent backend.

live · 13 tools · 4 capabilities · 129 tests · 3 deps · edge runtime
01 — What it is

Poke is the client. This is the server.

Poke lives in iMessage (sanctioned, no Apple API, no ban risk) and is an MCP client that calls external MCP servers. poke-conduit is the server it calls. You text Poke; Poke calls a tool here; conduit does durable work — and can text you back later through Poke's inbound API when an async verdict lands or a reminder fires.

  iMessage ──▶ Poke (MCP client) ──▶ poke-conduit /mcp ──▶ Postgres (Neon)
                   ▲                        │  orchestrator · worker-agents
                   └────── proactive push ──┘  council · backlog · scheduler
                          (Poke inbound API)
02 — What it does

13 tools across four capabilities.

Queued-notes backlog — flagship

add_note · list_backlog · complete_note · pin_note

A durable to-read / to-do queue with 1-based references and pinning.

Council — multi-agent

ask_council · council_status

Fans a hard question out to six persona agents — Builder, Skeptic, Operator, User-Advocate, Strategist, Pragmatist — then a synthesizer makes the call. Reply inline, or return now and push the verdict when it's ready.

Proactive reminders

set_reminder · list_reminders

A minute-resolution scheduler fires due reminders and pushes them through Poke. One-shot or daily.

Status & recipes

get_status · set_status · list_recipes · install_recipe · run_recipe

Availability / DND (active · dnd · deep_work) and saved routines — a recipe can be a free-text prompt or an executable macro of conduit tool-calls that run_recipe dispatches in order.

03 — Architecture

A few small, testable seams.

04 — How Poke connects

Point a Poke MCP integration at /mcp.

Poke presents its API key as a Bearer token and auto-injects x-poke-user-id — so per-user scoping comes for free. Data tools are gated by MCP_AUTH_ENFORCE; the endpoint is rate-limited per identity. Proactive pushes go back out through Poke's inbound API.

05 — Run it locally

Zero credentials required.

Falls back to pg-mem + a mock model + a mock Poke client.

npm install
npm test       # 129 tests — unit, tool handlers, full MCP wire e2e
npm run demo   # narrated, self-asserting walkthrough (22 checks)
npm run serve  # local HTTP: GET / · POST /mcp · GET /cron · GET /healthz