{"slug": "i-built-an-mcp-server-that-lets-claude-read-my-study-data-here-s-how", "title": "I built an MCP server that lets Claude read my study data — here's how", "summary": "A developer built an MCP server for the open-source study app Shiori that lets Claude Code access real-time study data, including assignments, grades, and notes. The server exposes six tools that read from a local JSON export, enabling queries like \"what assignments are due this week?\" without sending data through external APIs. The project runs entirely in the browser with localStorage and is available at shiori-v1.vercel.app.", "body_md": "**tl;dr** — Shiori is an open-source AI study app (React + Gemini). I added a Model Context Protocol server so you can ask Claude Code things like \"what assignments are due this week?\" and get real answers from your actual data.\n\nI was using Claude Code to help me study, but it had no idea what I was actually studying. I'd have to paste my notes, deadlines, and grades into the chat every time.\n\nWhat I wanted: Claude to already *know* my study context.\n\nShiori is a full study companion: assignments, grades, GPA predictor, AI flashcard generation, spaced repetition, AI quiz generator, habit tracker, focus mode (Pomodoro), leaderboard, and a syllabus importer that extracts all assignments from a PDF/text dump.\n\nIt runs entirely in the browser — no server needed for the core features. Data lives in localStorage. You can try it at ** shiori-v1.vercel.app** (click TRY DEMO, no account needed).\n\nThe interesting part: I added a `/mcp`\n\nserver that exposes 6 tools:\n\n```\nget_study_summary     → overview of assignments, grades, streaks\nget_assignments       → list with due dates, status, priority\nget_grades            → GPA, course grades, trend\nget_notes             → your markdown notes\nadd_assignment        → create assignment from Claude\nget_flashcard_decks   → deck names + mastery %\n```\n\nYou export your data from Shiori (Settings → Export Data), which writes `shiori-data.json`\n\n. The MCP server reads that file and serves it to Claude.\n\n``` js\n// mcp/index.js (simplified)\nserver.tool('get_assignments', async () => {\n  const data = JSON.parse(fs.readFileSync(DATA_PATH))\n  const upcoming = data.assignments\n    .filter(a => !a.completed)\n    .sort((a, b) => a.dueDate - b.dueDate)\n    .slice(0, 20)\n  return { content: [{ type: 'text', text: JSON.stringify(upcoming, null, 2) }] }\n})\n```\n\nAdd to `.claude/mcp.json`\n\n:\n\n```\n{\n  \"mcpServers\": {\n    \"shiori\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/Shiori-v1/mcp/index.js\"],\n      \"env\": { \"SHIORI_DATA_PATH\": \"/path/to/shiori-data.json\" }\n    }\n  }\n}\n```\n\nThen in Claude Code: `what's due this week?`\n\n→ Claude calls `get_assignments`\n\nand gives you a real answer.\n\nSame idea, add to `claude_desktop_config.json`\n\n:\n\n```\n{\n  \"mcpServers\": {\n    \"shiori\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/mcp/index.js\"]\n    }\n  }\n}\n```\n\nThe MCP pattern is powerful for personal tools. Your study data doesn't need to go through any API — it stays local. Claude reads the file directly. This is the \"bring your own context\" model taken seriously.\n\nI plan to add more tools: `create_study_plan`\n\n, `generate_quiz_from_notes`\n\n, `get_habit_streaks`\n\n.\n\n`mcp/README.md`\n\nin the repoStars appreciated — this is a solo project and GitHub discoverability matters for open source. PRs welcome — there are good-first issues open with exact file + line pointers.", "url": "https://wpnews.pro/news/i-built-an-mcp-server-that-lets-claude-read-my-study-data-here-s-how", "canonical_source": "https://dev.to/kaoriiako/i-built-an-mcp-server-that-lets-claude-read-my-study-data-heres-how-5070", "published_at": "2026-05-30 02:33:38+00:00", "updated_at": "2026-05-30 03:11:58.520489+00:00", "lang": "en", "topics": ["ai-products", "ai-tools", "ai-startups", "generative-ai", "large-language-models"], "entities": ["Shiori", "Claude Code", "Gemini", "Model Context Protocol", "Claude", "React", "Pomodoro", "Vercel"], "alternates": {"html": "https://wpnews.pro/news/i-built-an-mcp-server-that-lets-claude-read-my-study-data-here-s-how", "markdown": "https://wpnews.pro/news/i-built-an-mcp-server-that-lets-claude-read-my-study-data-here-s-how.md", "text": "https://wpnews.pro/news/i-built-an-mcp-server-that-lets-claude-read-my-study-data-here-s-how.txt", "jsonld": "https://wpnews.pro/news/i-built-an-mcp-server-that-lets-claude-read-my-study-data-here-s-how.jsonld"}}