Skip to main content

youty-mcp

Local MCP server that exposes the Youty vault's vector index to any MCP-compatible AI (Claude Desktop, Claude Code, Cursor).

What it does

Seven tools, hybrid dense + BM25 retrieval over your captured YouTube / Instagram / TikTok videos, plus joint text → frame retrieval via Google's SigLIP-Base-Patch16-224 (Apache-2.0). Queries land in ~300 ms for text, ~32 ms warm for frames on Apple Silicon.

Tool Returns
search(query, k=15, platform?, since_iso?) hybrid dense + BM25 + RRF over transcript chunks; top-k results with frame paths + video_md_path
search_frames(query, k=10, platform?) SigLIP-Base joint text→image; top-k frame matches with parent video metadata
get_transcript(video_id) full video.md + parsed frontmatter — the whole video into context
get_video(video_id) frontmatter + folder listing + frame paths
view_frames(video_id, frame_ms?, max_frames=6) the frame JPEGs themselves, as MCP image content — viewable in any client
list_videos(platform?, channel?, limit=100) newest-first listing
find_similar(video_id, k=10) nearest videos by averaged body-chunk vectors

The loop: search finds the relevant moments → get_transcript pulls the words into context → view_frames loads the matching frames into the model's vision. search / search_frames also return raw frame paths, but only Claude Code can open a path itself — view_frames returns the images inline, so the visual half of the loop works in Claude Desktop, Cursor, and Claude Code alike.

On-screen text. search covers both what a video said and what it showed: each result's chunk.type is body/description/header (spoken + metadata) or frame_text — text recognized on-screen via on-device OCR (slides, code, terminal output, labels). A frame_text hit means the answer was visible in the video; pair it with view_frames to see that moment.

Install

cd youty-mcp
uv sync                       # creates .venv, installs deps

Dependencies: mcp, cryptography, sqlite-vec, httpx, numpy, tokenizers, huggingface-hub, sentencepiece, protobuf, and coremltools (macOS only). Python ≥ 3.11. No PyTorch or Transformers: existing tokenizer engines prepare queries directly, and all inference runs through Core ML. Tokenizer assets use fixed revisions to preserve compatibility with the existing vault index.

Text + frame search: 100% on-device — no key, zero config

The server embeds each query on-device with the same Core ML models the index was built with — Google's EmbeddingGemma (text) and the SigLIP-Base text tower (frames) — so query and document vectors share one space. Inference is CPU-only via coremltools to match the int8-quantized indexer. No key, no provider option, no cloud call of any kind.

The models are not a ~1.6 GB HuggingFace download. They come from Youty's own release asset (youty-models-<ver>.tar.gz, a few hundred MB of Core ML), fetched once and verified by SHA-256, then cached under:

~/.cache/youty/coreml-models/<version>/

One-time per machine; every query after that is fully offline. Hot-path embed is ~300 ms for text and ~32 ms for frames on Apple Silicon. (Set YOUTY_COREML_MODELS_DIR to point at a local .mlpackage tree in dev/CI.)

Wiring it into your AI client

One command wires every MCP client on this Mac:

uvx youty-mcp@latest install

It detects Claude Code, Claude Desktop, Cursor, Codex, Gemini CLI, Windsurf, Continue, Cline, Antigravity, and Grok CLI, then merges a youty entry into each client's config — preserving your other settings, idempotent (safe to re-run), and reversible with uvx youty-mcp@latest uninstall. The entry points at the absolute path of uvx so GUI apps (which launch with a stripped-down PATH) reliably find it. Useful variants:

uvx youty-mcp@latest install --list      # every supported client + its config path
uvx youty-mcp@latest install cursor      # wire just one client
uvx youty-mcp@latest uninstall           # remove Youty from all detected clients

Why a command and not a button in the Youty app? The Mac app is sandboxed, so it can't edit other apps' config files or run their CLIs. This installer ships in the (non-sandboxed) youty-mcp package, which can. Bare uvx youty-mcp@latest still runs the MCP server itself — that's what the clients launch.

Editors whose config allows comments (Zed → a context_servers entry in ~/.config/zed/settings.json, VS Code → an mcp.servers entry) aren't auto-wired — rewriting them could strip your comments — so add Youty there by hand using the command/args shown below.

Prefer to wire a client by hand? The exact per-client config follows.

Claude Desktop wiring

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "youty": {
      "command": "uvx",
      "args": ["youty-mcp@latest"]
    }
  }
}

The @latest pin means uvx fetches the newest published youty-mcp on each launch — so a normal restart always loads the current server with no manual uv tool upgrade. (The Mac app auto-updates via Sparkle and the CLI via Homebrew, so the whole stack stays in step on its own.)

Restart Claude Desktop. Then ask: "What are best practices on creating AI influencers, and what tools should I use? Use my Youty vault."

Claude Code wiring

claude mcp add youty -- uvx youty-mcp@latest

Tests

uv run pytest -q
YOUTY_TOKENIZER_PARITY=1 uv run pytest -q tests/test_query_tokenizers.py
YOUTY_COREML_SMOKE=1 uv run pytest -q tests/test_coreml_inputs.py
uv run python tests/smoke_live.py    # one-shot live on-device search smoke

The Core ML smoke check requires macOS and the model assets. It exercises both query encoders repeatedly and waits for deferred native cleanup, catching crashes that token-only tests cannot detect. Set YOUTY_COREML_MODELS_DIR to a local model directory when testing without the normal download cache.

Index location

Default: the Mac app's sandboxed index at ~/Library/Containers/dev.leget.youty/Data/Library/Application Support/Youty/index.db, falling back to ~/Library/Application Support/Youty/index.db if that isn't present. Override either with YOUTY_INDEX_DB=/abs/path.

The Mac app writes here when it saves a video (background, non-blocking). The MCP server reads here and promotes data to sqlite-vec and FTS5 virtual tables at startup.

The index is rebuildable from the vault's video.md files alone — losing it is recoverable, never catastrophic. Use the Mac app's Settings window → "Re-index entire vault", or run headless:

"/path/to/youty.app/Contents/MacOS/youty" --reindex "/path/to/vault"
"/path/to/youty.app/Contents/MacOS/youty" --index-frames "/path/to/vault"

Troubleshooting

  • search returns 0 results — the index is empty. Save a video from the Mac app (indexer enabled in Settings) or run --reindex on an existing vault. No key needed — text indexing is on-device by default.
  • First search / search_frames is slow — the Core ML models asset downloads once (youty-models-<ver>.tar.gz, a few hundred MB, SHA-verified) into ~/.cache/youty/coreml-models/ and the encoders load lazily. Subsequent queries are ~300 ms (text) / ~32 ms (frames).
  • Legacy bundles with 4-digit-second JPEG names (0717.jpg) are silently skipped by frame indexing. The current contract is 8-digit milliseconds (00718000.jpg). Re-saving the video regenerates frames in the new format.
  • Vault location unknown error from get_transcript — the indexer records the vault path; if you've changed it, run --reindex once against the new path so index_meta.vault_root updates.

Download files

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

Source Distribution

youty_mcp-1.4.7.tar.gz (44.5 kB view details)

Uploaded Source

Built Distribution

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

youty_mcp-1.4.7-py3-none-any.whl (50.0 kB view details)

Uploaded Python 3

File details

Details for the file youty_mcp-1.4.7.tar.gz.

File metadata

  • Download URL: youty_mcp-1.4.7.tar.gz
  • Upload date:
  • Size: 44.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for youty_mcp-1.4.7.tar.gz
Algorithm Hash digest
SHA256 3163f5f37bf6545c61630eee1e0862daa709b9300e439f95ffe9ee87f869b2a2
MD5 b548dd9eef086a9231d657e52f526b58
BLAKE2b-256 f97065b5235bc9cd5997b45962a3a1f95ebee7611dde7ef81db6cd09d9b11c67

See more details on using hashes here.

File details

Details for the file youty_mcp-1.4.7-py3-none-any.whl.

File metadata

  • Download URL: youty_mcp-1.4.7-py3-none-any.whl
  • Upload date:
  • Size: 50.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for youty_mcp-1.4.7-py3-none-any.whl
Algorithm Hash digest
SHA256 48d8b00323fa932760d3afdede288f658137bed074a14d9554467887e4be91b1
MD5 857188c97adbb8554a34a7c1c2c3ac35
BLAKE2b-256 775a1dabb527a7aac38cbaf21ebbf78919632c272a7ed13ab25ef69cc56cfd8a

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.4.7 This release

2 files

1.4.6

2 files

1.4.5

2 files

1.4.4

2 files

1.4.3

2 files

1.4.2

2 files

1.4.1

2 files

1.4.0

2 files

1.3.2

2 files

1.3.1

2 files

1.3.0

2 files

1.2.0

2 files

1.1.0

2 files

1.0.0

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