Duyetbot Agent
Concepts

Memory MCP

D1-backed persistent memory. Cross-session context. GitHub auth. MCP tools: authenticate/save/get/search/list.

TL;DR: Stores conversations in D1. Auth via GitHub. MCP tools enable agents to save/retrieve/search memory.

Table of Contents

ERD

            memory_users (1)
                |
                +-o---- owns ----o- memory_sessions (M)
                |                        |
                |                        +-o---- contains ----o- memory_messages (M)
                |
                +-o---- has ----o- memory_session_tokens (M)


TABLES:
------------------------------------------------

memory_users (PK: id)
  +- id (string, PK)
  +- github_id (string, UK)
  +- github_login (string)

memory_sessions (PK: id, FK: user_id)
  +- id (string, PK)
  +- user_id (string, FK)
  +- title (string)
  +- state (string)
  +- metadata (json)

memory_messages (PK: id, FK: session_id)
  +- id (int, PK)
  +- session_id (string, FK)
  +- role (string)
  +- content (string)
  +- timestamp (int)
  +- metadata (json)

memory_session_tokens (PK: token, FK: user_id)
  +- token (string, PK)
  +- user_id (string, FK)
  +- expires_at (int)

Key: User-isolated. Tokens expire 7d. Messages searchable.

MCP Tools

ToolInputOutputUsage
authenticategithub_tokensession_tokenAuth agents
save_memorymessages[], session_id?saved_countPersist convos ✅
get_memorysession_id, limit?messages[]Load context
search_memoryqueryresults[] w/score/contextSemantic recall
list_sessionslimit?sessions[] w/countSession mgmt

Auth Flow

  1. Agent calls authenticate(github_token)
  2. Verify GitHub -> Create user/session_token
  3. Use token for all ops

Code Snippet

apps/memory-mcp/src/mcp-agent.ts

this.server.tool('save_memory', 'Save messages', {
  session_id: z.string().optional(),
  messages: z.array(...),
}, async ({session_id, messages}) => {
  // D1 save
});

Quiz: Memory vs DO State?
A: Memory cross-session D1; DO per-convo state ✅

Related: Tools -> | Architecture ->

Next: Authenticate -> @duyetbot save_memory [{"role":"user","content":"test"}]

On this page