poke-conduit
Enables management of a durable backlog of notes, proactive reminders, multi-agent council, and availability status through Poke, an iMessage-based assistant.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@poke-conduitAdd a note to buy groceries later"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
poke-conduit
The durable brain Poke consults. Poke already lives in iMessage (sanctioned, no Apple API, no ban risk) and is an MCP client that calls external MCP servers. poke-conduit inverts the usual integration: instead of building our own iMessage transport, Poke is the front-end terminal and poke-conduit is the MCP server it calls — a production-shaped, durable, multi-agent backend.
iMessage ──► Poke (MCP client) ──► poke-conduit /mcp ──► Postgres (Neon)
▲ │ orchestrator · worker-agents
└───── proactive push ───┘ council · backlog · scheduler
(Poke inbound API)You text Poke; Poke calls a tool here; poke-conduit does durable work and can text you back later through Poke's inbound API (async council verdicts, fired reminders).
What it does
Capability | Tools | Notes |
Queued-notes backlog (flagship) |
| Durable to-read / to-do queue, 1-based refs, pinning. |
Council (multi-agent) |
| Fans a hard question out to six persona agents (Builder · Skeptic · Operator · User-Advocate · Strategist · Pragmatist), then a synthesizer makes the call. |
Proactive reminders |
| Minute-resolution scheduler fires due reminders and pushes them via Poke. One-shot or |
Availability / DND |
|
|
Recipes |
| Saved routines. A recipe is a free-text prompt and/or an executable |
Related MCP server: MCP Agent Memory
Architecture
A few small, single-responsibility seams make the whole thing testable offline and deployable with just Neon:
Hand-rolled MCP (
src/mcp/,src/http/core.ts) — a Streamable-HTTP JSON-RPC handler over WebRequest/Response. No SDK: the surface Poke speaks is tiny, and hand-rolling keeps it edge-runtime-compatible and fully unit-testable. (Same choice thepoke-amb-bridgemade.)POST /mcpis rate-limited per identity (Poke user id, else IP) via aRateLimiterport (src/http/ratelimit.ts) — in-memory locally, Postgres-backed in prod; a static landing page is served at/, and a browserGET /mcpreturns friendly server info instead of a 500.Storeport (src/store/) — oneSqlStoreruns on pg-mem (tests /serve/ demo) and Neon (prod) over an injectedSqldriver. All timestamps are ISO text so they sort lexically and round-trip byte-identically between the two.Modelport (src/model/) —ClaudeModelwhenANTHROPIC_API_KEYis set, else a deterministicMockModel(so tests and the demo need zero credentials).Stepseam (src/durable/step.ts) — council logic is written once againstStep. It runs underLocalStep(in-process, memoized) inline within Vercel's 300 s budget by default, or on Inngest for true serverless durability when configured. The async council routes through an optionaldispatchAsyncCouncilprovider (src/durable/inngest.ts): setINNGEST_EVENT_KEY(andnpm install inngest) and runs survive function freezes with per-step retries; leave it unset and it transparently falls back to the inline path. Inngest stays out of the 3-dep core — it's loaded lazily through a non-literal import, so the package is needed only when the feature is switched on.Two credentials, two directions — inbound (Poke → conduit:
Bearer/x-poke-key+ injectedx-poke-user-id, gated byMCP_AUTH_ENFORCE) is distinct from outbound (conduit → Poke:POKE_API_KEYto Poke's inbound API, which makes Poke act on the message).
Run it locally
No credentials required — it falls back to pg-mem + MockModel + a mock Poke client.
npm install
npm test # 129 tests (unit + tool handlers + full MCP wire e2e)
npm run demo # narrated, self-asserting end-to-end walkthrough (22 checks)
npm run serve # local HTTP server: GET / · POST /mcp · GET /cron · GET /healthzThe demo runs the real wire path (handleMcp(Request) → Response) and never sends a real
message. Set ANTHROPIC_API_KEY first to watch the council deliberate with real Claude:
export ANTHROPIC_API_KEY=sk-ant-...
npm run demoDrive the local server by hand:
npm run serve &
curl -s localhost:7411/mcp -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq '.result.tools | length' # 13Deploy
See DEPLOY.md — Vercel (edge functions) + Neon, env vars, the cron schedule
caveat, and how to point Poke at your /mcp endpoint.
Project layout
api/ mcp.ts · cron.ts · inngest.ts · healthz.ts · _store.ts (Vercel edge entry points)
public/ index.html (static landing page served at /)
src/
config.ts · ids.ts
store/ types · schema · sql (SqlStore) · pgmem · pg (Neon) · index
model/ types · mock · claude · index
durable/ step.ts (Step · LocalStep · fromInngestStep) · inngest.ts (optional durable provider)
poke/ index.ts (PokeClient · HttpPokeClient · MockPokeClient)
agents/ personas · worker · council · orchestrator
tools/ backlog · reminders · status · recipes · recipe-runner · council · index
mcp/ auth.ts · server.ts (JSON-RPC)
http/ core.ts (Request→Response core) · ratelimit.ts (RateLimiter port)
scheduler.ts · render.ts · serve.ts · demo.ts
test/ store · model · step · council · council-async · scheduler · render · auth · tools · recipe-runner · mcp · ratelimit
docs/superpowers/ specs/ · plans/Built as a finished MVP from a design spec → plan → task-by-task implementation, tests written
immediately after each unit. See docs/superpowers/ for the spec (with the as-built addendum) and
the implementation plan.
This server cannot be deployed
Maintenance
Related MCP Connectors
- OctopadOAuthapp.octopad
The back-office workspace for your team's AIs: tasks, knowledge and context shared over MCP.
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Work management where AI agents are first-class members: tasks, projects, memory over hosted MCP
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables deployment of autonomous AI agents with memory and tool execution capabilities through a WebSocket-based MCP protocol. Provides production-ready infrastructure with REST API access, persistent state management, and extensible function registry for building self-hosted AI systems.-
- AlicenseNot gradedqualityCmaintenanceA production-ready MCP server that enables multiple AI agents to collaborate through a shared, concurrency-safe memory space. It supports advanced search, full CRUD operations, and automatic backups to facilitate asynchronous communication between agents.MIT
- AlicenseCqualityCmaintenanceUnified durable team memory MCP server with tools for session management, task tracking, handoff protocol, and search, plus a multi-provider LLM client.8MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants with reliable reminders, persistent memory, task tracking, and activity history through 20 MCP tools, with a multi-user web dashboard and support for SQLite or PostgreSQL.41 npmMIT