Skip to main content
Glama

Programmatically publish to 15 platforms from a single API call. Built for developers, AI agents, LLMs, and agentic workflows that need reliable social media automation without browser sessions or manual interaction.

from bulkpublish import BulkPublish

bp = BulkPublish("bp_your_key_here")
bp.posts.create(
    content="Launching our new product today!",
    channels=[{"channelId": 1, "platform": "x"}, {"channelId": 2, "platform": "linkedin"}],
    status="scheduled",
    scheduled_at="2026-04-10T09:00:00Z",
)

Why BulkPublish?

Most social media tools are built for humans clicking buttons. BulkPublish is built for code — whether that code is written by a developer, an AI agent, an LLM with tool use, or an autonomous workflow.

  • Headless by design — No browser, no UI, no OAuth pop-ups at runtime. Connect accounts once in the dashboard, then automate everything via API.

  • AI-native — MCP server for Claude, tool definitions for GPT and LangChain, structured JSON responses that LLMs parse reliably.

  • Agentic-ready — Deterministic API with clear error codes. AI agents can create posts, check status, retry failures, and read analytics autonomously.

  • 15 platforms, one endpoint — Facebook, Instagram, X/Twitter, TikTok, YouTube, Threads, Bluesky, Pinterest, Google Business Profile, LinkedIn, Mastodon, Discord, Telegram, Tumblr, Snapchat.

Related MCP server: Publora MVP MCP Server

Use Cases

  • AI social media managers — Let Claude, GPT, or custom agents schedule and publish posts autonomously

  • Content pipelines — RSS-to-social, blog-to-social, newsletter-to-social automation

  • Bulk scheduling — Upload a CSV or feed a content calendar and schedule weeks of posts programmatically

  • Cross-platform syndication — Publish once to all platforms with per-platform content optimization

  • Analytics dashboards — Pull engagement data into your own tools, spreadsheets, or AI analysis

  • Zapier/n8n/Make alternatives — Direct API access without middleware, lower latency, more control

  • LLM-powered content creation — Generate content with AI, publish it with BulkPublish, track performance, iterate

Quick Start

1. Sign up

Create a free account at app.bulkpublish.com.

2. Get your API key

Go to Settings > Developer in the dashboard and create an API key. Keys start with bp_ and are shown only once — save it securely.

3. Connect platforms

Connect your social accounts in the dashboard under Channels. The API uses your connected channels to publish.

4. Install an SDK

Python

pip install bulkpublish

Node.js

npm install bulkpublish

Homebrew (macOS/Linux)

brew tap azeemkafridi/bulkpublish && brew install bulkpublish

Or call the REST API directly with curl, fetch, requests, or any HTTP client.

5. Make your first API call

curl -X POST https://app.bulkpublish.com/api/posts \
  -H "Authorization: Bearer bp_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Hello from the BulkPublish API!",
    "channels": [{"channelId": 1, "platform": "linkedin"}],
    "status": "draft"
  }'

AI Agent Integration

MCP Server (Claude, Cursor, Windsurf, Claude Code)

BulkPublish ships an MCP server so AI assistants can manage your social media directly:

{
  "mcpServers": {
    "bulkpublish": {
      "command": "npx",
      "args": ["-y", "@bulkpublish/mcp-server"],
      "env": {
        "BULKPUBLISH_API_KEY": "bp_your_key_here"
      }
    }
  }
}

50 tools available: create_post, list_channels, upload_media, get_analytics, the interactive compose_post composer (MCP Apps), and more. Runs locally (stdio) or hosted over Streamable HTTP at https://mcp.bulkpublish.com/mcp. See mcp-server/README.md.

Social Media Content Skills

BulkPublish includes a 24-skill library for AI agents to plan, adapt, review, schedule, and publish social media content: Social Media Content Skills.

LLM Tool Use / Function Calling

Ready-made tool definitions for autonomous AI agents:

All examples are complete, runnable scripts with error handling.

Code Examples

Create a Post

from bulkpublish import BulkPublish

bp = BulkPublish("bp_your_key_here")

post = bp.posts.create(
    content="Check out our latest update!",
    channels=[
        {"channelId": 1, "platform": "facebook"},
        {"channelId": 2, "platform": "x"},
        {"channelId": 3, "platform": "linkedin"},
    ],
    status="draft",
)
import { BulkPublish } from 'bulkpublish';

const bp = new BulkPublish({ apiKey: 'bp_your_key_here' });

const post = await bp.posts.create({
  content: 'Check out our latest update!',
  channels: [
    { channelId: 1, platform: 'facebook' },
    { channelId: 2, platform: 'x' },
    { channelId: 3, platform: 'linkedin' },
  ],
  status: 'draft',
});

Schedule a Post

post = bp.posts.create(
    content="This will go out tomorrow morning.",
    channels=[{"channelId": 1, "platform": "instagram"}],
    status="scheduled",
    scheduled_at="2026-04-10T09:00:00Z",
    timezone="America/New_York",
)

Upload Media and Publish

media = bp.media.upload("./product-photo.jpg")

post = bp.posts.create(
    content="Our newest product is here.",
    channels=[{"channelId": 1, "platform": "instagram"}],
    media_files=[media["file"]["id"]],
    status="scheduled",
    scheduled_at="2026-04-10T12:00:00Z",
)

Automation Example: Bulk Schedule from CSV

import csv
from bulkpublish import BulkPublish

bp = BulkPublish("bp_your_key_here")
channels = bp.channels.list()["channels"]

with open("content-calendar.csv") as f:
    for row in csv.DictReader(f):
        bp.posts.create(
            content=row["content"],
            channels=[{"channelId": ch["id"], "platform": ch["platform"]} for ch in channels],
            status="scheduled",
            scheduled_at=row["scheduled_at"],
            timezone="America/New_York",
        )

More examples in examples/ — including Python automation scripts, Node.js examples, curl reference, and AI agent integrations.

Features

  • 15 platforms — Facebook, Instagram, X/Twitter, TikTok, YouTube, Threads, Bluesky, Pinterest, Google Business Profile, LinkedIn, Mastodon, Discord, Telegram, Tumblr, Snapchat

  • Scheduling — Schedule posts for any future time with timezone support, or let queue slots pick optimal times

  • Media uploads — Images (JPEG, PNG, WebP, GIF) and videos (MP4, MOV, WebM) up to 100 MB

  • Recurring schedules — Repeat posts daily, weekly, biweekly, or monthly at a set time of day

  • Analytics — Track impressions, likes, comments, shares, and engagement. Each platform reports a different subset of metrics, and the response says which (supportedMetrics / supportedTotals) so a 0 is never mistaken for a measurement — see Metrics by Platform

  • Link tracking — Opt in per organization, or per post via linkTrackingOverride, to rewrite links through bulkpubli.sh and count the clicks. Reported as linkClicks / totalLinkClicks and measured by BulkPublish rather than the platform, so it works even where the platform reports nothing — see Character Limits

  • Labels — Organize posts and media with color-coded labels

  • Bulk operations — Delete or retry multiple posts in a single request

  • Threads — Multi-part thread posts for X, Threads, Bluesky, and Mastodon

  • Auto first comment — Automatically add a comment after publishing on any platform

  • All post types — Reels, Stories, Carousels, Threads, Shorts, Video — set per-platform via postTypeOverrides

  • Per-platform content — Customize text and options per platform in a single post

  • Platform-specific options — Instagram collaborators, TikTok privacy, YouTube categories, Pinterest boards, and more

API Reference

Full interactive API documentation: app.bulkpublish.com/docs

Base URL

https://app.bulkpublish.com

Authentication

Authorization: Bearer bp_your_key_here

Core Endpoints

Method

Endpoint

Description

POST

/api/posts

Create a post (draft, scheduled, or immediate)

GET

/api/posts

List posts (paginated, filterable by status/date/channel/label)

GET

/api/posts/:id

Get a post with platform statuses and metrics

PUT

/api/posts/:id

Update a draft or scheduled post

DELETE

/api/posts/:id

Delete a post

POST

/api/posts/:id/publish

Publish a draft immediately

POST

/api/posts/:id/retry

Retry failed platforms

POST

/api/posts/:id/approve

Approve a post awaiting team approval (roles with post:approve)

POST

/api/posts/:id/reject

Reject a pending post back to draft, with an optional reason

POST

/api/posts/bulk

Bulk delete or retry

GET

/api/channels

List connected social media channels

GET

/api/channels/:id/health

Check channel token health

GET

/api/channels/:id/options

Get platform options (Pinterest boards, YouTube playlists)

GET

/api/channels/:id/mentions

Search users for @mention (X, Bluesky)

GET/POST

/api/channel-sets

Saved channel groups for one-click targeting (update/delete via /api/channel-sets/:id)

GET/POST

/api/rss-feeds

RSS/Atom autopost feeds — new items become posts (update/delete via /api/rss-feeds/:id)

POST

/api/media

Upload a media file (multipart form, up to 100MB)

POST

/api/media/multipart/create

Start a chunked upload for large media (videos up to 1GB, 10MB parts)

POST

/api/media/multipart/complete

Assemble uploaded parts and record the media file

GET

/api/media

List uploaded media

GET

/api/analytics/summary

Analytics summary for a date range

GET

/api/analytics/engagement

Engagement data grouped by day/week/month

POST

/api/schedules

Create a recurring schedule

GET

/api/quotas/usage

Check current plan limits and usage

See the OpenAPI spec for the complete endpoint list.

Supported Platforms

Platform

Post Types

Media

Facebook

Post, Story

Images, Videos

Instagram

Feed, Reel, Story, Carousel

Images (JPEG), Videos (MP4, MOV)

X / Twitter

Tweet, Thread

Images, Videos, GIFs

TikTok

Video, Photo Slideshow

Videos (MP4, MOV), Images

YouTube

Video, Short

Videos (MP4, MOV, WebM, AVI, WMV, FLV)

Threads

Post, Thread, Quote Post

Images, Videos

Bluesky

Post, Thread

Images

Pinterest

Pin

Images, Videos

Google Business Profile

Post, Event, Offer

Images

LinkedIn

Post, Multi-image, PDF Carousel, Article

Images (JPEG, PNG, GIF), Videos (MP4)

Mastodon

Post, Thread

Images, Videos

Snapchat

Story, Saved Story, Spotlight

Exactly 1 image (JPG, PNG) or video (MP4, MOV, vertical, 5–60s, max 1GB)

SDKs

Python

pip install bulkpublish

Supports sync and async. Rich docstrings on every method for IDE and LLM consumption.

Node.js / TypeScript

npm install bulkpublish

Full TypeScript types, zero dependencies, native fetch (Node 18+).

Homebrew (macOS/Linux)

brew tap azeemkafridi/bulkpublish && brew install bulkpublish

Installs the Node SDK via Homebrew.

REST API

No SDK needed — any HTTP client works:

curl https://app.bulkpublish.com/api/channels \
  -H "Authorization: Bearer bp_your_key_here"

Rate Limits

Limit

Free

Pro

Business

Writes/min

60

60

60

Reads/min

300

300

300

Daily API requests

100

5,000

50,000

API keys

1

5

10

| Recurring schedules | — | 10 | Unlimited |

See the rate limits guide for headers, backoff strategies, and best practices.

Guides

  • Authentication — API keys, authorization, key management

  • Scheduling — Scheduled posts, queue slots, recurring schedules, timezones

  • Media Uploads — File uploads, supported formats, using media in posts

  • Platform Options — Per-platform configuration and quirks

  • Rate Limits — Burst limits, daily quotas, best practices

Integrations

Platform

Package

Install

Zapier

BulkPublish on Zapier

Search "BulkPublish" in Zapier

n8n

n8n-nodes-bulkpublish

Settings > Community Nodes > n8n-nodes-bulkpublish

Homebrew

homebrew-bulkpublish

brew tap azeemkafridi/bulkpublish && brew install bulkpublish

License

MIT

Available Tools

51 tools
abort_multipart_uploadAbort chunked media uploadB

Abort an in-progress chunked upload and free its stored parts. Use this when a chunked upload should be cancelled and its stored parts freed.

ParametersJSON Schema
NameRequiredDescriptionDefault
r2KeyYesThe r2Key returned by create_multipart_upload.
uploadIdYesThe uploadId returned by create_multipart_upload.

TDQS

B3.4/5.0
Behavior1/5

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

Annotation contradiction: the description says the tool 'frees stored parts' and aborts an upload, which is a destructive/irreversible operation, while the annotation declares destructiveHint=false. This directly contradicts the described behavior and could mislead an agent about the operation's safety.

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 short and front-loaded with the action and effect. There is minor redundancy between 'free its stored parts' and 'its stored parts freed', but no real padding exists.

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

Completeness3/5

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

For a simple two-parameter operation with complete schema coverage, the description covers what the tool does and when to use it. However, the destructiveHint=false annotation contradicts the stated cleanup behavior, undermining the agent's ability to reason about side effects; no output schema is present, so return-value details are not required.

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 100% for both parameters, and each parameter is documented as the value returned by create_multipart_upload. The description itself adds no additional parameter semantics, so baseline 3 is appropriate.

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 uses a specific verb ('Abort') and resource ('in-progress chunked upload') and states the concrete effect ('free its stored parts'). This clearly distinguishes it from sibling tools like create_multipart_upload and complete_multipart_upload.

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 explicitly says 'Use this when a chunked upload should be cancelled and its stored parts freed.' It gives a clear condition for use, though it does not explicitly mention when not to use it or name alternatives; cancellation is a distinct action with no true sibling alternative.

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

approve_postApprove pending postA

Approve a post awaiting team approval. Requires a role with post:approve (owner, admin, approver). Releases a post with approvalStatus 'pending': it publishes at its scheduled time, or immediately if that time has already passed. The author is notified in-app. Errors: 400 if the post is not awaiting approval, 403 if the role lacks post:approve, 404 if not found. Use this when the user (an owner/admin/approver) wants to approve a post awaiting team approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
postIdYesThe post ID to approve.

TDQS

A4.6/5.0
Behavior5/5

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

The description reveals concrete behavioral effects beyond the annotations: releasing a pending post, scheduling publication (immediate if time passed), notifying the author, and specific error codes (400, 403, 404). The annotations only state readOnlyHint=false, openWorldHint=true, and destructiveHint=false, so the description carries the full burden and exceeds it.

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: purpose is first, followed by role requirement, behavioral effects, errors, and usage guidance. Each sentence adds useful information, though the final 'Use this when...' sentence largely restates the opening purpose, creating minor redundancy.

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?

With a single parameter, rich annotations, and no output schema, the description provides everything needed to call the tool correctly: prerequisites, side effects, error conditions, and clear usage context. Nothing essential is missing.

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?

The input schema already describes postId as 'The post ID to approve.' with 100% coverage, so the description adds no new parameter-level information. Baseline 3 applies because the schema fully handles parameter semantics; the description only implies the param by referencing the post being approved.

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 states a specific verb ('Approve'), a specific resource ('a post awaiting team approval'), and the condition that defines that resource (approvalStatus 'pending'). It distinguishes itself from siblings like publish_post, reject_post, and update_post by focusing on the approval workflow rather than immediate publishing or editing.

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

Usage Guidelines5/5

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

The description explicitly states when to use the tool: 'Use this when the user (an owner/admin/approver) wants to approve a post awaiting team approval.' It also details the required role and the conditions under which errors occur, effectively excluding cases where the post is not pending or the user lacks permission.

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

bulk_postsBulk post actionsA
Destructive

Perform a bulk action on multiple posts. Supports deleting, retrying, or rescheduling multiple posts at once. Use this when the user wants to delete, retry, or reschedule many posts in a single request.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesBulk action: "delete", "retry", or "reschedule".
postIdsYesArray of post IDs to perform the action on.
scheduledAtNoNew ISO 8601 datetime. Required when action is "reschedule".

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, covering the mutation risk. The description adds that operations affect multiple posts at once, but doesn't disclose consequences like irreversibility of deletes or partial-failure behavior. It stays consistent with annotations without adding much beyond them.

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

Conciseness5/5

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

Two tight sentences: the first states the purpose and actions, the second states usage. No wasted words and the key information is front-loaded.

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

Completeness4/5

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

For a bulk destructive operation, the description covers purpose, when to use, and the action set, and the schema documents all parameters. It would benefit from a note about return format or partial-failure handling, but the essentials for invoking the tool correctly are present.

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 100%: action's enum, postIds, and scheduledAt each have descriptions in the schema. The tool description adds no extra parameter semantics, so it meets the baseline for fully documented schemas.

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 resource ('multiple posts') and the specific verb ('Perform a bulk action'), then enumerates the supported actions (delete, retry, reschedule). It distinguishes itself from sibling single-post tools by emphasizing 'many posts in a single request'.

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 second sentence gives an explicit when-to-use trigger: 'Use this when the user wants to delete, retry, or reschedule many posts in a single request.' However, it doesn't explicitly mention single-post alternatives or exclusions, so it's clear but not fully complete.

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

complete_multipart_uploadComplete chunked media uploadA

Complete a chunked upload: the server assembles the uploaded parts, verifies the stored object (existence, size, magic bytes, storage quota) and records the media file — same verification and response shape as finalize_media_upload. A failed assembly automatically aborts the upload. Use this when all parts of a chunked upload are PUT and their ETags collected.

ParametersJSON Schema
NameRequiredDescriptionDefault
partsYesEvery uploaded part with its ETag.
r2KeyYesThe r2Key returned by create_multipart_upload.
widthNoPixel width (images/video).
heightNoPixel height (images/video).
durationNoDuration in seconds (video).
fileNameYesOriginal file name.
mimeTypeYesFile MIME type.
uploadIdYesThe uploadId returned by create_multipart_upload.
sizeBytesYesFile size in bytes.

TDQS

A4.4/5.0
Behavior5/5

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

The description discloses substantial behavior beyond the sparse annotations: server-side assembly, verification of existence, size, magic bytes and storage quota, recording the media file, and automatic abort on failed assembly. This gives the agent a realistic picture of side effects and failure modes.

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

Conciseness5/5

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

The description is two sentences long, front-loads the action, and each clause adds meaningful information: process, verification, response similarity, failure behavior, and invocation condition. There is no filler.

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

Completeness4/5

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

For a complex 9-parameter operation with no output schema, the description covers the workflow, verification, and side effects. The only mild gap is that 'same verification and response shape as finalize_media_upload' defers detail to another tool's definition, but the behavior described is otherwise self-sufficient.

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 100%, so the schema already documents all parameters and their meanings. The description adds little beyond the schema, except implicitly reinforcing that parts carry ETags collected from PUT requests.

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 states a specific verb and resource: 'Complete a chunked upload' and explains the assembly, verification, and media-file recording process. It also references finalize_media_upload, which helps position this tool relative to a closely related sibling.

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?

It explicitly says 'Use this when all parts of a chunked upload are PUT and their ETags collected,' giving a clear condition for invocation. It does not explicitly state when not to use it or name a non-chunked alternative, but the guidance is sufficient for typical routing.

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

compose_postCompose a postA

Open an interactive composer to draft or schedule a social media post. Shows the user's connected channels to pick from and pre-fills any provided text. The user finishes in the UI; on submit it creates the post via create_post. Use this when the user wants to compose a post interactively in a UI — prefer this over create_post when they'd review before posting.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentNoOptional initial text to pre-fill the composer with.

Output Schema

ParametersJSON Schema
NameRequiredDescription
mediaNo
channelsNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already signal readOnlyHint=false and openWorldHint=true, so mutation is expected. The description adds valuable behavioral context beyond that: it opens a UI, shows connected channels, pre-fills provided text, and creates the post via create_post only on submit.

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

Conciseness5/5

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

Three sentences, each earning its place: the primary behavior, the UI interaction details, and the usage guidance with an alternative. No filler or redundant restatement of the title.

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?

With one optional parameter, an output schema present, and annotations covering the safety profile, the description is complete enough for invocation. The decision rule and delegation-to-create_post note fill the remaining context.

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 100%, and the schema already documents content as 'Optional initial text to pre-fill the composer with.' The description's 'pre-fills any provided text' adds little beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb ('Open an interactive composer') and resource ('social media post'), and explicitly contrasts itself with create_post by distinguishing interactive UI composition from direct creation. It clearly differentiates this tool from its siblings.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use rule: 'Use this when the user wants to compose a post interactively in a UI' and names the alternative, create_post, with the deciding condition 'when they'd review before posting.' This is direct decision guidance.

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

create_channel_setCreate channel setA

Create a channel set — a saved channel grouping for one-click multi-channel targeting. Names are unique per organization (a duplicate fails with a 409, code DUPLICATE_NAME); an organization can have up to 50 sets. Use this when the user wants to save a group of channels for one-click targeting.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSet name (max 100 chars, unique per organization).
channelIdsYesIDs of channels in your organization (at least 1).

TDQS

A4.2/5.0
Behavior4/5

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

It adds meaningful behavior beyond the annotations: names are unique per organization, duplicates fail with 409 and code DUPLICATE_NAME, and there is a 50-set cap. These are exactly the edge constraints an agent needs to anticipate. It does not mention auth or success response, but for a simple create operation the key behaviors are covered.

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

Conciseness5/5

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

Three compact sentences with no filler. The purpose is stated first, followed by critical constraints, then the explicit usage trigger. Every sentence earns its place.

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

Completeness4/5

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

For a simple two-parameter create tool without an output schema, this description is nearly complete. It covers purpose, constraints, failure behavior, and when to use it. It does not describe the expected success response, but that is not essential for correctly invoking the tool.

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 coverage is 100%, and the schema already documents both parameters well. The description adds a bit of context around uniqueness and organizational scope, but it does not substantially extend what an agent already learns from the input schema.

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 opens with a clear action and resource ('Create a channel set') and defines what that resource is: a saved channel grouping for one-click multi-channel targeting. This distinguishes it from list_channel_sets, update_channel_set, and delete_channel_set by verb and concept.

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?

It explicitly states when to use the tool: 'Use this when the user wants to save a group of channels for one-click targeting.' It does not explicitly contrast with update/list/delete siblings, but the use-case guidance is clear enough for an agent to select it correctly.

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

create_labelCreate labelA

Create a new label for organizing posts or media files. Use this when the user wants a new label/tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesLabel name.
typeNoLabel type: "post" (default) or "media".
colorNoHex color code (e.g. "#6366f1"). Defaults to indigo.

TDQS

A4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, implying a non-destructive write operation. The description adds that it is 'for organizing posts or media files', which provides some context, but it does not disclose potential side effects (e.g., whether the label is immediately usable, any ownership constraints, or if names must be unique). Given minimal annotation coverage, the description partially carries the burden but lacks deeper behavioral detail.

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

Conciseness5/5

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

Two sentences with no filler. The core action is front-loaded ('Create a new label'), and the second sentence immediately offers usage guidance. Every word earns its place.

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

Completeness4/5

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

For a simple creation tool with three parameters fully documented in the schema and no output schema, the description covers the what and when adequately. It could mention that the operation returns the created label or confirm success, but since no output schema exists and the tool is straightforward, the description is sufficiently complete. It does not explain any prerequisites or error conditions, though these are not strictly required.

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 100%, so the input schema already documents all three parameters (name, type, color) with descriptions and defaults. The tool description adds no parameter-specific information. Baseline of 3 is appropriate when the schema fully covers parameter semantics.

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

Purpose5/5

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

The description states a specific verb and resource ('Create a new label'), and clarifies the domain ('for organizing posts or media files'), which distinguishes it from sibling tools like update_label and delete_label. The explicit use-case statement ('Use this when the user wants a new label/tag') reinforces its purpose.

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 clear when-to-use guidance ('Use this when the user wants a new label/tag'). It does not explicitly name alternative tools (e.g., update_label, delete_label), but the phrase 'new label' implies a creation context, making it adequate without being exhaustive.

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

create_media_uploadStart media uploadA

Reserve a presigned R2 upload URL for a direct browser upload (used by the composer UI). For scripted uploads use upload_media instead. Use this when you need a presigned URL for a large direct upload (advanced; prefer upload_media for normal files).

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeBytesYesFile size in bytes.
contentTypeYesFile MIME type, e.g. image/png or video/mp4.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations only carry readOnlyHint=false and destructiveHint=false, so the description does most of the work. It adds genuinely useful behavior context—this tool reserves a URL rather than transferring the file itself. But it omits consequential traits: presigned URL expiration, whether finalize_media_upload must follow, and what happens to an unused reservation.

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?

Two sentences with the core purpose front-loaded. The second sentence is redundant—'Use this when you need a presigned URL for a large direct upload' restates the reservation concept, and 'prefer upload_media for normal files' duplicates 'For scripted uploads use upload_media instead'—so it could be tightened without losing information.

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

Completeness3/5

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

With no output schema, the description leaves the return value undescribed, even though the presigned URL (and any reservation ID or expiration) is the entire point of the call. The multi-step flow is also incomplete: the finalize_media_upload sibling suggests a follow-up step that the agent is never told about. For a 2-param tool this is adequate but not complete.

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 coverage is 100%: both sizeBytes and contentType have descriptive text in the input schema. The description adds no parameter-level meaning (no size limits, no allowed MIME types, no constraints), so the baseline 3 applies with the schema doing the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource: 'Reserve a presigned R2 upload URL' for a 'direct browser upload,' and anchors it to the composer UI. It explicitly distinguishes from the nearest sibling by adding 'For scripted uploads use upload_media instead,' so an agent can tell this tool apart without opening either schema.

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

Usage Guidelines4/5

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

Gives an explicit when-to-use ('Use this when you need a presigned URL for a large direct upload') and an explicit exclusion ('prefer upload_media for normal files'). However, it never addresses the multipart upload siblings (create_multipart_upload, finalize_media_upload), so an agent has no guidance on when the multipart flow should be chosen instead.

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

create_multipart_uploadStart chunked media uploadA

Start a chunked (multipart) direct-to-storage upload for large media — videos up to 1GB, images up to 100MB. Returns r2Key, uploadId, the fixed partSize (10485760 bytes = 10MB), and one presigned PUT URL per part (valid 3600s). PUT each 10MB slice to its URL, collect each response's ETag header, then call complete_multipart_upload. For ordinary files prefer upload_media. Use this when a file is too large for a single upload (e.g. a video over 100MB, up to 1GB) and must be sent in 10MB chunks.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeBytesYesExact file size in bytes. Videos up to 1GB; images up to 100MB.
contentTypeYesFile MIME type, e.g. video/mp4 or image/png.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only indicate readOnlyHint=false and destructiveHint=false, so the description carries the burden of explaining behavior. It does this well by disclosing that the tool returns r2Key, uploadId, a fixed partSize, and presigned URLs valid for 3600s, and that the caller must PUT chunks, collect ETags, and call complete_multipart_upload. It does not mention abort_multipart_upload as a cleanup option, which is a minor gap.

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 with the tool's purpose, then return values, then the workflow, then when-to-use guidance. It is slightly repetitive about the 1GB/100MB limits, appearing both at the start and end, but every sentence otherwise earns its place.

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 two-parameter tool with no output schema, the description is complete enough for an agent to invoke it and continue the next step. It names the returned fields, the chunk size, URL validity, the required PUT/ETag flow, and the follow-up call to complete_multipart_upload. Nothing essential to calling this tool is missing.

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 100%, so the schema already fully documents sizeBytes and contentType. The description reinforces the size limits and introduces partSize, but does not add substantial parameter meaning beyond the schema. Baseline 3 is appropriate.

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 uses a specific verb ('Start') and resource ('chunked (multipart) direct-to-storage upload') and immediately distinguishes it from ordinary uploads by size and chunking. It also names sibling tools like complete_multipart_upload and upload_media, which removes ambiguity.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'Use this when a file is too large for a single upload (e.g. a video over 100MB, up to 1GB) and must be sent in 10MB chunks.' It also explicitly prefers upload_media for ordinary files, giving a clear alternative and condition for choosing this tool instead.

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

create_postCreate postA

Create a new social media post. Can be saved as a draft or scheduled for a specific time. Supports platform-specific content overrides, media attachments, labels, and thread format. IMPORTANT: YouTube and TikTok REQUIRE video — do not include them when posting images only. Instagram defaults to feed_photo — set postTypeOverrides for video content (reel, feed_video). Use this when the user wants to draft or schedule one new post (do not publish immediately unless asked).

ParametersJSON Schema
NameRequiredDescriptionDefault
labelsNoArray of label IDs to tag the post with.
statusNoPost status. "draft" (default) or "scheduled".
contentNoThe post text content. Optional — defaults to empty for media-only posts.
channelsYesArray of channels to post to. Get channel IDs from list_channels.
timezoneNoTimezone for scheduling (e.g. "America/New_York"). Defaults to UTC.
postFormatNoPost format. "post" (default), "video", "reel", "story", "carousel", or "thread" for multi-part threads.
scheduledAtNoISO 8601 datetime for scheduling (e.g. 2025-01-15T10:00:00Z). Required when status is scheduled.
threadPartsNoThread parts array. Required when postFormat is thread (min 2 parts).
mediaFileIdsNoArray of media file IDs to attach. Upload media first with upload_media.
platformContentNoPer-platform content overrides, e.g. { "x": "Short tweet", "linkedin": "Longer LinkedIn post" }.
requestApprovalNoOptional (default false). Set true to hold a scheduled post for team approval (approvalStatus becomes 'pending'). Forced on server-side for API keys of roles without post:publish (contributors), regardless of this flag.
platformSpecificNoPlatform-specific settings, e.g. { "youtube": { "title": "…", "privacyStatus": "public" } }. Reddit, Discord, Tumblr and Snapchat nest their options under the BulkPublish channel id, e.g. { "reddit": { "12": { "subreddit": "webdev" } } }. Telegram takes no options.
postTypeOverridesNoPer-platform post type override. E.g. { "instagram": "reel", "youtube": "short" }.
linkTrackingOverrideNoOptional per-post override for link tracking (bulkpubli.sh). true forces links in this post to be shortened and their clicks counted, false forces them to publish as written, and null/omitted (the default) inherits the organization's Link Tracking setting. Shortening happens at publish time, per channel, so two accounts on the same platform get distinct codes; it is skipped for a channel when the rewrite would push the post past that platform's character limit (a short URL is 28 characters and can be longer than the link it replaces).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations are minimal (not read-only, not destructive), so the description carries the behavioral burden. It discloses that posts can be saved as drafts or scheduled, that publishing is not immediate, and adds critical platform constraints: YouTube/TikTok require video and Instagram defaults to feed_photo requiring postTypeOverrides for video. It omits some behavior like forced approval for contributors, but the schema covers that detail.

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

Conciseness5/5

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

The description is compact and front-loaded: purpose first, then feature summary, then critical caveats, then usage boundary. Every sentence contributes something an agent needs, with no filler or repetition of obvious schema details.

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

Completeness4/5

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

For a tool with 14 parameters and deeply nested platform options, the description covers the essential intent, the most consequential platform-specific requirements, and the primary usage boundary. It does not describe the return value despite having no output schema, but the schema thoroughly documents parameter details, so this is a minor gap.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful cross-parameter semantics: it warns that YouTube/TikTok must not be included for image-only posts and that Instagram video content requires postTypeOverrides. This helps the agent select valid parameter combinations beyond what the schema alone states.

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

Purpose5/5

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

States a clear verb and resource: 'Create a new social media post.' It further scopes the action to 'one new post' that can be drafted or scheduled, which distinguishes it from publishing or bulk-creation siblings. The final sentence explicitly says it is for drafting/scheduling, not immediate publishing.

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?

Provides an explicit usage directive: 'Use this when the user wants to draft or schedule one new post (do not publish immediately unless asked).' This makes the primary use case clear, though it does not name or exclude alternatives like compose_post or bulk_posts.

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

create_rss_feedAdd RSS feedA

Add an RSS autopost feed. The feed is polled every 15 minutes and new items become posts on the chosen channels. The server validates that feedUrl is a reachable public RSS 2.0 or Atom feed. An organization can have up to 20 feeds. Use this when the user wants new items from an RSS/Atom feed to become posts automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNodraft = new items become draft posts for review (the default); publish = auto-published.
nameYesFeed name (max 100 chars).
feedUrlYesPublic RSS 2.0 or Atom feed URL.
channelIdsYesIDs of channels new items are posted to (at least 1).
fieldMappingNoField mapping controlling how each feed item becomes a post.
requireApprovalNoHold items auto-published from this feed for team approval — each generated post lands with approvalStatus 'pending' and waits for approve_post. Only meaningful when mode is 'publish' (draft items never publish on their own, and a feed force-demoted to draft by the plan gate stays ungated). Defaults to false.

TDQS

A4.6/5.0
Behavior5/5

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

The description adds substantial behavioral facts beyond the sparse annotations: the feed is polled every 15 minutes, the server validates reachability of the feed URL, and the organization has a hard limit of 20 feeds. These are all behaviors an agent needs to set expectations and anticipate failures.

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

Conciseness5/5

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

Four concise sentences, each carrying distinct information: core purpose, polling behavior, validation/quota, and usage guidance. Information is front-loaded and there is no filler.

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

Completeness4/5

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

For a complex create operation with six parameters and nested objects, the description covers selection, polling cadence, validation, and quota. It does not describe the response shape, and since there is no output schema, that leaves a minor gap for an agent wanting to know what a successful create returns.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining that feedUrl is server-validated as a reachable public feed and that channelIds receive the generated posts. This supplements the schema's already solid parameter descriptions without fully covering every nested option.

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 opens with a specific verb and resource: 'Add an RSS autopost feed.' It clearly explains what the tool does — creates a feed that is polled every 15 minutes and turns new items into posts — and closes with a usage statement that disambiguates it from manual post creation tools like create_post or compose_post.

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?

It explicitly says 'Use this when the user wants new items from an RSS/Atom feed to become posts automatically,' which gives a clear trigger condition. It does not name explicit alternatives to avoid, nor state when not to use it, so it stops short of a 5.

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

create_scheduleCreate recurring scheduleA

Create a new recurring post schedule. Posts are automatically created and published on the chosen frequency. The schedule is visible in the web app (Repeat Posts page, with upcoming runs on the Calendar); a post record exists only once an occurrence fires, carrying recurringScheduleId. Use this when the user wants a recurring posting schedule.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSchedule name.
isActiveNoWhether the schedule starts active. Defaults to true.
timezoneNoIANA timezone (e.g. "America/New_York"). Defaults to UTC.
dayOfWeekNoDay of week (0=Sunday..6=Saturday). Required for weekly/biweekly.
frequencyYesHow often the schedule runs.
timeOfDayYesTime of day to post, 24h "HH:MM" (e.g. "09:00").
channelIdsYesArray of channel IDs to post to.
dayOfMonthNoDay of month (1-31). Required for monthly.
mediaFileIdsNoMedia file IDs re-used for every generated post.
contentTemplateNoPost content template. Defaults to empty.
requireApprovalNoHold every occurrence this schedule generates for team approval — each generated post lands with approvalStatus 'pending' and the scheduler skips it until an approver releases it via approve_post. Defaults to false.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only provide readOnlyHint=false and destructiveHint=false, so the description carries the behavioral burden. It discloses automatic creation and publishing, visibility in the web app, and the key lifecycle detail that a post record exists only after an occurrence fires. This goes well beyond the annotations.

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

Conciseness5/5

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

Three compact sentences, front-loaded with the core purpose, followed by lifecycle/visibility context and a clear usage cue. Every sentence earns its place, with no filler or redundant schema repetition.

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

Completeness4/5

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

For a complex 11-parameter create tool, the description covers the key conceptual model: when posts appear, where the schedule is visible, and the recurringScheduleId link to generated posts. It is slightly incomplete because there is no output schema and the description does not state what the create call returns, but schema coverage compensates for most invocation details.

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 100%, so the parameters are already fully documented. The description adds no parameter-specific semantics and instead focuses on tool behavior, which is appropriate. The baseline of 3 applies because the schema does the heavy lifting.

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 states a specific action ('Create a new recurring post schedule') and clearly distinguishes this tool from one-off post creation by explaining that posts are materialized only when an occurrence fires. This differentiates it from sibling tools like create_post and bulk_posts without requiring the agent to open schemas.

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 explicitly says 'Use this when the user wants a recurring posting schedule,' giving a clear selection trigger. It does not explicitly contrast this with alternatives like create_post for one-off posts, so it stops short of full when-not guidance.

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

delete_channel_setDelete channel setA
DestructiveIdempotent

Delete a channel set by ID. Does not affect the channels themselves. Use this when the user wants to remove a saved channel set.

ParametersJSON Schema
NameRequiredDescriptionDefault
setIdYesThe channel set ID to delete.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructive and idempotent behavior. The description adds a crucial behavioral detail beyond annotations: deleting the set does not affect the channels themselves. This prevents an agent from assuming cascading deletion, which is valuable context.

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

Conciseness5/5

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

The description is two concise sentences with no filler. The core action is front-loaded, followed by the clarifying scope caveat and a direct usage instruction. Every sentence contributes meaningful guidance.

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 single-parameter delete operation, the description covers what is deleted, what is not deleted, and when to use it. Combined with annotations for destructive and idempotent behavior, nothing essential is missing for an agent to invoke this tool correctly.

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 coverage is 100% and the single parameter setId is already described as 'The channel set ID to delete.' The description adds no additional semantic value beyond restating that deletion occurs by ID, so the baseline score of 3 is appropriate.

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 states a specific verb and resource: 'Delete a channel set by ID.' It further disambiguates by clarifying that channels themselves are unaffected, distinguishing this from tools that delete actual channels or media. The title and description align clearly.

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 explicitly says 'Use this when the user wants to remove a saved channel set,' providing clear context for when this tool is appropriate. It does not explicitly discuss exclusions or alternative tools, so it falls just short of top-tier guidance.

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

delete_labelDelete labelA
DestructiveIdempotent

Delete a label by ID. Removes the label from all associated posts or media. Use this when the user wants to delete a label.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelIdYesThe label ID to delete.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already signal destructive and idempotent behavior. The description adds useful beyond-annotation context by revealing the cascade effect: deleting the label removes it from associated posts or media rather than deleting those posts/media. 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.

Conciseness5/5

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

Two short sentences that are front-loaded: the primary action and scope appear first, and the usage guidance follows. There is no filler or redundant elaboration.

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

Completeness4/5

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

For a one-parameter delete operation, the description covers the action, the cascade effect, and the triggering user intent. It doesn't discuss permissions or response behavior, but the annotations and simple schema make the tool easy to invoke correctly without those details.

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?

The schema already provides 100% coverage for the single parameter, labelId, with type and description. The description's 'by ID' phrase reinforces this but adds no new semantic detail beyond the schema.

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?

Clearly states the action ('Delete'), the target ('label by ID'), and the operational effect ('removes the label from all associated posts or media'). This distinguishes it from sibling tools like delete_post, delete_media, and delete_rss_feed, which target different resources.

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?

Provides explicit context: 'Use this when the user wants to delete a label.' It does not spell out when not to use this tool or how it differs from update_label/list_labels, but for a simple delete operation the stated intent is sufficient.

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

delete_mediaDelete mediaA
DestructiveIdempotent

Delete a media file by ID. Removes the file from storage and detaches it from any posts. Use this when the user wants to delete a media file.

ParametersJSON Schema
NameRequiredDescriptionDefault
mediaIdYesThe media file ID to delete.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=false, destructiveHint=true, and idempotentHint=true. The description adds value by disclosing that the file is removed from storage and detached from any posts, giving an agent a concrete picture of the destructive side effects without contradicting the annotations.

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

Conciseness5/5

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

Three short sentences each serve a distinct purpose: state the primary action, describe the side effect, and give the triggering user intent. There is no filler or tangential detail.

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

Completeness4/5

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

For a simple, single-parameter destructive operation with complete schema coverage and annotations, the description covers the essential behavior and consequence. It could mention permanence or permissions, but nothing critical is missing for correct invocation.

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?

The input schema covers the only parameter (mediaId) with a clear description, and the tool description merely reinforces 'by ID'. With 100% schema description coverage, the description does not need to add much parameter-level meaning, so the baseline score of 3 is appropriate.

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 names the exact operation ('Delete a media file by ID') and the resource, and goes beyond the title by specifying the concrete side effect: removal from storage and detachment from posts. This clearly distinguishes it from sibling delete tools like delete_post and delete_label.

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 final sentence explicitly says to use the tool when the user wants to delete a media file, which is a clear usage context. It stops short of naming alternatives or stating when not to use it, but given the sibling set, the intended use case is unambiguous.

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

delete_postDelete postA
DestructiveIdempotent

Delete a post by ID. Only draft and failed posts can be deleted. Use this when the user wants to permanently remove a post.

ParametersJSON Schema
NameRequiredDescriptionDefault
postIdYesThe post ID to delete.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveness (destructiveHint: true) and non-read-only behavior. The description adds valuable context beyond annotations: deletion is permanent and limited to draft/failed posts. This is exactly the kind of state-dependent behavior an agent needs to know before invoking.

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

Conciseness5/5

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

Two short sentences, front-loaded with the core action, then the key precondition and usage trigger. Every phrase earns its place; there is no redundancy or filler.

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 simple one-parameter delete operation with destructive and idempotent annotations, the description covers what, when, and under what conditions. No output schema exists, so omitting return details is acceptable. An agent has everything it needs to select and invoke this tool correctly.

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?

The input schema already documents postId with 100% coverage, so the description does not need to add much. The phrase 'by ID' reinforces the parameter's role but adds no new semantic detail beyond the schema. Baseline of 3 is appropriate given full 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 uses a specific verb ('Delete'), names the resource ('a post'), and specifies the identifier ('by ID'). It also distinguishes the tool from post-related siblings by stating the deletion precondition (draft/failed only), making its purpose unambiguous.

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 explicitly says when to use the tool: when the user wants to permanently remove a post. It also imposes a clear eligibility condition ('Only draft and failed posts can be deleted'), which helps agents avoid invalid calls. It does not explicitly name alternative tools for other states, but the guidance is sufficient for the common case.

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

delete_rss_feedDelete RSS feedA
DestructiveIdempotent

Delete an RSS autopost feed by ID. Stops polling; already-created posts are kept. Use this when the user wants to stop and remove an RSS autopost feed.

ParametersJSON Schema
NameRequiredDescriptionDefault
feedIdYesThe RSS feed ID to delete.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructive and idempotent behavior, so the bar is lower. The description adds valuable specifics beyond annotations: it stops polling and preserves already-created posts. This gives the agent a more concrete model of the operation's side effects.

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

Conciseness5/5

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

Two short sentences, each earning its place: the first states the action precisely, the second adds key behavioral consequences and use context. No filler or redundancy.

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 single-parameter delete operation, the description covers what is deleted, side effects, and when to use it. Annotations cover destructive and idempotent traits, and no output schema exists, so no return-value explanation is required. Nothing essential is missing.

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 100%, and the only parameter, feedId, is already documented as 'The RSS feed ID to delete.' The description adds 'by ID' but no meaningful semantic detail beyond what the schema provides, so baseline 3 is appropriate.

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 uses a specific verb ('Delete') and resource ('RSS autopost feed by ID'), clearly distinguishing it from sibling tools like create_rss_feed, update_rss_feed, and list_rss_feeds. The subject and scope are immediately unambiguous.

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 explicitly states when to use the tool: when the user wants to stop and remove an RSS autopost feed. It also clarifies that already-created posts are kept, which implicitly distinguishes this from deleting posts. It does not explicitly name alternative sibling tools or when-not conditions, but the guidance is clear enough.

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

delete_scheduleDelete recurring scheduleA
DestructiveIdempotent

Delete a recurring schedule by ID. Stops all future posts from this schedule. Use this when the user wants to stop and delete a recurring schedule.

ParametersJSON Schema
NameRequiredDescriptionDefault
scheduleIdYesThe schedule ID to delete.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true. The description adds useful behavioral context by stating that the operation 'Stops all future posts from this schedule,' which is a concrete consequence not present in the schema or annotations.

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

Conciseness5/5

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

The description is compact and front-loaded with the core action and target. Each sentence adds value: what it does, the behavioral consequence, and when to use it. No filler or redundancy.

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 single-parameter deletion tool with annotations already covering the destructive and idempotent nature, the description is complete. It names the parameter, describes the effect, and gives usage guidance. No output schema is needed for such a simple operation.

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?

The schema covers 100% of the parameters, including a description for scheduleId. The tool description does not add much semantic detail beyond what the schema already provides, so a baseline score is appropriate.

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 ('Delete') and the target resource ('recurring schedule') and specifies that deletion is by ID. It also distinguishes itself from sibling schedule tools like create_schedule and update_schedule by focusing on deletion.

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 explicitly says when to use the tool: 'Use this when the user wants to stop and delete a recurring schedule.' It does not mention when not to use it or name alternatives, but the usage context is clear enough for accurate selection.

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

finalize_media_uploadFinalize media uploadA

Record an uploaded R2 object as a media file after the browser PUT (pairs with create_media_upload; used by the composer UI). Use this when a presigned direct upload finished and the file must be registered (advanced).

ParametersJSON Schema
NameRequiredDescriptionDefault
r2KeyYesThe r2Key returned by create_media_upload.
widthNoPixel width (images/video).
heightNoPixel height (images/video).
durationNoDuration in seconds (video).
fileNameYesOriginal file name.
mimeTypeYesFile MIME type.
sizeBytesYesFile size in bytes.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already signal this is a mutating operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds useful lifecycle context about the browser PUT and composer UI, but it does not disclose potential side effects, idempotency, required auth, or what the response contains, which would further help an agent reason about behavior.

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

Conciseness5/5

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

Two sentences, front-loaded with the primary action and lifecycle context, then the usage condition. Every clause earns its place with no redundancy or filler.

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

Completeness3/5

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

The tool is a mutation with no output schema, and the description covers the essential precondition and workflow context. However, it does not specify what the call returns (e.g., a media ID or status), which is a meaningful gap when no output schema is present. For an advanced internal composer tool, the existing guidance is serviceable but not fully complete.

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 100%, so the schema already explains all seven parameters including that r2Key comes from create_media_upload. The description offers no additional parameter-level meaning beyond the schema, so the baseline 3 is appropriate.

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 ('Record an uploaded R2 object as a media file') and provides sequencing context that distinguishes it from create_media_upload. It positions this as the finalization step after a browser PUT, making the tool's role unambiguous.

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 explicitly says when to use this tool: 'Use this when a presigned direct upload finished and the file must be registered.' It also notes the pairing with create_media_upload and marks the tool as advanced, giving meaningful routing context even though it doesn't enumerate exclusions or alternatives in detail.

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

get_analyticsGet analyticsA
Read-only

Get an analytics summary for a date range. Returns total posts, status breakdown (published, failed, scheduled), per-platform stats, and daily post counts. Use this when the user asks how their content performed overall, across channels and over a date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd date in ISO format (e.g. 2025-01-31).
fromYesStart date in ISO format (e.g. 2025-01-01).

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark this read-only and non-destructive; the description adds the concrete return shape (total posts, status breakdown, per-platform stats, daily counts), which is useful because there is no output schema. No hidden side effects or performance caveats are disclosed, but none are strongly expected for a read-only analytics summary.

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

Conciseness5/5

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

Two sentences with no filler; the action and scope are stated first, then the return payload and usage context. Every sentence earns its place.

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

Completeness4/5

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

For a simple read-only tool with two documented params, the description covers what it returns and when to use it. It could be more complete by distinguishing from get_post_metrics or view_analytics, but nothing required for a correct call is missing.

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 covers both parameters 100%, and the description only restates that it is a date range. The schema's ISO format examples carry the semantic weight, so the description adds no parameter-level detail beyond the baseline.

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

Purpose4/5

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

Names a specific resource ('analytics summary') and scope (date range, overall across channels) with an explicit verb. It does not name or contrast siblings such as get_post_metrics or view_analytics, so differentiation relies on the 'overall' phrasing.

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

Usage Guidelines4/5

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

Gives a clear trigger condition: when the user asks about overall content performance across channels over a date range. It does not state exclusions or explicitly name alternatives, but the intended context is unambiguous.

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

get_channel_healthGet channel healthA
Read-only

Check the health status of a connected channel. Returns token validity, connection status, and any issues. Use this when the user asks whether a channel's connection/token is healthy.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelIdYesThe channel ID to check health for.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds useful behavioral context by specifying exactly what health information is returned, including token validity, connection status, and any issues.

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

Conciseness5/5

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

Two short sentences with no filler. The primary purpose is stated first, the return payload comes second, and the usage trigger is front-loaded and actionable.

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?

The tool has one parameter, which is fully documented in the schema, and the description explains both purpose and return contents. No output schema exists, but the description adequately covers what the agent needs to know for correct invocation.

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 coverage is 100% because channelId has a clear description. The tool description does not add meaning beyond the schema, but the schema already carries the full semantic burden, so the baseline 3 applies.

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 states a specific verb and resource: check the health status of a connected channel. It also names what it returns (token validity, connection status, issues), which distinguishes it clearly from sibling tools like list_channels or get_channel_options.

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

Usage Guidelines5/5

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

Explicitly states the triggering condition: 'Use this when the user asks whether a channel's connection/token is healthy.' This gives an agent clear guidance on when to select this tool over alternatives.

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

get_channel_optionsGet channel post-type optionsA
Read-only

Get platform-specific options for a channel (e.g. available post types, character limits, media requirements). Use this when you need a platform's valid post types before creating a post for it.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelIdYesThe channel ID to get options for.

TDQS

A4/5.0
Behavior3/5

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

The annotations already convey that this is a read-only, non-destructive operation, so the description does not need to repeat that. The description adds useful context about what the options contain (post types, limits, media requirements) but does not disclose output format, error behavior, or what happens for an invalid channelId. This is acceptable but not rich behavioral disclosure.

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

Conciseness5/5

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

The description is two sentences long, front-loads the core function in the first sentence, and includes a clear usage cue in the second. Every clause adds value without redundancy or filler.

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

Completeness4/5

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

For a simple read-only tool with one well-documented parameter and no output schema, the description is largely complete: it identifies the resource, the context, and examples of return content. It could be slightly stronger by noting that the result is a list or object of options, but the current coverage is adequate for an agent to use the tool correctly.

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 100% and the single parameter, channelId, is already described as 'The channel ID to get options for.' The description reinforces that options are platform-specific but does not add significant new meaning beyond the schema. A baseline of 3 is appropriate.

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 a specific verb ('Get'), a resource ('platform-specific options for a channel'), and concrete examples (post types, character limits, media requirements). It also ties the purpose to a concrete workflow step, which helps an agent distinguish it from sibling tools like get_channel_health or list_channels.

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 explicitly says to use this tool when you need a platform's valid post types before creating a post, providing clear when-to-use guidance. It does not explicitly name alternatives or state when not to use it, so it stops short of a full 5.

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

get_mediaGet media fileA
Read-only

Get details of a single media file by ID. Returns metadata, URL, dimensions, and labels. Use this when the user references one specific media file by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
mediaIdYesThe media file ID.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so no safety ambiguity exists. The description adds useful behavioral context by naming exactly what will be returned (metadata, URL, dimensions, labels), which matters because there is no output schema.

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

Conciseness5/5

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

Two sentences, no filler. The action and return summary are front-loaded, and the usage condition is tucked into a short second sentence. Every word earns its place.

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

Completeness4/5

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

For a single-parameter read-only getter, this is nearly complete: it identifies the input, describes the output, and gives a usage trigger. It does not cover error cases like 'not found,' but those are not essential for tool selection and the annotations handle safety context.

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 coverage is 100% and mediaId is already described as 'The media file ID.' The description reinforces the ID-based lookup but does not add new semantic details such as format, uniqueness, or lookup behavior beyond the schema.

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

Purpose5/5

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

States a specific verb ('get'), resource ('single media file'), and selection key ('by ID'), and enumerates returned fields (metadata, URL, dimensions, labels). This clearly distinguishes it from sibling tools like list_media, delete_media, and upload_media.

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?

Provides an explicit when-to-use trigger: 'when the user references one specific media file by ID.' It does not name sibling alternatives or state when not to use it, but the condition is clear enough for straightforward selection.

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

get_postGet postA
Read-only

Get a single post by ID with full details including platform statuses, labels, media files, recurring schedule info, and metrics. Use this when the user references one specific post by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
postIdYesThe post ID.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true and destructiveHint=false, so the safety profile is established. The description adds useful context about the response contents, but doesn't disclose operational behavior such as error handling, permission requirements, or rate limits. This is acceptable for a simple read-by-ID operation.

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

Conciseness5/5

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

The description is two efficient sentences with no filler. The core action and key output contents are front-loaded, and the usage guidance is a separate, clear second sentence.

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 read-only tool with one required parameter, full schema documentation, annotations, and a description that enumerates the response contents, everything an agent needs to invoke it correctly is present. There is no output schema, but the description compensates by summarizing the response scope.

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?

The schema fully documents the single parameter postId with 'The post ID.' Since schema description coverage is 100%, the description doesn't need to add parameter details, and it doesn't. This aligns with the baseline for full 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 a specific action—'Get a single post by ID'—and defines the scope by listing the types of details returned (platform statuses, labels, media files, recurring schedule info, metrics). This distinguishes it from sibling tools like list_posts and get_post_metrics.

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?

It explicitly says to use this tool 'when the user references one specific post by its ID,' which gives the agent a clear trigger condition. It doesn't explicitly contrast with sibling tools like get_post_metrics, but the guidance is sufficient for correct selection.

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

get_post_metricsGet post metricsA
Read-only

Get engagement metrics for a published post. Returns likes, comments, shares, impressions, and other platform-specific metrics. IMPORTANT: every platform entry carries metricsSupported and supportedMetrics — a metric key NOT in supportedMetrics is stored as 0 because that platform's API has no such field, so report it as unavailable rather than as zero. X reports impressions/likes/comments/shares/saves (bookmarks); Bluesky and Mastodon report no impressions; Pinterest reports no reach; YouTube reports no shares or reach; Reddit reports likes (score), comments and shares (crossposts); Discord reports likes (reaction counts) and comments (thread replies); Google Business, Telegram, Tumblr and LinkedIn personal profiles report nothing readable at all. Each platform entry also carries linkClicks (summed in totals.linkClicks): clicks on bulkpubli.sh short links in this post, measured by BulkPublish rather than reported by the platform. It sits OUTSIDE latest and is distinct from the platform's own clicks — one visit can register in both, so never add them together. It is therefore available even for the platforms that report nothing, and supportedMetrics always includes it. Bot and link-preview traffic is excluded; it is 0 for organizations without Link Tracking enabled. Use this when the user asks how a specific post performed (likes, views, engagement).

ParametersJSON Schema
NameRequiredDescriptionDefault
postIdYesThe post ID to get metrics for.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already mark the tool as read-only and non-destructive, and the description adds substantial behavioral context: unsupported metrics are stored as 0 and must be reported as unavailable, platform-specific metric availability is detailed, linkClicks semantics are clarified, and bot traffic exclusion is mentioned. 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 long but dense with necessary caveats about platform-specific metrics and linkClicks semantics. It front-loads the core purpose and then explains behavioral nuances. Some sentences could be tightened, but the detail earns its place.

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

Completeness4/5

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

Given the lack of an output schema and the complexity of the return data, the description explains key return fields, platform variations, zero-value semantics, and linkClicks handling. It does not fully describe the root response structure, but enough context is provided for correct invocation and interpretation.

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 coverage is 100% for the single postId parameter, so the schema already documents it. The description adds context by referring to 'a published post,' but it does not further explain parameter format or edge cases. Baseline 3 is appropriate.

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

Purpose4/5

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

Description clearly identifies the operation: getting engagement metrics for a published post and lists the returned metric types. It does not explicitly differentiate from siblings like get_post or get_analytics, but the 'use this when' clause gives a clear functional boundary.

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?

Explicitly states when to use the tool: 'Use this when the user asks how a specific post performed (likes, views, engagement).' It does not enumerate alternatives or exclusions, but the guidance is sufficient for a targeted metrics lookup.

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

get_queue_slotGet next queue slotA
Read-only

Get the organization's next available queue slot. Useful for finding the next optimal scheduling time. Use this when the user asks when the next available scheduling slot is.

ParametersJSON Schema
NameRequiredDescriptionDefault
timezoneNoIANA timezone for the slot calculation (e.g. "America/New_York"). Defaults to UTC.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds minimal behavioral context (e.g., that it returns the next available slot and is tied to scheduling), but does not disclose details like whether it respects existing schedule conflicts or how current time is determined. With annotations covering the main traits, a 3 is appropriate.

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

Conciseness5/5

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

The description is two sentences, directly front-loaded with the core purpose, followed by a usage trigger. There is no filler or repetition. Every sentence earns its place.

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

Completeness4/5

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

For a simple read-only tool with one optional parameter and no output schema, the description covers what it does and when to use it. It could optionally mention what the return value represents (e.g., a timestamp), but the absence is minor given the tool's simplicity. Overall, an agent can infer how to call it correctly.

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 100%: the timezone parameter is fully documented in the schema. The description does not add any parameter semantics beyond what's already in the schema. Baseline 3 is correct when the schema handles parameter documentation.

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 states a specific verb and resource: 'Get the organization's next available queue slot.' It also clarifies the intent ('finding the next optimal scheduling time') which distinguishes it from schedule management tools like create_schedule or list_schedules. The purpose is unambiguous and actionable.

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 explicitly says when to use it: 'Use this when the user asks when the next available scheduling slot is.' This provides clear context. It does not mention alternatives, but no direct sibling exists for this operation, so the omission is acceptable. No exclusions or when-not-to-use is given, but the explicit trigger is sufficient.

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

get_quota_usageGet quota usageA
Read-only

Check current account usage. Returns daily/monthly post counts, scheduled post counts, channel counts, and media storage usage. Also returns channelSlots — purchased extra channel slots ($2.99/month each, available on every plan; a seat-based subscription whose unused slots are auto-canceled before renewal): each active slot raises the effective total channel limit by one and allows one channel above the per-platform cap; per-slot autoRenews says whether it renews or lapses at expiresAt. Use this when the user asks about plan limits or current usage.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description goes beyond that by explaining the channelSlots semantics in detail (pricing, auto-cancelation, effect on channel limits, autoRenews field), which is valuable behavioral/domain context not present in the schema or annotations. It does not disclose any contradictions.

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 three sentences, front-loading the core purpose and then detailing the return fields. The detailed channelSlots explanation is dense but earns its place given the complexity of that field. It is appropriately sized for the information conveyed.

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

Completeness4/5

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

For a zero-parameter, read-only tool with no output schema, the description covers the tool's purpose, the main return categories, the nuanced channelSlots behavior, and the user-intent trigger. Minor omissions like exact response formatting or possible errors are acceptable given the simplicity and the annotations covering safety.

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

Parameters4/5

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

The input schema has zero properties, so parameter semantics are moot. Per the baseline for 0 parameters, a score of 4 is appropriate; the description correctly implies no arguments are required.

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

Purpose4/5

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

The description opens with a clear verb-resource pair ('Check current account usage') and enumerates the specific data returned (daily/monthly post counts, scheduled posts, channels, media storage, channelSlots). It is unambiguous about what the tool reports, though it does not explicitly differentiate it from the sibling 'view_quota'.

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 final sentence explicitly states when to use the tool: 'Use this when the user asks about plan limits or current usage.' This gives clear context, though it does not mention alternatives or when not to use it, so it falls short of a 5.

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

list_channelsList channelsA
Read-only

List all connected social media channels (X/Twitter, Instagram, LinkedIn, Facebook, TikTok, etc.). Returns channel ID, platform, account name, and token status. Use this when the user wants to see which social accounts are connected.

ParametersJSON Schema
NameRequiredDescriptionDefault
activeNoFilter by active status. Defaults to true (only active channels).

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark the operation read-only and non-destructive. The description adds useful behavior context by stating the returned fields (channel ID, platform, account name, token status), which is especially valuable since no output schema is provided. It does not fully reconcile 'all connected' with the active filter defaulting to true, but that is documented in the parameter schema.

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

Conciseness5/5

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

Three tight sentences: what it lists, what it returns, and when to use it. There is no filler, and the action/resource are front-loaded.

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

Completeness4/5

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

For a one-parameter, read-only list tool with no output schema, the description is nearly complete: it states scope, return fields, and a use case. The only minor gap is not spelling out the active-channel default behavior in the description, but that information is present in the input schema.

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 100% and the active parameter already clearly states filtering behavior and default. The tool description adds nothing about the parameter, so it does not go beyond the schema's documentation.

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

Purpose4/5

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

The description names a specific action ('List') and resource ('connected social media channels'), enumerates platforms, and lists return fields, so an agent can tell this is the channel-listing tool. It does not explicitly contrast with the similar-looking view_channels sibling, so it falls 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.

Usage Guidelines4/5

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

The description provides a clear trigger: 'Use this when the user wants to see which social accounts are connected.' It gives no exclusions or alternative-tool routing, but the context is enough for basic selection.

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

list_channel_setsList channel setsA
Read-only

List saved channel sets — named channel groupings for one-click multi-channel targeting. Returns id, name, and channelIds for each set, ordered by name. Use this when the user wants their saved channel groups (channel sets).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description adds behavior beyond the readOnlyHint/destructiveHint annotations: it reveals the payload fields ('id, name, and channelIds') and ordering ('ordered by name'). For a stateless read-only list with no parameters, this is sufficient transparency; it doesn't discuss pagination or errors, but those are relatively minor.

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

Conciseness5/5

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

Three short sentences each add information: what the resource is, what the response contains, and when to choose the tool. No filler or redundancy.

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?

A zero-parameter read-only list is fully specified by the combination of annotations, the empty schema, and a description that states return shape and ordering. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

There are zero parameters, and the schema coverage is 100%, so the baseline of 4 applies. The description reinforces that the tool takes no inputs simply by being a list operation with no param discussion, and no additional parameter guidance is needed.

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 opens with a specific verb and resource — 'List saved channel sets' — and defines the resource as 'channel groupings for one-click multi-channel targeting.' It also names the return fields (id, name, and channelIds), which distinguishes it from list_channels and other siblings.

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?

'Use this when the user wants their saved channel groups (channel sets)' gives a clear, actionable trigger condition. It does not mention when not to use it or name alternatives like list_channels, so it stops short of a full 5.

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

list_labelsList labelsA
Read-only

List all labels available for tagging posts and media. Use this when the user wants their post labels/tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by label type: "post" or "media". Returns all if omitted.

TDQS

A4/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the tool lists all labels available for posts and media, but does not add deeper behavioral details such as pagination, ordering, or response shape.

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

Conciseness5/5

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

The description is two concise sentences with no fluff. The core purpose is front-loaded, and the usage guidance is brief but useful.

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

Completeness4/5

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

For a simple read-only list tool with one optional, fully documented parameter and readOnly annotations, the description is largely sufficient. It lacks an explicit statement of return value shape, but the phrase 'list all labels' implicitly conveys the expected result.

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?

The input schema fully documents the only parameter, 'type,' including its enum values and the note that omitting it returns all labels. The description does not add parameter-specific 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.

Purpose5/5

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

The description clearly states a specific verb and resource: 'List all labels available for tagging posts and media.' It also gives a concrete user-intent cue, 'Use this when the user wants their post labels/tags,' which helps distinguish this from sibling list_* tools like list_schedules or list_channels.

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 a clear usage cue: use it when the user wants their post labels/tags. However, it does not explicitly mention alternatives or when not to use it, though no direct alternative for listing labels exists among the siblings.

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

list_mediaList mediaA
Read-only

List uploaded media files with optional search and pagination. Returns file metadata including URLs, dimensions, and labels. Use this when the user wants a list of their uploaded media files.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1).
typeNoFilter by media kind (matches the MIME type prefix). The response's `total` counts matches across all pages.
limitNoResults per page (default 20, max 100).
searchNoSearch by filename.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds value by noting the list returns metadata, supports search/pagination, and is scoped to uploaded media. It does not disclose additional behavioral details such as pagination shape or auth requirements, but the read-only nature is already covered by annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action, no filler. The first sentence identifies the operation and scope; the second sentence provides return-value highlights and a clear usage condition. Every sentence earns its place.

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

Completeness4/5

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

Given there is no output schema, the description compensates by naming the return metadata (URLs, dimensions, labels) and mentioning search/pagination. It is complete enough for a simple read-only list operation, though it could add slightly more detail about the paginated response structure or total count behavior, which is only present in the schema's type parameter description.

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 100%, so the parameters (page, type, limit, search) are already well documented in the schema. The description reinforces that search and pagination are optional, but it does not add meaning beyond the schema—it just repeats the concepts already present.

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 uses a specific verb ('List'), identifies the resource ('uploaded media files'), and differentiates itself from sibling tools like get_media (single fetch), upload_media, and delete_media by framing the operation as a filtered, paginated list. It also names the key return fields, so an agent knows exactly what kind of result to expect.

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 explicitly states when to use the tool: 'Use this when the user wants a list of their uploaded media files.' This provides clear context, though it does not explicitly name alternatives or say when not to use it (e.g., for retrieving a single file, use get_media instead).

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

list_platformsList platformsA
Read-onlyIdempotent

List every social platform BulkPublish supports and whether it is currently available. Check this before telling a user they can connect a platform or scheduling a post to one: a platform in state 'off' rejects post creation with a 403 PLATFORM_DISABLED error and holds any already-scheduled posts until it is re-enabled, and one in state 'connect_off' cannot accept new connections although existing channels keep publishing. Disabled platforms are still listed, with enabled=false and a reason. A platform may also carry a 'variants' object keyed by channel accountType for sub-platforms gated on their own: LinkedIn reports variants.organization for company pages (a separate LinkedIn app with its own review), while the platform-level state covers personal profiles — so pages can be paused while personal-profile posting is live. A variant is never more permissive than its parent, and when a variant blocks a write the 403 PLATFORM_DISABLED error carries an accountType field naming it. Use this when the user asks which platforms are supported or available, or a connect/publish attempt failed with PLATFORM_DISABLED.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds substantial behavioral context beyond that: it explains platform states ('off', 'connect_off'), their effects on post creation and connections, the fact that disabled platforms remain listed, and the variant gating mechanism (e.g., LinkedIn organization pages). It also mentions error codes and conditions. No contradiction with annotations; this is high-value transparency.

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 longer than typical but earns its length because it covers nuanced platform states, error behaviors, and variant handling. It front-loads the core purpose and usage, then elaborates on edge cases. While a bit dense, every sentence adds essential information for correct tool selection and use. It is well-organized and not padded.

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

Completeness4/5

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

Given the tool's moderate complexity and the absence of an output schema, the description adequately covers the main contextual aspects: what states exist, what errors to expect, and what fields are present (enabled, reason, variants). It does not provide a full return structure, but it hints at the keys. For an agent needing to decide when to call and interpret results, this is sufficient, though a sample response could improve it.

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

Parameters4/5

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

The tool has zero parameters, and the schema coverage is 100% (since there are no properties to document). According to the rubric, a baseline of 4 applies for 0 params. The description correctly does not attempt to describe parameters because none exist; it focuses on behavior and return context. No additional parameter semantics are needed.

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 tool's purpose: 'List every social platform BulkPublish supports and whether it is currently available.' It uses a specific verb ('list') and resource ('social platform'), and explicitly mentions the key data ('availability'). This distinguishes it from sibling tools like list_channels and list_rss_feeds, which deal with different resource types. No ambiguity.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'Check this before telling a user they can connect a platform or scheduling a post to one' and 'Use this when the user asks which platforms are supported or available, or a connect/publish attempt failed with PLATFORM_DISABLED.' It also explains consequences of states (off, connect_off) and error conditions, leaving no doubt about the appropriate scenarios.

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

list_postsList postsA
Read-only

List posts with optional filters for status, search text, date range, channel, and label. Returns paginated results with platform statuses and metrics, ordered newest-first by publishedAt if the post is live, else scheduledAt, else createdAt. Use this when the user wants to browse, filter, or check the status of existing posts as raw data (not the visual dashboard).

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoFilter posts created on or before this ISO date.
fromNoFilter posts created on or after this ISO date.
pageNoPage number (default 1).
limitNoResults per page (default 20, max 500).
searchNoSearch post content (case-insensitive).
statusNoFilter by post status.
labelIdNoFilter by label ID.
channelIdNoFilter by channel ID.
scheduledToNoFilter posts scheduled on or before this ISO date.
scheduledFromNoFilter posts scheduled on or after this ISO date.
approvalStatusNoFilter by team approval state (e.g. 'pending' for the approval queue).

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already establish that the tool is read-only and non-destructive. The description adds valuable behavioral context by disclosing pagination, the presence of platform statuses and metrics, and the precise sort order using publishedAt, scheduledAt, and createdAt.

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

Conciseness5/5

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

The description is compact and front-loaded, getting straight to the verb, resource, and filters in the first sentence. The second sentence adds ordering and usage guidance with no wasted words.

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

Completeness4/5

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

For an 11-parameter read-only list tool with no output schema, the description adequately covers filtering, pagination, ordering, and result content. It omits a couple of filter dimensions like approvalStatus, but the schema covers those, so the description is sufficient for correct invocation.

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 100%, so the baseline is 3. The description summarizes the filter categories and notes optionality, but it does not add meaning beyond what the input schema already documents for each parameter.

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 uses a specific verb and resource ('List posts'), enumerates the filter dimensions, and clearly explains the output includes paginated results, platform statuses, and metrics. It also distinguishes itself from the visual dashboard, helping the agent separate it from sibling view_posts.

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 states an explicit use case: 'when the user wants to browse, filter, or check the status of existing posts as raw data'. It also adds an exclusion, 'not the visual dashboard', which implies a dashboard-oriented sibling tool without naming one explicitly.

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

list_rss_feedsList RSS feedsA
Read-only

List RSS autopost feeds — RSS/Atom feeds polled every 15 minutes whose new items automatically become posts. Returns name, feedUrl, channelIds, mode, fieldMapping (how items are rendered into posts; null = default), enabled, lastCheckedAt, and lastError for each feed. Use this when the user wants their RSS autopost feeds.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and destructiveHint, and the description adds meaningful behavioral context: feeds are polled every 15 minutes and new items automatically become posts. It also discloses the returned fields, giving the agent a clear picture of what the tool does beyond its safety profile.

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

Conciseness5/5

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

The description is compact and front-loaded: the first sentence defines the tool's core function and behavior, and the second lists outputs and usage context. Every sentence contributes useful information without redundancy.

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?

With no parameters, no output schema, and read-only annotations, the description fully covers what an agent needs to know: what the tool returns, how the feeds behave, and when to use it. Nothing critical is missing.

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

Parameters4/5

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

The tool has zero parameters, so there is no schema burden for the description to carry. The description adds no parameter-level detail because none is needed; the baseline of 4 is appropriate.

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 tool lists RSS autopost feeds, defines what those are, and specifies the exact return fields. This unambiguously distinguishes it from sibling tools like create_rss_feed, update_rss_feed, and delete_rss_feed.

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 explicitly says 'Use this when the user wants their RSS autopost feeds,' giving clear context for when to invoke it. It does not enumerate alternatives or exclusions, but the no-parameter read-only nature makes such guidance less critical.

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

list_schedulesList recurring schedulesA
Read-only

List all recurring post schedules. Returns schedule name, frequency/timeOfDay timing fields, target channels, active status, and nextRunAt. These schedules also appear in the web app: managed on the Repeat Posts page, with upcoming runs shown on the Calendar. Use this when the user wants their recurring posting schedules.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover readOnlyHint=true, openWorldHint=false, and destructiveHint=false. The description adds useful behavioral context beyond annotations by enumerating the returned fields and noting that schedules also appear in the Repeat Posts page and Calendar. This helps an agent know exactly what to expect from the call.

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

Conciseness5/5

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

Three short sentences, each earning its place: the action, the return payload, and the web-app/usage context. No filler or redundancy.

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 zero-parameter read-only list tool with no output schema, the description is complete: it states the scope, the returned fields, and the context in which to use it. Nothing necessary for correct invocation is missing.

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

Parameters4/5

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

The tool has zero parameters, so there is no parameter documentation burden. The description still clarifies that the operation lists 'all' schedules, which is useful given the absence of filters.

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 uses a specific verb ('List') and resource ('recurring post schedules'), and clearly differentiates this from schedule mutation tools like create_schedule, update_schedule, and delete_schedule. It also specifies the exact fields returned, leaving no ambiguity about the tool's purpose.

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 gives an explicit invocation context: 'Use this when the user wants their recurring posting schedules.' It also adds helpful context about the web app equivalents. It does not enumerate when-not-to-use cases or name alternative tools, but for a straightforward read-only list this is adequate.

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

publish_postPublish post nowA

Publish a draft or scheduled post immediately. The post will be queued for publishing to all its target channels. Requires a role with post:publish — contributors get 403 APPROVAL_REQUIRED and must submit the post for approval instead (create/update with requestApproval, then a teammate approves). Publishing a pending/rejected post as an approver implicitly approves it. Use this when the user wants to publish an existing draft or scheduled post right now.

ParametersJSON Schema
NameRequiredDescriptionDefault
postIdYesThe post ID to publish.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond annotations, it reveals that publishing is queued to all target channels, requires the post:publish role, and that approver-publishing a pending/rejected post implicitly approves it. These side effects and permission outcomes are behavior an agent couldn't infer from readOnlyHint=false/destructiveHint=false alone.

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

Conciseness5/5

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

Four sentences, all high-signal: core action, queue behavior, auth/alternative, and when-to-use. The main effect is front-loaded; no filler.

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

Completeness4/5

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

Covers the action, side effect, permissions, failure mode for contributors, and the edge case of pending/rejected posts. It omits details like invalid-state errors or return payload, but with a single parameter and no output schema these are not critical gaps.

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 fully documents postId with a clear description and 100% coverage, so baseline is 3. The description adds contextual color by saying the post is a draft or scheduled post, but adds no extra constraints or format details.

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 opens with a concrete action — 'Publish a draft or scheduled post immediately' — and specifies the resource and timing. It further distinguishes itself by explaining the approval path (contributors must submit for approval) and that publishing as an approver implicitly approves, separating it from approve_post.

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

Usage Guidelines5/5

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

It explicitly states the intended trigger: 'Use this when the user wants to publish an existing draft or scheduled post right now.' It also gives when-not: contributors without post:publish get 403 and should use create/update with requestApproval instead.

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

publish_storyPublish storyA

Publish a post as a story on Facebook or Instagram. Use this when the user wants to post an Instagram/Facebook story.

ParametersJSON Schema
NameRequiredDescriptionDefault
postIdYesThe post ID to publish as a story.
platformYesPlatform to publish the story on.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already communicate readOnlyHint=false and destructiveHint=false, so the agent knows this is a mutating but non-destructive operation. The description adds the story-specific platform context, but does not disclose further behavior such as whether the post is published immediately, status changes, or side effects. 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 only two short sentences, front-loading the core purpose ('Publish a post as a story') before adding a usage hint. The second sentence is partly redundant with the first, but it does earn its place by explicitly stating when to use the tool.

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

Completeness4/5

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

Given the tool's low complexity, two fully documented parameters, and annotations covering the safety profile, the description provides enough context for an agent to invoke it correctly. It does not explain return values or prerequisites, but these are less critical for a simple publish action.

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?

The input schema fully documents both parameters (postId and platform) with 100% coverage, including the enum for platform. The description's mention of 'Facebook or Instagram' merely restates the schema and adds no extra parameter-level meaning, so the baseline 3 applies.

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 states a specific verb ('Publish') and resource ('a post as a story on Facebook or Instagram'), making the tool's function immediately clear. It also naturally distinguishes from sibling tools like publish_post by focusing on the story format and platforms.

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 second sentence explicitly says 'Use this when the user wants to post an Instagram/Facebook story,' giving a clear trigger condition for selecting the tool. However, it does not mention alternatives or when not to use it, so it stops short of full routing guidance.

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

reject_postReject pending postA

Reject a post awaiting team approval. Requires a role with post:approve. The post returns to draft with approvalStatus 'rejected' and the optional reason; the author is notified and can edit + reschedule to resubmit for approval. Errors: 400 if the post is not awaiting approval, 403 if the role lacks post:approve, 404 if not found. Use this when the user (an owner/admin/approver) wants to reject a post awaiting team approval, optionally with a reason.

ParametersJSON Schema
NameRequiredDescriptionDefault
postIdYesThe post ID to reject.
reasonNoOptional reason (max 2000 chars). Shown to the author (in-app notification + on the post).

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false and destructiveHint=false, so the description carries the behavioral disclosure burden. It does so thoroughly: the post returns to draft with approvalStatus 'rejected', the author is notified and can resubmit, and specific error codes for 400/403/404 are given. 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 first sentence states the core purpose and subsequent sentences cover permission, post-conditions, errors, and usage context. Slightly longer than strictly necessary due to enumerating error codes, but each sentence contributes meaningful information and the key facts are front-loaded.

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 mutation tool with no output schema, the description fully equips an agent: what happens to the post, who is affected, what permissions are needed, and all likely failure modes. No critical call-disambiguation information is missing relative to sibling tools.

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 100% and both postId and reason are already documented. The description adds context that the reason is shown to the author, but this is also in the schema's reason field. The description does not need to compensate for missing parameter info.

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

Purpose5/5

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

States a specific verb and resource ('Reject a post awaiting team approval') and names the state the post must be in. The action is clearly distinguished from sibling approve_post and delete_post by focusing on the 'reject' workflow.

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?

Explicitly provides the trigger 'Use this when the user (an owner/admin/approver) wants to reject a post awaiting team approval' and includes the required role post:approve. It does not name the alternative approve_post or say when not to use it, but the intended context is unambiguous.

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

retry_postRetry failed postA

Retry publishing a failed or partially failed post. Only retries the platforms that failed, not the ones that already succeeded. Platforms in status 'unconfirmed' (the publish request may have reached the platform but its response was lost — the post may already be live) are NOT retried unless republish is true; if the post has unconfirmed platforms and no failed ones, the call fails with a 400 and code UNCONFIRMED_REQUIRES_REPUBLISH — ask the user to check the account on the platform, and only pass republish: true after they confirm the post is not live. Use this when a post failed on some platforms and the user wants to retry just those.

ParametersJSON Schema
NameRequiredDescriptionDefault
postIdYesThe post ID to retry.
republishNoExplicit opt-in to also retry platforms in status 'unconfirmed'. Their publish may have already gone through, so this can DUPLICATE the post — only pass true after the user has checked the account and confirmed the post is not live. Defaults to false.

TDQS

A4.6/5.0
Behavior5/5

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

The description is unusually transparent: it explains partial-failure retry behavior, the special 'unconfirmed' status trap, the exact 400 error code, the user-confirmation workflow, and the risk of duplicating posts with republish. Annotations only provide readOnlyHint and destructiveHint, so this behavioral context adds substantial value beyond structured fields.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then methodically addresses scope, the unconfirmed edge case, the error code, and the practical user action. Every sentence carries operational weight; no filler or restatement of the schema is present.

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

Completeness4/5

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

The tricky partial-failure and unconfirmed semantics are fully covered, as is the actionable error path. With no output schema, the only minor gap is that the success/response shape (e.g., per-platform results) is not characterized, but this is secondary for a retry operation.

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

Parameters4/5

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

Schema coverage is 100% and both parameters already have solid descriptions. The tool description enriches the republish parameter by tying it to the UNCONFIRMED_REQUIRES_REPUBLISH error and the user-confirmation process, which tells the agent when the boolean must be set. This pushes it above the baseline 3.

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?

Description opens with 'Retry publishing a failed or partially failed post' – a specific verb and resource that goes beyond the title. It clarifies scope by stating only failed platforms are retried, distinguishing it from publish_post and other sibling publishing tools without needing to name them.

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

Usage Guidelines4/5

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

The closing sentence provides explicit when-to-use guidance: 'Use this when a post failed on some platforms and the user wants to retry just those.' It also gives a when-not via the 400 UNCONFIRMED_REQUIRES_REPUBLISH path, instructing the agent to ask the user to verify the platform before passing republish. It stops short of naming alternative sibling tools explicitly, so not a 5.

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

search_mentionsSearch mentionsA
Read-only

Search for @mention suggestions on a channel. Useful for finding users/pages to mention in posts. Use this when you need @mention suggestions from a connected channel while drafting a post.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query for the mention lookup.
channelIdYesThe channel ID to search mentions on.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds meaningful context beyond these: that it searches a 'connected channel' (external platform data, reinforcing openWorldHint) and serves the drafting workflow. No contradictions 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 core function is front-loaded in the first sentence, which is ideal. The remaining two sentences provide workflow context, though 'Useful for finding users/pages to mention in posts' and 'Use this when you need @mention suggestions from a connected channel while drafting a post' are partially redundant and could be merged. Still, nothing is wasted.

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

Completeness4/5

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

For a simple tool (2 required parameters, no nested objects, no enums) with annotations covering the safety profile and a fully documented schema, the description is adequately complete. It clarifies the use case and scope. Minor omissions like result format and rate limits are acceptable given the tool's simplicity and read-only nature.

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 100%, so both parameters are already fully documented in the schema ('Search query for the mention lookup' and 'The channel ID to search mentions on'). The description echoes 'on a channel' but adds no format, syntax, or behavioral detail beyond what the schema provides, so baseline 3 is appropriate.

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 opens with a specific verb+resource+scope construction: 'Search for @mention suggestions on a channel.' This precisely identifies what the tool does and naturally distinguishes it from all siblings, none of which perform mention lookup. The '@mention' detail makes the resource unambiguous.

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 gives explicit when-to-use guidance: 'Use this when you need @mention suggestions from a connected channel while drafting a post.' This anchors the tool to a concrete workflow. It stops short of a 5 because it names no alternatives or explicit when-not-to-use conditions, though no competing sibling exists.

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

update_channel_setUpdate channel setA
Idempotent

Update a channel set's name and/or channels (partial update — at least one field is required). A name that collides with another set fails with a 409, code DUPLICATE_NAME. Use this when the user wants to rename a channel set or change its channels.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew set name (max 100 chars, unique per organization).
setIdYesThe channel set ID to update.
channelIdsNoReplacement channel IDs (at least 1).

TDQS

A4.4/5.0
Behavior4/5

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

The description adds useful behavioral context beyond the annotations: partial-update semantics, the 'at least one field is required' constraint, and a specific 409 DUPLICATE_NAME error case. The idempotentHint is already annotated, and the description does not contradict it.

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

Conciseness5/5

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

The description is two sentences long, with the core operation and partial-update requirement front-loaded. The error condition and usage guidance follow efficiently, and every sentence adds information without redundancy.

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

Completeness4/5

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

For a simple, three-parameter mutation tool, the description covers the essential invocation details: partial update, required-field condition, collision behavior, and intended usage. There is no output schema, and the description does not mention the return value or behavior for a nonexistent setId, which is a minor gap.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying that at least one of name or channelIds must be supplied, even though the schema does not enforce this, and by reinforcing the replacement semantics of channelIds as 'change its channels.'

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 a specific action ('Update a channel set's name and/or channels') and identifies it as a partial update. This distinguishes it from sibling tools like create_channel_set, delete_channel_set, and list_channel_sets without ambiguity.

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 explicitly says when to use the tool: 'Use this when the user wants to rename a channel set or change its channels.' It provides clear context, though it does not explicitly mention alternatives or exclusion cases, which prevents a 5.

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

update_labelUpdate labelA
Idempotent

Update an existing label's name or color. Use this when the user wants to rename or recolor a label.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew label name.
colorNoNew hex color code (e.g. "#ef4444").
labelIdYesThe label ID to update.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false (mutation), idempotentHint=true, and destructiveHint=false. The description reinforces the mutation aspect and adds the specific behavioral scope: only 'name or color' are changed, implying other properties are untouched. This goes beyond the annotations by clarifying the limited effect of the update. 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.

Conciseness5/5

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

The description is two concise sentences. The primary action and scope are front-loaded, and the usage guidance is appended without redundancy. Every sentence earns its place; there is no filler or repetition of schema or annotation data.

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 simple tool with only three parameters, a fully described schema, and annotations covering safety and idempotency, the description provides sufficient context. It states the purpose and usage, and the schema covers parameters. With no output schema and no nested objects, nothing else is needed for an agent to call this tool correctly.

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?

The input schema has 100% description coverage for all three parameters (labelId, name, color). The description adds no extra meaning beyond what the schema already provides—it merely restates that name and color can be updated. Since the schema handles the parameter documentation, the description's contribution is minimal, so a baseline 3 is appropriate.

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 verb ('update') and the resource ('existing label'), and explicitly specifies the scope ('name or color'). It distinguishes itself from sibling tools like create_label and delete_label by requiring an existing label, and the specific fields are named, leaving no ambiguity about what the tool does.

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 a direct usage condition: 'Use this when the user wants to rename or recolor a label.' This tells the agent when to select this tool. It does not explicitly mention when not to use it or name alternatives, but the condition is clear enough to avoid confusion with create_label or delete_label. A small gap is the absence of exclusions (e.g., if the label doesn't exist), but that is implied by 'existing'.

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

update_postUpdate postA
Idempotent

Update an existing post. Can change content, schedule, media, labels, status, and platform-specific settings. Only draft, scheduled, failed, or partial posts can be edited; editing a failed/partial post resets it to draft. Set status to 'draft' or 'scheduled' to move the post between those states — use publish_post to publish immediately. Use this when the user wants to edit an existing post.

ParametersJSON Schema
NameRequiredDescriptionDefault
postIdYesThe post ID to update.
statusNoMove the post between draft and scheduled. 'scheduled' requires a future scheduledAt (in this call or already stored) and at least one channel; 'draft' unschedules it. Any other value is rejected. Omit to leave the status unchanged. To publish immediately, use publish_post instead.
contentNoNew post text content.
labelIdsNoReplace label IDs on the post.
timezoneNoTimezone for scheduling.
scheduledAtNoNew ISO 8601 scheduled datetime.
mediaFileIdsNoReplace attached media file IDs.
requestApprovalNoOptional (default false). Set true to hold a scheduled post for team approval (approvalStatus becomes 'pending'). Forced on server-side for API keys of roles without post:publish (contributors), regardless of this flag.
platformSpecificNoPlatform-specific settings, e.g. { "youtube": { "title": "…", "privacyStatus": "public" } }. Reddit, Discord, Tumblr and Snapchat nest their options under the BulkPublish channel id, e.g. { "reddit": { "12": { "subreddit": "webdev" } } }. Telegram takes no options.
postTypeOverridesNoPer-platform post type override. E.g. { "instagram": "reel", "youtube": "short" }.
linkTrackingOverrideNoOptional per-post override for link tracking (bulkpubli.sh). true forces links in this post to be shortened and their clicks counted, false forces them to publish as written, and null clears the override so the post inherits the organization's Link Tracking setting again. Omit to leave it unchanged.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish readOnly=false, idempotentHint=true, and destructive=false, so the bar is for added context. The description discloses the reset-to-draft behavior for failed/partial posts and the status transition rules, which adds value beyond the annotations. It does not contradict them.

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

Conciseness5/5

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

Three sentences with no filler: the lead sentence states the core action, the second gives editability constraints and reset semantics, and the third clarifies status transitions and routes to publish_post. The most decision-relevant facts are front-loaded.

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

Completeness4/5

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

Despite the large platformSpecific nested schema, the description is sufficiently complete for selecting and invoking the tool because the input schema fully documents all parameters. It supplies the missing operational context: which post states are editable, reset-on-edit behavior, and the publish_post alternative. No output schema exists, but for an updating tool this is acceptable.

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 100%, placing the baseline at 3. The description adds a nice coarse summary of updatable fields and references the status enum behavior, but it does not add parameter syntax or format details beyond what the comprehensive input schema already provides.

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

Purpose5/5

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

States a specific verb+resource ('Update an existing post') and enumerates the mutable aspects: content, schedule, media, labels, status, and platform-specific settings. The second half clearly distinguishes it from publish_post and implies the create_post counterpart.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use statement ('Use this when the user wants to edit an existing post.') and a when-not condition ('use publish_post to publish immediately'). It also constrains usage to draft, scheduled, failed, or partial posts, naming an alternative tool where relevant.

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

update_rss_feedUpdate RSS feedA
Idempotent

Update an RSS autopost feed (partial update). Note: changing feedUrl re-baselines the feed — its check state resets and only items published after the change are posted, so the new feed's backlog is not flooded. Use this when the user wants to change, pause, or re-point an RSS autopost feed.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNodraft = new items become drafts for review; publish = auto-published.
nameNoNew feed name.
feedIdYesThe RSS feed ID to update.
enabledNoEnable or disable polling of this feed.
feedUrlNoNew feed URL. Changing it re-baselines the feed (only items newer than the change are posted).
channelIdsNoReplacement channel IDs (at least 1).
fieldMappingNoNew field mapping; pass null to clear back to the built-in default.
requireApprovalNoHold items auto-published from this feed for team approval — each generated post lands with approvalStatus 'pending' and waits for approve_post. Only meaningful when mode is 'publish' (draft items never publish on their own, and a feed force-demoted to draft by the plan gate stays ungated). Defaults to false.

TDQS

A4.4/5.0
Behavior5/5

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

The description discloses a non-obvious side effect: changing feedUrl re-baselines the feed, resets check state, and posts only items published after the change, 'so the new feed's backlog is not flooded.' This goes beyond the annotations (idempotentHint=true, destructiveHint=false) and adds behavioral context that matters for correct invocation and expectation setting.

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

Conciseness5/5

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

The description is two concise sentences with no filler. The core purpose and the most important caveat (re-baselining) are front-loaded, and the usage trigger follows naturally. Every sentence earns its place.

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

Completeness4/5

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

Given the tool's 8 parameters but 100% schema coverage, the description plus schema is complete for correct invocation. The description covers the key behavioral nuance and usage context; only a return-value note is absent, but no output schema exists and this is a mutation tool, so that absence is not a critical gap.

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 100%, so the input schema already documents all eight parameters thoroughly. The description adds the general notion of partial update and the feedUrl re-baseline behavior, but that re-baseline is also stated in the schema feedUrl property description. The description does not need to compensate for parameter documentation gaps.

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 uses a specific verb and resource ('Update an RSS autopost feed (partial update)') and clearly distinguishes mutation from the create/delete/list RSS feed siblings. The parenthetical 'partial update' adds precision about the operation's scope.

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 explicitly states when to use it: 'Use this when the user wants to change, pause, or re-point an RSS autopost feed.' It does not explicitly name alternatives or when-not-to-use, but the categories of change are concrete and sufficient for an agent to route correctly relative to create/delete/list siblings.

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

update_scheduleUpdate recurring scheduleA
Idempotent

Update an existing recurring schedule. Can change name, content template, frequency/timing, timezone, media, or active status. The next run time is recomputed by the server when timing changes. Use this when the user wants to change a recurring schedule.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew schedule name.
isActiveNoEnable or disable the schedule.
timezoneNoNew IANA timezone.
dayOfWeekNoNew day of week (0=Sunday..6=Saturday) for weekly/biweekly.
frequencyNoNew frequency.
timeOfDayNoNew time of day, 24h "HH:MM".
dayOfMonthNoNew day of month (1-31) for monthly.
scheduleIdYesThe schedule ID to update.
mediaFileIdsNoReplace the media file IDs used for generated posts.
contentTemplateNoNew post content template.
requireApprovalNoHold every future occurrence this schedule generates for team approval — each generated post lands with approvalStatus 'pending' and the scheduler skips it until an approver releases it via approve_post. Defaults to false.

TDQS

A4/5.0
Behavior4/5

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

The description adds a meaningful behavioral detail beyond annotations: 'The next run time is recomputed by the server when timing changes.' This supplements the idempotentHint and destructiveHint annotations. However, it does not clarify whether updates are partial or full replacement, or how parameter interactions (e.g., dayOfWeek with frequency) are handled.

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?

Three compact sentences, with the core action and field scope front-loaded. The final sentence is somewhat redundant with the title, but the description remains tight and scannable.

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

Completeness3/5

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

For an 11-parameter update tool with no output schema, the description gives enough initial orientation but omits important operational context such as whether omitted fields are preserved, how frequency-dependent fields interact, and what the response will contain. The schema fills parameter detail, but the overall update semantics are underspecified.

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 100%, and each parameter already has a clear description. The prose description mostly restates parameter categories without adding new semantic details, so it does not elevate beyond the baseline for well-covered schemas.

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 states a specific action ('Update an existing recurring schedule') and enumerates the main changeable aspects: name, content template, frequency/timing, timezone, media, and active status. This clearly distinguishes update_schedule from sibling create_schedule, delete_schedule, and list_schedules tools.

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?

It explicitly says 'Use this when the user wants to change a recurring schedule,' which provides clear contextual guidance for the main use case. It does not mention exclusions or when a sibling tool like create_schedule would be more appropriate, but the 'existing' phrasing and update intent are reasonably unambiguous.

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

upload_mediaUpload mediaA

Upload a media file (image or video) from a URL or local file path. The file is stored in BulkPublish for use in posts. Supported formats: JPEG, PNG, WebP, GIF, MP4, MOV, WebM. Max 100MB. Provide either url OR filePath, not both. Use this when the user provides an image/video to attach to a post.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPublic URL of the media file to upload.
filePathNoAbsolute path to a local file to upload (e.g. /Users/me/photo.png).
filenameNoOptional filename. If omitted, derived from the URL or file path.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only indicate non-read-only and non-destructive, so the description carries the behavioral burden. It adds meaningful behavior: the file is stored in BulkPublish, supported formats are listed, max size is stated, and the url/filePath exclusivity is disclosed. It does not mention return values or side effects beyond storage, but no contradiction exists.

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

Conciseness5/5

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

Four sentences cover purpose, source, storage, formats, size, and parameter exclusion with no redundant wording. The most important usage guidance is front-loaded.

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

Completeness4/5

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

The description covers input selection, constraints, storage destination, and intended use case. Since there is no output schema, it would benefit from explicitly stating what is returned (e.g., a media ID), but the current information is sufficient for most correct invocations.

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

Parameters4/5

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

Schema description coverage is 100%, so parameters are already documented. The description adds value by clarifying that url and filePath are mutually exclusive and by providing supported format and size constraints that affect parameter usage.

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 names a specific verb ('upload') and resource ('media file'), and clearly scopes it to images/videos from a URL or local file path. It also states the storage destination (BulkPublish), which distinguishes it from read/list/delete media siblings.

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 explicitly says to use this when the user provides an image/video to attach to a post, which gives clear invocation context. It does not explicitly name alternatives or exclusion conditions relative to sibling upload tools like create_media_upload, so it stops short of a 5.

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

view_analyticsAnalytics dashboardA
Read-only

Open an interactive analytics dashboard for a date range — totals, status breakdown, per-platform stats, and daily post counts. Use this when the user wants an interactive analytics dashboard — prefer over get_analytics for a visual view.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd date (ISO). Defaults to today.
fromNoStart date (ISO, e.g. 2025-01-01). Defaults to 30 days ago.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toNo
fromNo
summaryNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful behavioral context by indicating the tool opens an interactive visual dashboard rather than simply returning raw data, which is a meaningful behavioral trait beyond the schema.

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

Conciseness5/5

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

Two sentences with no filler. The first sentence front-loads the tool's purpose and contents, and the second immediately gives usage guidance and the sibling alternative. Every word earns its place.

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 read-only tool with zero required parameters, a 100% documented schema, and an output schema, the description covers purpose, contents, and usage context. Nothing essential is missing for an agent to decide whether to call it and how.

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 100%, with both from and to parameters clearly documented including defaults and format examples. The description mentions 'date range' but adds no parameter-level detail beyond what the schema already provides, so the baseline 3 is appropriate.

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 uses a specific verb ('Open') and a clear resource ('interactive analytics dashboard'), then enumerates exactly what the dashboard contains: totals, status breakdown, per-platform stats, and daily post counts. It also distinguishes itself from the key sibling get_analytics by emphasizing the visual/interactive nature.

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 explicitly says to use this tool when the user wants an interactive analytics dashboard and tells the agent to prefer it over get_analytics for a visual view. It names the relevant alternative, though it does not clearly state the condition under which get_analytics should be chosen instead.

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

view_channelsChannelsA
Read-only

Open an interactive view of connected social channels with platform, account, and connection/token status. Use this when the user wants an interactive view of their connected channels.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
channelsNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already signal read-only, non-destructive behavior. The description adds value beyond annotations by clarifying that this opens an interactive view rather than returning a plain list, and by indicating the status-related fields shown. No contradiction with annotations is present.

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

Conciseness5/5

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

Two concise sentences with no filler. The core purpose is front-loaded, and the usage guidance follows immediately, each sentence earning its place.

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 no-argument, read-only view tool with an output schema, the description covers what the view shows and when to use it. Annotations cover the safety profile, making the definition complete for the agent.

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

Parameters4/5

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

The tool has zero parameters, so parameter-level documentation is unnecessary. The baseline of 4 applies because there is nothing the description needs to explain about parameters.

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

Purpose4/5

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

The description names a specific verb ('Open') and a clear resource ('connected social channels') with the detail of platform, account, and connection/token status. It distinguishes itself from siblings like list_channels through the 'interactive view' framing, though it does not explicitly name a sibling alternative.

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?

It explicitly states when to use the tool: 'Use this when the user wants an interactive view of their connected channels.' It does not mention when not to use it or name alternatives, but the stated trigger is clear and actionable.

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

view_mediaMedia libraryA
Read-only

Open an interactive gallery of uploaded media files with thumbnails and metadata. Use this when the user wants to browse their media library visually.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax items to show (default 30).

Output Schema

ParametersJSON Schema
NameRequiredDescription
mediaNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already cover the read-only/non-destructive safety profile, so the description only adds the interactive gallery and thumbnails context. It does not disclose pagination behavior, default limit handling, or whether 'interactive' means a rendered UI vs. returned data, but output schema and annotations lessen the burden.

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

Conciseness5/5

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

Two short, focused sentences. The main action and visual browsing purpose are front-loaded, with no filler or redundant restatement of the title.

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

Completeness4/5

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

For a single-parameter, read-only, output-schema-backed tool, the description is nearly complete. The only meaningful gap is the lack of explicit differentiation from list_media, but the phrase 'browse visually' largely covers that.

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?

The only parameter, limit, is fully documented in the schema with a default value. The description adds no additional semantics beyond what the schema already provides, so the baseline of 3 applies.

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 states a specific action ('Open an interactive gallery') and identifies the resource ('uploaded media files') with a clear presentation format ('thumbnails and metadata'). It also signals the visual browsing use case, which distinguishes it from programmatic list tools like list_media.

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?

It explicitly gives the trigger condition: 'Use this when the user wants to browse their media library visually.' However, it does not name alternatives or provide when-not-to-use guidance, especially given the presence of list_media and get_media as sibling tools.

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

view_postsPostsA
Read-only

Open an interactive list of posts with their status, schedule, and channels. Optionally filter by status. Use this when the user wants to see their posts as an interactive dashboard — prefer over list_posts for a visual view.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax posts to show (default 20).
statusNoFilter by post status.

Output Schema

ParametersJSON Schema
NameRequiredDescription
postsNo
totalNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context by labeling this an 'interactive list' / 'dashboard', which signals a UI-style presentation rather than a plain data response, and lists the post fields shown.

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

Conciseness5/5

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

Two sentences with no redundant wording. The core purpose is front-loaded, and the usage guidance with the sibling comparison appears right after, making the description compact and easy to parse.

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 read-only, two-parameter tool with a complete input schema, an output schema, and annotations covering mutation safety, the description fully covers what an agent needs to decide when to invoke it and how it behaves. No critical gaps remain.

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 coverage is 100%, and both the 'limit' and 'status' parameters are already well-described in the input schema. The description only restates that status filtering is optional, adding no new semantic detail beyond what the schema provides, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb ('Open') and resource ('posts'), and specifies the content (status, schedule, channels). It explicitly distinguishes itself from sibling 'list_posts' by positioning itself as the visual/interactive view, making the tool's purpose immediately clear.

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

Usage Guidelines5/5

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

Explicitly states when to use the tool ('when the user wants to see their posts as an interactive dashboard') and names the alternative ('prefer over list_posts for a visual view'). This gives an agent a clear decision rule between view_posts and list_posts.

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

view_quotaAccount usageA
Read-only

Open an interactive view of current account usage — daily/monthly post counts, channel counts, and media storage. Use this when the user wants a visual view of their plan usage.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
usageNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark the tool as read-only and non-destructive; the description adds useful behavior beyond that by indicating it provides an interactive visual view and enumerates what usage dimensions are shown. It does not contradict any annotation, and the additional detail is relevant for setting agent expectations.

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

Conciseness5/5

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

Two concise sentences: the first states what the tool does and what it shows, and the second gives the usage trigger. There is no filler or repetition, and the most important information is front-loaded.

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?

With no parameters, a read-only annotation, and an output schema present, the description provides everything needed for an agent to select and invoke this simple tool. It clearly defines scope, content, and the visual nature of the result.

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

Parameters4/5

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

The tool has zero parameters, so the description has no parameter burden to carry. Per the baseline for no-parameter tools, no additional parameter meaning is required.

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 uses a specific verb ('Open') and resource ('current account usage'), and lists concrete contents: daily/monthly post counts, channel counts, and media storage. It also signals a visual/interactive presentation, which distinguishes it from the nearby get_quota_usage sibling.

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 explicitly says to use it 'when the user wants a visual view of their plan usage,' giving clear context. It does not name alternatives or exclusion cases, such as when raw quota data might be preferred over a visual view, so it falls just short of full guidance.

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. Dates show when Glama detected each change.

  1. 51 tool updatesv1.18.1
    • First observedabort_multipart_upload
    • First observedapprove_post
    • First observedbulk_posts
    • First observedcomplete_multipart_upload
    • First observedcompose_post
    • First observedcreate_channel_set
    • First observedcreate_label
    • First observedcreate_media_upload
    • First observedcreate_multipart_upload
    • First observedcreate_post
    • First observedcreate_rss_feed
    • First observedcreate_schedule
    • First observeddelete_channel_set
    • First observeddelete_label
    • First observeddelete_media
    • First observeddelete_post
    • First observeddelete_rss_feed
    • First observeddelete_schedule
    • First observedfinalize_media_upload
    • First observedget_analytics
    • First observedget_channel_health
    • First observedget_channel_options
    • First observedget_media
    • First observedget_post
    • First observedget_post_metrics
    • First observedget_queue_slot
    • First observedget_quota_usage
    • First observedlist_channel_sets
    • First observedlist_channels
    • First observedlist_labels
    • First observedlist_media
    • First observedlist_platforms
    • First observedlist_posts
    • First observedlist_rss_feeds
    • First observedlist_schedules
    • First observedpublish_post
    • First observedpublish_story
    • First observedreject_post
    • First observedretry_post
    • First observedsearch_mentions
    • First observedupdate_channel_set
    • First observedupdate_label
    • First observedupdate_post
    • First observedupdate_rss_feed
    • First observedupdate_schedule
    • First observedupload_media
    • First observedview_analytics
    • First observedview_channels
    • First observedview_media
    • First observedview_posts
    • First observedview_quota

TDQS

A3.8/5.0
Disambiguation4/5

Most tools have distinct purposes, but there are some potentially confusing overlaps: multiple ways to create posts (create_post vs compose_post vs create_schedule) and multiple upload methods (upload_media, create_media_upload, create_multipart_upload). However, the descriptions clearly differentiate these scenarios, so misinterpretation is unlikely.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (e.g., list_channels, create_label, delete_post). There are no naming style deviations or ambiguous verbs, making the toolset predictable and easy to navigate.

Tool Count1/5

With 51 tools, this is an extreme count for an MCP server. Although the domain is broad (social media management), many tools are highly specialized (e.g., multipart upload steps, interactive view tools, quota details) and could be consolidated or exposed via additional parameters. The sheer volume risks overwhelming agents and increasing misselection.

Completeness4/5

The toolset covers the core lifecycle for posts (create, read, update, delete, publish, approve, reject, retry, bulk), schedules, RSS feeds, media, labels, channels, and analytics. Minor gaps exist, such as no explicit channel connection management (only list/health/options) and no update operation for media, but these are typically handled in the web app and do not cripple the agent's workflow.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Social media scheduling and publishing for AI agents. 17 validation-first tools to post to X, LinkedIn, Instagram, TikTok, YouTube, Reddit, Discord, Telegram, and more through one connected workspace.
    316
    86
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Upload-Post is the all-in-one social media MCP server the Model Context Protocol server for social media publishing, scheduling and analytics. Connect any MCP-compatible AI agent (Claude, Cursor, ChatGPT, Claude Desktop, n8n, and more) and publish, schedule and analyze content across 13+ social networks from one API: TikTok, Instagram, YouTube, YouTube Shorts, Instagram Reels, LinkedIn, Facebook
    51
    58
    5
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/azeemkafridi/bulkpublish-api'

If you have feedback or need assistance with the MCP directory API, please join our Discord server