rednote-gate
Enables interaction with Xiaohongshu (RedNote) through browser automation, providing read tools for login status, search, notes, comments, and user notes, plus queued write actions for publishing photo/video notes, drafts, comments, likes, and replies. Writes require human approval via a local approval page and support dry-run/guardrail controls.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rednote-gatepost these two photos about my hike"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
rednote-gate
rednote-gate drives ONE dedicated throwaway RedNote (Xiaohongshu) account. Never point it at a primary or brand account. It works by browser automation, which is against RedNote's terms of service. The account can be rate limited or banned. Only use an account you can afford to lose.
Website: https://yashshelar007.github.io/rednote-gate/
It is a local MCP server for Claude Code, Claude Desktop and Codex. Reads run directly. Every write waits in a queue until a human clicks Approve on a local web page.
Quick start
Install from npm
npm install -g rednote-gate
rednote-gate setupThat installs Chromium, opens the QR login for your throwaway account, and connects rednote-gate to Claude Code. Your data and login live in ~/.rednote-gate.
Or from a clone
git clone https://github.com/YashShelar007/rednote-gate.git
cd rednote-gate
npm run setupSame steps, plus the build. A clone that already has a login in .session/ keeps its data in the clone folder.
Then use rednote-gate's prompts. Claude Code shows them as slash commands:
Prompt (slash command) | What happens |
| Claude writes a photo note from your photos and a one-line brief, and queues it |
| Claude reads a note's comments, drafts up to 3 replies, and queues them |
| Claude researches a concept, writes an original note, renders text-card images, and queues it |
| Claude searches a topic, reads the top notes and comments, and summarises what works. Read only. |
| Claude summarises what is waiting and what happened |
| every tool and prompt, your mode, and what is left of today's budget |
Or just ask in plain words ("post these two photos about my hike"). The first time you use a rednote tool, a small background service starts. It owns the browser, the approval page and the worker, and it keeps running after you close Claude Code, so the approval page always works and approved items always run. It closes the browser window after 5 idle minutes. Stop it with rednote-gate stop (npm run stop in a clone). When something is queued, the approval page opens in your browser and your Mac shows a notification. You click Approve. About 30 seconds later it runs, and the page shows a screenshot of the result. You get a notification when it is done, or if RedNote ever shows a captcha.
Status: every flow was checked against the live site on 2026-10-06 on a rednote.com account, headed: four reads, and one real publish, draft, comment and reply, each approved by a human on the approval page. See Last verified against the live site.
Related MCP server: rednote-analyzer-mcp
How it fits together
Part | Here |
Host | Claude Code, Claude Desktop or Codex: the AI app you talk to |
Client | the connector inside the host, one per server. The host provides it. |
Server | rednote-gate, a local MCP server. The host starts it and talks to it over stdio. |
Tools (15) | 5 read tools run straight away. 6 write tools only queue. 4 local tools never touch RedNote. |
Prompts (6) |
|
Resources | none |
The model calls tools. You choose prompts. The background service, the approval page and the rednote-gate CLI are not part of MCP. The approval page is a local web page on 127.0.0.1. It sits outside MCP on purpose, so the model cannot approve its own writes.
What it does
rednote-gate is a local stdio MCP server. It needs Node 20 or newer. It is written in TypeScript and drives Playwright Chromium on your own machine.
Read tools run straight away:
Tool | Arguments | Returns |
| none |
|
|
| noteId, title, author, likes, url. The url carries an |
|
| noteId, title, body, author, tags, likes, collects, comment count, ipLocation, time |
|
| id, author, text, likes, reply count. First page only. |
|
| renders 1080x1440 text-card PNGs on your computer and returns their paths. Never touches RedNote. |
|
| your own notes, newest first: noteId, title, likes, url |
|
| recent queue items: id, tool, status, last change. Never the approval link. |
| none | what rednote-gate can do, the current mode, and today's remaining budget |
| none | opens the approval page in your browser. Never returns the link. |
Write tools only add an item to the queue and return its queue id. They never touch the browser.
Tool | Arguments | What happens after approval |
|
| publishes a photo note; each topic is added as a linked RedNote topic when the picker offers exactly that topic, otherwise as plain |
| same as | saves a draft instead of publishing |
|
| publishes a video note once RedNote has processed it |
|
| posts a comment on the note |
|
| likes the note (own daily cap, see |
|
| replies to that comment |
For rednote_reply_comment, pass the id, author and text exactly as rednote_get_comments returned them. Before replying, the worker reads the comment with that id from the page and checks that its author and text still match exactly. If not, it does not reply.
Titles, comments and replies must be a single line: a line break would be typed as Enter, which can send a comment early. The body of a note may have line breaks.
Note URLs must look like https://www.xiaohongshu.com/explore/<id>?xsec_token=... (or www.rednote.com for overseas accounts). Take them from rednote_search results. Bare URLs without the token are refused, because RedNote answers them with a captcha. See docs/friction.md.
How the approval gate works
A short example:
You ask Claude: "Post a note about my desk setup with /Users/me/pics/desk.jpg."
Claude calls
rednote_create_post. The server checks the image, copies it into the queue and hashes it. It returns a queue id such asq_20261006T153012_ab12. No browser opens. Nothing is posted.You run
rednote-gate approveand open the link it prints. The page shows the exact title, body and image. You click Approve.The worker checks the queue every 10 seconds. It waits 30 seconds after your click, so you can still press Cancel, then picks up the item if the budget allows. It writes an
attemptline to the ledger, then opens the creator page, uploads the image and types the text.In dry run mode (the default) it stops before the final click. The item becomes
dry_run. In live mode (rednote-gate live) it clicks publish. The item becomesposted.Claude can call
rednote_queue_statusto see the result. It never gets the approval link.
Clicking Approve only marks the item. It does not post anything by itself. There is no approval in chat. Telling Claude "yes, post it" changes nothing.
Statuses
pending -> approved | rejected
approved -> posting | rejected (Cancel)
posting -> posted | dry_run | failed | unknownStatus | Meaning |
| queued, waiting for a human |
| a human clicked Approve. Waits for the worker and the budget. |
| a human clicked Reject, or Cancel on an approved item |
| the worker is running it now |
| a live attempt finished |
| the worker ran the flow with dry run on. It navigated, uploaded images and typed text, but did not click the final button. |
| a dry run hit an error, or a live attempt stopped before its final click (for example, the comment it should reply to changed). Nothing was sent. It can be queued again. |
| a live attempt hit an error after its final click, or the process died mid live attempt. It may or may not have posted. It is never retried. Check the account by hand. |
Queuing an identical write returns the existing id instead of a second item. Identical means same tool, same arguments and same image bytes. This applies while the first one is pending, approved, posting, posted or unknown.
Guardrails
Approval in code. Write tools only queue. The worker clicks the final button only in live mode, and only on an approved item.
What you approve is what posts. Images are copied into the queue and hashed when queued. Only real JPEG, PNG or WebP files pass, checked by file signature. Each image can be at most 20 MB. A note takes 1 to 9 images. That is a project limit, not RedNote's.
Daily budget. At most
RN_DAILY_WRITESlive attempts (default 5) in any rolling 24 hours. Comments and replies also needRN_COMMENT_GAP_MINminutes (default 10) since the last live comment or reply attempt. The budget is worked out from the ledger, so a restart does not reset it. Failed and unknown live attempts count. Dry runs do not. An approved item over budget waits. The approval page shows when the next slot opens.Undo window. The worker waits 30 seconds after Approve. Until then, Cancel stops it.
An approval is tied to its mode. "Approve dry run" only ever runs as a dry run. If you restart in live mode, earlier dry-run approvals do not run; the page tells you to cancel and approve again.
Read back before sending. After typing, every field is read back. If a topic or mention picker, or anything else, changed the text, it stops before the final click.
Crash safety. The
attemptline is written before the browser starts, so a crash still uses up budget. A live item cut off mid attempt becomesunknownand is never retried. A dry run cut off mid attempt becomesfailed.Checked again before sending. Image hashes are re-checked before upload. A reply only goes out if the target comment still exists and its text still matches what you approved.
Halt on friction. If RedNote shows a captcha or a "too frequent" warning, rednote-gate writes a
blockedline to the ledger. It stops the worker and refuses read tools. Write tools can still queue, since queuing never touches the browser. It does not retry. The halt survives a restart. A human clicks Resume on the approval page to continue.No bare note URLs. URLs without
xsec_tokenare refused before the browser opens.One browser owner. Only the service drives the browser, guarded by a lock file in
data/. Every MCP host (Claude Code, Claude Desktop, Codex, several sessions at once) talks to that one service, so there is never a second browser on the account.Dry run by default. It stays in dry run until you run
rednote-gate liveor go live on the Settings page. The mode saved insettings.jsonwins overRN_DRY_RUN.
Terms of service warning
This project drives the RedNote website with a real browser and a real logged-in session. RedNote's terms do not allow this. Using it can get the account rate limited, restricted or banned. That risk is yours.
Two Xiaohongshu notices from 2026 also apply (checked 2026-10-07). On 2026-03-10 it announced action against "AI 托管" (AI hosting) accounts (IT之家 report). An account that now and then lets AI hosting write, post or interact for it gets warnings and reduced distribution. An account that registers, posts or interacts directly through AI hosting tools is banned, and so is one whose public notes were all posted that way. On 2026-04-27 it published rules for AI content (IT之家 report). Creators should label notes that AI generated or polished when they publish them, and the platform adds its own label to AI content left unlabeled. Using AI to run an account against the rules is punished in steps, up to a ban.
An Approve click does not make an account compliant. A throwaway account that only posts through rednote-gate matches the ban description in the March notice.
Use ONE dedicated throwaway account. Never a primary account. Never a brand account.
Keep writes few and far apart. The budget is a ceiling, not a target.
Respect the law where you live and the people whose notes you read or reply to.
Setup
You need Node 20 or newer, a RedNote account made for this purpose, and the phone that account is logged in on.
npm install -g rednote-gate
rednote-gate setuprednote-gate setup installs Chromium with the package's own Playwright, then runs these two steps, which you can also run one by one:
rednote-gate login
rednote-gate connectFrom a clone, npm run setup does the same after npm install and npm run build. In a clone, npm run login, connect, live, dry, stop and approve run the same commands.
rednote-gate connect adds rednote-gate to Claude Code for all your projects (claude mcp add --scope user). It also prints the config for Claude Desktop and Codex. See below.
It starts in dry run: approved items fill in the form but never publish. When a dry run looks right, switch modes with one command:
rednote-gate liveIt says what live means and asks you to confirm. rednote-gate live --yes skips the question. The mode is saved to settings.json, the same file the dashboard's Settings page writes, and the service restarts on the next tool call. rednote-gate dry switches back. Approvals given in one mode never run in the other.
More commands:
Command | Does |
| version, site, mode, what is left of today's budget, whether the service runs |
| offline checks, one pass or fail line each: Node, Chromium, login, settings, ledger, service. Never contacts RedNote. |
| prints the approval page link |
| stops the background service |
| all commands |
With no command, rednote-gate runs the MCP server. That is what your MCP host starts.
Where your data lives
Data and login live in ~/.rednote-gate: data/ for the queue, ledger and settings, and .session/ for the login. RN_HOME moves both. A clone that already has .session/ from an older version keeps using its own folder.
rednote-gate login opens a visible browser at xiaohongshu.com. Overseas accounts get sent to rednote.com: the login follows, reloads on rednote.com and asks you to scan the new QR code. It records which site your account uses in .session/site. Scan the QR code with the throwaway account's phone. If the page shows you logged in but the terminal does not move on, press Enter there. It then visits creator.xiaohongshu.com to pick up the creator session; scan again if that site asks. It saves the session to .session/state.json with owner-only permissions (0600).
Quit your MCP host before running it: only one process may drive the browser.
That file is a credential. It is git-ignored. rednote-gate never prints it. Never share it, commit it or copy it to a shared disk.
Then add the server to your MCP host.
Wiring into Claude Code, Claude Desktop and Codex
rednote-gate connect prints all three for your install. With a global npm install the command is rednote-gate. From a clone, use node with the absolute path to dist/cli.js.
Claude Code:
claude mcp add rednote-gate --scope user -- rednote-gateClaude Desktop (in claude_desktop_config.json):
{
"mcpServers": {
"rednote-gate": {
"command": "rednote-gate",
"args": []
}
}
}Claude Desktop may not see your shell's PATH. If it cannot start the server, use absolute paths: command is the output of which node, and args is ["<npm root -g>/rednote-gate/dist/cli.js"].
Codex (in ~/.codex/config.toml):
[mcp_servers.rednote-gate]
command = "rednote-gate"
args = []An env block is optional. See Environment variables.
Never load a browser MCP server, such as @playwright/mcp, in the same host session as rednote-gate. An agent with a browser could open the approval page and click Approve.
The approval page
The page runs at http://127.0.0.1:7317 while the MCP server runs. Change the port with RN_APPROVAL_PORT.
Get the link:
rednote-gate approveIt prints the URL with a secret token. The server makes a new token each time it starts, so get a fresh link after a restart. The link is also stored in data/approval-url with owner-only permissions.
The page shows:
for posts and drafts: the exact title, body and images
for comments: the comment text
for replies: the comment being replied to, and the reply text
live writes used in the last 24 hours, and when the next slot opens
the mode: DRY RUN or LIVE
a halt banner if a captcha or warning stopped the worker
after each attempt, a screenshot of what the browser showed at the end
it refreshes itself every 5 seconds while something is approved or running
It opens by itself when Claude queues a write (at most once a minute). rednote_open_approval_page opens it on request.
The page also shows today's usage as meters, and links to Settings: mode (dry run or live, with a confirmation tick to go live), writes per day, likes per day, minutes between comments, and notifications. Settings are saved to data/settings.json and apply to the next item that runs, without a restart. They cannot go past the hard maximums: 20 writes, 50 likes, 2 minutes between comments.
Buttons:
Button | Does |
Approve dry run, or in live mode Approve and publish, Approve and save draft, Approve and send, Approve and send reply | marks a pending item approved. It does not post. The worker runs it about 30 seconds later. |
Reject | marks a pending item rejected |
Cancel before it runs | rejects an approved item the worker has not started |
Resume | clears a halt and writes a |
How the page is protected:
It binds to 127.0.0.1 only.
It checks the Host header, which blocks DNS rebinding.
Every request needs the token.
State changes are POST only and must come from the same origin. This blocks other websites.
It cannot be framed. It sends a strict Content Security Policy and no referrer.
Queue file format
All data lives in ~/.rednote-gate/data/, or in data/ in a clone that already had a login. RN_HOME or RN_DATA_DIR moves it. The folder is owner-only. In a clone it is git-ignored.
Path | What |
| one queue item |
| images copied in when the item was queued |
| the ledger |
| screenshot of the attempt |
| the approval link (0600) |
| the service's process id; only the service drives the browser |
| the service's log |
A queue item:
{
"id": "q_20261006T153012_ab12",
"tool": "create_post",
"args": { "title": "...", "body": "...", "images": ["q_20261006T153012_ab12/0.jpg"] },
"imageSha256": ["..."],
"contentHash": "...",
"createdAt": "2026-10-06T15:30:12.000Z",
"status": "pending",
"history": [{ "status": "pending", "at": "2026-10-06T15:30:12.000Z" }]
}Image paths in args.images are relative to data/queue/. imageSha256 holds one hash per image. contentHash covers the tool, the arguments and the image hashes, and is what duplicate checks compare. Each status change adds one entry to history.
Ledger format
data/ledger.jsonl holds one JSON object per line.
Field | Meaning |
| time of the event |
|
|
| queue id |
| which write tool |
| whether dry run was on |
| the item's final status: |
| a short note |
| path to the screenshot |
Not every field appears on every line. An attempt line is written before the browser starts. A result line follows when the attempt ends. If the process dies in between, there is an attempt with no result. On the next start the item becomes unknown (live) or failed (dry run), and a result line records that.
The budget counts attempt lines with dryRun: false from the last 24 hours. The halt also comes from the ledger: a blocked line with no later resumed line means halted, even after a restart.
If a line is not valid JSON, writes stop until you fix or remove that line. A budget that cannot be read fails closed.
Environment variables
Variable | Default | Meaning |
|
| folder for |
| from |
|
| headed |
|
|
|
|
|
| live attempts allowed in any rolling 24 hours |
|
| minutes between live comment or reply attempts |
|
| live likes allowed in any rolling 24 hours, separate from |
|
| approval page port |
|
| queue, ledger, settings, screenshots, lock |
|
| saved login session |
| on |
|
| on |
|
|
| shortest delay per typed character |
|
| longest delay per typed character |
Limits and the port must be whole numbers. A typo stops the server with an error instead of turning a limit off.
The dashboard's Settings page writes data/settings.json, which wins over these variables for limits, mode and notifications.
Set these in your MCP host's env block. The rednote-gate commands read them from your shell. If you set RN_HOME, RN_DATA_DIR or RN_SESSION_PATH, export the same values in your shell. rednote-gate connect copies those three into the Claude Code entry.
Dry run is not free of side effects. It opens the page, uploads images to RedNote's creator page and types the text. It only skips the final publish, save or send click.
What it does not do
Post anything without a human click on Approve. There is no approval in chat.
Use more than one account, more than one browser context, or run writes at the same time.
Bulk post, or schedule posts nobody is watching.
Solve captchas, or retry after a block.
Favorite, follow or send messages. (Likes were added on 2026-10-06 at the owner's request, behind the same approval page and their own daily cap.)
Run the account in a cloud browser.
Touch a primary or brand account.
Known limits
A browser agent could approve. An agent with its own browser tool on the same machine could open the approval page and click Approve. Never load a browser MCP server in the same host session. The same goes for any process running as your user: it can read
data/approval-url. The gate stops the model acting through rednote-gate's tools. It cannot stop other software you run.The service keeps running. It starts on first use and stays up until
rednote-gate stopor a reboot. After updating, runrednote-gate stop; the next tool call starts it fresh. Settings apply without a restart. Its log isdata/service.log.Selectors drift. RedNote changes its pages. The selectors live in the
SELobject insrc/rednote.ts. Fix them there. Record the evidence in the capture block in PROTOTYPE-RUNSHEET.md and in docs/friction.md.Unknown blocks a re-queue. An
unknownitem blocks an identical write. If you check by hand and it did not post, change the text before queuing it again.Drafts stay in rednote-gate's browser. RedNote's web creator site keeps drafts in the browser, not in your account (its own notice says so). A draft saved by rednote-gate does not appear in your phone app. rednote-gate keeps it across restarts by saving the browser's IndexedDB with the session; to finish it, open the creator site's 草稿箱 in rednote-gate's browser.
Comments are first page only.
Headed by default. A Chromium window opens when a browser tool runs and stays open as one tab. Set
RN_HEADLESS=1once you trust it.
Anti-bot measures (disclosed on purpose)
The owner decided on 2026-10-06 to keep these. They are listed here so nobody is surprised.
Human-paced typing, with a random delay per character and random pauses.
Chromium starts with
--disable-blink-features=AutomationControlled.A fixed desktop Chrome 124 macOS user agent. It does not match the newer Chromium that Playwright actually runs.
There is no captcha solving. There is no fingerprint spoofing beyond the three items above.
RedNote's pages contain hidden decoy buttons that a person cannot see or click. rednote-gate acts only on visible elements, the ones a person would click, and never forces a click. See docs/friction.md.
Last verified against the live site
Flow | Tool | Status as of 2026-10-06 |
Login status |
| verified headed 2026-10-06 (rednote.com); headless not yet |
Search |
| verified headed 2026-10-06 (rednote.com); headless not yet |
Get note |
| verified headed 2026-10-06 (rednote.com); headless not yet |
My notes |
| verified headed 2026-10-06 (rednote.com) |
Topics and emoji in a post |
| live verified 2026-10-06 (rednote.com): 4 linked topics in the note's tag list, 4 emoji kept |
AI label |
| dry run verified 2026-10-07 (rednote.com): 内容类型声明 set to 笔记含AI合成内容, shown in the preview; not posted live yet |
Video note |
| dry run verified 2026-10-06 (rednote.com): uploaded, processed, topic linked, 发布 found; no real video yet |
Text cards and |
| live verified 2026-10-06 (rednote.com): researched a concept, rendered 4 cards, published them as a note |
Like |
| live verified 2026-10-06 (rednote.com): liked state confirmed after the click, count 151 to 152 |
Get comments |
| verified headed 2026-10-06 (rednote.com); headless not yet |
Create post |
| live verified 2026-10-06 (rednote.com): note published, listed by |
Create draft |
| live verified 2026-10-06 (rednote.com): saved, but only in rednote-gate's browser (see Known limits) |
Post comment |
| live verified 2026-10-06 (rednote.com) |
Reply comment |
| live verified 2026-10-06 (rednote.com); held 9 minutes by the comment gap, then sent on its own |
PROTOTYPE-RUNSHEET.md is how each row gets checked. Update this table with the date and result after each run.
Credits
Selectors and page-state paths were informed by xpzouying/xiaohongshu-mcp (Apache-2.0, commit a5c8f77) and sykuang/rednote-mcp (MIT, commit 7e87754).
The rule that an uncertain write becomes
unknownand is never retried follows mimi17-shq/xiaohongshu-mcp-reliable (Apache-2.0).
See docs/landscape.md for how these and other projects compare.
License
MIT. Author: Yash Shelar. See LICENSE.
rednote-gate is independent and unaffiliated. RedNote and Xiaohongshu are trademarks of their owner.
Available Tools
15 toolsrednote_create_draftA
Queue a photo note to be saved as a draft, after human approval. Does NOT post. Returns a queue id.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | note body; line breaks and emoji are kept; no # here | |
| title | Yes | ||
| images | Yes | absolute paths to JPEG, PNG or WebP files, in posting order; the first is the cover | |
| topics | No | up to 5 topics without #, added as RedNote topics at the end of the body | |
| aiGenerated | Yes | Required. true if you wrote or polished the title or body: RedNote's own AI label (笔记含AI合成内容) is then set. false only when the user gave you the exact text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers key traits: the action is queued/asynchronous rather than immediate, it is gated on human approval, it deliberately does not publish, and it returns a queue id. Remaining gaps (rate limits, what happens on rejection, whether the queue id is consumed by rednote_queue_status) are narrower but real.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, and the most decision-relevant facts (draft, not posted) are front-loaded before the return-value note. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by naming the return value ("a queue id"). It covers the action, the approval gate, the non-publishing guarantee and the return, which is most of what an agent needs; only the downstream relationship to rednote_queue_status and failure behavior are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, with body, images, topics and aiGenerated all documented in the schema itself, so the schema does the heavy lifting. The description adds no parameter-level information (nothing about title length, image ordering, or the aiGenerated flag), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Queue a photo note to be saved as a draft") plus an explicit negative scope statement ("Does NOT post") that separates it from the sibling rednote_create_post / rednote_create_video_post. The agent can pick this tool from the name alone without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"after human approval" states the precondition for calling, and "Does NOT post" implicitly excludes it from the direct-publish path. It stops short of naming the alternative (rednote_create_post) or explaining what to do when approval is denied, so it is clear context rather than explicit when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_create_postA
Queue a photo note for human approval. Does NOT post. Returns a queue id.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | note body; line breaks and emoji are kept; no # here | |
| title | Yes | ||
| images | Yes | absolute paths to JPEG, PNG or WebP files, in posting order; the first is the cover | |
| topics | No | up to 5 topics without #, added as RedNote topics at the end of the body | |
| aiGenerated | Yes | Required. true if you wrote or polished the title or body: RedNote's own AI label (笔记含AI合成内容) is then set. false only when the user gave you the exact text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does useful work: it explicitly counteracts the 'create_post' name by saying it only queues and 'Does NOT post', and it discloses the return value ('queue id'). It omits auth/permission requirements, what the human approval step involves, and any failure behavior, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: what it does, the critical non-action, and the return value. The most decision-relevant fact ('Does NOT post') is front-loaded and impossible to miss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema the description correctly states the return value, and the 80%-covered input schema handles the parameters, so nothing essential is missing for invocation. It stops short of connecting to the surrounding workflow siblings (rednote_open_approval_page, rednote_queue_status), which would have made the definition fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents body, images, topics and aiGenerated in detail. The description adds no parameter-level meaning beyond that, so the baseline 3 for high-coverage schemas applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Queue a photo note') plus the key qualifier that it is for human approval. The 'photo' qualifier implicitly distinguishes it from rednote_create_video_post and rednote_create_draft, but no sibling is named explicitly, so an agent must infer the boundary from the media-type wording.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Queue ... for human approval' and 'Does NOT post' imply the tool belongs in an approval workflow rather than direct publishing, which is useful. However, it never states when to pick this over rednote_create_draft or rednote_create_video_post, nor when a note should go straight to approval versus being drafted first; the routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_create_video_postA
Queue a video note for human approval. Does NOT post. One MP4 or MOV, absolute path, up to 500 MB. RedNote processes the video after upload, which can take minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | note body; line breaks and emoji are kept; no # here | |
| title | Yes | ||
| video | Yes | absolute path to an MP4 or MOV file | |
| topics | No | up to 5 topics without #, added as RedNote topics at the end of the body | |
| aiGenerated | Yes | Required. true if you wrote or polished the title or body: RedNote's own AI label (笔记含AI合成内容) is then set. false only when the user gave you the exact text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the approval-queue behavior, explicitly that nothing is posted, the single-file constraint, accepted formats (MP4/MOV), the 500 MB ceiling, and that RedNote processes the video asynchronously for minutes. It omits auth requirements and what happens after approval is granted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, zero filler, with the most consequential fact (queues, does not post) front-loaded ahead of file constraints. Every clause carries operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation-style tool with no annotations and no output schema, the description covers the critical behaviors: no immediate posting, async processing, file limits. It could go further by indicating what the caller receives (a queue/approval reference) or pointing at rednote_open_approval_page, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the schema already documents title, body, topics, and aiGenerated well; the description's contribution is limited to the video parameter's format and size limits, which partly duplicate the schema description. It adds no meaning for topics or the aiGenerated flag.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Queue a video note') plus the scope ('for human approval'), which cleanly separates it from rednote_create_post, rednote_create_draft, and the other note-reading siblings. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Queue ... for human approval. Does NOT post.' gives clear workflow context for when this tool applies rather than firing a publish action. It does not name sibling alternatives (e.g. rednote_create_post, rednote_create_draft) or spell out exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_get_commentsA
Read the first page of comments on a note: id, author, text. Read only. Use these values for rednote_reply_comment.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does meaningful work: 'Read only' declares the safety profile, 'first page' discloses a pagination/scope limit, and the field list (id, author, text) previews the return shape in the absence of an output schema. It omits auth requirements and whether deeper pages are reachable at all, so it is not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight clauses with the primary action front-loaded and the follow-on tool hint last. No filler, though it is clipped enough that the reader must infer some details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with no output schema, the description covers the essential minimum: what is read, the scope limit, and the returned fields. It leaves gaps around the limit parameter, authentication context (relevant given the rednote_login_status sibling), and whether more than one page is retrievable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, yet it never mentions the 'limit' parameter (max 50) nor explains its default or whether it interacts with the 'first page' behavior. 'On a note' only loosely implies the required url parameter, leaving the second parameter entirely undocumented anywhere the agent can see.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read the first page of comments on a note') plus the exact payload it returns (id, author, text). An agent can immediately distinguish this from rednote_get_note or rednote_reply_comment without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the downstream consumer: 'Use these values for rednote_reply_comment,' which gives a concrete reason to call it (harvest comment ids before replying). It does not state when NOT to use it or contrast it with sibling read tools like rednote_get_note, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_get_noteB
Read one note: title, body, author, tags, counts. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does disclose the read-only nature ('Read only'), which is genuinely useful, but adds nothing about auth requirements, rate limits, error behavior, or whether the URL must be public.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero waste, front-loading the verb and the returned fields. Nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema this is nearly adequate, and the field list substitutes for a return description. However, the undocumented url parameter and absence of annotations leave the definition short of fully callable guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single required parameter has 0% schema description coverage and no annotation help. The description never explains that 'url' must be a note URL or its expected format, so it fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (read one note) and enumerates the fields returned (title, body, author, tags, counts). The singular 'one note' implicitly distinguishes it from the sibling rednote_search, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives such as rednote_search or rednote_get_comments. There are no prerequisites, conditions, or exclusions stated, so the agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_helpA
What rednote-gate can do: every tool and prompt, the current mode, and what is left of today's budget. Never touches RedNote.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it does disclose the most important trait: the tool is side-effect free with respect to the target service ('Never touches RedNote'). It also previews the return content (tool/prompt inventory, current mode, remaining budget). It stops short of stating it is read-only/unauthenticated or whether the budget figure is a shared/quota resource, but the safety profile is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses, front-loaded with what the tool reports, followed by the distinguishing constraint. Every word earns its place and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, low-risk help tool with no output schema, the description covers what the agent needs: what it returns and that it does not affect RedNote. Only minor gaps remain (whether the budget is per-session or per-account, and that it is a safe read), which are small relative to the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. The description correctly adds nothing about arguments, and the empty schema is consistent with a parameterless introspection call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific function: enumerating every tool and prompt, the current mode, and the remaining daily budget. It also explicitly distances itself from the sibling set ('Never touches RedNote'), so an agent can tell it is the meta/help tool rather than a RedNote operation. The phrasing 'What rednote-gate can do' is indirect as an opener but the enumerated outputs make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent would infer it should call this when it needs a capability overview or budget check. There is no explicit 'call this when...' guidance, nor any note about when it is unnecessary (e.g. when you already know the toolset). Adequate but not directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_like_noteA
Queue a like on a note for human approval. Does NOT like it yet. Likes have their own daily cap (10 by default). Pass noteTitle so the human sees which note.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| noteTitle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the like is deferred pending human approval, that it is not applied immediately, and that a daily cap (10 by default) applies. It omits what happens after approval, whether duplicate requests are deduped, and any auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler, and the most decision-critical fact (it does not actually like the note) is front-loaded right after the verb. Nothing repeats the tool name or wastes tokens.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity two-parameter tool with no output schema and no annotations, the description covers the essential behavior an agent needs before calling it. It could be slightly stronger by describing what a successful call returns or how the queued item is later approved, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for both parameters. It usefully explains why noteTitle exists ('so the human sees which note'), but the required `url` parameter is never mentioned or characterized (presumably the note's URL), leaving half the surface undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (queue a like) and resource (a note), and immediately clarifies the deferred semantics with 'Does NOT like it yet.' This distinguishes it cleanly from sibling write tools like rednote_post_comment or rednote_create_post, which act immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the operating context (queued for human approval, daily cap of 10) so the agent understands this is a request-queueing tool rather than a direct action. It does not explicitly point to rednote_open_approval_page or rednote_queue_status as the follow-up/alternative, so routing to siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_login_statusA
Check whether the saved RedNote session is logged in (main site and creator site). Read only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It helpfully declares 'Read only,' which tells the agent this is a non-mutating operation, but it does not describe the return format (e.g., boolean or status object) or any rate limits or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the core action and adds a terse 'Read only' qualifier. Every part earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter read tool with no output schema, the description is nearly complete. It covers what the tool does and that it checks both main and creator sites, though it could mention the expected return type or any authentication context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so there is no parameter meaning to convey. The baseline for zero-parameter tools is 4, and the description appropriately avoids discussing non-existent parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Check whether the saved RedNote session is logged in.' It also clarifies scope by mentioning both main site and creator site, which distinguishes it from other RedNote tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: an agent should call this when it needs to verify session state before attempting authenticated actions. However, the description does not explicitly state when to use it or name any alternatives, leaving the agent to infer the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_make_cardsA
Render text-card images (1080x1440 PNG, RedNote's 3:4) on this computer, for notes without photos. Never touches RedNote. Returns absolute paths to pass as images to rednote_create_post. Card 1 is the cover: a short title (use \n to break a Chinese title where it reads best) and 0 to 2 lines; later cards carry up to 8 short lines.
| Name | Required | Description | Default |
|---|---|---|---|
| cards | Yes | ||
| theme | No | one of: notebook, sticky, chalkboard, blueprint |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely meets it: it discloses local execution ('on this computer'), the absence of account side effects ('Never touches RedNote'), and the return contract (absolute paths). It omits where files land on disk and whether re-runs overwrite existing images, which matters for a tool that writes files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the action and format, then the safety note, then the return-and-consumer contract plus card structure. Every clause carries information; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description appropriately states the return (absolute paths). Combined with the card-composition rules, an agent has enough to invoke it correctly; minor gaps remain around output location and overwrite behavior, and theme selection is left to the enum alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (theme is documented, cards is not), so the description must compensate – and it does, adding semantics the schema cannot express: card 1 is the cover, cover holds a short title plus 0–2 lines, later cards up to 8 lines, and '\n' can break a Chinese title. The nested title/footer length limits and theme option meanings are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Render text-card images') plus the exact output format (1080x1440 PNG, 3:4), so the agent knows precisely what artifact it produces. It is clearly distinguishable from every sibling, none of which generate images, and it names the downstream consumer rednote_create_post.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case ('for notes without photos') and routing ('Returns absolute paths to pass as images to rednote_create_post'), which tells the agent exactly where this fits in a workflow. It stops short of explicit exclusions or alternatives (e.g., when to prefer video vs cards), so it is clear context rather than full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_my_notesA
List the logged-in account's own notes, newest first: noteId, title, likes, url. Read only. Use the url for comments and replies on your own notes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description must carry the full behavioral burden. It does disclose the read-only nature ('Read only'), the sort order ('newest first'), and implies an authenticated session ('logged-in account'), which is meaningful. It says nothing about pagination, the limit cap, rate limits, or failure modes for an unauthenticated account, leaving notable gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and result shape, with no filler. Slightly dense in packing four output fields mid-sentence, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned fields and ordering, covering the return contract. But it omits any explanation of the 'limit' parameter, its 30 maximum, or pagination behavior, so an agent cannot call the tool optimally from the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the single 'limit' parameter (integer, max 30, exclusiveMin 0) — and it never mentions it. The field list it gives (noteId, title, likes, url) describes return values, not the input parameter, so it does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('the logged-in account's own notes') and enumerates the returned fields (noteId, title, likes, url) with ordering ('newest first'). The 'own notes' scoping naturally distinguishes it from siblings like rednote_search and rednote_get_note without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence gives a concrete downstream hint ('Use the url for comments and replies on your own notes'), which is useful. However, it never says when to use this tool versus rednote_search or rednote_get_note, nor any exclusion or prerequisite beyond the implied login. Guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_open_approval_pageA
Open the approval page in the user's browser so they can approve or reject queued writes. Returns no link.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose two real behavioral traits: the action happens in the user's browser (a client-side side effect rather than a server mutation) and it returns no link. The 'Returns no link' note is valuable because callers might otherwise expect a URL to hand off. It stops short of describing what happens after approval or any auth/session requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and its purpose, with zero filler. Every clause earns its place, including the useful 'Returns no link' caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema and no annotations, the description covers what it does, where it happens, and what it returns. Minor gaps remain around subsequent behavior and session requirements, but nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document and the baseline of 4 applies. The description correctly implies no inputs are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open the approval page') plus the user-facing intent ('so they can approve or reject queued writes'). It is clearly distinguishable from siblings like rednote_queue_status, though it does not explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clause 'so they can approve or reject queued writes' implies the scenario in which this tool applies, giving more than nothing. However, it never states when to prefer this over checking queue status or any other sibling, nor any prerequisites, leaving selection largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_post_commentA
Queue a comment on a note for human approval. Does NOT post. Returns a queue id.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does well: it explicitly discloses that the tool does NOT post and that it queues for human approval, and it names the return value (a queue id). It stops short of stating auth requirements or whether queuing is idempotent, which would take it to a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clipped sentences, each earning its place: action, the key negative constraint, and the return value. Front-loaded with the verb and resource, no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-param queue tool with no annotations and no output schema, the description covers the essentials: what it does, what it does not do, and what it returns. Minor gaps on auth and approval workflow context remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it only partially does. The required url and text params are never explained in the description, though the tool's narrow purpose makes their roles obvious from names and formats. Baseline 3 given the trivial two-param surface.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Queue), resource (comment on a note), and a crucial scope qualifier (for human approval, does NOT post). This distinguishes it from the actual posting sibling tools like rednote_reply_comment without the agent needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage through 'for human approval. Does NOT post.' but never explicitly says when to choose this over rednote_reply_comment or rednote_open_approval_page. The alternative-path guidance is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_queue_statusB
List recent queued writes and what happened to them. Read only. Never touches the browser.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two useful traits: 'Read only' (safe, non-mutating) and 'Never touches the browser' (important for an automation suite that drives a browser). However it omits what 'recent' means, retention/window behavior, ordering, and the shape of outcomes, so it is only partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, purpose front-loaded, with zero filler; the two trailing sentences both add behavioral value. It is tight and well-ordered, though it leaves the definition under-specified rather than truly complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter tool this is roughly minimum viable: it says what is listed and that it is safe, but with no output schema the description should have described the return shape (statuses per queued write) and the meaning of 'recent'. Those gaps leave the agent guessing at results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description never mentions the single `limit` parameter. The agent gets the constraint (max 50, exclusiveMinimum 0) from the schema, but no explanation of what limit controls, no default value, and no guidance on how it interacts with 'recent' — the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and a specific resource (recent queued writes and their outcomes), which is clearly distinct from write siblings like rednote_create_post or state siblings like rednote_login_status. It stops short of naming which tool enqueues writes, so sibling differentiation is inferential rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — you would call this to inspect outcomes of previously queued writes — but there is no explicit when-to-use, when-not-to-use, or reference to any alternative tool. 'Read only' hints that it is a safe diagnostic call without stating the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_reply_commentA
Queue a reply to one comment for human approval. Does NOT post. Pass commentId, commentAuthor and commentText exactly as rednote_get_comments returned them.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| text | Yes | ||
| commentId | Yes | ||
| commentText | Yes | ||
| commentAuthor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose the key non-obvious trait: the reply is queued for human approval and not posted, so the agent knows nothing is published immediately. It omits secondary behavior such as auth requirements, what happens to the queued item afterwards, or where approval occurs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, with the action and the critical 'does NOT post' caveat front-loaded before the parameter instruction. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations exist, so the description is the sole source of guidance for a 5-required-param mutation-ish tool. It covers the sourcing of three params but leaves the url/text parameters and the post-queue lifecycle (approval page) unexplained, so an agent can make the call but not fully reason about it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 required params, so the description must compensate. It explains the origin and exact-pass-through semantics of commentId, commentAuthor and commentText, but says nothing about 'url' (presumably the note) or 'text' (the reply body, especially its 500-char limit), leaving two of five params unilluminated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource+outcome: 'Queue a reply to one comment for human approval.' The follow-up 'Does NOT post.' sharply distinguishes it from the sibling rednote_post_comment, which an agent can pick between 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete workflow context: pass commentId, commentAuthor and commentText exactly as rednote_get_comments returned them, which tells the agent to call rednote_get_comments first and what to feed in. It does not explicitly name rednote_post_comment or rednote_open_approval_page as the alternative/next step, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rednote_searchB
Search RedNote notes by keyword. Read only. Returns note urls that carry the xsec_token other tools need.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| keyword | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does declare 'Read only' and describes what comes back (note urls with xsec_token), which is genuinely valuable workflow context. It omits any mention of login/auth requirements (a rednote_login_status sibling exists), rate limits, or result-count behavior, so it is adequate rather than complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler. The core purpose leads, and the downstream xsec_token dependency follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description does address the return payload (note urls carrying xsec_token). However, it says nothing about the limit parameter, result ordering, or pagination, which leaves gaps for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only alludes to 'keyword'. The 'limit' parameter, including its max of 30, is never mentioned or explained, leaving one of two parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search RedNote notes by keyword'), which cleanly separates it from mutation siblings like rednote_create_post and rednote_like_note. It does not explicitly distinguish itself from the closest read sibling, rednote_my_notes, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use statement, and no alternative tool is named. The clause 'that carry the xsec_token other tools need' implies a required first step before calling rednote_get_note, which is useful but left for the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v1.1.1- First observed
rednote_create_draft - First observed
rednote_create_post - First observed
rednote_create_video_post - First observed
rednote_get_comments - First observed
rednote_get_note - First observed
rednote_help - First observed
rednote_like_note - First observed
rednote_login_status - First observed
rednote_make_cards - First observed
rednote_my_notes - First observed
rednote_open_approval_page - First observed
rednote_post_comment - First observed
rednote_queue_status - First observed
rednote_reply_comment - First observed
rednote_search
TDQS
Scored across 15 tools
Most tools target a clearly distinct resource+action (search vs get_note vs my_notes, post_comment vs reply_comment). The main source of overlap is create_post vs create_draft vs create_video_post, but the descriptions clarify the photo/draft/video distinctions. An agent can reliably pick the right tool.
All tools share the rednote_ prefix and use snake_case, with a mostly predictable verb_noun pattern (get_note, create_post, reply_comment). Minor deviation: status tools are noun-first (login_status, queue_status, my_notes), but this reads consistently as a status/list category.
15 tools is well within the ideal range and each one earns its place across read, queued-write, approval, and support operations. No redundant or filler tools are present.
Covers the core lifecycle: login check, search, read note/comments, own-note listing, and queued publish/draft/video/like/comment/reply with a human-approval flow and card rendering. A few gaps exist (no unfollow/delete/update note, no user-profile or notification reads), but core workflows are workable.
Maintenance
Related MCP Connectors
Hosted X (Twitter) MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Hosted X Ads MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Hosted Web Crawler MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Hosted YouTube MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for automating Xiaohongshu (RED Note). Publish posts, search content, comment, like, and analyze creator data on China's largest lifestyle social platform.30MIT
- AlicenseAqualityDmaintenanceMCP server enabling AI assistants to search, analyze, and generate content for Xiaohongshu (RedNote), China's leading lifestyle social media platform.69MIT
- FlicenseAqualityDmaintenanceA lightweight MCP server that lets AI assistants publish notes to Xiaohongshu (Little Red Book) via browser automation. Supports login, image-text note publishing with up to 9 images, and search.41-
- AlicenseNot gradedqualityDmaintenanceMCP server for Xiaohongshu (xiaohongshu.com) enabling login, note/video publishing, search, recommendations, and comment management via CLI or MCP protocol.1MIT