Papers, people, topics, and tags are naturally a graph. Enables path queries, co-authorship derivation, topic clustering. Free tier (200k nodes / 400k relationships) sufficient for personal use.
Tags are first-class citizens for filtering and browsing.
(Paper)-[:TAGGED]->(Tag) lets you query “all papers with this tag” efficiently.
Topic = formal research area, linked to Person specialtiesTag = free-form personal label (source, status, context, anything)Notes need their own @mention and #topic relationships.
A text field on Paper would lose this graph power.
Instead of many typed relationships for workflow states,
one INVOLVES {role} relationship keeps the schema flexible.
New roles can be invented freely without schema changes.
metadata_source field on Paper node records which layer was used.
Semantic Scholar also returns topics + citation count → auto-populates Topic nodes.db/queries/ and services/ are framework-neutral.
FastAPI routers/ and MCP tools/ are just two thin entry-point layers over the same logic.
This means every capability is available both via HTTP and via Claude Code tool calls.
PDF upload is intentionally not exposed as an MCP tool — file upload via browser only.
Projects serve a similar purpose and are already in scope. Can revisit if the need for lightweight grouping (reading lists) emerges.
Simple deploy, free tier, Python-native.
Start with local dev, deploy to Vercel when ready.