Skip to content
Back to search
100
MCP live MCP 2026-07-28 streamable-http

Hook Detector

com.hookdetector/hookdetector

Real TikTok and Instagram hooks that already work, in any language, with why each travelled.

Watch this dependency Share evidence report
Uptime
100.0%
5 direct probes · 30d
Response
605ms
last probe
Tools
154
callable
Resources
0
readable
Prompts
0
available
Score: 100/100
Handshake verified by our own probe.
pass Answers the MCP handshake 50/50
The handshake and the list calls succeeded on the primary URL.
pass Lists tools, resources or prompts 30/30
154 tools, 0 resources, 0 prompts returned.
pass 3 or more catalogue items 10/10
154 items in total; 3 or more earns these points.
pass Describes itself 10/10
92 characters; more than 30 earns these points.

Tools · 154

create_account

Create an account and get an API key with free credits. Needs a beta access code (access_code, HD-XXXX-XXXX; case and dashes do not matter): without one the error is 403 access_code_required, …

showcase

Real hooks this service has delivered, for a wait screen: talking heads only, each hook_id, still_url (a JPEG, no key needed), platform, creator, views and line (the banner on the video, else …

find_hooks

Start hook research on a topic across TikTok, Instagram and YouTube Shorts (Shorts only, never long-form YouTube; platform "youtube"). platforms (since 2026-10-10, any of "tiktok", "instagram"…

get_run

A research run: its status, progress, charge and every hook it produced. wait_seconds 0 to 50: wait up to that long for the run to finish, returning the moment it is done or failed. Use wait_…

list_runs

Your research runs, newest first, without their results, limit 1 to 100 (default 20) per page. Each run says its kind: "short" (find_hooks), "long" (find_long_hooks) or "packaging" (find_packa…

find_long_hooks

Find long-form hooks: how the YouTube videos that beat their own channel open, on a topic. Long-form YouTube only, never Shorts, TikTok or Instagram (for those: find_hooks). What it does: sea…

find_packaging

Find packaging: the titles and thumbnails that earned the click on a topic, from long-form YouTube videos that beat their own channel. What it does: runs the same outlier search as find_long_…

save_preset

Save filters under a name for one tab: "long", "packaging" or "library" (the bounds are those of find_packaging's filters; a library preset may also hold min_comments, max_comments, posted_wit…

list_presets

Your saved filter presets, the newest change first; tab ("long", "packaging", "library") narrows. Same as GET /v1/presets. Free.

delete_preset

Delete one of your presets. Same as DELETE /v1/presets/{preset_id}. Free. Errors: 404 preset_not_found.

write_titles

Write 20 to 40 titles for your video, each borrowing the device and structure of one real outlier (a video that beat its own channel): the finds of one of your runs, or the shared index's vide…

write_ideas

Write ideas for new videos: each a title, a thumbnail concept (one visible action) and the words to print, built on one to three real outliers (based_on, each with its video_id, title, multipl…

get_call

One call of a priced tool (titles and the tools after it): tool, credits, charged, status (pending, done, failed), request and result. Same as GET /v1/calls/{call_id}. Free. Errors: 404 call_n…

list_calls

Your calls of priced tools, newest first; tool ("titles", ...) narrows. Same as GET /v1/calls. Free.

find_similar

The videos in the shared index nearest one of your finds (find_id from a Packaging or Long form run), nearest first, never the find's own video. Each has distance (0 is the same; measures says…

search_thumbnails

Thumbnails in the shared index by what the picture shows (q), or like a picture (image_url: read once by the model as subject, action, words and setting, then searched). Each result has matche…

score_package

Score a package against the real outliers on its subject, part by part (title device, length, words on the picture, faces, the words' role, contrast, brightness): each part says how many outli…

preview_package

Your package in a mock YouTube feed among a run's winners: view home, search, sidebar, phone (marks where a phone cuts the title) or tv; theme dark or light; look normal, grey or blur. Returns…

make_thumbnails

Make 2 to 12 thumbnails (default 4): 3 different concepts first, then images (Nano Banana 2.1, 1K or 4K), every printed word read back and checked letter by letter, a face only from your photo…

get_thumbnails

A thumbnails call: status, concepts and every image so far (url signed for 7 days, width, height, words, words_checked, cost_usd). Same as GET /v1/thumbnails/{call_id}. Free.

edit_thumbnail

Edit one thumbnail (an image of your thumbnails call, or a picture you send): op erase, edit, face_swap, text, text_variations, upscale, fix, crop or color. crop and color are free; upscale 12…

recreate_thumbnail

New thumbnails for your video with a YouTube video's own thumbnail as the layout reference (2 to 4 images, every printed word checked); priced as make_thumbnails. Same as POST /v1/thumbnails/r…

optimize_video

New packages (4, 8 or 12) for your published video: the original scored first against the real outliers on its subject, then each new package (title, thumbnail with every word checked, what it…

get_optimize

An Optimize call: the original's score and every new package so far. Same as GET /v1/optimize/{call_id}. Free.

ab_set

Pack 2 or 3 images of one of your thumbnails, edit or Optimize calls for YouTube Studio's Test and Compare: a zip of A, B, C (1280x720, under 2 MB) and a note of what each tests. Free. Same as…

get_find

One result of a long or packaging run with every field: the video, its numbers and the opening or the package analysis. find_id comes from a run's finds (get_run) or from list_kept_finds. Same…

keep_find

Keep or reject a find (a long-form hook or a package): verdict is "keep" (default) or "reject", and the last verdict wins. The verdict is the video's on that tab: every find of the same video …

clear_find_decision

Undo keep_find: the video goes back to having no verdict, on every find of it, and leaves list_kept_finds. Returns {"find_id", "verdict": null}. Clearing a find with no decision is the same …

list_finds

The index: every video your long and packaging runs found, across all runs, one entry a video on each tab (its newest read, with the keep or reject made on the video). Each is a full find obje…

remix_find

Make it mine, for a long-form opening or a package: write up to n (1 to 5, default 3) new ones for your niche that keep one real find's structure. From a long find, `written` holds openings: h…

list_remixes

The remixes you paid for from one hook (hook_id) or one find (find_id), newest first, each as its answer held it, with remix_id and created_at. Returns {"remixes": [...]}. Free. 404 hook_not_f…

get_remix

One remix you paid for (from remix_hook, remix_find or a chat turn), as its answer held it. Free. 404 remix_not_found for one that is not yours. Same as GET /v1/remixes/{remix_id}.

list_kept_finds

The videos you kept with keep_find (long-form hooks and packages), newest decision first: one entry a video on each tab across all runs, or the kept finds of one run_id, limit 1 to 100 (defaul…

export_run

A finished run's hooks as a file a creator can open: format "csv" (default; one row per hook, opens in any spreadsheet, formula-like cells defused with a leading quote), "json" (the full hook …

get_hook

One hook with every field: its opening line, transcript, watch_url and the vertical player_url (null only for an unusable id or a photo post found before 2026-09-26; runs deliver single videos…

embed_hook

Official TikTok or Instagram embed HTML for a hook, so the clip plays inside your own page. kind is "embed", or "fallback" when the creator disabled embedding or the clip is a photo post found…

keep_hook

Keep or reject a hook: verdict is "keep" (default) or "reject", and the last verdict wins. A reject may say why: reason is off_subject, weak_opening, wrong_language, low_quality, already_have …

clear_decision

Undo keep_hook: the hook goes back to having no verdict, so it leaves list_keeps and its export row carries none. Returns {"hook_id", "verdict": null}. Clearing a hook with no decision is the …

remix_hook

Make it mine: write up to n new opening lines (1 to 5, default 3) for your niche that keep a real hook's structure, the device that made it travel, with the subject swapped for yours. hook_id …

list_keeps

The hooks you kept with keep_hook, newest decision first, across all runs or within one run_id, limit 1 to 100 (default 100) per page. Returns {"kept": [...], "count": n on this page, "next_cu…

balance

Your account and remaining credits right now: account_id, credits, key_prefix and key_id of the key making this call, label, created_at, and that key's scopes, credit_limit and expires_at, and…

delete_account

Erase your account and everything in it, for good: every API key, run, hook, keep or reject decision, conversation and message. Unspent credits go with it. It cannot be undone. confirm mu…

chat

One conversational turn, for an agent relaying a person's words. It either asks ONE clarifying question (action "clarify"), answers about delivered hooks or the tool (action "answer", run null…

list_conversations

Your chat conversations, most recently active first, limit 1 to 100 (default 30) per page: conversation_id, title, created_at, updated_at, language, country and messages (the count). Nullable …

get_conversation

One chat conversation: its newest messages in order (role, content, run_id, created_at), a page of `limit`, with earlier_cursor for the older ones (null when the page reaches the first message…

usage

Your credits and what you have spent: credits (balance now), spent_total, reserved_now (credits held by runs still in flight, refunded in part when they finish), runs_total, last_30_days (one …

list_keys

Your API keys and what each may do. keys: key_id, name, prefix, created_at, last_used_at and current (true for the key making this call). access, per key_id: scopes, credit_limit, credits_used…

create_key

Create another API key on your account, for example one per agent or machine, so you can revoke one without touching the others. name is up to 60 characters. Give the key only what it needs. …

revoke_key

Revoke one of your API keys at once: key_id from list_keys, or "original" for the signup key. Any key may revoke itself (the result says so, and that key stops working immediately); revoking a…

request_access

Ask for the beta access code a new account needs (create_account's access_code). email is where the code is sent; note is optional (who you are, up to 500 characters). The owner approves the r…

list_access_requests

Owner only: every access request, newest first, optionally only one status (pending, approved, rejected). Each has request_id, email, note, status, code_id, code_prefix, created_at and decided…

approve_access_request

Owner only: approve an access request. Makes a one-use code, marks the request approved and emails the code. The code is in this result once, with emailed true or false; when false, send it yo…

reject_access_request

Owner only: reject a pending access request. Nothing is emailed. An approved or rejected request is 409 request_already_decided. Free.

list_access_codes

Owner only: every access code, newest first, with code_id, code_prefix, email, note, source, max_uses, uses, expires_at, revoked_at, created_at and usable. Never the code itself. Free.

create_access_code

Owner only: make an access code to hand out. max_uses 1 to 100000 (default 1), expires_in_days 1 to 365 (optional), note your own. email binds it to one person: then only Google sign-in with t…

revoke_access_code

Owner only: revoke an access code (code_id from list_access_codes). It admits nobody from now on; accounts it already made keep working. 404 access_code_not_found for an unknown id. Free.

admin_overview

Owner only: the whole service at a glance, as GET /v1/admin/overview. Counts of accounts and people; runs (total, last_24h, last_7d, failed_24h, in_flight); hooks; credits (charged_24h, charge…

admin_list_accounts

Owner only: every account, newest first, as GET /v1/admin/accounts: {total, accounts: [{id, email, name, label, credits, created_at, last_seen_at, runs, hooks, charged_total, is_admin, admitte…

admin_adjust_credits

Owner only: add or remove an account's credits, as POST /v1/admin/accounts/{account_id}/credits. A change that would take the balance below zero is 422 credits_below_zero and nothing changes; …

admin_list_runs

Owner only: every account's research runs, newest first, as GET /v1/admin/runs: {runs: [{run_id, account_id, email, topic, language, country, status, requested, hooks, reserved, charged, failu…

admin_list_actions

Owner only: the audit of password sign-ins and credit changes, newest first, as GET /v1/admin/actions: {actions: [{id, action, actor_email, target_account_id, detail, created_at}]}. Free.

list_strategies

The hook strategy library: every kind of long-form hook the shared index holds at least 3 openings of, with its plain name, count, the median multiple of those videos over their channels' usua…

create_folder

Make a named folder on one tab to file hooks or finds in. The same name again on that tab (case and spaces aside) returns the folder already there with created false, so a retry never makes tw…

list_folders

Your folders, the most recently changed first, each with item_count, up to 4 cover thumbnails and its share link when shared. With hook_id or find_id, each folder also has contains: the item i…

get_folder

One of your folders and its items, newest filed first, limit 1 to 100 a page (page with next_cursor). Each item has item_id, note, thumbnail_url, title and the full hook or find object. Same a…

rename_folder

Rename a folder, change its description, or both. A name another folder on the tab already has is 409 folder_exists. Returns the folder. Same as PATCH /v1/folders/{folder_id}. Free.

delete_folder

Delete a folder, its items and its share link at once (the link stops working). The hooks and finds in it, and their keeps, stay. Returns {"folder_id", "deleted": true}. Same as DELETE /v1/fol…

save_to_folder

File one video in a folder of its tab: a find (find_id) or any public YouTube video (video_id) in a long or packaging folder, a hook (hook_id) in a short one, with an optional note. A video al…

edit_folder_item

Set the note on one item of a folder. Returns the item. Same as PATCH /v1/folders/{folder_id}/items/{item_id}. Free. Errors: 404 item_not_found.

remove_from_folder

Take one video out of a folder; the hook or find and its keep stay. Returns {"item_id", "removed": true}. Same as DELETE /v1/folders/{folder_id}/items/{item_id}. Free. Errors: 404 item_not_fou…

share_folder

Turn on a folder's share link: share_url is a public read-only page anyone with it opens signed out (hookdetector.com/f/<token>); api_url is the same as JSON (get_shared_folder). It shows the …

unshare_folder

Turn a folder's share link off: the old link stops working at once; share_folder again makes a new one. Same as DELETE /v1/folders/{folder_id}/share. Free.

get_shared_folder

A shared folder as anyone with its link sees it: name, description, kind, item_count and items (public fields and the owner's note), newest first, paged. No key needed; limited per address (42…

swipe_file

Your swipe file: the title structures of the Packaging finds you kept or filed, each title_template with its title_device, count (how many of those videos use it, one a video) and best (the ex…

share_run

Share a finished Short form run as a public, read-only page anyone can open with the link, no sign-in: each hook's spoken line, on-screen words, idea, plays, creator and its video, in the Hook…

start_job

Start a background job on Hook Detector's job runner. Only echo can be started by hand: it waits `seconds` and answers `message` back with how many attempts it took (a job survives a deploy). …

list_jobs

This account's background jobs, newest first (tracker refreshes, alerts, reviews, echo): status, attempts, credits, result or error. Free. Same as GET /v1/jobs.

get_job

One background job of this account. Same as GET /v1/jobs/{job_id}. Errors: 404 job_not_found for another account's job or an unknown id.

search_index

Search the shared index of public YouTube videos Hook Detector's runs measured, with no run: words by text and meaning, or browse; filters for the multiple, views, long or short, recency, chan…

random_outliers

Outliers at random from the shared index (5x their channel's usual and over by default), a different set each call. Free. Same as GET /v1/index/random.

get_channel

A channel page: subscribers and totals, every recent long upload scored against the channel itself (outliers at 2x its median and over), and its momentum. Free. Same as GET /v1/channels/{ref}.

channel_outliers

A channel's own outliers (scope own), or outliers for a channel like it from other channels in the shared index (scope niche, 3x and over by default). Free. Same as GET /v1/channels/{ref}/outl…

similar_channels

Channels in the shared index closest to this one by the meaning of their titles, else by shared words, with a similarity 0 to 1. Free. Same as GET /v1/channels/{ref}/similar.

search_channels

Channels by name or handle: the shared index first, then YouTube's own channel search. Free. Same as GET /v1/channels/search.

niche_report

A niche report counted from the shared index: videos, channels, median views, the share at 10x and over, the 75th percentile multiple, top outliers and channels, by month. Free. Same as GET /v…

list_niches

The niche explorer: every niche reported, with its headline numbers. Free. Same as GET /v1/niches.

video_stats

A video's views per hour and its history from the shared index (new, rising and tracked videos read hourly, the rest daily); a video the index lacks is read now. Free. Same as GET /v1/videos/{…

list_winners

Real title and thumbnail changes on other channels: both versions (the pictures as URLs), views per hour before and 24 to 72 hours after, the lift and when the spike came. Free. Same as GET /v…

create_tracker

Make a tracker of up to 50 channels: hourly reads of their newest uploads, alerts when one reaches the multiple (default 3x its channel) or views per hour, in the app and by email. 1 credit a …

list_trackers

Your trackers, or every public one. Free. Same as GET /v1/trackers.

get_tracker

One tracker and its channels. Same as GET /v1/trackers/{tracker_id}.

update_tracker

Rename a tracker, share it, change its alert lines, or turn its daily ideas on. Same as PATCH /v1/trackers/{tracker_id}.

delete_tracker

Delete one of your trackers. Same as DELETE /v1/trackers/{tracker_id}.

add_to_tracker

Add channels to one of your trackers. Same as POST /v1/trackers/{tracker_id}/channels.

remove_from_tracker

Take a channel off one of your trackers. Same as DELETE /v1/trackers/{tracker_id}/channels/{ref}.

tracker_feed

A tracker's channels' uploads, strongest first. Free. Same as GET /v1/trackers/{tracker_id}/feed.

clone_tracker

Copy a public or shared tracker into a private one of yours. Same as POST /v1/trackers/{tracker_id}/clone.

tracker_alerts

Your tracker alerts, newest first, with the unread count. Free. Same as GET /v1/trackers/alerts.

create_alert

Save a search checked daily or weekly; a new video at your line (default 3x its channel) is a hit, emailed, with a Monday digest. 1 credit a check. Same as POST /v1/alerts.

list_alerts

Your saved searches and their newest hits. Free. Same as GET /v1/alerts.

get_alert

One saved search and its hits. Same as GET /v1/alerts/{alert_id}.

update_alert

Change a saved search: its words, line, frequency or email. Same as PATCH /v1/alerts/{alert_id}.

delete_alert

Delete a saved search. Same as DELETE /v1/alerts/{alert_id}.

run_alert

Check a saved search now, as a job (read it with get_job). 1 credit. Same as POST /v1/alerts/{alert_id}/run.

create_webhook

Post every new tracker alert and saved-search hit to your https URL, signed with the secret this returns once (X-HD-Signature). Same as POST /v1/webhooks.

list_webhooks

Your webhooks with their events and state (never the secret). Same as GET /v1/webhooks.

delete_webhook

Delete one of your webhooks. Same as DELETE /v1/webhooks/{webhook_id}.

test_webhook

Send one signed test delivery now and read what your URL answered. Same as POST /v1/webhooks/{webhook_id}/test.

webhook_deliveries

A webhook's deliveries, newest first, with status and your URL's answers. Same as GET /v1/webhooks/{webhook_id}/deliveries.

video_scorecard

Everything the index knows about one video: the multiple, views per hour and its history, real tags, title and thumbnail changes, our reads, similar videos. Free. Same as GET /v1/videos/{video…

list_trends

Rising words and phrases in the shared index's titles, this window against the one before, with counts and growth. Free. Same as GET /v1/trends.

list_formats

Title formats of the last 90 days with their median multiple, share over 1.5x, adoption and examples, ordered by the Wilson lower bound of that share (computed_from). Formats with at least 8 m…

format_videos

One title format's videos, strongest first. Free. Same as GET /v1/formats/{format_id}.

daily_ideas

Your daily idea sets (turn them on per saved search or tracker with daily_ideas), each idea with the real finds behind it, none repeated within a week. Same as GET /v1/ideas/daily.

create_agent

An agent that runs a Video Review on each new long upload of a tracker's channels, inside a monthly credit budget. Same as POST /v1/agents.

list_agents

Your agents with their budgets and this month's spend. Free. Same as GET /v1/agents.

get_agent

One agent and its reviews (done, skipped or failed, and why). Same as GET /v1/agents/{agent_id}.

update_agent

Change an agent's name or monthly budget, or pause it. Same as PATCH /v1/agents/{agent_id}.

delete_agent

Delete one of your agents. Same as DELETE /v1/agents/{agent_id}.

get_skeleton

The skeleton of a long find's whole video, heard by Scribe v2: sections, re-hooks, open loops, payoffs, sponsor and call-to-action spans, the outro, the timed lines. Builds it once for 5 credits as a …

review_video

Video Review of any public long video (15 credits): five ranked fixes with times and the counted fact behind each, six sub-scores each with what it is computed from, the hook scored and rewritten (lab…

read_retention_graph

Read a YouTube Studio audience retention screenshot (base64 PNG or JPEG) into 100 points and the 21 marks it was read from (1 credit). Not the chart is 422 not_a_retention_chart, free. Same as POST /v…

review_hook

Hook Review of your own opening (3 credits): a YouTube link (its first minute heard by Scribe v2) or a pasted script, scored out of 10 from named counted parts, a verdict per beat, and the promise che…

write_hook

Hook Creator (1 credit): an opening for your subject as beats with seconds counted from their words and a shot plan per line (said, shown, on screen, sound, delivery), labelled as written. Same as POS…

write_script

Script Writer (10 credits): hooks, the plan's sections with re-hooks and payoffs, the script, its runtime counted from its words, machine-sounding lines flagged, a fact-check list, Markdown. Runs as a…

review_script

Script Review (3 credits): your pasted script read like a Video Review on estimated times, plus machine-sounding lines and a fact-check list. Runs as a job. Same as POST /v1/scripts/review.

review_edit

Edit Review of a cut before upload (25 credits; an unlisted or public YouTube link up to 60 minutes): cuts a minute, long shots, dead air, sound changes, on-screen text, and the notes as Premiere CSV,…

write_upload_pack

The upload pack (1 credit) for a long find or your video: a description with chapters that pass YouTube's rules, tags and hashtags. Runs as a job. Same as POST /v1/seo.

clean_recording

The talking-head cleaner (15 credits), like 1of10's AutoCut: silences tightened, retakes, false starts, stutters and fillers cut with a reason on every cut, other microphones or cameras synced to the …

trending_shorts

Trending Shorts: the short videos (TikToks, Instagram Reels, YouTube Shorts) rising now on a subject, fastest first. Each item has video_id, platform, url, cover_url, creator, caption, plays, …

review_short

Rate my Reel or Short: read one public short the way Hook Detector reads a clip (its first frames, its words heard by ElevenLabs Scribe v2) and rate it against the real finds on its subject (t…

research_keywords

Keyword research for YouTube. volume: always estimated (YouTube publishes no search counts): estimated_monthly_searches with a range, a 0 to 100 score and band, its source (Google Trends with …

comment_insights

What a subject's audience asks and struggles with: the top comments of its outliers (videos that beat their own channel; or your video_ids, or a channel's best uploads), grouped into questions…

find_sponsors

Who sponsors the channels on a subject: in the descriptions of its outliers, sponsor lines, promo codes and offer links found in code, plus Scrape Creators' sponsor read of videos YouTube mark…

get_team

Your team, or team null: its name, pool (credits), seats, each member's name and role. The owner also sees every member's email, monthly cap and spend, open invites (never their links) and the…

create_team

Create a team this account owns, funding its pool from your balance with credits (402 when you hold less). Members' spending comes from the pool; you keep spending your own balance. 409 alread…

move_team_credits

Move credits between your balance and the team's pool; 402 when the side giving holds less, and nothing moves. Owner only. Needs admin. Free. Same as POST /v1/team/credits.

invite_to_team

Invite someone: returns link (and its token), a single-use page valid 7 days, shown here only, and emailed to that address (emailed true; when false, give the link to the person yourself). Som…

revoke_team_invite

Revoke an open invite: its link stops working at once. Owner only. Needs admin. Free. Same as DELETE /v1/team/invites/{invite_id}.

view_team_invite

What an invite joins, before accepting: the team's name, who invited you, its seats, when the link expires, and whether you are signed in with the invited email (null for an account with no em…

accept_team_invite

Join the team an invite names. From then on what you spend comes from the team's pool; your own runs stay private and your own balance waits for you. Each link works once (409 invite_used) for…

remove_team_member

The owner removes a member; anyone leaves with member_id "me". A removed member's next spend comes from their own balance, never the pool. The owner leaving with members is 409 team_has_member…

set_team_member_cap

Set a member's monthly cap on the pool (null removes it). A run started near the cap holds only what is left, so the cap is never passed mid-run (403 team_cap_reached below a run's minimum or …

thumbnail_attention

Where the eye is predicted to land on a thumbnail: the picture with a heatmap over it (PNG, base64), a 16 by 9 grid, the peak, the share in each third, the concentration and the share in YouTu…

create_poll

Put 2 to 4 packages to Hook Detector's users, who pick the one they would click, blind. Closes at votes_wanted or after 7 days. 2 credits, given back when a picture cannot be stored. Results w…

list_polls

Your package votes, newest first, with their results so far. Free. Same as GET /v1/polls.

get_poll

One poll: yours with votes, shares, 95% intervals, the leader once the votes separate, the slots and the reasons; or one you voted on with its shares. Free. Same as GET /v1/polls/{poll_id}.

delete_poll

Delete your poll, its votes and its pictures. Free. Same as DELETE /v1/polls/{poll_id}.

next_poll

A poll of another Hook Detector user waiting for your vote (not one you passed in skip): its options in an order of your own, no counts; poll null when none is waiting. Free. Same as GET /v1/p…

vote_poll

Vote on a poll with the slot you picked, and an optional reason. One vote an account, never on your own or your team's poll. Answers the shares so far. Free. Same as POST /v1/polls/{poll_id}/v…

close_poll

End your poll now: no more votes, the votes so far kept with its results. Free. Same as POST /v1/polls/{poll_id}/close.

video_badges

Badges for up to 50 YouTube videos at once, as the Chrome extension shows them on every card: views, the multiple over the channel's usual views (long against long uploads, Shorts against Shor…

list_research

The research findings counted from Hook Detector's shared index of public YouTube data: openings (which openings sit before a steeper or flatter first minute of YouTube's "most replayed" heatm…

get_research

One research page: every claim with the first run's and the second run's numbers (each run a sample of different channels), n per run and per cell, shown_a and shown_b (over the sample bar), r…

How to use

Claude Desktop or claude.ai: add a custom connector (Customize → Connectors; on Team and Enterprise plans an owner adds it under Organization settings → Connectors) with this server URL: https://api.hookdetector.com/mcp

Cursor or Cline: add to your MCP config:

{
  "mcpServers": {
    "hook_detector": {
      "url": "https://api.hookdetector.com/mcp",
      "transport": "streamable-http"
    }
  }
}