Перейти к основному содержимому

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_HERE

For 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" > .gitignore

Step 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 + listActionItems with getDecisions for 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.

Dijin Quickstart v0.1.0 · MCP protocol version 2025-06-18 · Last updated 2026-05-16.
Dijin Quickstart · Build a Claude-powered app in 30 minutes | Dijin