Youty MCP server — exposes the Youty vault index (sqlite-vec + FTS5) to MCP-compatible AIs.
Project description
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
Six 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 |
get_video(video_id) |
frontmatter + folder listing + frame paths |
list_videos(platform?, channel?, limit=100) |
newest-first listing |
find_similar(video_id, k=10) |
nearest videos by averaged body-chunk vectors |
Install
cd youty-mcp
uv sync # creates .venv, installs deps
Dependencies: mcp, sqlite-vec, httpx, numpy, transformers,
sentence-transformers, torch, sentencepiece, protobuf. Python ≥ 3.11.
Text queries are embedded on-device with EmbeddingGemma, matching how the
index was built; frame queries use SigLIP via transformers. Frame image
embeddings come from the Mac app's bundled CoreML encoder, so this server
never needs coremltools itself.
Text search: 100% on-device — no key, zero config
The server embeds each query on-device with the same model the index was
built with, read from index_meta.current_text_model, so query and document
vectors share one space. That model is Google's EmbeddingGemma, run locally via
sentence-transformers — no key, no provider option, no cloud call of any kind.
The weights download from HuggingFace on the first text search (one-time per
machine, ~1.2 GB, cached in ~/.cache/huggingface/); every query after that is
fully offline.
SigLIP weights (auto-downloaded for frame-text queries)
The frame side (image embedding) is handled by the Mac app and CLI
via a CoreML .mlpackage of SigLIP-Base bundled inside the app at
Youty.app/Contents/Resources/SigLIP-Base-224_image.mlmodelc. No
download required — it ships with the binary.
The text side (this server's query embedding) downloads
google/siglip-base-patch16-224 (~370 MB) from HuggingFace on the
first search_frames call. Cached in the standard HuggingFace cache:
~/.cache/huggingface/hub/models--google--siglip-base-patch16-224/
One-time per machine. Hot-path embed is ~32 ms on Apple Silicon.
Claude Desktop wiring
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"youty": {
"command": "uvx",
"args": ["youty-mcp"]
}
}
}
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
Tests
uv run pytest -q
uv run python tests/smoke_live.py # one-shot live on-device search smoke
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
searchreturns 0 results — the index is empty. Save a video from the Mac app (indexer enabled in Settings) or run--reindexon an existing vault. No key needed — text indexing is on-device by default.search_framesis slow on the first call — the SigLIP text encoder downloads ~370 MB of weights from HuggingFace into~/.cache/huggingface/(one-time per machine). On the Mac-app side the bundled SigLIP CoreML image encoder compiles to Neural Engine on first use (~1 s). Subsequent queries are ~32 ms.- 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--reindexonce against the new path soindex_meta.vault_rootupdates.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file youty_mcp-1.1.0.tar.gz.
File metadata
- Download URL: youty_mcp-1.1.0.tar.gz
- Upload date:
- Size: 28.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb5876b3e59a09f0b01ed994beb026aa382550460a3a37dc9146565b1bae9f39
|
|
| MD5 |
a23f9944b3520af7710a432f6c090082
|
|
| BLAKE2b-256 |
8abefce577d3f5080d45beb3c7734e8ed4594cd02535e2160baaaaf89b64bdd0
|
File details
Details for the file youty_mcp-1.1.0-py3-none-any.whl.
File metadata
- Download URL: youty_mcp-1.1.0-py3-none-any.whl
- Upload date:
- Size: 33.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc7b958dd51d7039c47b5c7b2ff1ebada673b2547997ebd95963b6945ad3a552
|
|
| MD5 |
11b8d110a45b28854a25ed4be912481d
|
|
| BLAKE2b-256 |
f6c9d6dda0602061b22709696cf8be264bfc4eaeb28bb5a7c62ba7c69c1c4627
|