Skip to main content
Glama

LinkDigest — Xiaohongshu, Douyin, TikTok, YouTube to text

Server Details

Douyin, Xiaohongshu, TikTok, YouTube, X links to text: transcript, screen text, viral breakdown

Ownership verified
Status
Healthy
Uptime
100.0% over 37 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
jcaiagent7143-ui/linkdigest-mcp
GitHub Stars
2
Server Listing
LinkDigest

TDQS

A4.5/5.0

Scored across 2 tools

Disambiguation5/5

The two tools serve entirely distinct purposes: check_balance reports credits/pricing and digest_url converts a social link into text context. There is no plausible confusion about which to call for a given intent.

Naming Consistency5/5

Both tools follow a clean verb_noun snake_case pattern (check_balance, digest_url). The convention is consistent throughout and readable.

Tool Count4/5

Two tools is on the thin side, but each earns its place: one is the core conversion operation and the other supports billing/quota awareness. For a single-purpose URL-to-text service this is reasonably scoped rather than padded.

Completeness4/5

The core lifecycle (check quota, digest a URL, poll an async job via job_id) is covered, along with platform coverage notes and error/credit guidance. Minor gaps exist—no explicit batch input or separate job-status tool—but agents can work around these via repeated calls.

Available Tools

2 tools
check_balanceCredits left and what a read costsA
Read-onlyIdempotent
Inspect

How many credits this API key has left, what each kind of read costs, and where to buy more (links need no sign-in; the credit pack takes Alipay). Without a key it returns the prices and how to get a key. Call it before a batch of reads, or when digest_url says credits ran out.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, non-destructive, non-open-world behavior, so the bar is lower. The description adds non-obvious behavior the annotations cannot convey: it works without a key and then returns pricing plus key-acquisition instructions, and it discloses the Alipay payment path.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what is returned, then appends the no-key behavior and the invocation timing. Two sentences with little waste, though the payment-method and sign-in details are slightly dense parenthetical material.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description carries the return-value burden and does so adequately: credits remaining, per-read pricing, purchase links, and no-key fallback. Good enough for an agent to call and interpret it, though it does not sketch the response shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate; the 0-param baseline applies. The description correctly focuses on output instead of inventing input semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise resource and what it reports: remaining credits for the API key, per-read costs, and purchase links. The reference to digest_url makes it clearly distinguishable from its only sibling without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit trigger conditions — call before a batch of reads, or after digest_url reports exhausted credits. Covers when to use it well, though it does not state any case in which it should be skipped.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

digest_urlRead a social media post as text
Read-only
Inspect

Read what a social media link actually says. Works on Xiaohongshu, Douyin, TikTok, YouTube, X and ordinary web pages. Returns the post's transcript with times, on-screen text, the text in every image, caption and counts, key points each backed by a quote checked against the post (key_point_support in json), and a receipt of what was read (coverage in json). Bilibili, Instagram and Facebook are not supported. Works without an API key for a first look (a summary, two a day per address); the full output needs a key — see check_balance. If the result names a job id, call again with job_id only. Example: url="https://v.douyin.com/abc/", ask="推荐了什么产品、多少钱?".

ParametersJSON Schema
NameRequiredDescriptionDefault
askNoA question to answer from the post, e.g. "what products and prices does it recommend?". Returns answer, found and the quotes it rests on, checked against the post; found is false when the post does not say — nothing is invented. +1 credit.
urlNoThe post link, or the share text that contains it. Required unless job_id is given.
depthNofull (default), or transcript for a long video: the whole transcript with a frame a minute, 1 credit per started 2 minutes and a longer length cap. YouTube is always read in full.
formatNomarkdown (default) or json (structured: `coverage`, `key_point_support`, `answer`, and `links` — the links the post points to, with kind; None is opened).
job_idNoCollect a digest still running, instead of url (re-sending the url would start it again).
breakdownNoAlso take the post apart (爆款拆解): hook, timed beats, title formula, call to action, reusable template; quotes checked against the post. +1 credit.
partial_okNoRead the opening minutes the budget affords instead of refusing a long video; the digest then carries `partial`. Default false: a long video is refused for free.
translate_toNoAlso translate into this language (en, ja, zh-CN); the original text is kept. +1 credit.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changeddigest_url8 fields changed
      • changedInput schema / properties / ask / description
        Previous value: -"A question to answer from the post, in any language: \"what products and prices does it recommend?\", \"does the speaker say X?\", \"what is step three?\". The answer comes with the quotes it rests on, each checked against the post by the server (`answer` in json: answer, found, support[]; an Answer section in markdown). `found` is false when the post does not address it — nothing is invented. Costs the digest's price plus 1 credit; the same question on the same url is served from cache for free."New value: +"A question to answer from the post, e.g. \"what products and prices does it recommend?\". Returns answer, found and the quotes it rests on, checked against the post; found is false when the post does not say — nothing is invented. +1 credit."
      • changedInput schema / properties / breakdown / description
        Previous value: -"Also take the post apart (爆款拆解): the hook in its first seconds, the structure as timed beats, the title formula, cover text, call to action, audience, and a reusable template to make your own version. Quotes are copied from the post and checked against it; engagement counts and hashtags come from the platform. Written in the post's language, or in translate_to if given. Shown as a section in markdown and as `breakdown` in json. Costs the digest's price plus 1 credit; a repeat is served from cache for free."New value: +"Also take the post apart (爆款拆解): hook, timed beats, title formula, call to action, reusable template; quotes checked against the post. +1 credit."
      • changedInput schema / properties / depth / description
        Previous value: -"How much of a video to read. full (default): the transcript plus frames sampled densely, 1 credit per started minute. transcript: transcript-first, for long videos — the whole transcript plus one frame a minute (or one per chapter), one credit per started 2 minutes, and a longer length cap (free 60 min, paid 120 min, against 10 and 30 for full). Coverage says the frames were sparse and `depth` in json says which read it was. When a full read would be partial, `partial.transcript_credits` is what this read of the whole video costs. A YouTube video read by Gemini watching it (YouTube blocks this server) has no transcript-only form: it is read in full and priced as a full read."New value: +"full (default), or transcript for a long video: the whole transcript with a frame a minute, 1 credit per started 2 minutes and a longer length cap. YouTube is always read in full."
      • changedInput schema / properties / format / description
        Previous value: -"markdown (default, best for reading) or json (structured). json adds `coverage` (seconds_transcribed, duration_seconds, largest_frame_gap_seconds, images_read, images_total, not_captured) and `key_point_support` ({ point_index, kind, t, image_index, quote, verified } per key point). Either format lists the links the post points to (a Links section; `links` in json: { url, found_in, label, kind }, from its caption, QR codes, WeChat's 阅读原文 and on-screen text). None is opened; kind marks payment codes and group invites."New value: +"markdown (default) or json (structured: `coverage`, `key_point_support`, `answer`, and `links` — the links the post points to, with kind; None is opened)."
      • changedInput schema / properties / job_id / description
        Previous value: -"Collect a digest already running. Pass the job id from a previous call instead of url. Use this rather than re-sending the url, which would start the work again."New value: +"Collect a digest still running, instead of url (re-sending the url would start it again)."
      • changedInput schema / properties / partial_ok / description
        Previous value: -"Read the opening minutes the budget affords instead of refusing a video over max_credits or the plan's length cap. Default false: a long video is refused and costs nothing (YouTube excepted: its length is known only after Gemini watches it, so it is read in full and billed at most max_credits). When true, the digest carries `partial` (read_seconds, duration_seconds, full_credits). An image post the budget does not cover whole reads its first images instead (6 a credit); its partial has 0 seconds, and image_count / images_read say how many."New value: +"Read the opening minutes the budget affords instead of refusing a long video; the digest then carries `partial`. Default false: a long video is refused for free."
      • changedInput schema / properties / translate_to / description
        Previous value: -"Also translate the digest into this language: an ISO 639-1 code, optionally with a region (en, ja, zh-CN). The original-language text is always returned; the translation is added alongside it under `translation` (title, caption, key points, transcript text, on-screen text, image descriptions), and as a Translation section at the end of the markdown. Machine translation. Costs the digest's price plus 1 credit; a repeat of the same url and language is served from cache for free."New value: +"Also translate into this language (en, ja, zh-CN); the original text is kept. +1 credit."
      • changedInput schema / properties / url / description
        Previous value: -"The post URL, including any share tokens. Required unless job_id is given."New value: +"The post link, or the share text that contains it. Required unless job_id is given."
  2. 1 tool update
    • Changeddigest_url1 field changed
      • addedInput schema / properties / ask
        Added value: +{
        +  "description": "A question to answer from the post, in any language: \"what products and prices does it recommend?\", \"does the speaker say X?\", \"what is step three?\". The answer comes with the quotes it rests on, each checked against the post by the server (`answer` in json: answer, found, support[]; an Answer section in markdown). `found` is false when the post does not address it — nothing is invented. Costs the digest's price plus 1 credit; the same question on the same url is served from cache for free.",
        +  "maxLength": 300,
        +  "type": "string"
        +}
  3. 1 tool update
    • Addedcheck_balance
  4. 1 tool update
    • Changeddigest_url3 fields changed
      • addedInput schema / properties / depth
        Added value: +{
        +  "description": "How much of a video to read. full (default): the transcript plus frames sampled densely, 1 credit per started minute. transcript: transcript-first, for long videos — the whole transcript plus one frame a minute (or one per chapter), one credit per started 2 minutes, and a longer length cap (free 60 min, paid 120 min, against 10 and 30 for full). Coverage says the frames were sparse and `depth` in json says which read it was. When a full read would be partial, `partial.transcript_credits` is what this read of the whole video costs. A YouTube video read by Gemini watching it (YouTube blocks this server) has no transcript-only form: it is read in full and priced as a full read.",
        +  "enum": [
        +    "full",
        +    "transcript"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / format / description
        Previous value: -"markdown (default, best for reading) or json (structured)."New value: +"markdown (default, best for reading) or json (structured). json adds `coverage` (seconds_transcribed, duration_seconds, largest_frame_gap_seconds, images_read, images_total, not_captured) and `key_point_support` ({ point_index, kind, t, image_index, quote, verified } per key point). Either format lists the links the post points to (a Links section; `links` in json: { url, found_in, label, kind }, from its caption, QR codes, WeChat's 阅读原文 and on-screen text). None is opened; kind marks payment codes and group invites."
      • changedInput schema / properties / partial_ok / description
        Previous value: -"Read the opening minutes the budget affords instead of refusing a video over max_credits or the plan's length cap. Default false: a long video is refused and costs nothing (YouTube excepted: its length is known only after Gemini watches it, so it is read in full and billed at most max_credits). When true, the digest carries `partial` (read_seconds, duration_seconds, full_credits)."New value: +"Read the opening minutes the budget affords instead of refusing a video over max_credits or the plan's length cap. Default false: a long video is refused and costs nothing (YouTube excepted: its length is known only after Gemini watches it, so it is read in full and billed at most max_credits). When true, the digest carries `partial` (read_seconds, duration_seconds, full_credits). An image post the budget does not cover whole reads its first images instead (6 a credit); its partial has 0 seconds, and image_count / images_read say how many."
  5. 1 tool update
    • Changeddigest_url2 fields changed
      • changedInput schema / properties / url / description
        Previous value: -"The post URL, including any share tokens."New value: +"The post URL, including any share tokens. Required unless job_id is given."
      • changedInput schema / required
        Previous value: -[
        -  "url"
        -]New value: +[]
  6. 1 tool update
    • Changeddigest_url1 field changed
      • changedInput schema / properties / partial_ok / description
        Previous value: -"Read the opening minutes the budget affords instead of refusing a video over max_credits or the plan's length cap. Default false: a long video is refused and costs nothing. When true, the digest carries `partial` (read_seconds, duration_seconds, full_credits)."New value: +"Read the opening minutes the budget affords instead of refusing a video over max_credits or the plan's length cap. Default false: a long video is refused and costs nothing (YouTube excepted: its length is known only after Gemini watches it, so it is read in full and billed at most max_credits). When true, the digest carries `partial` (read_seconds, duration_seconds, full_credits)."
  7. 1 tool update
    • Changeddigest_url2 fields changed
      • addedInput schema / properties / breakdown
        Added value: +{
        +  "description": "Also take the post apart (爆款拆解): the hook in its first seconds, the structure as timed beats, the title formula, cover text, call to action, audience, and a reusable template to make your own version. Quotes are copied from the post and checked against it; engagement counts and hashtags come from the platform. Written in the post's language, or in translate_to if given. Shown as a section in markdown and as `breakdown` in json. Costs the digest's price plus 1 credit; a repeat is served from cache for free.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / translate_to / description
        Previous value: -"Also translate the digest into this language: an ISO 639-1 code, optionally with a region (en, ja, zh-CN). The original-language text is always returned; the translation is added alongside it under `translation` (title, caption, key points, transcript text, on-screen text, image descriptions) — visible in json format. Machine translation. Costs the digest's price plus 1 credit; a repeat of the same url and language is served from cache for free."New value: +"Also translate the digest into this language: an ISO 639-1 code, optionally with a region (en, ja, zh-CN). The original-language text is always returned; the translation is added alongside it under `translation` (title, caption, key points, transcript text, on-screen text, image descriptions), and as a Translation section at the end of the markdown. Machine translation. Costs the digest's price plus 1 credit; a repeat of the same url and language is served from cache for free."
  8. 1 tool update
    • Changeddigest_url1 field changed
      • addedInput schema / properties / partial_ok
        Added value: +{
        +  "description": "Read the opening minutes the budget affords instead of refusing a video over max_credits or the plan's length cap. Default false: a long video is refused and costs nothing. When true, the digest carries `partial` (read_seconds, duration_seconds, full_credits).",
        +  "type": "boolean"
        +}
  9. 1 tool update
    • Changeddigest_url1 field changed
      • addedInput schema / properties / translate_to
        Added value: +{
        +  "description": "Also translate the digest into this language: an ISO 639-1 code, optionally with a region (en, ja, zh-CN). The original-language text is always returned; the translation is added alongside it under `translation` (title, caption, key points, transcript text, on-screen text, image descriptions) — visible in json format. Machine translation. Costs the digest's price plus 1 credit; a repeat of the same url and language is served from cache for free.",
        +  "pattern": "^[a-z]{2}(-[A-Z]{2})?$",
        +  "type": "string"
        +}
  10. 1 tool update
    • First observeddigest_url

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.