Skip to main content
Glama

Post to a subreddit

post_to_reddit

Submit a post to ONE named subreddit as the user’s connected Reddit account — a text post, a link post, or a native image post (pass a Hermoso render URL as imageUrl). This PUBLISHES immediately and PUBLICLY under their username, so show the user the exact subreddit, title and body and get an explicit yes BEFORE calling. REDDIT IS NOT A BROADCAST CHANNEL: it punishes undisclosed self-promotion harder than any other platform, and posting the same or near-identical content to several subreddits breaks Reddit’s own developer policy and gets accounts banned. Post to ONE subreddit, written for that specific community — if the user asks to blast several, tell them this instead of doing it. Subreddits that require post flair are detected before anything is posted and the error lists the valid flairs to pass as flairId. Needs Reddit connected (Settings ▸ Connectors ▸ Reddit).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNothe destination url for a link post
hookNoWHAT ANGLE THIS POST IS BUILT ON — the single most valuable field here, and the only moment it can ever be recorded. post_performance groups on it to answer "which hooks work", and it needs 5 posts sharing ONE hook before it will call anything a winner, so REUSE THE SAME WORDING across a campaign instead of rephrasing it every time. Best of all, pass a hook id from list_hooks (e.g. "direct_callout", "mid_problem", "before_after") — those fold onto a stable key however they are spelled, so a whole brand accumulates evidence on one row. Your own wording is fine too; it just only groups when you repeat it exactly. Omitting it means this post can never vote on which hook works.
kindNo"self" = text post (default), "link" = share a url, "image" = native image upload. Inferred from what you pass if omitted.
nsfwNo
textNobody markdown for a text post
titleYespost title, max 300 characters
flairIdNoflair template id — required by some subreddits; the error names the valid ones
spoilerNo
subjectNoWHAT THIS POST IS ABOUT — the product, feature, offer or theme (e.g. "winter coat", "free trial", "founder story"). The second grouping axis in post_performance. Same rule as hook: reuse the exact wording so posts about one subject land in one group.
imageUrlNoa Hermoso render image URL for a native image post (or an upload_file url)
resubmitNopost a link Reddit says was already submitted — usually reads as spam, so confirm first
flairTextNoflair text, only where that flair is editable
subredditYesthe ONE subreddit to post to, e.g. "SideProject" (an r/ prefix is fine)

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint false, idempotentHint false), the description discloses critical behaviors: it publishes immediately and publicly under the user's username, warns about Reddit's harsh treatment of undisclosed self-promotion, and explains that flair-required subreddits are detected pre-post with error listing valid flairs. This adds substantial context beyond the annotations, which only indicate it is a non-read, non-idempotent operation. No contradiction with annotations.

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?

The description is well-structured and front-loaded: it starts with the action, then covers confirmation, policy warning, one-subreddit rule, flair handling, and connection requirement. Each sentence adds value, though it is somewhat lengthy. The warning paragraph could be condensed, but it is not redundant. Overall, it is efficient for the complexity.

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

Completeness5/5

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

For a complex mutating tool with 13 parameters and no output schema, the description covers all essential operational context: the need for user confirmation, the one-subreddit limit, the self-promotion risk, flair handling, and connection requirement. It does not need to describe return values since no output schema exists. It is sufficient for an agent to call correctly and safely.

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

Parameters3/5

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

Schema description coverage is 85%, so the schema already documents most parameters well. The description adds minor value: it specifies that imageUrl should be a 'Hermoso render URL' (also in schema) and mentions flairId handling in the error case, but these are not substantial. It does not explain the 'hook' or 'subject' parameters beyond what the schema already states. Baseline 3 is appropriate given high schema coverage.

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?

The description clearly states the action: 'Submit a post to ONE named subreddit' and enumerates the three post types (text, link, image). It distinguishes itself from sibling tools by specifying the Reddit context and the 'ONE subreddit' constraint, which is not present in other posting tools. The verb 'submit' and resource 'subreddit' are specific.

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?

The description provides strong when-not constraints: explicitly says to post to ONE subreddit and to refuse broadcast requests, and requires explicit user confirmation before calling. It also mentions the need for Reddit to be connected. However, it does not explicitly name alternative tools (e.g., 'use post_to_linkedin for LinkedIn'), so it lacks explicit alternative routing, but the context makes it clear when to use this tool.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A3.7/5.0
Disambiguation2/5

With 293 tools, the surface is enormous and many tools have overlapping purposes—multiple posting tools (post_to_meta, post_to_linkedin, schedule_post, etc.), multiple analytics tools per channel, and several search tools (search_meta_ads, search_instagram, search_reddit...). While each description is detailed, the volume makes it difficult for an agent to reliably distinguish between similar tools without careful reading, leading to frequent misselection.

Naming Consistency4/5

The naming is largely consistent with a verb_noun pattern (post_to_*, list_*, create_*, delete_*, update_*, manage_*). There are clear families for major operations. A few outliers like 'google_business_account', 'hermoso_capabilities', and 'store_get' break the pattern, but the overwhelming majority follow a predictable structure, making navigation somewhat easier.

Tool Count1/5

293 tools is far beyond any reasonable scope for a single MCP server, even for a comprehensive marketing platform. The calibration guide flags 50+ as an extreme mismatch, and this is nearly six times that threshold. Such a large surface overwhelms context windows, increases the probability of misselection, and makes it impractical for agents to learn or use effectively.

Completeness4/5

The tool set covers a vast domain: ad creation and rendering, posting across nine+ social channels, analytics and reporting, file management (Drive/OneDrive), competitor research, brand management, and more. It appears to provide CRUD and lifecycle coverage for most resources. While there may be minor gaps given the immense scope, the overall coverage is impressively comprehensive.