Quickstart
Build a Claude-powered app on Dijin in 30 minutes
From zero to a working daily-standup bot that pulls your Dijin memory through the MCP connector and lets Claude reason over it. Paste-and-run code, no boilerplate.
What you'll build
A small Node.js script that runs every morning, calls the Dijin MCP connector to fetch yesterday's sessions and your open action items, asks Claude to write a 3-bullet standup brief, and prints it to your terminal (or pipes it to Slack / email / iMessage — your call).
Total time: ~30 minutes from a blank folder. You only need a Dijin account and an Anthropic API key.
Prerequisites
- A Dijin account with a few recorded sessions — sign in at dijin.co/login and capture a couple of voice memos via the macOS / iOS app.
- An Anthropic API key from console.anthropic.com (free tier works for getting started).
- Node.js 20+ on your machine.
Step 1 — Get a Dijin OAuth token (5 min)
For app-side use (no human in the loop), open the sanity-check page below in your browser. It runs the full OAuth + PKCE flow against your own account and prints the issued dijin_pat_* bearer token to the page so you can copy it.
# 1. Open in browser, sign in, click Allow
open https://dijin.co/oauth/test
# 2. Copy the dijin_pat_* token shown on the result page
# 3. Save it as an env var
export DIJIN_TOKEN=dijin_pat_YOUR_TOKEN_HERE
export ANTHROPIC_API_KEY=sk-ant-api03-YOUR_KEY_HEREFor production use you'd run the standard OAuth dance from your own backend (RFC 7591 dynamic client registration is supported at /oauth/register). For this quickstart the sanity-check page is the fastest way to get a working token in under a minute.
Step 2 — Initialize the project (3 min)
mkdir dijin-standup-bot && cd dijin-standup-bot
npm init -y
npm install @anthropic-ai/sdk
echo "node_modules" > .gitignoreStep 3 — The bot (10 min)
Save this as standup.mjs:
// standup.mjs — Daily-standup bot powered by Dijin + Claude.
import Anthropic from "@anthropic-ai/sdk";
const DIJIN_MCP_URL =
"https://rwxqzunzxwqqwtnjirab.supabase.co/functions/v1/mcp-connector";
const DIJIN_TOKEN = process.env.DIJIN_TOKEN;
const anthropic = new Anthropic();
if (!DIJIN_TOKEN) {
console.error("Missing DIJIN_TOKEN env var. See Step 1.");
process.exit(1);
}
// Tiny MCP client — one POST per tool call.
async function callDijinTool(name, args = {}) {
const res = await fetch(DIJIN_MCP_URL, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${DIJIN_TOKEN}`,
},
body: JSON.stringify({
jsonrpc: "2.0",
id: Date.now(),
method: "tools/call",
params: { name, arguments: args },
}),
});
const json = await res.json();
if (json.error) throw new Error(json.error.message);
// MCP returns content array of text blocks; we pick the JSON one.
const block = json.result?.content?.find((c) => c.type === "text");
return block ? JSON.parse(block.text) : null;
}
// Pull yesterday's sessions + open action items in parallel.
const yesterday = new Date(Date.now() - 24 * 60 * 60 * 1000)
.toISOString()
.slice(0, 10);
const [sessionsResp, actionsResp] = await Promise.all([
callDijinTool("listSessions", { since: yesterday + "T00:00:00Z", limit: 20 }),
callDijinTool("listActionItems", { status: "open", limit: 20 }),
]);
const sessions = sessionsResp?.sessions ?? [];
const actions = actionsResp?.action_items ?? [];
// Hand it all to Claude with a tight prompt.
const msg = await anthropic.messages.create({
model: "claude-sonnet-4-5",
max_tokens: 600,
messages: [
{
role: "user",
content: `Write a 3-bullet daily standup note from this Dijin memory data.
Bullet 1: yesterday in one sentence.
Bullet 2: top 3 open action items by priority.
Bullet 3: one suggested next step.
Sessions: ${JSON.stringify(sessions, null, 2)}
Action items: ${JSON.stringify(actions, null, 2)}`,
},
],
});
console.log(msg.content[0].text);That's the whole bot. ~50 lines. Two MCP calls in parallel, one Claude call with the JSON dropped in as context.
Step 4 — Run it (1 min)
node standup.mjs
# Example output:
# • Yesterday you ran the Q2 strategy review with the team and locked
# Pro pricing at $20/mo plus the mobile-Q3 deferral.
# • Open & high-priority: (1) draft Q2 OKR doc by Fri, (2) review the
# Anthropic Claude integration spec, (3) update the pricing page.
# • Next step: send Sarah the OKR draft this morning so she can review
# before the board sync on Friday.Step 5 — Ship it (10 min)
Three deploy paths, pick whichever your team already uses:
- Slack at 9am every weekday: wrap the script in a Vercel Cron + Slack incoming-webhook POST. ~10 lines extra.
- Email digest: pipe the output to Resend / Postmark / SendGrid. ~5 lines.
- Local CLI: add it as a launchd job on macOS or a cron entry on Linux for an “every morning when I open the terminal” ritual. ~0 extra lines, just
crontab -e.
See dijin.co/docs/connector for the full tool catalog (12 read-only tools), the OAuth discovery chain, and config snippets for Claude Desktop, Cursor, Zed, and Claude Code.
What's next
- Replace
listSessions+listActionItemswithgetDecisionsfor a “decisions log” app. Same shape. - Add
getConflicts— surface contradictory claims your team has made over time. - Build a meeting-prep agent that listens for calendar events and emails you the relevant Dijin context an hour before each meeting.
- Adopt the DMF format in your own product so AI clients can query your users' data the same way they query Dijin's. See the protocol repo.
Stuck?
Email [email protected] with what you're building — we'll seed test data, review your integration, and amplify the launch when you ship.