for developers

Use Uoink from any AI agent.

Connect over MCP, install the Uoink skill, or use the uoink command to search and cite your local library. MCP exposes 91 tools over stdio and 91 in the HTTP registry.

Official MCP registry: io.github.ryanbiddy/uoink. Clients and directories that read the registry can find Uoink.

ClaudeCursorGitHub
agent setup

Stdio and HTTP transports.

Install Uoink before connecting your client. Choose a setup below, then check the testing notes for your agent.

Stdio connects as a local subprocess with all 91 tools. It works without the Uoink helper running. Start Uoink from the Start menu for the dashboard, browser button, and monitored-playlist polling. HTTP exposes the same 91 tools through the running helper.

Use Uoink from any AI agent

Choose MCP, the Uoink skill, or the uoink command. The agent needs access to the computer holding your library. A skill copied to a remote agent does not give it access to local files.

Install Uoink with Add the uoink command to PATH for AI agents checked. Open a new terminal and run uoink status. An agent doing the install can follow the agent installation steps.

1. Connect an MCP client

Claude Desktop uses the .mcpb bundle below. For Claude Code, Cursor, Codex, or VS Code, print a setup recipe:

uoink connect --list
uoink connect claude-code
uoink connect cursor
uoink connect codex
uoink connect vscode

uoink connect --list prints setup choices for 48 clients and integrations, 10 of them new in 3.11.0. 45 recipes are checked against each client's official documentation, and each recipe prints its verification status. Run uoink connect <client> to print config or instructions. The destination and notes go to stderr; config goes to stdout. It does not edit client settings. Run the printed Claude Code command in PowerShell. For other clients, merge the entry into the location shown, then restart the MCP connection.

Cursor's recipe sets UOINK_MCP_TOOLSET=core. In the dashboard, open Settings > Agents (MCP) > Agent connection and choose Add to Cursor or Add to VS Code to open the client's review flow. Client acceptance of these buttons is not yet tested.

Recipes and the client tables in Connect your agent list a Linux location where the client has a Linux setup. Continue is set up by hand from its recipe; the dashboard shows Continue as connected once its entry launches this install.

Uoink's MCP server uses the official MCP Python SDK 2.3.0. Claude Desktop, Claude Code, Cursor, and Codex connect as before, and apps that speak the 2026-07-28 MCP protocol can also connect. No action is needed.

2. Install the Uoink skill

The portable skill teaches Claude Code, Codex, pi, Hermes Agent, and OpenClaw to find evidence, cite sources, and use MCP or the CLI. Run uoink skill path to locate it, or uoink skill install --to <dir> to copy it with its references. The destination is the parent skills directory; Uoink creates a uoink folder inside it. Restart the agent or reload its skills.

# Choose your agent's directory in PowerShell:
# Claude Code
uoink skill install --to "$env:USERPROFILE\.claude\skills"
# Codex
uoink skill install --to "$env:USERPROFILE\.agents\skills"
# pi
uoink skill install --to "$env:USERPROFILE\.pi\agent\skills"
# Hermes Agent
uoink skill install --to "$env:USERPROFILE\.hermes\skills"
# OpenClaw
uoink skill install --to "$env:USERPROFILE\.openclaw\skills"

For a default Uoink install, the Claude Code plugin bundles the skill and MCP connection:

claude plugin marketplace add ryanbiddy/uoink-agent-kit
claude plugin install uoink@uoink

Restart Claude Code and enable the plugin's Uoink MCP server when prompted. For a custom install, use uoink connect claude-code and the standalone skill. Avoid adding the same MCP server through both the plugin and a manual entry.

3. Use the uoink command

Search saved sources, read evidence, capture URLs, save notes, and call registry tools from a local shell:

uoink search "working memory" --limit 5
uoink recent --limit 10
uoink note "A useful thought" --title "Research note"

Local reads work without the helper running. Capture and paid tools keep their existing requirements and consent gates. See Connect your agent for commands and known limits.

Search options

Search matches the useful words in a query; it no longer needs every word. search_library, search_uoinks, and search_clips take optional match and mode parameters, and find_mentions takes match:

  • match: forgiving (default) or strict, which requires every word, like Exact words in the dashboard.
  • mode: auto (default), keyword, semantic, or hybrid. Auto uses hybrid when semantic search is ready and keyword search otherwise. Each response says which mode ran.

Semantic search is optional. A person turns it on in Uoink Settings under Semantic search and accepts Google's Gemma terms. Uoink then downloads the EmbeddingGemma model once (about 330 MB) and indexes saved sources on this computer. Until it is ready, use keyword or auto. Quote passage.text only when passage_verified is true; otherwise citation_reason explains why no passage was returned. The tool list is unchanged.

On a Mac

The Mac preview runs on Apple Silicon with macOS 15 or later. The uoink command ships inside the app at Uoink.app/Contents/Helpers/uoink, and the app does not change your shell or PATH. To run it from a terminal, link it into a folder on your PATH:

mkdir -p "$HOME/.local/bin"
ln -s /Applications/Uoink.app/Contents/Helpers/uoink "$HOME/.local/bin/uoink"
export PATH="$HOME/.local/bin:$PATH"
uoink status

Then run uoink connect <client>, for example uoink connect claude-code, uoink connect cursor or uoink connect codex. The recipe uses the app's current location, works with spaces in the path, and does not edit client files. Back up the client's configuration, merge the printed entry and keep unrelated entries: Claude Desktop uses ~/Library/Application Support/Claude/claude_desktop_config.json, Cursor ~/.cursor/mcp.json and Codex ~/.codex/config.toml. Restart the client after editing.

For Claude Desktop's extension flow, open uoink-3.12.0-macos.mcpb and select the installed Uoink.app in its Uoink app setting. The default is /Applications/Uoink.app. Use this Mac bundle, not the Windows .mcpb.

The Claude Code plugin's MCP entry is still for Windows. On a Mac, use uoink connect claude-code and the standalone skill. Library mirroring is unavailable on Mac. The tool inventory matches Windows: 91 tools, or 35 in core mode. On a Mac, Claude Code passed MCP acceptance (3.11.2); other clients are untested there.

What was tested for 3.12.0

Agent Install 30 tested the installed 3.12.0 build in an isolated profile: 21/21 PASS. The Whisper base model came with the install: with an empty Hugging Face cache and downloads blocked, a caption-less X video was transcribed locally, and nothing went to huggingface.co. A music-only X video read Done · no speech found. Stdio listed 91 full / 35 core / 91 modern tools, and Claude Code 2.1.314 (haiku) connected with 91 tools and called get_schema_version. YouTube captures saved English captions, a short X clip got its screenshot, and an in-place upgrade over 3.11.2 kept the library byte-identical. Codex CLI was not re-tested.

What was tested for 3.11.1

Agent Install 27 passed 11/11 checks with the installed 3.11.1 build in an isolated profile:

  • Isolated installation; /health reported 3.11.1 and migration 32. Stdio listed 91 tools in full mode, 35 in core, and 91 in modern.
  • Claude Code 2.1.310 (haiku) connected with 91 tools and called get_schema_version.
  • Usage sharing stayed off with no network sends observed in that check; the bundled ffprobe passed the audio probe.
  • No startup entries were created by the isolated install. The dashboard passed at 1400 and 1100 pixels wide, and uninstall was clean.
  • Helper writes persisted across a restart, and GET / redirected to /dashboard.

Codex CLI was not re-tested in receipt 27. Earlier 3.11.0 testing: Claude Code 2.1.308 over MCP: all 91 tools listed; a tool called. Codex CLI 0.153.4 over MCP: two tools called.

From 3.10.0 testing: Claude Code with the Uoink skill and the uoink command only, with no MCP server, loaded the skill and ran uoink note and uoink recent. The Claude Code plugin loads its skill and starts its MCP server; its tool calls were not run end to end because the test install is isolated from a normal one.

Not yet tested: Gemini CLI and pi (no sign-in on the test machine) and every other recipe in uoink connect. Claude Desktop and Cursor retain their earlier MCP testing status; that does not verify the new recipes.

ChatGPT and claude.ai use copy and paste only. Uoink does not connect to the ChatGPT app over MCP.

HTTP JSON-RPC Transport Details

Endpoint URL: http://localhost:5179/mcp/v1

Authentication: Include the header X-Uoink-Token on every request.

Token Location: Read the token string from the local file %LOCALAPPDATA%\Uoink\token.txt.

One-click Claude Desktop setup

Download and open uoink-3.12.0.mcpb. Claude Desktop installs it as an extension and asks for the Uoink folder. Enter the full path to %LOCALAPPDATA%\Uoink; Desktop does not expand that variable. After updating, reinstall the bundle and restart Desktop.

Claude Code

Run this in PowerShell. It expands the paths to your local install. Verified with Claude Code 2.1.302, including tool listing, saving a note, and reading recent captures.

claude mcp add --scope user --transport stdio uoink -e PYTHONIOENCODING=utf-8 -e PYTHONUTF8=1 -- "$env:LOCALAPPDATA\Uoink\python\python.exe" "$env:LOCALAPPDATA\Uoink\uoink_mcp.py"

Cursor and other stdio clients

Cursor is reported to send only the first 40 tools to its agent. Add UOINK_MCP_TOOLSET=core to the server environment to keep the previous 35-tool set and stay under that cap. The Cursor config below includes it. Omit that setting for the full toolset.

For manual setup, use the README JSON below. Claude Desktop does not expand %LOCALAPPDATA%: replace it in both paths with your full app-data directory, or copy the generated config from the extension’s Settings page. Restart the client after saving.

Cline and Continue are standard-stdio compatibility paths; they were not individually smoke-tested. ChatGPT and claude.ai use copy and paste. Uoink does not connect to the ChatGPT app over MCP.

Cursor config with the core toolset

{
  "mcpServers": {
    "uoink": {
      "command": "%LOCALAPPDATA%\\Uoink\\python\\python.exe",
      "args": [
        "%LOCALAPPDATA%\\Uoink\\uoink_mcp.py"
      ],
      "env": {
        "PYTHONIOENCODING": "utf-8",
        "PYTHONUTF8": "1",
        "UOINK_MCP_TOOLSET": "core"
      }
    }
  }
}

Other stdio clients and manual Claude Desktop config

{
  "mcpServers": {
    "uoink": {
      "command": "%LOCALAPPDATA%\\Uoink\\python\\python.exe",
      "args": [
        "%LOCALAPPDATA%\\Uoink\\uoink_mcp.py"
      ],
      "env": {
        "PYTHONIOENCODING": "utf-8",
        "PYTHONUTF8": "1"
      }
    }
  }
}

sample agent run

Ask Cursor to research a launch video from source.

prompt

Search my saved videos for the launch announcement and give me timestamped excerpts I can cite.

result

The agent searches the local library, reads matching items, and retrieves evidence cards with timestamped source links.

tool sequence
search_library({ query: "launch announcement" })
get_library_item({ video_id })
search_clips({ query: "launch announcement" })
get_evidence_card({ video_id })
search_uoinkslocal sqlite fts
Uoink dashboard search: a query for nvidia narrows the local library to matching source cards, showing the full-text SQLite index that agents query through the MCP tools.
What search_uoinks reaches: a local SQLite full-text index over every transcript, comment, and title on disk.

tool catalog

Names stay visible. Details stay folded.

HTTP MCP uses the same flattened tool schemas as stdio, so HTTP clients no longer drop Uoink's tools because of their schema shape. The server still checks the exact schema for every call. The manifest includes those exact registry schemas and transport labels.

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

All tools over stdio and HTTPCapture, search, citations, research, writing, scripts, workspaces, sources, and the Library queue. Consent gates are unchanged. The Librarian proposes; applying is off by default and its quality gate has not passed.91 tools
uoink_videolocal MCP tool
Capture one YouTube video into a saved Markdown corpus with screenshots.Schema lives in /mcp/manifest.json.
uoink_playlistlocal MCP tool
Start a background capture job for the videos in a YouTube playlist.Schema lives in /mcp/manifest.json.
get_job_statuslocal MCP tool
Read progress, per-item outcomes and errors for a saved capture or transcription job.Schema lives in /mcp/manifest.json.
cancel_joblocal MCP tool
Request cancellation of a capture or transcription job while keeping partial outputs on disk.Schema lives in /mcp/manifest.json.
list_recent_uoinkslocal MCP tool
List the newest saved captures from the local index, with their slugs, titles, folders and capture times.Schema lives in /mcp/manifest.json.
search_uoinkslocal MCP tool
Find whole saved items by text, with optional channel and hook filters.Schema lives in /mcp/manifest.json.
search_clipslocal MCP tool
Find transcript windows in saved items, with timing, source links and ranked snippets.Schema lives in /mcp/manifest.json.
get_evidence_cardlocal MCP tool
Build a saved item's evidence card with identity, summary hints and clips spread across its timeline.Schema lives in /mcp/manifest.json.
get_uoink_corpuslocal MCP tool
Read a saved item's complete Markdown corpus, citation rows and available source or image pointers by slug.Schema lives in /mcp/manifest.json.
analyze_commentslocal MCP tool
Analyze a saved capture's comments with Anthropic and replace its stored comment-intelligence section.Schema lives in /mcp/manifest.json.
classify_hooklocal MCP tool
Classify a saved capture's opening with Anthropic and replace its stored hook analysis.Schema lives in /mcp/manifest.json.
get_taxonomylocal MCP tool
Read saved hook-classification rows, optionally restricted to a channel or hook.Schema lives in /mcp/manifest.json.
get_citation_maplocal MCP tool
Read all stored transcript and screenshot citations for one saved capture.Schema lives in /mcp/manifest.json.
get_uoink_healthlocal MCP tool
Read the stored per-section extraction health of a saved capture.Schema lives in /mcp/manifest.json.
find_mentionslocal MCP tool
Find recorded entity-name mentions across saved items, with stored spans, timing and source links.Schema lives in /mcp/manifest.json.
get_transcript_reliabilitylocal MCP tool
Read stored transcript-reliability spans for a saved item.Schema lives in /mcp/manifest.json.
add_podcast_feedlocal MCP tool
Register a podcast RSS feed for ongoing metadata monitoring.Schema lives in /mcp/manifest.json.
list_podcast_feedslocal MCP tool
List registered podcast feeds newest first, including their saved polling settings.Schema lives in /mcp/manifest.json.
remove_podcast_feedlocal MCP tool
Stop monitoring a registered podcast feed.Schema lives in /mcp/manifest.json.
poll_podcast_feedlocal MCP tool
Refresh metadata for one registered podcast feed through the source-aware polling path.Schema lives in /mcp/manifest.json.
list_podcast_episodeslocal MCP tool
List tracked podcast episodes newest published first, optionally scoped to a feed or lifecycle state.Schema lives in /mcp/manifest.json.
download_podcast_episodelocal MCP tool
Download a tracked podcast episode's audio to its canonical local MP3.Schema lives in /mcp/manifest.json.
get_whisperx_statuslocal MCP tool
Inspect local WhisperX availability, the selected model and the diarization default.Schema lives in /mcp/manifest.json.
transcribe_podcast_episodelocal MCP tool
Queue local WhisperX transcription for a downloaded podcast episode.Schema lives in /mcp/manifest.json.
episode_to_corpuslocal MCP tool
Publish a completed podcast transcript as a searchable local corpus with source-aware citations.Schema lives in /mcp/manifest.json.
get_library_activitylocal MCP tool
Report saved-library capture activity, shelf churn and standing-source observations for a time interval.Schema lives in /mcp/manifest.json.
search_librarylocal MCP tool
Retrieve a bounded, clip-first selection of saved-library matches with revision-bound card and excerpt URIs.Schema lives in /mcp/manifest.json.
get_library_itemlocal MCP tool
Resolve one saved item to its bounded default Librarian card and canonical card, excerpt and initial corpus-chunk URIs.Schema lives in /mcp/manifest.json.
read_library_resourcelocal MCP tool
Read a bounded saved-library card, excerpt, corpus chunk, shelf page or brief from its uoink URI.Schema lives in /mcp/manifest.json.
get_playbook_inputlocal MCP tool
Prepare cited local evidence and instructions for a client-written research report.Schema lives in /mcp/manifest.json.
discover_candidateslocal MCP tool
Plan or run a ScrapeCreators search and save uncaptured candidates.Schema lives in /mcp/manifest.json.
queue_discoveredlocal MCP tool
Enqueue selected saved discovery candidates for normal capture.Schema lives in /mcp/manifest.json.
get_library_brief_inputlocal MCP tool
Prepare a dated library-status packet for a brief that the client writes.Schema lives in /mcp/manifest.json.
publish_library_brieflocal MCP tool
Save a client-written daily brief as an immutable local artifact.Schema lives in /mcp/manifest.json.
export_cited_rangelocal MCP tool
Export verbatim stored transcript cues with speaker provenance, overlapping chapters, safe links and evidence references.Schema lives in /mcp/manifest.json.
list_library_worklocal MCP tool
List Librarian assignment counts and one cursor page of work for a run.Schema lives in /mcp/manifest.json.
claim_library_worklocal MCP tool
Lease Librarian evidence packets, or renew, release or cancel your current attempts.Schema lives in /mcp/manifest.json.
submit_library_resultlocal MCP tool
Store a client's shelf-assignment result for one currently leased Librarian item.Schema lives in /mcp/manifest.json.
apply_reshelvinglocal MCP tool
Create a reshelving preview or apply an approved preview to current labels.Schema lives in /mcp/manifest.json.
pin_shelflocal MCP tool
Record a user's pin, unpin or move decision for one item's shelf membership.Schema lives in /mcp/manifest.json.
undo_library_applylocal MCP tool
Reverse the latest applicable library apply by replaying its stored inverse as a new journal operation.Schema lives in /mcp/manifest.json.
list_sourceslocal MCP tool
List standing RSS, YouTube channel and playlist sources with consent, enrollment, daily allowance and detection health.Schema lives in /mcp/manifest.json.
register_sourcelocal MCP tool
Register a standing source for future metadata detection with capture consent off.Schema lives in /mcp/manifest.json.
source_statuslocal MCP tool
Read one standing source's summary, observed-item page and all in-flight reservations.Schema lives in /mcp/manifest.json.
set_source_consentlocal MCP tool
Enable or disable standing capture for a registered source after local confirmation.Schema lives in /mcp/manifest.json.
analyze_self_channellocal MCP tool
Summarize the user's saved own-channel videos into hook and format history, monthly performance trends and top performers.Schema lives in /mcp/manifest.json.
get_schema_versionlocal MCP tool
Report the local SQL migration, item and sidecar schema versions and supported read ranges.Schema lives in /mcp/manifest.json.
get_user_rolelocal MCP tool
Read the saved user role and its resolved dashboard sort and filter emphasis.Schema lives in /mcp/manifest.json.
set_user_rolelocal MCP tool
Replace the saved user role that controls dashboard sort and filter emphasis.Schema lives in /mcp/manifest.json.
check_live_statuslocal MCP tool
Fetch video metadata to determine whether a broadcast is live, upcoming or finished.Schema lives in /mcp/manifest.json.
add_monitored_playlistlocal MCP tool
Register a YouTube playlist for ongoing metadata monitoring.Schema lives in /mcp/manifest.json.
list_monitored_playlistslocal MCP tool
List registered playlist monitors newest first with saved monitoring settings.Schema lives in /mcp/manifest.json.
remove_monitored_playlistlocal MCP tool
Stop monitoring a registered playlist.Schema lives in /mcp/manifest.json.
poll_monitored_playlistlocal MCP tool
Refresh observations for a registered playlist through its source-aware polling path.Schema lives in /mcp/manifest.json.
list_monitored_playlist_eventslocal MCP tool
List recorded playlist-discovery events newest first, optionally filtered by playlist or lifecycle state.Schema lives in /mcp/manifest.json.
get_user_tastelocal MCP tool
Read consolidated TASTE.md preferences and performance anchors.Schema lives in /mcp/manifest.json.
get_user_memorylocal MCP tool
Read the user's hand-edited USER.md notes about channels, topics and workflow.Schema lives in /mcp/manifest.json.
update_user_tastelocal MCP tool
Replace one persisted taste-preference section and regenerate TASTE.md.Schema lives in /mcp/manifest.json.
get_engagement_signallocal MCP tool
Read one saved item's time-decayed local engagement score, event counts and last-event time.Schema lives in /mcp/manifest.json.
classify_facetslocal MCP tool
Store your agent's facet classifications and tags on a saved item.Schema lives in /mcp/manifest.json.
query_by_facetslocal MCP tool
List saved items matching all supplied facet and tag filters, newest first.Schema lives in /mcp/manifest.json.
get_facet_taxonomylocal MCP tool
Return supported format, performance-tier, length-bucket and hook label lists.Schema lives in /mcp/manifest.json.
assemble_workspacelocal MCP tool
Select and rank saved examples for planning a video, with audience questions and available taste or own-channel context.Schema lives in /mcp/manifest.json.
critique_against_corpuslocal MCP tool
Prepare workspace grounding for a draft critique, or append your agent's findings to its critique log.Schema lives in /mcp/manifest.json.
list_workspaceslocal MCP tool
List saved video-planning workspaces newest first.Schema lives in /mcp/manifest.json.
get_workspacelocal MCP tool
Read one saved video-planning workspace and its full critique log.Schema lives in /mcp/manifest.json.
extract_claimslocal MCP tool
Store checkable claims that your agent extracted from a saved item.Schema lives in /mcp/manifest.json.
verify_claimlocal MCP tool
Record your agent's evidence and alignment signals for an existing claim.Schema lives in /mcp/manifest.json.
list_claimslocal MCP tool
List saved checkable claims, optionally filtered by source item or review status.Schema lives in /mcp/manifest.json.
get_claimlocal MCP tool
Read one saved claim with its recorded evidence and alignment signals.Schema lives in /mcp/manifest.json.
generate_scriptlocal MCP tool
Prepare workspace grounding for a video script, or save an agent-written script as a new version.Schema lives in /mcp/manifest.json.
revise_scriptlocal MCP tool
Prepare revision context for an existing video script, or save its replacement as a linked new version.Schema lives in /mcp/manifest.json.
get_shot_listlocal MCP tool
Derive and save a default shot list from a script's beats and its workspace format.Schema lives in /mcp/manifest.json.
list_scriptslocal MCP tool
List saved video-script versions newest first, optionally within one workspace.Schema lives in /mcp/manifest.json.
get_scriptlocal MCP tool
Read a saved video-script version, including beats, shot list and source-item citations.Schema lives in /mcp/manifest.json.
write_tweetlocal MCP tool
Prepare grounding for a tweet or thread, or save a credited draft in the local Writing Studio.Schema lives in /mcp/manifest.json.
write_bloglocal MCP tool
Prepare grounding for a blog article, or save a credited Markdown draft in the local Writing Studio.Schema lives in /mcp/manifest.json.
list_writing_pieceslocal MCP tool
List saved tweet, thread and blog drafts newest first, optionally filtered by kind or source item.Schema lives in /mcp/manifest.json.
get_writing_piecelocal MCP tool
Read one saved Writing Studio tweet, thread or blog draft.Schema lives in /mcp/manifest.json.
add_style_anchorlocal MCP tool
Save a named writing-style reference from pasted text or a URL.Schema lives in /mcp/manifest.json.
list_style_anchorslocal MCP tool
List saved writing-style references with active flags and the configured ten-anchor cap.Schema lives in /mcp/manifest.json.
remove_style_anchorlocal MCP tool
Delete a saved writing-style reference.Schema lives in /mcp/manifest.json.
uoink_urllocal MCP tool
Capture a supported video URL through platform routing, with metadata/transcript fallback for other yt-dlp sites.Schema lives in /mcp/manifest.json.
uoink_notelocal MCP tool
Save user-provided text as a local searchable note with title and attribution.Schema lives in /mcp/manifest.json.
uoink_imagelocal MCP tool
Save supplied PNG, JPEG or WebP bytes as a local image corpus item with optional caption and attribution.Schema lives in /mcp/manifest.json.
uoink_xlocal MCP tool
Capture an X post and its author's earlier chain as a local text corpus item.Schema lives in /mcp/manifest.json.
uoink_pagelocal MCP tool
Fetch an allowed webpage as Markdown and save it as a local corpus item.Schema lives in /mcp/manifest.json.
uoink_reddit_threadlocal MCP tool
Capture a Reddit post and filtered comment tree as a local discussion corpus.Schema lives in /mcp/manifest.json.
list_allowed_siteslocal MCP tool
List saved webpage-capture hostname patterns and their active state.Schema lives in /mcp/manifest.json.
add_allowed_sitelocal MCP tool
Add a hostname pattern to the webpage-capture allowlist.Schema lives in /mcp/manifest.json.
remove_allowed_sitelocal MCP tool
Remove a hostname pattern from the webpage-capture allowlist.Schema lives in /mcp/manifest.json.