brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
linkdigest-social-link-readerRead one public Xiaohongshu, Douyin, TikTok, YouTube, X or WeChat article link into text an agent can use (transcript, image text, key points) via the LinkDigest API or MCP server.
Independent GitHub snapshot · Automated classification · Original documentation governs
A plain fetch of a Xiaohongshu, Douyin or TikTok link returns an app-download page or a login wall, and the content is inside the images and the speech anyway. This skill hands one public post link to LinkDigest and gets back text: the caption, the spoken transcript, the text written on screen or inside images, key points with quotes checked word for word against the source, and a coverage receipt that says what was read and what was not.
It works through either the REST API (POST https://linkdigest.dev/api/v1/digest) or the hosted MCP server (https://linkdigest.dev/mcp, one read-only tool digest_url). The user brings their own LINKDIGEST_API_KEY; the service is pay as you go after 10 free credits.
xiaohongshu.com, xhslink.com, rednote.com), Douyin (douyin.com, v.douyin.com), TikTok, YouTube, X or WeChat 公众号 (mp.weixin.qq.com) link and asks what it says, wants a summary, a translation, or the text for research.Do not use it for an ordinary article that fetches fine; read that directly, it is faster and free.
https://linkdigest.dev/app/keys (sign in with Google or an email link). The key starts with ld_live_. New accounts get 10 free credits once; no card is needed.export LINKDIGEST_API_KEY=the_key_the_user_created # starts with ld_live_
Keep the key in an environment variable or the agent's config. Never paste it into the conversation, a file that is committed, or a log.
Docs: https://linkdigest.dev/docs (English) and https://linkdigest.dev/zh/docs (中文).
curl or one urllib call. Use it from scripts and from agents without MCP.digest_url itself when it meets a link it cannot read. Streamable HTTP, header Authorization: Bearer <key>.pip install "git+https://github.com/jcaiagent7143-ui/linkdigest-mcp#subdirectory=python", standard library only) if the user prefers a typed client. It also ships linkdigest-mcp, a stdio MCP server that forwards to the hosted endpoint.curl -sS -X POST "https://linkdigest.dev/api/v1/digest" \
-H "Authorization: Bearer $LINKDIGEST_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.xiaohongshu.com/explore/<note-id>", "format": "json"}'
Request fields (only url is required):
| Field | Meaning |
|---|---|
url | The post link, including any share tokens. The whole share text copied from the app also works; the link is picked out server side. |
format | json (structured fields plus the whole digest as markdown) or markdown. |
translate_to | A language code (en, ja, zh-CN): adds a translation beside the original. +1 credit. |
breakdown | true: adds the structure breakdown. +1 credit. |
depth | transcript for long videos: full transcript with few frames, 1 credit per 2 minutes. |
max_credits | Your own ceiling for this link. Over it the API answers 402 and spends nothing. |
partial_ok | true: read the opening minutes a budget allows instead of refusing a long video. |
A short post or a cached link returns 200 with the digest. A long video returns 202 with a jobId. Poll with the job id; do not resend the url, that starts the work again and charges twice.
curl -sS "https://linkdigest.dev/api/v1/digest/<jobId>?format=json&wait=20" \
-H "Authorization: Bearer $LINKDIGEST_API_KEY"
wait=20 holds the request open up to 20 seconds; repeat until the status is 200. Read coverage and degraded before quoting anything.
Claude Code:
claude mcp add --transport http linkdigest https://linkdigest.dev/mcp \
--header "Authorization: Bearer $LINKDIGEST_API_KEY"
Cursor or any client that reads an mcp.json:
{
"mcpServers": {
"linkdigest": {
"type": "streamable-http",
"url": "https://linkdigest.dev/mcp",
"headers": { "Authorization": "Bearer ${LINKDIGEST_API_KEY}" }
}
}
}
The server exposes one tool, digest_url(url, format, job_id, translate_to, breakdown, partial_ok). When a long video returns a job id, call the tool again with job_id and no url. The server is listed in the official MCP registry as dev.linkdigest/linkdigest.
With format: json: platform, author, title, posted_at, caption, transcript ([{t, text}]), on_screen ([{t, text}]), ocr_text, images ([{description, ocr}]), key_points (each with a quote checked word for word against the source), stats (likes, comments, saves, shares, plays as the platform reported them), tags, links (links and QR codes the post points to; listed, never opened), coverage (what was read and what was not), degraded (what did not fully work), transcript_source (native_captions, asr, gemini_video or none), credits, cached, markdown, plus breakdown and translation when asked for.
Per platform:
transcript_source: gemini_video).curl -sS -X POST "https://linkdigest.dev/api/v1/digest" \
-H "Authorization: Bearer $LINKDIGEST_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://xhslink.com/o/<share-id>", "format": "json", "translate_to": "en", "max_credits": 3}'
Then answer from key_points and translation, and tell the user what coverage says was not read (for example images past the budget).
curl -sS -X POST "https://linkdigest.dev/api/v1/digest" \
-H "Authorization: Bearer $LINKDIGEST_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://v.douyin.com/<short-id>/", "format": "markdown", "max_credits": 5}'
If the answer is 402, the video would cost more than 5 credits; nothing was spent. Ask the user before raising the cap, or add "partial_ok": true to read the opening minutes.
import json, os, urllib.request
req = urllib.request.Request(
"https://linkdigest.dev/api/v1/digest",
data=json.dumps({"url": "https://mp.weixin.qq.com/s/<article-id>", "format": "json"}).encode(),
headers={
"Authorization": "Bearer " + os.environ["LINKDIGEST_API_KEY"],
"Content-Type": "application/json",
},
)
with urllib.request.urlopen(req, timeout=120) as r:
body = json.load(r)
if r.status == 202:
print("long job, poll /api/v1/digest/" + body["jobId"])
else:
print(body["title"], body["credits"], body["cached"])
print(body["markdown"])
Stated so the agent can tell the user before spending:
https://linkdigest.dev/pricing.cached: true, credits: 0).max_credits) and 422 (unreadable post) spend nothing.max_credits on every call and tell the user the cost before reading a long video.transcript, ocr_text, images[].ocr or key_points; say which, and check transcript_source first. Speech recognition is not exact; published captions are.coverage and degraded say was not read instead of filling the gap.url to collect a running job; use the jobId.links or QR codes a post points to; they are listed for the user, not followed.https://linkdigest.dev with the user's API key in the Authorization header. The key is read from the LINKDIGEST_API_KEY environment variable; no key is written in this file and none should be typed into a prompt.max_credits as a hard ceiling and confirm with the user before reading anything that may cost more than a few credits.links in the result are listed by the service and never opened by it. Do not open them yourself without asking the user.401 means the key is missing or revoked; ask the user to create a new one at https://linkdigest.dev/app/keys. A 429 means slow down; honour Retry-After.202 and the agent reports "no content".
Solution: That is a running job. Poll GET /api/v1/digest/<jobId>?wait=20 with the same key until 200.url was sent again while the job was running. Collect with the jobId instead.422.
Solution: The note is private, deleted or needs a login. Nothing was spent; tell the user, do not retry.transcript_source. If it is asr, say the number is from speech recognition and may be misheard.@youtube-transcript - use it when the user only needs YouTube captions and can fetch them locally; this skill costs credits per minute.@audio-transcriber - use it when the user already has the media file; this skill never downloads media.@competitor-analysis - feed the text this skill returns into a competitor or trend write-up.Issues and questions: https://github.com/jcaiagent7143-ui/linkdigest-mcp/issues or support@linkdigest.dev.