63trust / 100

Hook Detector

by hookdetector.com in News & content

MCP serverPassing, checked 4 h ago

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

https://api.hookdetector.com/mcp
Tools
154
open to any client
Uptime
100%
last 30 days
Response time
475 ms
636 ms slowest 5%
Last check
Passed
4 h ago, next in 1 h

Scan it nowHow to connect

Reliability

All checks passedSome failedAll failedNot checked

Status and outage history · Atom feed · Watch with other listings

How to connect

Add it to any MCP client that supports remote servers.

{
  "mcpServers": {
    "hook-detector": {
      "type": "http",
      "url": "https://api.hookdetector.com/mcp"
    }
  }
}

154 tools

  • 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, and a code that does not work is 403 invalid_access_code. Ask for a code…

  • 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 its opening line). The most viewed first, one per creator, only what is…

  • 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", "youtube"; all three when left out) searches and delivers only those…

  • 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_seconds=50 and call again while status is "queued" or "running"; a fresh…

  • 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_packaging); pass kind to list only one. Returns {"runs": [...], "next_cursor"}…

  • 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: searches YouTube for long-form videos on the topic, keeps only the outliers (a…

  • 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_hooks (long-form YouTube, 2023 or later, views at least min_outlier times…

  • 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_within_days and language). The same name on the same tab replaces it. Start a…

  • 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 videos nearest your topic by meaning. Each title: title, chars, first_40 (what…

  • 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, multiple, find_id and bend niche when it came from another niche). constraints are…

  • 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_not_found.

  • 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 how it is computed), its numbers and its multiple over its channel's…

  • 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 matched_by (text or meaning). Free; image reads at most 60 an hour. Same as GET…

  • 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 outliers it matches; pattern_match (0 to 100) is the mean share: how much the…

  • 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 png_base64 and mine_at. Free. Same as POST /v1/packaging/preview.

  • 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 photos or your channel's own thumbnails. Answers at once with call_id and status…

  • 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; the rest 4 (a version each for text_variations), charged only for what is…

  • 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/recreate; read it with get_thumbnails.

  • 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 tests) scored the same way, best first, with vs_original. 10 credits a…

  • 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 POST /v1/ab.

  • 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 shape as GET /v1/finds/{find_id}. Free. Errors: 404 find_not_found, 422…

  • 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 you have there carries it, so a later run that finds the video again shows…

  • 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 success, so a retry is safe. Same as DELETE /v1/finds/{find_id}/decision…

  • 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 object: the title and thumbnail_url as YouTube shows them, views…

  • 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: hook (what the creator says first), then (what the next half minute has to…

  • 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_found or find_not_found for one that is not yours. Same as GET…

  • 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 (default 100) per page. Returns {"kept": [...], "count": n on this page…

  • 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 objects) or "md" (Markdown notes, one section per hook). Returns…

  • 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 only). hook_id comes from get_run. Free.

  • 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 before 2026-09-26 (then show thumbnail, which falls back to the hook's…

  • 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 or other, and note (up to 280 characters) your own words. Kept hooks come…

  • 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 same success, so a retry is safe. Same as DELETE…

  • 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 is one of your hooks (from get_run, get_hook or list_keeps); 404…

  • 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_cursor"} with full hook objects; pass next_cursor back as cursor for more…

Security scan

5 findings

  • Unusually long description in tool:find_hooks
    find_hooks (find hooks) Start hook research on a topic across TikTok, Instagram …
  • Unusually long description in tool:get_run
    get_run (get run) A research run: its status, progress, charge and every hook it…
  • Unusually long description in tool:find_long_hooks
    find_long_hooks (find long hooks) Find long-form hooks: how the YouTube videos t…
  • Unusually long description in tool:find_packaging
    find_packaging (find packaging) Find packaging: the titles and thumbnails that e…
  • Unusually long description in tool:remix_find
    remix_find (remix find) Make it mine, for a long-form opening or a package: writ…

Recent checks

WhenResultHTTPTime
4 h agoPassed200559 ms
16 h agoPassed200636 ms
28 h agoPassed200421 ms
38 h agoPassed200447 ms
2 days agoPassed200464 ms
Show 10 older checks
3 days agoPassed200547 ms
3 days agoPassed200507 ms
4 days agoPassed200505 ms
4 days agoPassed200395 ms
5 days agoPassed200438 ms
5 days agoPassed200545 ms
6 days agoPassed200489 ms
6 days agoPassed200570 ms
7 days agoPassed200537 ms
8 days agoPassed200496 ms