for developers

Give your agent a local source layer.

Uoink runs a local MCP server on your machine. The stdio path gives Claude Desktop, Cursor, and Cline 13 core tools for capture, search, citations, hooks, and source health.

ClaudeChatGPTCursorObsidianGitHub
local mcp tracestdio
uoink_video(url)capture one source into the local librarysearch_uoinks("Karpathy")query transcript, comments, titles, metadatawrite_tweet(corpus_id)draft from source with creator credit intact
client config

Stdio first. Local paths generated after install.

These snippets use placeholder paths. Uoink setup page generates the real command for your machine after install.

Uoink has two local tool surfaces. Stdio is the curated 13-tool path for daily agent use in Claude Desktop, Cursor, Cline, and Continue. The HTTP registry and OpenAPI bridge expose the full 64-tool programmatic surface for local integrations that need lower-level capture, memory, writing, and admin controls.

Claude Desktop

{
  "mcpServers": {
    "uoink": {
      "command": "%LOCALAPPDATA%\\Uoink\\uoink_mcp.exe",
      "args": []
    }
  }
}

Cursor

{
  "mcpServers": {
    "uoink": {
      "command": "%LOCALAPPDATA%\\Uoink\\uoink_mcp.exe",
      "args": []
    }
  }
}

Cline / Continue

{
  "name": "uoink",
  "transport": "stdio",
  "command": "%LOCALAPPDATA%\\Uoink\\uoink_mcp.exe"
}
sample agent run

Ask Cursor to research a launch video from source.

prompt

Uoink these three competitor videos, classify their hooks, and write a launch memo with citations.

result

The agent captures each source, polls jobs, fetches corpora, classifies hooks, searches your library, then writes the memo into your workspace.

tool sequence
uoink_video(url_1)
uoink_video(url_2)
uoink_video(url_3)
get_job_status(job_id)
get_uoink_corpus(corpus_id)
classify_hook(corpus_id)
search_uoinks("launch narrative")
write_blog(corpus_set)

Install Uoink GitHub

tool catalog

Names stay visible. Details stay folded.

The manifest remains canonical for schemas. This page keeps the public tool names readable for humans, crawlers, and agents without turning the page into one endless list.

Start with uoink_video, search_uoinks, get_uoink_corpus, classify_hook, and find_mentions. Open a bucket when you need the rest.

Core stdio toolsThe 13-tool daily path for capture, search, comments, hooks, citations, and health.13 tools
uoink_videolocal MCP tool
Extract a single YouTube video into a Uoink corpus. Returns the saved folder, markdown corpus, and screenshot paths.Schema lives in /mcp/manifest.json.
uoink_playlistlocal MCP tool
Start asynchronous extraction for a YouTube playlist.Schema lives in /mcp/manifest.json.
get_job_statuslocal MCP tool
Return the full status object for an async Uoink job.Schema lives in /mcp/manifest.json.
cancel_joblocal MCP tool
Cancel an async Uoink job and leave partial outputs on disk.Schema lives in /mcp/manifest.json.
list_recent_uoinkslocal MCP tool
List recent saved Uoink capture corpora.Schema lives in /mcp/manifest.json.
search_uoinkslocal MCP tool
Full-text search across saved Uoink capture corpora.Schema lives in /mcp/manifest.json.
get_uoink_corpuslocal MCP tool
Return the full markdown corpus for a saved Uoink capture by slug.Schema lives in /mcp/manifest.json.
analyze_commentslocal MCP tool
Run Comment Intelligence on an existing Uoink capture and return themes, mentioned products/tools, and disagreements.Schema lives in /mcp/manifest.json.
classify_hooklocal MCP tool
Classify the hook type for an existing Uoink capture.Schema lives in /mcp/manifest.json.
get_taxonomylocal MCP tool
Return captured Hook Type taxonomy rows, optionally filtered by channel and hook_type.Schema lives in /mcp/manifest.json.
get_citation_maplocal MCP tool
Return the transcript + screenshot citation map for a saved Uoink capture, each entry with a timestamped YouTube deep link.Schema lives in /mcp/manifest.json.
get_uoink_healthlocal MCP tool
Return the per-section extraction health score for a saved Uoink capture.Schema lives in /mcp/manifest.json.
find_mentionslocal MCP tool
Find every place an entity (person, tool, product, company, or topic) is mentioned across saved uoinks, newest first, each with a timestamped YouTube deep link.Schema lives in /mcp/manifest.json.
Library, role, and live statusLocal reads and setup helpers that shape the library around the user's workflow.5 tools
analyze_self_channellocal MCP tool
v2.5 P3 your-channel mode: aggregate the user's own saved videos (those tagged is_self via channel-name recognition) into hook evolution, format evolution, performance trend by month, and a top-performers list. Pass `handle` to scope to one of the user's registered channels; omit for the union across every registered channel. `limit` caps the top_performers list (default 10, max 100). Pure local read.Schema lives in /mcp/manifest.json.
get_schema_versionlocal MCP tool
Report the data-shape versions Uoink writes + the supported read-range. v2.5 substrate: cross-version aggregators (Channel Decoder, Niche Corpus) check this before assuming v2 fields are present in older rows/sidecars. Read-only, no arguments.Schema lives in /mcp/manifest.json.
get_user_rolelocal MCP tool
v3.1 P2: report the user's persisted role (creator | researcher | marketer | mixed) + the dashboard emphasis (primary/secondary chip order + default sort) the helper computes from it. Read-only.Schema lives in /mcp/manifest.json.
set_user_rolelocal MCP tool
v3.1 P2: persist the user's role choice. Drives Library default sort + filter-chip emphasis on the dashboard. Bounded enum -- one of creator | researcher | marketer | mixed.Schema lives in /mcp/manifest.json.
check_live_statuslocal MCP tool
v3.1: probe a URL to find out if it is a live broadcast without extracting. Returns one of: not_live | live | upcoming | post_live | was_live. The agent uses this to decide between immediate extraction and 'wait until the broadcast ends' (the helper's live_stream_behavior setting handles the latter for /extract; this tool is the read-only probe path).Schema lives in /mcp/manifest.json.
Podcast and mobile bridgeRSS feeds, WhisperX checks, monitored playlists, and mobile save-to-playlist workflows.13 tools
add_podcast_feedlocal MCP tool
v3.1 podcast: register an RSS feed URL. Idempotent -- existing URL returns the same row. poll_interval_min default 60, range 15-1440.Schema lives in /mcp/manifest.json.
list_podcast_feedslocal MCP tool
v3.1 podcast: list registered RSS feeds newest-first.Schema lives in /mcp/manifest.json.
remove_podcast_feedlocal MCP tool
v3.1 podcast: delete a feed + cascade its episodes.Schema lives in /mcp/manifest.json.
poll_podcast_feedlocal MCP tool
v3.1 podcast: trigger one feed poll (HTTP GET + RSS/Atom parse + upsert episodes). Conditional GET via ETag/If-Modified-Since on subsequent polls so daily-news podcasts don't re-download an unchanged feed body.Schema lives in /mcp/manifest.json.
list_podcast_episodeslocal MCP tool
v3.1 podcast: list episodes. Optional feed_id + status filters (new | queued | downloaded | transcribed | ignored). Newest published first.Schema lives in /mcp/manifest.json.
download_podcast_episodelocal MCP tool
v3.1 podcast: download an episode's MP3 via yt-dlp + ffmpeg. Synchronous. Returns when the file lands at <data_root>/Podcasts/<feed-slug>/<episode-slug>.mp3 or yt-dlp errors. Idempotent -- skips re-download when the canonical path already has a non-zero file.Schema lives in /mcp/manifest.json.
get_whisperx_statuslocal MCP tool
v3.1: report whether the WhisperX runtime is importable + the currently-selected model size + the diarization default. Agents call this before transcribe to decide whether to surface an install prompt to the user.Schema lives in /mcp/manifest.json.
transcribe_podcast_episodelocal MCP tool
v3.1 podcast: run WhisperX on a downloaded episode. Synchronous. Reads audio_local_path; writes the JSON transcript next to the MP3. Returns the structured transcript metadata, OR consent_required=True when the first-time model download (200 MB - 2 GB) needs the user to opt in (re-issue with consent_given=True after the dashboard prompt records the opt-in), OR a runtime-not-installed error when whisperx isn't importable.Schema lives in /mcp/manifest.json.
add_monitored_playlistlocal MCP tool
v3.1 mobile bridge: register a YouTube playlist URL to monitor for auto-uoinks. Idempotent on UNIQUE playlist_url. poll_interval_min default 5, range 1-1440.Schema lives in /mcp/manifest.json.
list_monitored_playlistslocal MCP tool
v3.1 mobile bridge: list registered playlists newest-first.Schema lives in /mcp/manifest.json.
remove_monitored_playlistlocal MCP tool
v3.1 mobile bridge: delete a playlist + cascade its discovery events.Schema lives in /mcp/manifest.json.
poll_monitored_playlistlocal MCP tool
v3.1 mobile bridge: poll one playlist (yt-dlp --flat-playlist) + diff against last_seen_video_ids + auto-queue new videos via the existing pending_uoinks retry worker. Returns the new[] discovery list so the dashboard can show it under a 'from mobile playlist' label distinct from rate-limit retries.Schema lives in /mcp/manifest.json.
list_monitored_playlist_eventslocal MCP tool
v3.1 mobile bridge: list per-discovery events. Optional filters: playlist_id, status (discovered | queued | extracted | failed). Newest first.Schema lives in /mcp/manifest.json.
Memory, facets, and workspace assemblyTaste memory, engagement signals, facet filters, workspace planning, and corpus critique.12 tools
get_user_tastelocal MCP tool
v2.5 S4 taste memory: return the consolidated TASTE.md (preferred hooks/formats, avoid list, top performance anchors). Generated from engagement events + persisted taste anchors. Read-only, no arguments.Schema lives in /mcp/manifest.json.
get_user_memorylocal MCP tool
v2.5 S4 user memory: return the user's free-form USER.md notes (Channels I admire, My channel(s), Topics, Workflow notes). Hand-edited markdown -- the consolidator never overwrites this file. No arguments.Schema lives in /mcp/manifest.json.
update_user_tastelocal MCP tool
v2.5 S4 taste anchors: set one taste anchor section (preferred_hooks | preferred_formats | avoid) and re-consolidate TASTE.md. `content` is markdown that replaces the section body verbatim -- bullets recommended.Schema lives in /mcp/manifest.json.
get_engagement_signallocal MCP tool
v2.5 S2 engagement memory: return the time-decayed value_score for one video plus per-event-type counts and last event timestamp. Events live entirely on the local SQLite index (zero outbound). Weights are documented in index.py (_ENGAGEMENT_WEIGHTS); decay half-life is 30 days.Schema lives in /mcp/manifest.json.
classify_facetslocal MCP tool
Persist agent-classified facets + free-form tags for a video. Model-agnostic: the calling agent does the LLM work using its own model; this tool validates against bounded enums and writes to the row. The server fills performance_tier (channel-relative) and length_bucket (from duration) if you don't pass them.Schema lives in /mcp/manifest.json.
query_by_facetslocal MCP tool
Filter saved uoinks by facet values (format / performance_tier / hook_type / topic / length_bucket / tag). All filters AND-combined; newest first.Schema lives in /mcp/manifest.json.
get_facet_taxonomylocal MCP tool
Enum lists for the v2.5 facet axes (used for filter chips).Schema lives in /mcp/manifest.json.
get_transcript_reliabilitylocal MCP tool
Return stored transcript reliability spans for a saved Uoink capture by YouTube video_id. Read-only; computation is triggered by the helper endpoint or the user's auto-check setting.Schema lives in /mcp/manifest.json.
assemble_workspacelocal MCP tool
v3 P4 build workspace: pull a corpus slice for planning a video. Ranks uoinks by S1 facets (format match), performance tier (over > average > under), and S2 engagement value_score. Returns the slice + audience questions from comments + optional self-channel snapshot (if your_channel is set) + optional taste anchors (if S4 memory layer is available). Pure local read; the calling agent does any LLM analysis downstream. If `workspace_id` is provided the slice is persisted onto that row.Schema lives in /mcp/manifest.json.
critique_against_corpuslocal MCP tool
v3 P4 critique tool. Two-phase: call WITHOUT `findings` to retrieve the assembled context (corpus slice + audience questions + taste anchors) -- the agent does the LLM analysis on that context. Call WITH `findings` (structured JSON object with hook_strength, structural_deviation, pacing_issues, missing_audience_hooks per ROADMAP P4) to persist the analysis to the workspace's critique log. Model-agnostic default; BYO-key mode accepted but not yet implemented on-server.Schema lives in /mcp/manifest.json.
list_workspaceslocal MCP tool
v3 P4: list build workspaces newest-first. Read-only.Schema lives in /mcp/manifest.json.
get_workspacelocal MCP tool
v3 P4: fetch one workspace + its full critique log (every draft + findings combination the agent has persisted).Schema lives in /mcp/manifest.json.
Claims, scripts, and Writing StudioEvidence capture, script versions, shot lists, tweets, blogs, and voice anchors.16 tools
extract_claimslocal MCP tool
v3 A2 (Loki-inspired): persist agent-extracted claims for a video. LOCKED FRAMING -- the calling agent does the LLM decomposition; this tool validates + writes. Each claim is {claim_text, check_worthiness? (0.0-1.0), context?}. NEVER auto-asserts truth verdicts -- surfaces checkable claims so the user can decide which to verify.Schema lives in /mcp/manifest.json.
verify_claimlocal MCP tool
v3 A2: record evidence for one extracted claim. alignment_signal MUST be one of supports / contradicts / mixed / inconclusive. NEVER 'true' / 'false' / 'lie'. The user judges the verdict from the surfaced evidence.Schema lives in /mcp/manifest.json.
list_claimslocal MCP tool
v3 A2: list extracted claims. Filter by video_id and/or status (extracted | verified | not-attempted).Schema lives in /mcp/manifest.json.
get_claimlocal MCP tool
v3 A2: fetch one claim by id, with stored evidence.Schema lives in /mcp/manifest.json.
generate_scriptlocal MCP tool
v3 P5 script studio: two-phase generator. Call WITHOUT `script` payload to retrieve grounding context (workspace metadata + assembled corpus slice + audience questions + optional taste anchors + optional self-channel snapshot). The calling agent does the writing using its own model. Call WITH `script` (a structured object with hook + beats + body + cta + source_uoinks citations) to persist as a new versioned row. parent_script_id chains revisions.Schema lives in /mcp/manifest.json.
revise_scriptlocal MCP tool
v3 P5: revise an existing script grounded in critique findings. Two-phase like generate_script -- without `revised_script` returns previous + grounding for the agent to act on; with `revised_script` persists as a new version (parent_script_id auto-set to the prior id).Schema lives in /mcp/manifest.json.
get_shot_listlocal MCP tool
v3 P5: derive (and persist) a default shot list from a script's beats + the parent workspace's S1 format facet. Per-beat row with format-specific cue suggestions. The calling agent can override by supplying shot_list directly in generate_script.Schema lives in /mcp/manifest.json.
list_scriptslocal MCP tool
v3 P5: list scripts newest-first. Optional workspace_id filter scopes to one workspace's history.Schema lives in /mcp/manifest.json.
get_scriptlocal MCP tool
v3 P5: fetch one script by id.Schema lives in /mcp/manifest.json.
write_tweetlocal MCP tool
v3.2 Writing Studio: two-phase tweet/thread generator. Phase 1 (no `body`) returns grounding (source uoink + creator credit + style anchors + Voice DNA prompt). Phase 2 (`body` present) persists + scans for Voice DNA violations + returns structured warnings (soft warn -- NEVER auto-blocks). Creator credit is required in the body.Schema lives in /mcp/manifest.json.
write_bloglocal MCP tool
v3.2 Writing Studio: two-phase blog generator. Same shape as write_tweet but Phase 2 accepts title, dek, tags, and expects markdown body with a Source section. Soft-warn Voice DNA scan; creator credit non-suppressible.Schema lives in /mcp/manifest.json.
list_writing_pieceslocal MCP tool
v3.2 Writing Studio: list generated pieces newest-first. Optional `kind` (tweet|thread|blog) + `uoink_id` filters.Schema lives in /mcp/manifest.json.
get_writing_piecelocal MCP tool
v3.2 Writing Studio: fetch one piece by id.Schema lives in /mcp/manifest.json.
add_style_anchorlocal MCP tool
v3.2 Writing Studio: add a Substack-style voice anchor (URL or raw pasted text). User names each. Cap at 10 -- returns 422-shaped error when exceeded. URL ingestion extracts prose via the helper's page extractor (Universal Site PR); falls back to NULL raw_text when the extractor isn't bound yet.Schema lives in /mcp/manifest.json.
list_style_anchorslocal MCP tool
v3.2 Writing Studio: list style anchors + their active flag + the helper's 10-anchor cap.Schema lives in /mcp/manifest.json.
remove_style_anchorlocal MCP tool
v3.2 Writing Studio: delete a style anchor.Schema lives in /mcp/manifest.json.
Universal page captureAllowed-site controls for capturing pages with the local helper.4 tools
uoink_pagelocal MCP tool
v3.2 Universal Site Uoinking: capture an allowed page as a uoink. Crawl4AI runs ON-DEVICE when available (JS render + screenshot); stdlib fallback otherwise (static HTML + markdown synthesis, no screenshot). Allowlist-gated -- add the host via add_allowed_site first if it's not in the defaults (youtube.com, youtu.be, x.com, twitter.com). Result auto-persists as a uoink with source_type='page'.Schema lives in /mcp/manifest.json.
list_allowed_siteslocal MCP tool
v3.2 Universal Site: list the user's allowed hostnames. Default seeds (youtube.com, youtu.be, x.com, twitter.com) are pre-added by migration 0015 and removable like any other entry.Schema lives in /mcp/manifest.json.
add_allowed_sitelocal MCP tool
v3.2 Universal Site: add a hostname or wildcard pattern (`*.docs.example.com` matches all sub.docs.example.com subdomains). Idempotent on UNIQUE url_pattern. Plain hostnames also match their subdomains (so 'example.com' matches 'www.example.com').Schema lives in /mcp/manifest.json.
remove_allowed_sitelocal MCP tool
v3.2 Universal Site: remove a hostname or wildcard pattern from the allowlist.Schema lives in /mcp/manifest.json.