Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

OPYT

A local-first knowledge base built from credible people's public output, served entirely through an MCP server.

OPYT tracks people you trust — via a GitHub, Substack, blog, or X handle — pulls their full public archive, and turns it into one queryable SQLite store your AI assistant can search, read, and reason over. There is no separate chat UI: the MCP server hands data to whatever client is already asking (Claude Code, Cursor, Claude Desktop, Windsurf), and that client's own model does the synthesis.

The moat is the data and the retrieval, not a hand-built UI. OPYT is MCP-first: tools return data, your host model does the reasoning, on your own subscription.

How it works

Two independent ways content enters the store, as atoms — OPYT's unit of stored content, one per post, repo, or paper:

1. Track a person. Call add_oracle (or run oracle to browse candidates first) with a handle. OPYT auto-detects which of X, Substack, a personal blog, and GitHub that person actually publishes to, then pulls their full archive from each. A background rail keeps every tracked person's sources current without you asking again.

2. Let Frontier watch your standing topics. Frontier is a passive research-discovery rail: it runs your standing queries against arXiv and GitHub on a schedule, judges what it finds against your topics, and stages the good ones. You review the queue with frontier when you want to — OPYT tells you at the start of a session if something new is waiting, without ever pushing the list itself into context uninvited.

Everything lands in one SQLite database (~/.opyt/opyt.db) — atoms, their chunks, a full-text index, and the entity/trust edges between tracked people. No vault of markdown files, no dashboard, no daemon process: the MCP server is the only interface, and it creates its own store on first use.

MCP tools

Tool What it does
search / open / aggregate Ranked hits across your atoms, one atom in full, distributional counts — the retrieval core. LLM-free: these return data, your host model reasons over it.
onboard Run this first. Walks you through API keys (loopback OAuth, never a key pasted into chat) and your X bookmark session, then hands off to oracle.
oracle / add_oracle Screen candidates, confirm who to track, and start ingesting them.
frontier The ranked queue of research artifacts (papers, repos) Frontier staged for you since you last looked.
hopper The manual "keep this" tool — hand it any URL and it routes to the right ingester, previews what it found, and asks you to confirm before writing.
sitting Read one topical region of your knowledge base end to end, in publication order, and turn it into standing queries — the complement to search, which finds a few best matches instead of reading everything.

Several background rails also spawn automatically each session — refreshing tracked people's sources, running Frontier's stages, pulling new X bookmarks — each independently gated so a stalled or failing rail never blocks the others or the server itself.

Quick start

git clone https://github.com/maimond123/opyt
cd opyt
bash scripts/setup.sh          # venv, deps, .env template, git hooks

Register the MCP server with your client. For Claude Code:

claude mcp add opyt -- /absolute/path/to/opyt/venv/bin/opyt-mcp

For Cursor, Claude Desktop, or Windsurf, the installer merges the config for you (it backs up the existing file first):

venv/bin/opyt-install-client --all      # or --cursor / --claude-desktop / --windsurf

Restart your client, open a chat, and call onboard. It walks you through getting an OpenRouter key (a browser tab opens; you click Approve — nothing to paste), a twitterapi.io key (opens a local page to paste into, never the chat itself), and detecting your logged-in X browser session for free bookmark syncing. Then call oracle to pick who to track.

If you'd rather manage credentials by hand than go through onboard, opyt-keys --list shows which are set (never their values), and .env.example documents each one.

Design principles

Three constraints hold across the whole codebase, enforced by an AST-based guard (scripts/guard.py + .guards.py) that runs in CI and pre-commit:

  • Distributable — nothing may assume a specific machine. Paths are derived at runtime (sys.executable, Path(__file__)), never hardcoded.
  • Client-agnostic — the core and every knowledge tool run on any MCP client, not just Claude Code. Claude-Code-specific behavior is opt-in and never load-bearing.
  • Fail-safe — a missing optional input degrades to an empty result, not a crash. A failed external call skips cleanly; it never writes partial state or marks unfinished work done.

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

opyt-0.1.0a1.tar.gz (697.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

opyt-0.1.0a1-py3-none-any.whl (732.3 kB view details)

Uploaded Python 3

File details

Details for the file opyt-0.1.0a1.tar.gz.

File metadata

  • Download URL: opyt-0.1.0a1.tar.gz
  • Upload date:
  • Size: 697.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.6

File hashes

Hashes for opyt-0.1.0a1.tar.gz
Algorithm Hash digest
SHA256 22d1e3adcdf5dd0f2c3c06c582a7386bf86f83dfd48d6fc72dd01a1f9c15c340
MD5 b6b7ad21efe10e5c927bdb3549dbf664
BLAKE2b-256 c735f309d8a7f3fcfd05baa9ce1d0d254a5e0d8ce55b622c264eb6ac06c3a5f1

See more details on using hashes here.

File details

Details for the file opyt-0.1.0a1-py3-none-any.whl.

File metadata

  • Download URL: opyt-0.1.0a1-py3-none-any.whl
  • Upload date:
  • Size: 732.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.6

File hashes

Hashes for opyt-0.1.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 58c7dd5c67ceb617585aebd995c8641d3e50f323d439704e612d6decba0d4eef
MD5 06201c308f32bc98925632a20e194978
BLAKE2b-256 306495f78ab57014cc42f8267f2b04ebd17639535bd16659ab19a9906ef1a69a

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0a1 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page