patreonmcp
Provides typed tools for the official Patreon API v2, covering creator identity, campaigns, tiers, members, and posts with cursor pagination, field selection, and opt-in PII fields. Also supports webhook CRUD and early-access Lives, plus text post creation, editing, publishing, scheduling, and deletion through Patreon's web editor API when a browser session cookie is configured.
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., "@patreonmcplist my recent Patreon members and their tiers"
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.
patreonmcp
MCP server for the official Patreon API v2. Typed tools for campaigns, tiers, members, posts, webhooks, and early-access Lives, plus post creation and editing through Patreon's web editor API.
Python 3.10+.
Features
Typed MCP tools with structured JSON output.
Identity, campaigns, tiers, members, and posts through the official API.
Cursor pagination, explicit field selection, and opt-in PII fields.
Automatic OAuth refresh with rotated-token persistence.
Webhook CRUD (creation requires a host allowlist) and early-access Lives.
Text post creation, editing, publishing, scheduling, and deletion through Patreon's web editor API when a browser session cookie is configured.
No browser automation. The post client talks directly to Patreon's JSON:API routes.
Related MCP server: X MCP Server
API limits worth knowing
The official Patreon API v2 has no endpoints for creating, editing, or deleting posts:
Read: identity, campaigns, tiers, members, posts.
Write: webhooks and early-access Lives.
Patreon's own web app uses separate, undocumented JSON:API routes under
/api/posts with a browser session and CSRF ticket. This server speaks to those
routes directly for post management. They are not a public API, can change
without notice, and currently support text posts only. Post write tools require
PATREON_SESSION_COOKIE or PATREON_SESSION_COOKIE_FILE.
Member email, creator notes, and shipping addresses are opt-in tool parameters
because they are sensitive; email and address also require extra OAuth scopes.
They are also disabled unless the operator sets PATREON_ALLOW_PII=1.
Install
git clone https://github.com/andreanjos/patreonmcp.git
cd patreonmcp
uv syncVerify the server starts and your credentials work:
PATREON_ACCESS_TOKEN=your_token uv run patreonmcp checkFor post write tools, check also verifies the browser session when
PATREON_SESSION_COOKIE is set.
Run it directly:
PATREON_ACCESS_TOKEN=your_token uv run patreonmcp serveAuthentication
Creator access token
Get your Creator Access Token from the Patreon Developer Portal. Creator tokens automatically carry all API v2 scopes for the creator's campaign.
export PATREON_ACCESS_TOKEN=...OAuth refresh (optional)
If your token expires, provide the OAuth client credentials and refresh token so the server can renew it automatically:
export PATREON_CLIENT_ID=...
export PATREON_CLIENT_SECRET=...
export PATREON_REFRESH_TOKEN=...Set PATREON_TOKEN_FILE to persist rotated tokens across restarts. The file is
created with mode 0600; without it, refreshed tokens live only in memory.
On POSIX, existing token and cookie files must already be 0600, regular files,
owned by the current user, and not symlinks.
export PATREON_TOKEN_FILE="$HOME/.config/patreonmcp/tokens.json"Web session (post write tools)
The create_post, update_post, publish_post, delete_post,
get_managed_post, and list_drafts tools use Patreon's internal web API. They
need a logged-in browser session, not an OAuth token.
Sign in to https://www.patreon.com in a Chrome-family browser.
Open DevTools → Network, reload the page, and select a
www.patreon.comrequest.Copy its full
Cookierequest header.document.cookieis not enough because the session cookies are HttpOnly.Put the copied header in
PATREON_SESSION_COOKIE, or save it to a file and pointPATREON_SESSION_COOKIE_FILEat it.
export PATREON_SESSION_COOKIE='session_id=...; a_csrf=...; cf_clearance=...'
# or
chmod 600 ~/.config/patreonmcp/cookies.txt
export PATREON_SESSION_COOKIE_FILE="$HOME/.config/patreonmcp/cookies.txt"The cookie grants full access to the account. Keep it local, never commit it, and log out of Patreon to invalidate it. The server fetches a CSRF ticket automatically and never prints the cookie.
patreonmcp check verifies both auth modes when both are configured.
Configuration reference
Variable | Required | Purpose |
| One auth mode | Bearer token for API calls. |
| OAuth mode | Refresh token. |
| OAuth mode | OAuth client ID. |
| OAuth mode | OAuth client secret. |
| No | Persist refreshed tokens as JSON ( |
| Web post tools | Raw |
| Web post tools | File containing the raw |
| No | API base; defaults to |
| No | Token endpoint; defaults to |
| No | Web API base; defaults to |
| No | Browser User-Agent for the web session; match the browser that issued the cookie if Cloudflare rejects it. |
| No | Require |
| No | Required to enable webhook creation. Comma-separated hostname allowlist; |
| No | Set to |
| No | HTTP timeout; defaults to |
The server reads process environment variables only. .env.example documents the
names; it is not loaded automatically. Use your shell, your MCP client's env
block, or uv run --env-file .env ....
Setup helper
Generate a client config with absolute paths, then fill in the placeholder token:
uv run patreonmcp init
uv run patreonmcp init --output .mcp.json
uv run patreonmcp init --http --url http://127.0.0.1:8000/mcpinit never prints credentials; it uses explicit REPLACE_... placeholders.
Written files are mode 0600.
Inspect the effective configuration with secrets redacted:
uv run patreonmcp config
uv run patreonmcp config --jsonMCP client configuration
Use an absolute path to this checkout. Example for Claude Desktop, Claude Code,
Cursor, or any client that accepts the standard mcpServers object:
{
"mcpServers": {
"patreon": {
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/patreonmcp",
"patreonmcp",
"serve"
],
"env": {
"PATREON_ACCESS_TOKEN": "your_token_here",
"PATREON_SESSION_COOKIE": "session_id=...; a_csrf=..."
}
}
}
}Omit PATREON_SESSION_COOKIE if you only need the read tools. Add
PATREON_SESSION_COOKIE_FILE instead when the cookie lives in a local file.
For HTTP transport instead of stdio:
PATREON_ACCESS_TOKEN=... uv run patreonmcp serve --transport streamable-http --host 127.0.0.1 --port 8000The MCP endpoint is /mcp. Set PATREON_HTTP_BEARER_TOKEN to require a bearer
token on every HTTP request; clients then send
Authorization: Bearer <token>. Without it, loopback HTTP is unauthenticated.
Binding beyond loopback requires both --allow-remote-http and a bearer token;
--allow-unauthenticated-http is a second explicit opt-in for reverse-proxy
deployments.
{
"mcpServers": {
"patreon-http": {
"url": "http://127.0.0.1:8000/mcp",
"headers": { "Authorization": "Bearer your-http-token" }
}
}
}CLI post commands
The same post operations are available from the terminal, which is useful for checking a session before wiring up an MCP client:
# Published posts need an OAuth token; drafts need a web session.
uv run patreonmcp post list
uv run patreonmcp post list --drafts --campaign-id 42
uv run patreonmcp post create "Launch notes" --content "Hello patrons" --publish
uv run patreonmcp post create "Draft" --content-file post.html --allow-html
uv run patreonmcp post get POST_ID --content
uv run patreonmcp post update POST_ID --title "New title" --publish
uv run patreonmcp post update POST_ID --clear-tags
uv run patreonmcp post publish POST_ID
uv run patreonmcp post delete POST_ID --yes
uv run patreonmcp post list --jsonpost create defaults to a draft. --schedule accepts an ISO 8601 time and
implies --publish. Deletion requires --yes.
Tools
Tool | What it does | Scope |
| Authenticated creator profile, optionally with campaign. |
|
| Campaigns visible to the token, optionally with tiers. |
|
| One campaign with tiers and creator. |
|
| Paginated patrons; optional tiers, profile, email, note, address. |
|
| One patron by member UUID. |
|
| Paginated posts; content is opt-in and capped at 100,000 characters per post. |
|
| One post; HTML content is capped at 100,000 characters. |
|
| Create a text post, draft or published; public, paid, or tier-gated. | Web session |
| Edit content/audience, publish, or schedule a post. | Web session |
| Publish an existing draft. | Web session |
| Delete a post permanently. | Web session |
| Read a draft, scheduled, or published post. | Web session |
| Paginated unpublished drafts. | Web session |
| Webhooks created by this API client; signing secrets redacted by default. |
|
| Create a webhook; response includes the signing secret. |
|
| Change URI, triggers, or paused state; unpause to redeliver. |
|
| Delete a webhook. |
|
| Schedule or immediately start a Live; stream key redacted by default. |
|
| Live state and RTMP connection details; stream key redacted by default. |
|
| Start or end a Live; stream key redacted by default. |
|
Pagination
list_members and list_posts return next_cursor. Pass it back as cursor to
fetch the next page. page_size accepts 1–1000; when post content is included,
the maximum is 100.
Campaign resolution
Tools that need a campaign accept an optional campaign_id. If it is omitted and
the token can see exactly one campaign, the server uses it. If several are
visible, the tool fails with the visible IDs so the caller can choose.
Post write behavior
create_post defaults to a draft (publish=false). Set publish=true to
publish immediately, or publish=true plus scheduled_for to schedule. Use
visibility="tiers" with tier_ids for tier-gated posts; public and paid
need no tier IDs. Only text_only posts are supported.
Post content and teaser text are escaped as plain text by default. Set
allow_html=true to publish raw HTML; that is not sanitized and can include
links, embeds, or tracking pixels.
update_post sends a partial update. publish=true publishes; omitting
publish saves without changing publication state. delete_post is permanent.
These tools are built on Patreon's browser API (/api/posts/new and
PATCH /api/posts/{id}) plus its CSRF ticket endpoint. They are not covered by
Patreon's public API contract and can break when Patreon changes its web app.
Webhook triggers
members:create, members:update, members:delete,
members:pledge:create, members:pledge:update, members:pledge:delete,
posts:publish, posts:update, posts:delete.
Patreon signs webhook deliveries with X-Patreon-Signature, an HMAC-MD5 hex
digest of the request body using the webhook secret. Verify it on your receiver.
Webhook creation is disabled unless PATREON_WEBHOOK_ALLOWED_HOSTS names the
target host. Webhooks are a persistent data-export channel; approve URI changes
and unpausing carefully.
Scopes
Scope | Needed for |
|
|
|
|
| campaigns and tiers |
| members |
|
|
| shipping addresses |
| posts |
| webhook CRUD |
| reading Lives |
| creating and updating Lives |
Web session cookie | post create/edit/publish/delete and draft listing |
Third-party OAuth clients must request these explicitly. During Patreon's OAuth flow, newly requested scopes are added to previously approved scopes.
Security defaults
Patron email, creator notes, and shipping addresses require
PATREON_ALLOW_PII=1.Webhook creation is disabled until
PATREON_WEBHOOK_ALLOWED_HOSTSis set.Webhook signing secrets and Live stream keys are redacted unless explicitly requested.
Post content and teaser text are escaped unless
allow_html=true; post content is capped at 100,000 characters.HTTP transport binds to loopback; remote exposure requires
--allow-remote-httpplusPATREON_HTTP_BEARER_TOKEN(or a second explicit--allow-unauthenticated-httpopt-in for a reverse proxy).On POSIX, token and cookie files must be regular files owned by the current user with no group/other permissions (
chmod 600).Base URLs are pinned to
www.patreon.com(or loopback for tests), so a rogue environment cannot redirect bearer tokens, refresh tokens, or session cookies to another host.
Development
uv sync --all-groups
uv run pytest
uv run ruff check .
uv run ruff format --check .Layout:
src/patreonmcp/
api.py # endpoint wrappers + JSON:API normalization
client.py # auth, token refresh, retries, rate-limit handling
config.py # environment, token-file, and session-cookie loading
models.py # typed structured-output models
web_api.py # undocumented /api post create/edit client + CSRF
post_cli.py # post list/get/create/update/publish/delete commands
http_auth.py # bearer-token guard for streamable HTTP
server.py # MCP tool registration
cli.py # serve / check / init / config commandsTests use httpx2.MockTransport; no network or real credentials are required.
Privacy
Patron names, pledge amounts, charge status, and any optional email, note, or
address fields are sent to your MCP client and therefore to your model provider.
PII fields are disabled unless PATREON_ALLOW_PII=1 is set.
Enable optional fields only when the task needs them, and handle the data in
accordance with Patreon's Creator Privacy Promise and applicable law.
PATREON_SESSION_COOKIE is a full account credential. Keep it in your local
environment or a 0600 file; never commit it, paste it into a chat, or share it
with the model provider.
Contributing
Development setup, test commands, and review guidelines are in CONTRIBUTING.md.
Security
Do not report vulnerabilities in public issues. See SECURITY.md. Never commit a Patreon token or session cookie.
License
MIT. See LICENSE.
Available Tools
20 toolscreate_liveBDestructive
Create an early-access Patreon Live livestream.
The stream key is redacted by default.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | pre_live schedules the stream (scheduled_for required); live starts now. | |
| title | Yes | Livestream title. | |
| description | No | Livestream description. | |
| scheduled_for | No | ISO 8601 start time with timezone, required for pre_live. Example: 2026-10-20T18:00:00Z. | |
| include_stream_key | No | Include the RTMP stream key. Off by default; fetch it with get_live(include_stream_key=true) when needed. | |
| live_access_rule_ids | No | Access rule IDs from the campaign's live_access_rules relationship. Controls which tiers can view the stream. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| state | No | |
| title | No | |
| rtmp_url | No | |
| stream_key | No | |
| description | No | |
| scheduled_for | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true), and the description does not contradict them. It adds one genuine behavioral fact beyond annotations: the stream key is redacted by default. However it omits other relevant traits such as permission/plan prerequisites and what the created stream's lifecycle looks like.
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 with no filler, and the core action is front-loaded. Every sentence earns its place, including the note about default key redaction.
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 an output schema present and annotations covering safety, the description need not explain return values, and those gaps are covered. But for a moderately complex creation tool it leaves the agent without usage context: no indication of required campaign/permission prerequisites, no distinction from update_live, and the 'early-access' qualifier is left unexplained.
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 100%, with detailed enum and per-field docs (state semantics, ISO 8601 scheduled_for, include_stream_key, live_access_rule_ids), so the schema carries parameter meaning fully. The description only echoes the stream-key redaction behavior, which duplicates the include_stream_key documentation, so 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?
States a specific verb and resource: 'Create an early-access Patreon Live livestream.' The verb naturally separates it from the sibling read/update tools (get_live, update_live), but the description never names or contrasts those siblings explicitly, so differentiation is inferred rather than stated.
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 when-to-use guidance at all: nothing says when to pick create_live over update_live, what campaign/permission context is required, or what 'early-access' means for eligibility. The one routing hint ('fetch it with get_live(include_stream_key=true)') lives in the schema, not in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_postADestructive
Create a text post through Patreon's web editor API.
Requires PATREON_SESSION_COOKIE or PATREON_SESSION_COOKIE_FILE. This uses Patreon's undocumented browser API, not the official OAuth API, and can break when Patreon changes its web app. Only text posts are supported.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional user-defined post tags. | |
| title | Yes | Post title. | |
| content | No | Post body as HTML or plain text. The web editor stores HTML. | |
| publish | No | false creates a draft; true publishes immediately or schedules when scheduled_for is set. | |
| tier_ids | No | Tier IDs allowed to view the post. Required when visibility='tiers'. | |
| allow_html | No | Publish raw HTML. Off by default: content and teaser are escaped as plain text. Raw HTML can include links, embeds, and tracking pixels. | |
| visibility | No | public = everyone; paid = all paying patrons; tiers = only the tier_ids listed. | paid |
| campaign_id | No | Campaign ID, used only to resolve tier_ids. Omit to use the web session's current campaign. | |
| teaser_text | No | Optional plain-text teaser shown before the paywall. | |
| scheduled_for | No | ISO 8601 publish time with timezone, for example 2026-10-20T18:00:00Z. Requires publish=true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | |
| title | No | |
| content | No | |
| is_paid | No | |
| is_draft | No | |
| tier_ids | No | |
| edited_at | No | |
| embed_url | No | |
| is_public | No | |
| post_type | No | |
| app_status | No | |
| created_at | No | |
| embed_data | No | |
| patreon_url | No | |
| published_at | No | |
| scheduled_for | No | |
| access_rule_types | No | |
| content_truncated | No | |
| current_user_can_edit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, and the description is consistent with them while adding genuine behavioral context beyond structured data: it requires a session cookie, uses an undocumented browser API that can break, and supports only text posts. This is exactly the operational disclosure an agent needs for a fragile write tool.
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 sentences, front-loaded with purpose, then prerequisites, then the API fragility warning and scope limit. Every sentence earns its place with no repetition of schema content.
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 an output schema present, annotations covering safety, and 100% schema coverage, the description supplies the remaining critical context: authentication requirements and the fact that this uses a fragile undocumented browser API. Nothing essential is missing for an agent to invoke it correctly.
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 100%, so all ten parameters are already documented in the input schema. The description adds only the 'text posts' limitation, which touches the content parameter but otherwise does not extend parameter meaning. Baseline 3 is appropriate when the schema does the heavy lifting.
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 names a specific verb and resource ('Create a text post') and scopes it precisely ('through Patreon's web editor API', 'Only text posts are supported'). This distinguishes it from publishing or updating posts without needing to open 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?
It states a precondition (requires PATREON_SESSION_COOKIE or PATREON_SESSION_COOKIE_FILE) and contrasts with the official OAuth API, but it never says when to choose this tool over siblings like create_live or publish_post, nor when not to use it. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_webhookADestructive
Create a webhook. The response includes the HMAC signing secret.
Disabled unless PATREON_WEBHOOK_ALLOWED_HOSTS permits the target host. This is a persistent data-export channel; clients should require approval.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | Public HTTPS endpoint that receives Patreon events. | |
| triggers | Yes | Events to subscribe to: members:create, members:update, members:delete, members:pledge:create, members:pledge:update, members:pledge:delete, posts:publish, posts:update, posts:delete. | |
| campaign_id | No | Campaign ID. Omit only when the token can see exactly one campaign. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| uri | No | |
| paused | No | |
| secret | No | |
| triggers | No | |
| last_attempted_at | No | |
| num_consecutive_times_failed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true, idempotentHint=false and readOnlyHint=false, so the safety bar is covered. The description adds genuinely useful context beyond that: the response carries an HMAC signing secret, it is gated by an allow-list env var, and it constitutes a persistent data-export channel requiring approval.
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?
Front-loads the core action in the first sentence, then adds the two most decision-relevant caveats (host allow-list gating, approval advisory) in short lines. No wasted filler, though it is terse enough that the caveats read as fragments.
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?
An output schema exists so return values need not be spelled out, and annotations cover the safety profile. The description supplies the non-obvious operational constraints (allow-list gating, approval, secret in response), leaving little an agent needs missing for correct invocation.
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 100%, so the schema fully documents uri, triggers, and campaign_id, and the description contributes no additional parameter meaning. Baseline 3 is appropriate when the schema does the heavy lifting.
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 ('Create a webhook') and notes the salient output (HMAC signing secret). It is clearly distinct from siblings like update_webhook and delete_webhook by virtue of the create verb, 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?
Provides a precondition ('Disabled unless PATREON_WEBHOOK_ALLOWED_HOSTS permits the target host') and an advisory ('clients should require approval'), which implies when this is usable. However, it never explicitly says when to use this versus list_webhooks/update_webhook or otherwise routes the agent among alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_postADestructiveIdempotent
Delete a post through Patreon's web editor API.
This is destructive and cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Patreon post ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true, and readOnlyHint=false, so the safety profile is fully covered structurally. The description's 'destructive and cannot be undone' restates destructiveHint, though naming the web editor API endpoint adds minor context. No further behavioral detail (permissions, effect on published vs draft posts) is disclosed.
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, both front-loaded on the action, with the destructive warning immediately following. Nothing extraneous and no repetition of the title.
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 single-parameter mutation with an output schema present (so no return-value explanation needed) and annotations covering the safety profile, the description is nearly sufficient. It could still note whether published posts or only drafts are deletable, but the core is complete.
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 100% and the single post_id parameter is documented in the schema as 'Patreon post ID.' The description adds no extra meaning beyond that, 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?
States a specific verb ('Delete') and resource ('a post'), and the 'web editor API' qualifier pins down which API surface. Among the siblings, it is unambiguously the deletion counterpart to create_post/update_post/publish_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?
No when-to-use guidance, prerequisites, or alternatives are given. The warning that the action is irreversible is a caution, not routing guidance for choosing this tool over update_post or equivalent siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_webhookBDestructiveIdempotent
Delete a webhook created by this API client.
| Name | Required | Description | Default |
|---|---|---|---|
| webhook_id | Yes | Webhook ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so safety and repeat-call behavior are covered. The description's one added value is the ownership scope ('created by this API client'), but it says nothing about permanence, confirmation, or side effects on deliveries beyond what annotations provide.
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?
A single front-loaded sentence with no filler; the scope qualifier is positioned right after the verb-resource pair. It is tight but so terse that it verges on under-specification.
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?
An output schema exists, so return values need no explanation, and there is only one required parameter. Annotations carry the destructive/idempotent profile. The only gap is the absence of confirmation or irreversibility wording, which is minor given destructiveHint.
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 100% for the single required webhook_id parameter, so the baseline is 3. The description does not clarify whether the ID is the API-level webhook ID or an external provider ID, adding no meaning beyond 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?
Specific verb (Delete) plus resource (webhook), and it adds a real scoping constraint: only webhooks created by this API client can be deleted. It does not, however, explicitly contrast with sibling delete_* tools or the webhook siblings (list/create/update_webhook), so an agent must infer routing from the name alone.
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 when-to-use guidance, no mention of when not to delete, and no named alternatives such as update_webhook for modifying an existing webhook. The implied usage (remove a webhook you own) is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaignBRead-onlyIdempotent
Get one campaign with its tiers and optionally its creator.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | No | Campaign ID. Omit only when the token can see exactly one campaign. | |
| include_tiers | No | Include membership tiers. | |
| include_creator | No | Include the creator profile. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | |
| name | No | |
| tiers | No | |
| vanity | No | |
| creator | No | |
| is_nsfw | No | |
| summary | No | |
| currency | No | |
| image_url | No | |
| one_liner | No | |
| created_at | No | |
| is_monthly | No | |
| pledge_url | No | |
| patron_count | No | |
| pay_per_name | No | |
| published_at | No | |
| creation_name | No | |
| show_earnings | No | |
| image_small_url | No | |
| is_eligible_for_live | No | |
| is_charged_immediately | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds that tiers and the creator are conditionally returned, which is useful context, but discloses nothing about return shape or edge cases beyond that.
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?
A single, front-loaded sentence with no filler. It is efficient, though it is arguably slightly thin rather than maximally informative for a 3-parameter getter.
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 an output schema present and 100% parameter coverage, the description needn't explain return values. As a read-only getter the description is nearly complete, only missing the sibling-routing that would fully guide selection.
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 100%, so the schema already documents campaign_id, include_tiers, and include_creator. The description's mention of tiers and creator mirrors those flags but adds no format or default detail (e.g., that tiers/creator default to true).
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 ('Get one campaign') and scope (single campaign) plus included data (tiers, creator). The word 'one' implicitly distinguishes it from the list_campaigns sibling, though it never names that alternative.
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 when-to-use or when-not-to-use guidance. It does not tell the agent to prefer list_campaigns for multiple results or explain the token-scoping condition (which lives only in the schema's campaign_id description).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_identityARead-onlyIdempotent
Get the authenticated Patreon user (the creator behind the token).
| Name | Required | Description | Default |
|---|---|---|---|
| include_email | No | Request the user's email. Requires the identity[email] scope. | |
| include_campaign | No | Include the creator's campaign in the result. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | |
| about | No | |
| No | ||
| vanity | No | |
| created | No | |
| campaign | No | |
| full_name | No | |
| image_url | No | |
| last_name | No | |
| thumb_url | No | |
| first_name | No | |
| is_creator | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds only the scope clarification that this returns the token's own creator; it says nothing about auth failure modes, rate limits, or what the payload contains beyond what the output schema already provides.
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?
A single front-loaded sentence with zero filler that answers what the tool returns and whose identity it is.
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 an output schema present, return values need not be described, and the annotations carry the safety profile. The definition is near-complete for a zero-required-param read tool; only explicit sibling routing 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 100% and both parameters (include_email with its identity[email] scope note, include_campaign) are fully documented in the schema. The description adds no parameter meaning, 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?
States a specific verb+resource ('Get the authenticated Patreon user') and adds scope clarification ('the creator behind the token'). This implicitly separates it from get_member/get_campaign siblings, which fetch arbitrary records, though it never names them 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?
Usage is implied by the self-referential framing ('authenticated', 'behind the token'), but the description offers no explicit when-to-use or when-not-to-use guidance and never mentions the sibling alternatives (get_member, get_campaign).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_liveARead-onlyIdempotent
Get a livestream's state and RTMP connection details.
The stream key is redacted unless include_stream_key is true.
| Name | Required | Description | Default |
|---|---|---|---|
| live_id | Yes | Live ID. | |
| include_stream_key | No | Include the RTMP stream key. Off by default because it is a streaming credential. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| state | No | |
| title | No | |
| rtmp_url | No | |
| stream_key | No | |
| description | No | |
| scheduled_for | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds genuine behavioral context beyond that: the stream key is redacted by default, which tells the agent exactly what it will and won't receive. It stops short of richer detail like auth or rate-limit behavior.
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 with zero waste. The core action is front-loaded and the redaction caveat follows immediately where it is most useful.
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 an output schema present, return values need not be described, and annotations carry the safety profile, so the description only needs to add behavioral quirks — which it does via the stream-key redaction note. It is nearly complete, missing only mention of any auth or access requirements implied by openWorldHint.
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 100%, so both parameters (live_id and include_stream_key) are already documented, with include_stream_key explicitly flagged as a streaming credential. The description restates the redaction/default behavior but adds no syntax or format detail beyond the schema, 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?
States a specific verb (Get) and resource (a livestream), and scopes the return to 'state and RTMP connection details'. The get/update/create distinction from siblings like update_live and create_live is implicit in the verb, though 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?
Usage is only implied by the tool's nature (fetching a livestream's current state). There is no explicit when-to-use, when-not-to-use, or reference to alternatives such as list_live or update_live, so the agent must infer the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_managed_postBRead-onlyIdempotent
Get a post/draft via the web API; content is capped at 100,000 characters.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Patreon post ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | |
| title | No | |
| content | No | |
| is_paid | No | |
| is_draft | No | |
| tier_ids | No | |
| edited_at | No | |
| embed_url | No | |
| is_public | No | |
| post_type | No | |
| app_status | No | |
| created_at | No | |
| embed_data | No | |
| patreon_url | No | |
| published_at | No | |
| scheduled_for | No | |
| access_rule_types | No | |
| content_truncated | No | |
| current_user_can_edit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds a genuinely useful behavioral detail beyond the schema: content is truncated at 100,000 characters, which warns the agent that the payload may be incomplete.
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?
A single tight sentence with the cap constraint placed where it will be read. The phrase 'via the web API' is mildly redundant filler that doesn't help an agent decide or invoke, but overall the description is efficient.
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?
An output schema exists, so return values need no explanation, and the truncation cap is disclosed. However, for a tool with several near-identical read siblings, the description omits the one thing the agent needs most: what 'managed' distinguishes it from get_post.
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 100% for the single post_id parameter, so the schema carries the semantics. The description adds nothing about the identifier format or behavior, which is the expected baseline when the schema does the heavy lifting.
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 gives a clear verb+resource ('Get a post/draft'), but it never explains what 'managed' means or how this differs from the sibling get_post. With get_post, list_posts, and list_drafts all present, an agent cannot confidently choose between them from the text alone.
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 when-to-use guidance, no prerequisites, and no mention of alternatives such as get_post. The word 'draft' hints at scope but is not framed as a selection condition, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_memberBRead-onlyIdempotent
Get one patron by member UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| member_id | Yes | Member UUID, not the user ID. | |
| include_note | No | Include the creator's private note about the patron. | |
| include_user | No | Include the patron's public user profile. | |
| include_email | No | Include the member's email. Requires the campaigns.members[email] scope. | |
| include_tiers | No | Include the tiers the member is entitled to. | |
| include_address | No | Include the member's shipping address. Requires PATREON_ALLOW_PII=1 and the campaigns.members.address scope. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| note | No | |
| user | No | |
| No | ||
| tiers | No | |
| address | No | |
| full_name | No | |
| is_gifted | No | |
| is_free_trial | No | |
| patron_status | No | |
| pledge_cadence | No | |
| last_charge_date | No | |
| next_charge_date | No | |
| last_charge_status | No | |
| will_pay_amount_cents | No | |
| pledge_relationship_start | No | |
| campaign_lifetime_support_cents | No | |
| currently_entitled_amount_cents | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds no behavioral context beyond that—it does not mention PII/scope requirements, optional includes, or return behavior. With annotations covering safety, the bar is lower, but the description still contributes almost nothing new.
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?
A single front-loaded sentence with no wasted words. It states the core action and identifier 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?
Given that a full output schema exists and the input schema documents all six parameters with scope/PII details, the description is nearly complete. It omits the optional include behavior entirely, but that is covered by the schema, so it is largely sufficient for correct invocation.
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 100%, so the baseline is 3. The description repeats the member UUID requirement already documented in the schema and adds no additional meaning for the five optional include 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 ('Get one patron') plus the required identifier ('by member UUID'). It clearly distinguishes this singular retrieval from the sibling list_members, so an agent can route correctly 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?
The description provides no explicit when-to-use guidance, prerequisites, or named alternatives. It implies usage when a member UUID is known, but does not tell the agent when to prefer this over list_members or get_identity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postBRead-onlyIdempotent
Get one post, including its full HTML content.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Patreon post ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | |
| title | No | |
| content | No | |
| is_paid | No | |
| is_draft | No | |
| tier_ids | No | |
| edited_at | No | |
| embed_url | No | |
| is_public | No | |
| post_type | No | |
| app_status | No | |
| created_at | No | |
| embed_data | No | |
| patreon_url | No | |
| published_at | No | |
| scheduled_for | No | |
| access_rule_types | No | |
| content_truncated | No | |
| current_user_can_edit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered. The description supplements this with the useful fact that the response includes full HTML content, but says nothing about authentication, post visibility, or payload size.
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?
A single front-loaded sentence with no filler; the return-content detail is packed into the same clause rather than padding.
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?
An output schema exists, so return-value explanation is unnecessary, and the lone parameter is fully documented. The only real gap is the absence of routing guidance versus the similar get_managed_post and list_posts siblings.
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 100% and the single post_id parameter is documented as a 'Patreon post ID.' The description adds no format, source, or sourcing guidance beyond the schema, 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?
States a specific verb (Get) and resource (post) and adds the notable detail that full HTML content is returned. However, it never distinguishes itself from siblings such as get_managed_post or list_posts, leaving the agent to guess which retrieval tool applies.
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 indication of when to use this versus list_posts (bulk listing) or get_managed_post (managed-post variant), and no mention of prerequisites such as needing the post ID from a listing call. Usage must be inferred entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_campaignsBRead-onlyIdempotent
List campaigns owned by the authenticated creator.
| Name | Required | Description | Default |
|---|---|---|---|
| include_tiers | No | Include membership tiers for each campaign. | |
| include_creator | No | Include the campaign creator profile. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| campaigns | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered by structured data. The description contributes one useful behavioral fact — the result set is implicitly scoped to the authenticated creator — but says nothing about pagination, result caps, or ordering, which matters for a list endpoint.
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?
A single sentence with zero filler, and the most important constraint (ownership scope) is front-loaded rather than buried. Nothing in it is redundant with the tool name.
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?
An output schema exists, so return-value shape need not be described, and the annotations carry the full safety profile. The only real gap is collection behavior (pagination/ordering), which is minor for a simple read-only list 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 100%, so both optional booleans (include_tiers, include_creator) are already documented with defaults in the schema. The description adds no meaning beyond that, 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?
States a specific verb (List) and resource (campaigns) plus a scoping qualifier ('owned by the authenticated creator'), which separates it from get_campaign and from the post/webhook/member listing siblings. It does not, however, explicitly name any sibling as the alternative for a different scope, so it stops short of full differentiation.
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 when-to-use guidance: no statement that this returns the full collection versus get_campaign for a single campaign, no mention of when to toggle include_tiers/include_creator, and no exclusions. 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.
list_draftsBRead-onlyIdempotent
List unpublished drafts for a campaign through the web editor API.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | next_cursor from a previous list_drafts call. | |
| page_size | No | Results per page (1-1000). | |
| campaign_id | No | Campaign ID; omit to use the web session's campaign. |
Output Schema
| Name | Required | Description |
|---|---|---|
| posts | No | |
| total | No | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds only that this routes 'through the web editor API,' implying a web-session context, which is mildly useful but thin. No further behavioral detail (ordering, volume, freshness) is disclosed.
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?
A single tight sentence with the resource and scope front-loaded and zero filler. It is efficient, though it may be slightly under-specified rather than optimally concise.
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?
An output schema exists, so return shape need not be explained, and annotations cover the safety profile. Still, for a paginated list tool the description says nothing about result ordering, whether empty results are possible, or how drafts differ from list_posts, leaving the minimum viable level.
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 100% with 3 parameters, including the cursor/page_size pagination contract and the campaign_id fallback to the web session. The description adds no parameter meaning beyond the schema, so the baseline of 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?
States a specific verb ('List') and resource ('unpublished drafts for a campaign'), which is more precise than a generic list. However, it never distinguishes itself from the closely related sibling list_posts, leaving the agent to infer that drafts are a distinct, unpublished subset. Clear but lacks sibling differentiation.
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 description gives no when-to-use guidance, no prerequisites, and does not name an alternative such as list_posts for published content. The phrase 'through the web editor API' hints at a context but does not tell the agent when this tool is the correct choice over its many list/get siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_membersBRead-onlyIdempotent
List patrons for a campaign with cursor pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | next_cursor from a previous list_members call. | |
| page_size | No | Results per page (1-1000). | |
| campaign_id | No | Campaign ID. Omit only when the token can see exactly one campaign. | |
| include_note | No | Include the creator's private note about each patron. | |
| include_user | No | Include the patron's public user profile. | |
| include_email | No | Include patron email addresses. Requires PATREON_ALLOW_PII=1 and the campaigns.members[email] scope; patrons may hide it. | |
| include_tiers | No | Include the tiers each member is entitled to. | |
| include_address | No | Include shipping addresses. Requires PATREON_ALLOW_PII=1 and the campaigns.members.address scope; handle as sensitive data. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| members | No | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety and idempotency profile is covered. The description usefully adds that pagination is cursor-based, but says nothing about default page size behavior, ordering, or rate limits beyond what the schema provides.
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?
A single ten-word sentence with zero filler, front-loading the resource and the pagination model. Nothing redundant or buried.
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 a rich 8-parameter schema at 100% coverage and an output schema present, the description needn't explain returns or filters. The one thing worth flagging at this level — pagination — is stated. It is complete enough for correct invocation, though it could note ordering or the PII-sensitive nature of some includes.
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 100%, so every parameter including cursor, page_size, and the include_* PII flags is fully documented in the schema. The description only echoes the cursor-pagination concept, adding no meaning beyond the structured fields. 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?
States a specific verb ('List') and resource ('patrons for a campaign'), and adds the pagination model ('cursor pagination'). It does not name or distinguish itself from siblings like get_member or list_campaigns, so an agent must infer the distinction from the plural resource alone.
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 when-to-use guidance is given in the description. It never states when to reach for this instead of get_member (single patron) or list_campaigns, nor any prerequisites; the only conditional guidance lives in the schema's campaign_id description, not here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_postsBRead-onlyIdempotent
List posts for a campaign with cursor pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | next_cursor from a previous list_posts call. | |
| page_size | No | Results per page (1-1000). | |
| campaign_id | No | Campaign ID. Omit only when the token can see exactly one campaign. | |
| include_content | No | Include full post HTML. Off by default because post bodies can be large. |
Output Schema
| Name | Required | Description |
|---|---|---|
| posts | No | |
| total | No | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds only the cursor-pagination trait, which is already documented in the schema, and gives no extra context on auth, rate limits, or scoping behavior.
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, front-loaded sentence with zero wasted words. It states the action, scope, and pagination model efficiently.
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?
Rich annotations, a full-coverage input schema, and an output schema mean the description need not explain safety or return values. However, it leaves a real gap by not distinguishing list_posts from sibling list_drafts or get_post, and provides no usage 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?
Schema description coverage is 100%, so all four parameters are fully documented in the input schema. The description adds no parameter meaning beyond what the schema already provides, making the baseline 3 appropriate.
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: 'List posts', with scope 'for a campaign' and behavior 'cursor pagination'. It is clearly distinguishable from get_post, but it does not explicitly differentiate itself from sibling list_drafts or explain what kind of posts are returned.
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 description gives no when-to-use guidance, no conditions, and no alternatives. It implies scoping to a campaign but does not tell the agent when to prefer list_posts over get_post or list_drafts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksARead-onlyIdempotent
List this API client's webhooks. Signing secrets are redacted by default.
| Name | Required | Description | Default |
|---|---|---|---|
| include_secrets | No | Include HMAC signing secrets. Off by default because they are account credentials. |
Output Schema
| Name | Required | Description |
|---|---|---|
| webhooks | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, idempotentHint=true), so the bar is lower. The description still adds real behavioral context beyond them: signing secrets are redacted by default, telling the agent what it will and won't see in the result.
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, zero filler, with the core action front-loaded and the redaction caveat immediately after. 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?
For a read-only list tool, annotations cover safety, an output schema exists so return shape need not be described, and the schema fully documents the single parameter. The description adds the one non-obvious trait (default redaction); only pagination/scope limits are unaddressed.
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 100%, so the include_secrets parameter and its default are already fully documented in the schema, including the reason ('account credentials'). The description's 'redacted by default' restates that default rather than adding new syntax or semantics, so 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?
States a specific verb ('List') and resource ('webhooks') and scopes it to 'this API client's webhooks', which cleanly distinguishes it from the create_webhook/update_webhook/delete_webhook siblings by the enumeration verb.
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 description implies usage (enumerate existing webhooks) but never states when to reach for this tool versus get/update/delete_webhook, nor any prerequisites. The redaction default hints at the safe-read use case but no explicit when/when-not guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_postBDestructiveIdempotent
Publish an existing draft through Patreon's web editor API.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Patreon post ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | |
| title | No | |
| content | No | |
| is_paid | No | |
| is_draft | No | |
| tier_ids | No | |
| edited_at | No | |
| embed_url | No | |
| is_public | No | |
| post_type | No | |
| app_status | No | |
| created_at | No | |
| embed_data | No | |
| patreon_url | No | |
| published_at | No | |
| scheduled_for | No | |
| access_rule_types | No | |
| content_truncated | No | |
| current_user_can_edit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=true, so the safety profile is largely covered by structured data. The description adds that the target must already exist as a draft and that the operation goes through the web editor API, but it never explains what the 'destructive' flag means here (whether the draft record is consumed or replaced) or what the success response confirms. Given annotation coverage, this is adequate but thin.
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?
One sentence, no redundancy, with the outcome ('publish') front-loaded and the scope ('existing draft') immediately after. Nothing to trim.
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 single-parameter mutation with full schema coverage, rich annotations, and an output schema that handles return values, the description only needs to state the action and precondition — which it does. The remaining gap is the unexplained destructiveHint and any failure modes (publishing a non-draft, already-published posts), which is a minor omission given complexity.
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?
There is a single parameter, post_id, with 100% schema description coverage, so the schema fully documents it. The description adds no format, sourcing, or lookup guidance (e.g. where to get a valid post ID) beyond 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?
The description gives a specific verb ('Publish') plus a specific resource ('an existing draft') and the mechanism ('Patreon's web editor API'). The 'existing draft' qualifier implicitly distinguishes it from create_post/update_post, though it never names a sibling or states the boundary 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?
There is no when-to-use guidance, no prerequisites (e.g. the post must already exist as a draft, the caller's tier/permission needs), and no reference to alternatives such as update_post or create_post. The only hint is the phrase 'existing draft', which is inference rather than instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_liveBDestructiveIdempotent
Start or end a livestream. The stream key is redacted by default.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | pre_live -> live -> live_ended. No transitions are allowed after live_ended. | |
| live_id | Yes | Live ID. | |
| include_stream_key | No | Include the RTMP stream key. Off by default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| state | No | |
| title | No | |
| rtmp_url | No | |
| stream_key | No | |
| description | No | |
| scheduled_for | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral fact not in the annotations or schema: the stream key is redacted by default (privacy/response handling). It omits the operationally important irreversibility of ending a stream, which only appears in the state parameter's schema text.
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, the core action front-loaded, with the redaction caveat immediately after. Nothing is wasted or buried.
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?
An output schema exists, so return values need no explanation, and annotations carry the mutation profile. However, for a state-machine mutation that can permanently end a livestream, the description should at least signal the irreversibility and the sibling boundaries that now live only in the schema and sibling list.
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 100% and the state parameter already documents the pre_live -> live -> live_ended lifecycle with the no-transitions-after-ended rule. The description's note that the stream key is redacted by default lightly reinforces include_stream_key, but adds no syntax or format meaning beyond 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 clear action (start or end a livestream) on a specific resource, which distinguishes it from create_live and get_live. It never uses the word 'update' or names the state-transition framing explicitly, so an agent must infer that this is the state-change tool, but the intent is still legible.
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 when-to-use guidance and no routing to alternatives. It does not say to use create_live to set up a stream or get_live to inspect one, nor when a caller should pick 'live' vs 'live_ended'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_postADestructiveIdempotent
Update or publish an existing post through Patreon's web editor API.
Requires a web session. Pass publish=true to publish now, or publish=true plus scheduled_for to schedule. Omitting publish saves without changing publication state.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Replacement user-defined tag list. | |
| title | No | New title. | |
| content | No | New body as HTML or plain text. | |
| post_id | Yes | Patreon post ID. | |
| publish | No | true publishes immediately or schedules with scheduled_for; false saves without publishing. | |
| tier_ids | No | Tier IDs allowed to view the post. | |
| allow_html | No | Publish raw HTML. Off by default: content and teaser are escaped as plain text. | |
| visibility | No | New audience setting. | |
| campaign_id | No | Campaign ID used to resolve tier_ids. | |
| teaser_text | No | New plain-text teaser. | |
| scheduled_for | No | ISO 8601 publish time with timezone. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | |
| title | No | |
| content | No | |
| is_paid | No | |
| is_draft | No | |
| tier_ids | No | |
| edited_at | No | |
| embed_url | No | |
| is_public | No | |
| post_type | No | |
| app_status | No | |
| created_at | No | |
| embed_data | No | |
| patreon_url | No | |
| published_at | No | |
| scheduled_for | No | |
| access_rule_types | No | |
| content_truncated | No | |
| current_user_can_edit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true. The description adds real behavioral context beyond that: an authentication prerequisite (web session) and the important default that omitting publish leaves publication state unchanged. It stops short of explaining what the destructive aspect actually destroys (e.g., whether unspecified fields are cleared).
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, front-loaded with purpose before the conditional publish logic, with no filler. Minor redundancy with the schema's publish wording keeps it out of the top band.
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?
An output schema exists, so return values need not be described, and the publish/schedule flow is covered. However, for a destructive, 11-parameter mutation tool, the description never clarifies whether omitted fields are preserved or cleared, which is exactly the ambiguity an agent needs resolved before calling 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 100%, so the schema already documents all 11 parameters thoroughly. The description's publish explanation ('publish=true to publish now, or publish=true plus scheduled_for to schedule') largely restates the schema's own publish description, adding little new meaning; baseline 3 is appropriate.
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 gives a specific verb+resource ('Update or publish an existing post') plus the underlying API surface ('Patreon's web editor API'), which is enough to distinguish it from create_post and delete_post. It does not, however, address the overlap with the sibling publish_post tool, so sibling differentiation is incomplete.
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?
It states a prerequisite ('Requires a web session') and gives conditional semantics for the publish flag, which is useful. But it never says when to prefer this tool over publish_post or create_post, nor any when-not-to-use condition, leaving tool 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.
update_webhookADestructiveIdempotent
Update a webhook's URI, triggers, or paused state.
Changing the URI requires PATREON_WEBHOOK_ALLOWED_HOSTS to permit the host. Unpausing can redeliver queued patron events.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No | New HTTPS endpoint. | |
| paused | No | Set false to resume and redeliver queued events after failures; true to pause. | |
| triggers | No | Replacement trigger list. | |
| webhook_id | Yes | Webhook ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| uri | No | |
| paused | No | |
| secret | No | |
| triggers | No | |
| last_attempted_at | No | |
| num_consecutive_times_failed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=true, but the description adds real context the annotations don't: an external configuration dependency (PATREON_WEBHOOK_ALLOWED_HOSTS) gating URI changes, and the side effect that unpausing redelivers queued patron events. It stops short of stating irreversibility or how partial updates behave.
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 tightly written sentences, front-loaded with the operation scope, then the two non-obvious caveats. No filler or repetition.
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 an output schema present, return values need no explanation, and the description covers the operation scope plus the two behavioral gotchas that matter most (host allowlist, event redelivery). Only minor gaps remain around partial-update semantics and reversibility of a URI change.
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 100%, so every parameter is already documented in the schema (including the paused redeliver semantics). The description only restates the parameter names, adding no syntax, format, or constraint detail beyond the schema baseline.
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 (update) and resource (webhook) plus the exact mutable fields (URI, triggers, paused state). Combined with the sibling list (create_webhook, delete_webhook, list_webhooks), an agent can immediately tell this is the mutation path for an existing webhook.
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 by the 'update' verb against the create/delete/list siblings, and the host-allowlist prerequisite for URI changes is a useful precondition. However, it never explicitly says when to choose this over alternatives (e.g. delete + recreate) or that at least one field should change.
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.
20 tool updates
v0.1.0- First observed
create_live - First observed
create_post - First observed
create_webhook - First observed
delete_post - First observed
delete_webhook - First observed
get_campaign - First observed
get_identity - First observed
get_live - First observed
get_managed_post - First observed
get_member - First observed
get_post - First observed
list_campaigns - First observed
list_drafts - First observed
list_members - First observed
list_posts - First observed
list_webhooks - First observed
publish_post - First observed
update_live - First observed
update_post - First observed
update_webhook
TDQS
Scored across 20 tools
Most tools target distinct resources, but the server mixes two APIs (official OAuth vs. the web editor API), creating genuine overlap: get_post vs get_managed_post both fetch a post, and update_post (which can publish) overlaps with publish_post. The post/draft lifecycle (list_posts, list_drafts, create_post, get_managed_post) requires careful reading to select the right tool.
Every tool follows a clean verb_noun snake_case pattern (get_identity, list_campaigns, create_post, update_webhook, publish_post). No deviation in style or casing across all 20 tools.
20 tools is borderline heavy for the domain. A few are arguably redundant (get_post vs get_managed_post, update_post vs publish_post), and the dual-API split inflates the surface beyond a strictly minimal set.
Coverage is broad: posts have create/update/delete/list/get plus drafts, webhooks have full CRUD, and live has create/update/get. Minor gaps remain (no list/delete for live streams, no update/delete for campaigns or members), but core workflows are covered.
Maintenance
Related MCP Connectors
Publish and schedule social posts, upload media, and review analytics through OAuth.
Schedule and publish social posts with OAuth, drafts, media, workspaces, and brand memory.
Validate, schedule, publish, and analyze social content across 18 platforms with posterly. Supports OAuth 2.1 and Bearer API-key authentication. Requires a paid posterly plan with API access; Starter + API is available from $10/month.
Browse and manage Reddit posts, comments, and threads. Fetch user activity, explore hot/new/rising…
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables interaction with Reddit through a comprehensive API interface supporting both read-only operations (browsing posts, comments, user profiles) and authenticated actions (posting, commenting, voting) via OAuth2 authentication.7MIT
- FlicenseNot gradedqualityDmaintenanceEnables interaction with X (Twitter) API v2 with multi-user OAuth 2.0 support, allowing users to manage bookmarks, create tweets, and access user information with encrypted token storage and automatic refresh.5 npm-
- AlicenseBqualityDmaintenanceProvides access to Product Hunt data via the Product Hunt API v2, enabling queries for posts, collections, users, topics, comments, goals, and maker groups.179 npm1MIT
- AlicenseBqualityBmaintenanceEnables interaction with the official Facebook Graph API, providing tools for managing Pages, Posts, Comments, Reactions, Media, Events, Insights, and credential storage/validation.38MIT