Skip to main content
Glama

Server Details

Social media for founders and small businesses: write, illustrate and schedule posts from your AI.

Ownership verified
Status
Healthy
Uptime
18.2% over 23 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4.1/5.0

Scored across 26 tools

Disambiguation4/5

The core lifecycle tools are clearly separated by resource and action: create_post (single image/video), create_carousel, create_reel and generate_image each target a distinct content type, and schedule_post / publish_post / unschedule_post / approve_week differ by scope and immediacy. The closest overlaps are approve_week vs schedule_post (bulk week approval vs one post) and update_brand vs reread_website, but the long descriptions explicitly contrast them.

Naming Consistency5/5

Every tool is snake_case verb_noun (list_posts, create_post, schedule_post, unschedule_post, get_post_metrics, create_upload_link). Verbs are used consistently by intent (list_ for collections, get_ for single resources, create_/update_/delete_ for mutations), with only benign variation like approve_week and download_week where the noun is a time span.

Tool Count4/5

26 tools is slightly above the comfortable 3-15 band, but the domain genuinely spans brands, post creation, scheduling/approval, uploads, analytics and credits, and nearly every tool maps to a distinct workflow. A few (reread_website, download_week) are edge-case operations, but none is clearly redundant.

Completeness4/5

Post lifecycle is fully covered (create/get/list/update/delete/schedule/unschedule/publish), plus brand profile read/update/reread/archive, uploads, credits, account listing and both account- and post-level analytics. Minor gaps exist: projects can only be archived and reactivated indirectly via create_project with reactivateProjectId, and account connection/YouTube insights are explicitly out of scope by design.

Available Tools

26 tools
approve_weekApprove weekA
Idempotent
Inspect

Schedules every dated draft (draft_scheduled) in a week at the time it is already placed at, in one go: the same as the Approve week button on the Plan page. Scheduled posts are published to the real social accounts automatically at their times — show the user the week (list_posts) and ask before approving, then pass confirm: true. The week is the seven days from midnight of weekStart in timeZone (else the zone the week was filled in, else the user's). A draft that could not go out is left as a draft and listed in skipped with its reason: past (its time has gone; move it with schedule_post), off_hour, needs_picture (Instagram and TikTok need a picture: add one with update_post, then approve again), not_connected (a platform on the post has no connected account, or it needs reconnecting: the user connects it in the Simplo app under Brand → Channels, or update_post takes that platform off), needs_tiktok_choices (a TikTok account connected directly needs the user's choices for each post: ask them, set tiktokSettings with update_post, then approve again) or platform_unavailable.

NameRequiredDescriptionDefault
confirmYesMust be true — confirms the user approved auto-publishing the week's posts at their times
timeZoneNoThe user's IANA time zone, e.g. America/Sao_Paulo; omit to use the one the week was filled in
projectIdYesSimplo project id (from list_projects)
weekStartYesFirst day of the week, YYYY-MM-DD, as the user's calendar shows it

TDQS

A4.8/5.0
Behavior5/5

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

Goes far beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true) by disclosing the real-world consequence: posts publish to live social accounts automatically at their times. It also documents the partial-failure model — failed drafts stay as drafts and come back in a skipped list with enumerated reasons (past, off_hour, needs_picture, not_connected, needs_tiktok_choices, platform_unavailable) and the remediation for each.

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?

Front-loaded with the action, then the safety gate, then failure handling — a sensible order with no filler sentences. It is dense as a single unbroken block, and the long parenthetical enumeration of skip reasons slightly hurts scannability, but each clause carries operational information the agent needs.

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 high-consequence, irreversible-feeling bulk publish with no output schema, the description covers consent handling, timezone resolution, partial failure semantics, and per-reason next steps. An agent has everything needed to call it correctly and to recover from every documented failure mode.

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 meaning on top: weekStart defines a seven-day window starting at midnight, timeZone has a three-tier fallback (explicit zone, then the zone the week was filled in, then the user's), and confirm is a user-consent gate that must follow an explicit ask. Only the exact weekStart/pattern mechanics are left entirely to 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?

Opens with a specific verb and resource plus scope: 'Schedules every dated draft (draft_scheduled) in a week at the time it is already placed at, in one go.' The analogy to the 'Approve week' button on the Plan page pins down exactly which UI action this mirrors, separating it from single-post tools like publish_post and schedule_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?

States the required workflow explicitly: show the week with list_posts, ask the user, then pass confirm: true. It also names alternatives for failure paths — schedule_post to move a past draft, update_post to add a picture or tiktokSettings — so the agent knows both when to call this and what to do when it partly fails.

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

archive_projectArchive a brandA
DestructiveIdempotent
Inspect

Archives a project, as deleting a brand in the app does: it leaves list_projects and the app, its scheduled posts no longer go out, and a YouTube channel connected to it is disconnected. Its posts and profile are kept, so create_project with reactivateProjectId brings it back. Ask the user first, then pass confirm: true.

NameRequiredDescriptionDefault
confirmNoRequired, after the user agrees
projectIdYesSimplo project id (from list_projects)

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the destructiveHint/idempotentHint annotations by enumerating concrete consequences: the project disappears from list_projects and the app, scheduled posts stop going out, and a connected YouTube channel is disconnected. It also discloses what is preserved (posts and profile) and the restoration path, which is exactly the behavioral context an agent needs before a destructive 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?

One tightly packed sentence covers effects, persistence, reversibility, and the consent instruction, with the irreversible-sounding consequences front-loaded. No filler and no repetition of structured 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 two-parameter destructive tool, the description covers scope of effect, side effects on linked resources, data retention, and the confirmation protocol. No output schema exists but none is needed since return behavior is not decision-relevant here.

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%, so projectId's meaning and origin (list_projects) and confirm's consent requirement are already documented in the schema. The description reinforces the confirm gate ordering but adds no new format or constraint detail, 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 and resource ("Archives a project") and immediately anchors it to an observable behavior the user knows ("as deleting a brand in the app does"). An agent can distinguish this from destructive siblings like delete_post and from create_project, which is named only as the undo path.

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 explicit preconditions for invocation: ask the user for consent, then pass confirm: true. It also points to create_project with reactivateProjectId for the reverse operation. It stops short of saying when NOT to archive (e.g. when the user only wants to hide scheduled posts, which unschedule_post would handle), so it is strong but not a full routing guide.

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

create_postCreate postAInspect

Creates a single-image or video post as a draft (the default) or scheduled. A scheduled post is published to the real social accounts automatically at its time — ask the user before scheduling, then pass confirm: true. Pass the time as localTime with timeZone (Simplo resolves the offset), or as scheduledAt with its offset. The time must be in the future and on the hour (Simplo publishes once an hour, on the hour). A draft with a time is placed on that day in the plan (draft_scheduled) and does not send by itself. For a video post pass videoUrl (a public MP4 or MOV link, up to 100 MB) instead of imageUrl: Simplo copies it to its own hosting. The first frame is the cover (the picture Instagram shows on the profile grid); if the video starts on an empty or animating frame, pass coverAt with the second that shows what the post is about. For a video or picture that is a file rather than a public URL (one you rendered, or one the user has on their device), call create_upload_link, have the file sent to it, and pass its uploadId here instead of imageUrl or videoUrl. A video goes to Instagram (as a Reel), Facebook and TikTok, not to X. possibleDuplicateOf in the answer names another planned post within 14 days that opens the same way: ask the user whether both should stay.

NameRequiredDescriptionDefault
statusNodraft
captionYesFull caption, including hashtags
confirmNoMust be true to schedule — confirms the user approved auto-publishing
coverAtNoVideo posts only: the second the cover is taken from (0 to under the video's length, hundredths). Without it the cover is the first frame
imageUrlNoA hosted image URL, e.g. from generate_image
timeZoneNoThe user's IANA time zone, e.g. America/Edmonton. Needed with localTime; with scheduledAt it only sets the zone scheduledLocal is shown in. The answer's scheduledLocal says how the saved time reads there: check it against what the user asked for
uploadIdNoFrom create_upload_link, once the file was sent: the post's video or picture; not together with imageUrl or videoUrl
videoUrlNoA public video URL (MP4 or MOV) for a video post; not together with imageUrl
localTimeNoThe time as the user's clock shows it, YYYY-MM-DDTHH:MM with no offset (e.g. 2026-11-09T12:00), with timeZone. Preferred over scheduledAt: Simplo works out the UTC offset in force on that date. Not together with scheduledAt
platformsYes
projectIdYesSimplo project id (from list_projects)
aiGeneratedNoWhether the post is AI-made (use it for AI-made video or voices): true shows it on TikTok with its "AI-generated content" label and marks a YouTube video as altered or synthetic content, false does neither. Omit to follow the defaults: on TikTok the brand's "Label TikTok posts as AI-generated" setting when on, else pictures are labelled and videos are not; on YouTube the brand's own synthetic content setting. get_post shows the TikTok result as tiktokAiLabel
scheduledAtNoISO 8601 time with offset, on the hour (e.g. 12:00, never 11:45), in the future; scheduling needs it or localTime. localTime with timeZone is safer
youtubeTitleNoVideo posts going to YouTube only: the video's title on YouTube, at most 100 characters, no < or >. Without it the title is the caption's first line with its hashtags dropped, and the whole caption is the description either way
tiktokSettingsNoTikTok accounts connected directly (not through Simplo's posting partner) need these on every post that goes to TikTok, or TikTok fails with "Choose who can see this TikTok post". Ask the user who can see it and whether comments are allowed; never choose for them

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already flag this as a non-read-only, non-idempotent mutation, and the description adds the crucial risks on top: a scheduled post auto-publishes to real accounts, times must be on the hour and in the future, drafts with a time never send, and videos are limited to 100 MB and copied to Simplo hosting. That is strong disclosure, but the description says nothing about what happens on partial platform failure or how to recover a mis-scheduled post (unschedule_post/publish_post siblings go unmentioned).

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?

It is a long single block, but front-loaded with the action and then the highest-risk fact (auto-publishing to real accounts). Every clause carries operational content — hour alignment, cover frame, upload fallback, platform exclusions — with no filler, though paragraphs or line breaks would have improved scanability.

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 15-parameter, nested-object mutation with no output schema, the description covers the full decision tree: draft vs scheduled, media source paths, scheduling time formats, video platform coverage, and how to interpret possibleDuplicateOf in the response. Nothing an agent needs to call this 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?

Schema coverage is already 87%, so the schema carries most per-field meaning; the description still adds cross-parameter logic the schema cannot express, such as uploadId replacing imageUrl or videoUrl, the localTime-versus-scheduledAt exclusivity, and the confirm gate on scheduling. The aiGenerated and tiktokSettings subtleties are left mostly to the schema descriptions.

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 first sentence gives a specific verb and resource plus the two output modes: "Creates a single-image or video post as a draft (the default) or scheduled." It also bounds the media types (single image or video), which implicitly separates it from create_carousel and create_reel, but it never names those siblings, so an agent must infer the boundary.

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?

Explicit routing conditions throughout: ask the user before scheduling and pass confirm: true, use localTime with timeZone in preference to scheduledAt, pass videoUrl instead of imageUrl for video, and call create_upload_link plus uploadId when the media is a local file rather than a public URL. It even states video does not go to X, and that possibleDuplicateOf should trigger a user question.

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

create_projectCreate a brandAInspect

Makes a new Simplo project (one per brand), from the brand's website or, when it has none, a short description of the business. With websiteUrl, Simplo reads the site in the background (profile, voice, products, colours, logo, product photos; free, needs an active plan) and this answers at once with analysisStatus "analyzing": call get_brand about a minute later, and again until it answers the profile. A description passed with a website is given to that reading as extra context. With only a description, it is stored as the profile's description and nothing is read: fill in the audience, voice, products and colours with update_brand. contentLocale is the language posts are written in (en, es or pt-BR); without it they follow the user's interface language. Each plan allows a number of brands. When the user once archived a brand with the same website, this refuses with that brand's id: ask the user, then pass reactivateProjectId to bring it back with its posts and profile, or force: true for a new one. Ask the user before making a brand.

NameRequiredDescriptionDefault
nameNoThe brand's name; required unless reactivateProjectId is passed
forceNoMake a new brand even though an archived one has the same website
websiteUrlNoThe brand's website, e.g. https://example.com
descriptionNoWhat the business is and does, in a few sentences, for a brand with no website
contentLocaleNo
reactivateProjectIdNoBring back this archived brand (from a refusal) instead of making a new one

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare non-readonly, non-idempotent, open-world, non-destructive, but the description carries the real behavioral weight: creation is asynchronous with analysisStatus "analyzing" and requires re-polling get_brand until a profile appears. It also discloses plan gating ("free, needs an active plan", per-plan brand limits) and an unusual refusal path with a recoverable id — none of which are inferable from 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?

Front-loaded with the core action and the async behavior, then the refusal path, then the caution to ask the user — a sensible ordering with no filler. It is a single dense paragraph with long compound sentences, so the conditional branches around reactivate/fource are harder to scan than they could be, but every clause carries operative information.

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?

Covers what an agent must do before (ask the user), during (choose website vs description, set contentLocale), and after (poll get_brand until the profile answers) invocation, plus the exception path for archived duplicates. With no output schema present, the description supplies the essential return signal (analysisStatus "analyzing") that would otherwise be missing.

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

Parameters5/5

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

Schema coverage is high (83%), yet the description still adds meaning the schema lacks: contentLocale is the language posts are written in and defaults to the user's interface language, description becomes the profile's description when no website is given, and reactivateProjectId restores the archived brand with its posts and profile rather than creating fresh. It also clarifies the choice between reactivateProjectId and force.

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?

Opens with a specific verb+resource ("Makes a new Simplo project (one per brand)") and immediately scopes the two creation paths, website vs. description. This distinguishes it cleanly from siblings like update_brand, get_brand and list_projects, and even reconciles the title mismatch by defining a project as one-per-brand.

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 explicit routing rules: pass websiteUrl when a site exists, a description when it doesn't, description-plus-website is treated as extra context, and description-only requires follow-up via update_brand. It also names alternatives by name (get_brand for polling, update_brand for filling profile fields, reactivateProjectId vs force) and states the human-in-the-loop rule "Ask the user before making a brand."

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

create_reelCreate animated ReelAInspect

Turns an existing post's pictures (a carousel's slides, or a single post's picture) into a short animated vertical video and saves it as a NEW draft video post; the original post is left as it is, unless consumeSource is passed. For a slot that should hold only a Reel, make the carousel with create_carousel, then pass consumeSource: true here: once the Reel is saved the carousel draft is deleted (and a dated draft gives the Reel its day), so the plan holds no deck that will never go out. Only a draft that never went out can be consumed, and it is kept if another post was made from it; sourceRemoved says whether it went. The video opens with a hook headline that pops in word by word over a cover drawn in the post's own carousel style at full height (a single picture opens in boldPhoto on that picture; pass style to choose editorial, clean, boldPhoto or dark; the cover is also the video's thumbnail; a carousel drawn before styles, or an ad, already has words in its pictures, so its cover is drawn without them, in dark unless style is passed), shows the pictures one after another nearly full screen with a story bar counting them, then an end card with the logo, a closing line and a call-to-action button, all set in real type. Pass hook, endLine and cta to choose the words; leave them out and Simplo writes them from the post. COSTS CREDITS (one render). Rendering takes about a minute. The draft is never published or scheduled here: schedule it with schedule_post after the user approves. It goes to the source post's video platforms (Instagram as a Reel, Facebook, TikTok, YouTube as a Short; never X), or to platforms when passed: make a TikTok twin by passing platforms: ["tiktok"]. With TikTok among its platforms the caption is rewritten for TikTok (short, its own hashtags); otherwise it keeps the source post's caption. It has no music: suggest adding a sound in the Instagram or TikTok app.

NameRequiredDescriptionDefault
ctaNoButton text on the end card, e.g. a bare domain or "Link in bio"
hookNoHeadline that opens the Reel, word by word; ideally under 45 characters
styleNoThe carousel style the opening cover is drawn in; omit to use the post's own
postIdYesThe post whose pictures become the Reel
endLineNoClosing line on the end card
platformsNoWhere the Reel goes; omit to use the source post's video platforms
projectIdYesSimplo project id (from list_projects)
aiGeneratedNoWhether the post is AI-made (use it for AI-made video or voices): true shows it on TikTok with its "AI-generated content" label and marks a YouTube video as altered or synthetic content, false does neither. Omit to follow the defaults: on TikTok the brand's "Label TikTok posts as AI-generated" setting when on, else pictures are labelled and videos are not; on YouTube the brand's own synthetic content setting. get_post shows the TikTok result as tiktokAiLabel. Omit to keep the source post's choice
consumeSourceNotrue deletes the source post once the Reel is saved (only a draft that never went out; refused before charging otherwise). Use it when the post was made only to draw this Reel from
tiktokSettingsNoTikTok accounts connected directly (not through Simplo's posting partner) need these on every post that goes to TikTok, or TikTok fails with "Choose who can see this TikTok post". Ask the user who can see it and whether comments are allowed; never choose for them. A Reel never takes these from its source post

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations it discloses credit consumption ('COSTS CREDITS (one render)'), latency (~a minute), source deletion semantics with its precondition and refusal path, the sourceRemoved signal, TikTok caption rewriting, and the no-music limitation. These are exactly the side effects an agent cannot infer from readOnlyHint=false / destructiveHint=false.

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?

It is front-loaded with the core action and every claim is load-bearing for a 10-parameter, credit-charging tool. It loses a point for heavily nested parentheticals (the cover/style clause) that make single sentences hard to parse on first read.

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 output schema, the description still signals the meaningful result (a new draft, sourceRemoved, removed source), the cost and timing, and the next step. Nothing needed to call it safely is missing.

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

Parameters5/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 real meaning on top: what happens when hook/endLine/cta are omitted, why consumeSource exists, how platforms changes the caption and routes the video, and why tiktokSettings must be asked of the user rather than defaulted.

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 opening sentence gives a specific verb and resource ('Turns an existing post's pictures ... into a short animated vertical video and saves it as a NEW draft video post') plus the scope distinction that the original post is untouched unless consumeSource is passed. An agent can distinguish this from create_carousel and create_post without opening any schema.

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

Usage Guidelines5/5

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

It names the explicit pre-step pattern ('make the carousel with create_carousel, then pass consumeSource: true here'), states the follow-up ('schedule it with schedule_post after the user approves'), and rules out behavior ('never published or scheduled here', 'never X'). Exclusions and alternatives are both spelled out.

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
Inspect

Deletes a post from Simplo. This cannot be undone — ask the user first, then pass confirm: true. Deleting a published post does not remove it from the social platforms; it only drops Simplo's record and its analytics. Deleting a scheduled post stops it from going out.

NameRequiredDescriptionDefault
postIdYes
confirmYesMust be true — confirms the user approved deleting this post
projectIdYesSimplo project id (from list_projects)

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already flag destructiveHint and idempotentHint, but the description adds substantive context beyond them: irreversibility, the human-approval gate, that the post is NOT removed from connected social platforms, and that analytics data is dropped with the record. Those are exactly the consequences an agent needs before committing a destructive 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, zero filler, ordered by importance: what it does, then the irreversibility plus approval gate, then the consequences by post state. Each sentence changes how an agent would call the tool.

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?

Fully adequate for a 3-required-param destructive tool with no output schema: the agent knows the action, the safety gate, and the downstream effects on platforms and analytics. Nothing material is missing to invoke 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 coverage is 67% and confirm already carries its own description in the schema; the description only restates "pass confirm: true" without adding format or constraint detail. postId and projectId get no semantic treatment in the description beyond the schema's list_projects hint, 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?

Specific verb+resource ("Deletes a post from Simplo") plus a scoping clause that separates it from sibling mutations like unschedule_post and update_post by explaining what actually happens to the record and its analytics. An agent can distinguish it from the rest of the post lifecycle tools without opening a 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 precondition ("ask the user first, then pass confirm: true") and clarifies the scheduled-vs-published outcome, which is exactly the ambiguity that leads agents to confuse this with unschedule_post. It stops short of naming unschedule_post as the non-destructive alternative, so the routing is implied rather than stated.

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

download_weekDownload the weekA
Read-only
Inspect

Returns a link to a zip of the posts planned in a week (or any 1–31 days): one folder per post with its picture(s) or video and its caption as a .txt, the planned time and platforms in every file name. For posting by hand or through another scheduler: no connected account needed, and it works on the free trial. Give the user the url as plain text; it works without signing in and expires after 24 hours. It downloads whatever is planned in those days when it is opened.

NameRequiredDescriptionDefault
daysNoHow many days from startDate (7 for a week)
timeZoneYesThe user's IANA time zone, e.g. America/Sao_Paulo; sets the day boundaries and the times in file names. Ask if you don't know it
projectIdYesSimplo project id (from list_projects)
startDateYesFirst day, as YYYY-MM-DD, in timeZone

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint; the description adds substantive behavior beyond that: the URL expires after 24 hours, it works without signing in, and the archive reflects whatever is planned at the moment the link is opened (deferred snapshot, not a frozen export). Those are exactly the operational facts an agent needs and cannot get from 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.

Conciseness4/5

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

Front-loaded with the return value in the first sentence and reasonably dense throughout, with no filler. The prose is somewhat run-on across clauses (scope, output layout, audience, delivery instruction, expiry), so an agent must parse one long block rather than scan discrete lines.

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?

With no output schema, the description compensates well by describing the returned artifact (zip, per-post folders, media, caption .txt, filename metadata) and its lifetime. Minor gaps remain: no mention of failure modes (e.g., nothing planned in the range) or the timezone-required behavior beyond the schema hint.

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%, including the timeZone semantics ('sets the day boundaries and the times in file names') and the days default of 7, so the schema already carries the parameter burden. The description only echoes the 1–31 day range and the per-file naming, adding little beyond structured data. Baseline 3 applies.

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?

States a specific verb and resource up front: 'Returns a link to a zip of the posts planned in a week (or any 1–31 days)', plus the exact archive layout (one folder per post, media plus caption .txt, planned time/platforms in filenames). It implicitly separates itself from scheduling/publishing siblings ('For posting by hand or through another scheduler'), but never names an alternative tool, so the differentiation is by scenario rather than by 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?

Gives clear situational context for choosing this tool: use it when the user will post by hand or via another scheduler, when no account is connected, or when on the free trial. It also gives an interaction guideline ('Give the user the url as plain text'). It stops short of explicit exclusions, such as when to prefer publish_post or create_upload_link instead.

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

generate_caption_ideasGenerate caption ideasAInspect

Generates on-brand post ideas (hook, caption, hashtags, image prompt, format) for a topic and saves them as a research session. COSTS CREDITS. Needs a completed brand profile. An idea with format "carousel" (tips, steps or a list, Instagram only) is made with create_carousel, its hook and caption as the topic, not with generate_image.

NameRequiredDescriptionDefault
limitNoHow many ideas to generate
topicYesWhat the posts should be about. When planning a week, the week's goal (a topic, a format such as ads, or both)
platformsNoTarget platforms; defaults to the brand's
projectIdYesSimplo project id (from list_projects)

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses traits beyond the annotations: it consumes credits, requires a completed brand profile, persists output as a research session, and defines what an idea contains. The annotations only say it is a non-destructive write, so the description adds substantial behavioral 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 three dense sentences with no waste. The core action, the cost warning, the prerequisite, and the carousel exception are all front-loaded and easy to scan.

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 non-destructive write tool with no output schema, it covers prerequisites, cost, persistence, and output contents well. It does not explicitly describe the return value or default behavior for limit/platforms, which keeps it just short of 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 all four parameters are already documented in the schema. The description adds little parameter-specific meaning beyond mentioning topic and the carousel routing, 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 gives a specific verb and resource ('Generates on-brand post ideas') and enumerates the produced fields (hook, caption, hashtags, image prompt, format). It also explicitly distinguishes itself from create_carousel and generate_image for carousel-format ideas.

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 names the prerequisite ('Needs a completed brand profile'), warns about credit cost, and routes a specific scenario (carousel-format ideas) to create_carousel rather than this tool or generate_image. That gives the agent clear conditions for use versus alternatives.

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

generate_imageGenerate imageAInspect

Generates on-brand images for a post and saves them to the project's image history. Returns hosted image URLs you can pass to create_post, plus a preview of each image so you can check it. COSTS CREDITS (more for higher tiers and more images). For tips, steps or a list of points, a short styled carousel (create_carousel) reads better than one picture.

NameRequiredDescriptionDefault
styleNo"ad-layout" composites real typography over a photostudio
formatNoinstagram-portrait (4:5, the default) fills Instagram's 3:4 profile grid; a square instagram-post loses its sides thereinstagram-portrait
promptYesWhat the image should show — an idea's imagePrompt works well. For "ad-layout", say what the ad sells, to whom and with what offer: a copywriter writes the headline, features and button from it
modelTierNoEvery tier currently runs (and bills) as "standard". "fast" (Draft) was retired; "premium" is reserved for a future engine.standard
projectIdYesSimplo project id (from list_projects)
imageCountNo
includeLogoNo
adBackgroundNo"ad-layout" only: "image" puts a generated photo behind the type (1 picture's credits); "brand" is a plain gradient in the brand colours, free but plainimage

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare non-readonly, non-destructive, non-idempotent; the description adds the materially important side effects: writes into project image history, consumes credits, and returns hosted URLs plus a preview for verification. It is slightly weakened by "more for higher tiers" when the modelTier schema states every tier currently bills as standard, a cost inconsistency an agent could act on wrongly.

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, front-loaded with the action and persistence effect, then return values, then cost, then the alternative. Each sentence carries distinct decision-relevant information with no repetition of the schema.

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?

With no output schema, the description correctly spells out what comes back (hosted URLs + previews), and it warns about credit spend for a mutation-style tool. It falls short only on includeLogo and on the tier-cost statement, which the schema contradicts.

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 75%, with style, format, prompt, modelTier, projectId and adBackground already documented in-schema. The description adds the meaningful output linkage (URLs go to create_post) but does not compensate for the undocumented parameters, notably includeLogo, and its cost claim about tiers conflicts with the schema's modelTier note.

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?

Specific verb + resource ("Generates on-brand images") plus the persistence effect ("saves them to the project's image history"). It is clearly distinguishable from create_carousel, create_post and create_reel in the sibling list by naming image generation as its scope.

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 routes the agent away for a specific case: "For tips, steps or a list of points, a short styled carousel (create_carousel) reads better than one picture." It also names the downstream consumer of the output (create_post), so the agent knows where the result flows.

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

get_account_summaryGet account summaryA
Read-only
Inspect

How each connected account is doing: followers now (followers, read on asOf), and 7 and 28 days ago (sevenDaysAgo, twentyEightDaysAgo: the latest count on or before that day, its day, and the change since). Simplo reads follower counts once a day, so a comparison appears only once the counts reach that far back: historyFrom says how far they go, and notes say what is missing and why. Follower counts are read for Instagram only; an account with collected: false says why in reason (TikTok, X, Facebook and YouTube are not read, and an Instagram account connected through Simplo's posting partner without insights needs a reconnect). Also the posts published in the range ranked by engagement (likes + comments + shares + saves): posts.top (highest first) and posts.bottom (lowest first, never a post already in top), with ranked, how many rows had numbers. The range is the last 28 days by default, or from and to (dates in timeZone). Nothing is read from the platforms here: the post numbers are as Simplo last read them (lastSyncedAt on each row); get_post_metrics reads them live and lists every post. Use it to say how the account itself is doing, and which posts worked and which didn't.

NameRequiredDescriptionDefault
toNoLast day of the posts' range (included), as YYYY-MM-DD in timeZone; today when only from is given
daysNoPosts published in the last this many days (ignored with from and to)
fromNoFirst day of the posts' range, as YYYY-MM-DD in timeZone
limitNoPosts in top and in bottom, each
timeZoneNoThe user's IANA time zone, e.g. America/Sao_Paulo; sets the day boundaries of from and to (needed with them)
projectIdYesSimplo project id (from list_projects)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint=false, but the description goes much further: counts are read once a day so comparisons appear only once history reaches back, historyFrom bounds the history, notes explain gaps, and collected: false with reason tells the agent Instagram-only coverage plus the posting-partner reconnect case. It also discloses staleness via lastSyncedAt, which is the key behavioral risk for a metrics tool.

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?

One dense paragraph, front-loaded with followers then posts then usage, with no filler sentences. It is however long and partly repeats itself ('Nothing is read from the platforms here' restated by the lastSyncedAt clause), which costs a perfect score.

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?

No output schema exists, so the description carries the return shape alone and does so thoroughly: followers fields, historyFrom, notes, collected/reason, posts.top and posts.bottom with ranking order and non-overlap, and ranked counts. Nothing needed to call or interpret this tool 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?

Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining the range coupling in prose ('last 28 days by default, or from and to (dates in timeZone)') and that limit applies to top and bottom separately. It adds little on from/to format beyond what the schema already documents.

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 ('how each connected account is doing': followers at now/7/28 days plus top and bottom posts by engagement) and explicitly separates itself from get_post_metrics, which 'reads them live and lists every post'. An agent can pick between the two 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 Guidelines5/5

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

'Use it to say how the account itself is doing, and which posts worked and which didn't' gives the selection criterion, and get_post_metrics is named as the alternative with the condition that selects it (live platform reads, every post). The only missing element is an explicit negative case, which the alternative already covers.

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

get_brandGet brand profileA
Read-only
Inspect

Returns the project's brand profile: voice, audience, products, colors, typography. Posts are always written in sentence case, whatever the brand's website does; update_brand changes the profile. While Simplo is still reading the brand's website (just after create_project or reread_website), it answers analysisStatus "analyzing" and ready: false instead: wait a minute and call it again.

NameRequiredDescriptionDefault
projectIdYesSimplo project id (from list_projects)

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only say readOnly; the description adds the crucial behavior that the call can return analysisStatus 'analyzing' and ready: false while the site is being read, and that the agent should retry after a delay. It also discloses a global output rule (posts are always sentence case regardless of the brand's website) that is not in 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.

Conciseness4/5

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

Front-loads the return contents, then the alternative, then the async-status caveat — sensible ordering. The sentence-case statement is tangential to what the tool returns, though it does convey a brand-writing rule an agent may need later.

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 one-parameter read with no output schema, the description covers both the normal return shape and the pending-analysis case, which is the main failure mode an agent would hit. Nothing important appears to be 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 coverage is 100% and the only parameter, projectId, is already described in the schema (with its source, list_projects). The description adds no parameter-level syntax or formatting details, 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?

States a specific verb and resource ('Returns the project's brand profile') and enumerates the contents: voice, audience, products, colors, typography. This clearly distinguishes it from sibling update_brand, which writes the same profile.

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 the read/write split against update_brand and, more usefully, states exactly when to call it again (after create_project or reread_website) and what to do (wait a minute). It does not say when NOT to call it, but the practical guidance is strong.

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

get_creditsGet credit balanceA
Read-only
Inspect

Returns the signed-in user's plan and credits. creditsRemaining is everything that can be spent: the plan's credits, used first, plus bonus credits. planCredits describes the plan's monthly allowance only — when it is used up, actions still run on bonus credits. Content creation needs an active subscription (status). Check this before running actions that cost credits.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuine behavioral context beyond that: the spend order (plan credits first, then bonus), that actions degrade to bonus credits rather than failing, and that content creation depends on subscription status.

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?

Front-loads the return summary, then unpacks the two credit fields, then closes with the usage call-to-action. Dense but every sentence carries meaning; the em-dash clauses require a second read but are not wasteful.

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 output schema and no parameters, the description correctly takes on the job of explaining what comes back (creditsRemaining vs planCredits vs status) and how to interpret it. An agent has everything needed to call it and understand 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?

There are zero parameters, so there is no parameter semantics to carry; baseline is 4. The description is used instead to define return field semantics (creditsRemaining, planCredits, status), which is a reasonable substitute.

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 ('Returns the signed-in user's plan and credits') and scopes it to the current user, which no sibling tool does. An agent can distinguish it from create_post or get_post_metrics immediately.

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?

'Check this before running actions that cost credits' gives a concrete pre-condition, and the note that content creation needs an active subscription identifies the gating scenario. It stops short of naming specific credit-consuming siblings, but the trigger condition is clear.

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

get_postGet postB
Read-only
Inspect

Returns one post, including its status and any publish error. A post that goes to TikTok has tiktokAiLabel: whether TikTok will show it as AI-generated content; aiGenerated is the post's own choice, absent when it follows the default.

NameRequiredDescriptionDefault
postIdYes
projectIdYesSimplo project id (from list_projects)

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds useful field-level context (status, publish error, TikTok AI labels) beyond annotations, but doesn't disclose error handling, permissions, or rate limits.

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, front-loaded with the core purpose. The second sentence is dense but adds useful detail about TikTok-specific fields; no wasted words, though the length is near the upper bound for a simple getter.

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?

Given a simple read tool with two parameters and no output schema, the description covers return fields well. However, it omits any explanation of the postId parameter and doesn't mention error behavior (e.g., if the post is not found).

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

Parameters2/5

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

Schema description coverage is 50%: projectId is described, but postId is not. The description adds no meaning about either parameter, failing to compensate for the undocumented postId.

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?

States a specific verb ('Returns') and resource ('one post'), plus extra scope about status and publish error. It clearly implies a single-post retrieval, distinguishing it from list_posts, though it doesn't explicitly name alternatives.

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

Usage Guidelines3/5

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

Usage is implied: call to get details of a single post. No explicit when-to-use or when-not-to-use guidance, and no mention of alternatives like list_posts or get_post_metrics.

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
Inspect

How the published posts did: one row per post and platform with views, reach, likes, comments, shares, saves and profileVisits as the platform reports them (a number it doesn't report is left out: Instagram reports profileVisits for feed posts and carousels, never for Reels), engagement (likes + comments + shares + saves), and lastSyncedAt. Each row also says what the post was made as: postType (single, carousel, video), style (the carousel style its slides were drawn in, if any) and durationSeconds (a video's length). The numbers are read live from Instagram, TikTok and X on every call, as the Analytics page does. A row with error could not be read this time (the account needs a reconnect, or TikTok has not given the video an id yet); its numbers are the last good ones. overview totals the posts Simplo published in the range. With groupBy (postType or style), overview.groups breaks it down: per format or carousel style, postCount (rows), totals and medians of each number over the rows that reported it, over every row in the range and not only the ones returned (style "none" holds pictures, videos and plain slides). Compare medians: one big post skews totals. With includeOutside: true, outside also lists the posts on the connected accounts that Simplo did not publish (made in the platform's app or another tool), with their numbers, sorted and limited the same way; they have a platformPostId and url instead of a postId. outside.accounts says which accounts were read and why any could not be (read: false with a reason, such as a reconnect; only Instagram and TikTok are read). On TikTok, unmatchedSimploPosts counts Simplo posts TikTok has not given a video id yet, which may appear among the outside posts. Use it before planning to see what worked: sort by engagement or reach, and pass includeOutside to count every post on the account; order: "asc" lists the posts that did worst first. Follower counts are in get_account_summary.

NameRequiredDescriptionDefault
daysNoPosts published in the last 7, 30 or 90 days
sortNorecent (newest first), engagement, reach or views (highest first)recent
limitNoRows to return (and outside rows, separately)
orderNodesc (highest or newest first) or asc (lowest or oldest first: the posts that did worst); rows without the number come last either waydesc
postIdNoOnly this post (published within days)
groupByNoBreak the overview down by postType (carousels against Reels and pictures) or style (one carousel style against another)
platformNoOnly this platform
projectIdYesSimplo project id (from list_projects)
includeOutsideNoAlso list the posts on the accounts that Simplo did not publish

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond readOnlyHint/openWorldHint: it discloses that numbers are read live from Instagram, TikTok and X on every call, that error rows carry last-good numbers when an account needs reconnecting or TikTok has no video id yet, that only Instagram and TikTok outside accounts are read, and that TikTok may double-count unmatchedSimploPosts. These are exactly the failure modes an agent needs before trusting the output.

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?

Dense but essentially waste-free — nearly every clause adds a fact that is unavailable in the schema, and the payload shape is front-loaded before the grouping and outside-post semantics. The single unbroken paragraph makes it hard to scan for a 9-parameter tool, which is the main structural cost.

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 output schema and nine parameters, the description carries the full burden and does so: it defines the row shape, the overview/group breakdown, outside-account behavior, per-platform reporting quirks and error semantics. An agent can call this correctly and interpret the result without further documentation.

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 real meaning: groupBy medians/totals are computed over every row in the range rather than only returned rows, style 'none' holds pictures, videos and plain slides, and includeOutside rows expose platformPostId and url instead of postId. The days/postId interaction ('published within days') is left implicit.

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?

Opens with a concrete verb and resource — 'How the published posts did: one row per post and platform' — and immediately enumerates the metrics returned (views, reach, likes, comments, shares, saves, profileVisits, engagement, lastSyncedAt). It also distinguishes itself from get_account_summary by routing follower counts there, so an agent can separate it from a nearby reporting tool.

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 usage scenario: 'Use it before planning to see what worked: sort by engagement or reach, and pass includeOutside to count every post on the account', plus the meaning of order=asc. What is missing is any contrast with sibling listing tools (list_posts, get_post) — an agent must infer when to fetch metrics versus plain post data.

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

get_uploadGet uploadA
Read-only
Inspect

Says whether the file for an upload link (create_upload_link) has arrived: status is waiting, uploading or ready, with the hosted video or imageUrl once ready.

NameRequiredDescriptionDefault
uploadIdYes
projectIdYesSimplo project id (from list_projects)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare this as a read-only, non-open-world operation. The description adds useful behavioral detail beyond annotations by naming the waiting/uploading/ready states and explaining what is returned once ready.

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 a single efficient sentence with the core status-checking purpose and readiness outcome front-loaded. There is no unnecessary explanation.

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 read tool with no output schema, the description covers purpose, status values, and the successful ready-state return. It leaves minor gaps around uploadId sourcing and error behavior, but is otherwise 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 50%: projectId is documented as coming from list_projects, while uploadId has no schema description. The description connects this to create_upload_link, which gives helpful context, but it does not explicitly explain that uploadId is the link identifier returned by that sibling.

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 operation: checking whether the file behind an upload link has arrived, with the possible statuses named. It explicitly references create_upload_link, helping distinguish this read/status tool from the link-creation 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?

Usage is clearly implied as checking the status of an upload link created by create_upload_link. It does not state explicit exclusions or alternatives, but the context is clear enough for an agent.

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

list_accountsList connected accountsA
Read-only
Inspect

Lists the social accounts connected to a project, and the platforms that are not connected. A post only goes out to a platform that is connected and does not need a reconnect — check this before scheduling or publishing. Accounts are connected, and reconnected, by the user in the Simplo app (Brand → Channels); this tool cannot connect them.

NameRequiredDescriptionDefault
projectIdYesSimplo project id (from list_projects)

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 openWorldHint=false; the description adds real value on top by explaining the operational consequence (a post only reaches a platform that is connected and not needing reconnect) and that it is a read-only surface for a mutation performed elsewhere. It does not describe the shape of the returned list, so it stops short of a 5.

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

Conciseness5/5

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

Three sentences, each doing distinct work: what is listed, why it matters operationally, and where connection actually happens. The key constraint 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.

Completeness5/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 tool with no output schema, the description covers what is returned (connected accounts and unconnected platforms) and the preconditions an agent needs before scheduling or publishing. Nothing needed 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.

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 projectId already documents itself as a Simplo project id from list_projects. The description adds no additional meaning about the parameter, 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?

Specific verb+resource: lists social accounts connected to a project, plus platforms that are not connected. The scope (connected vs. not connected) is stated precisely, which distinguishes it from siblings like list_projects or get_brand.

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 says to check this before scheduling or publishing, and states the hard limitation that connection/reconnection happens in the Simplo app (Brand → Channels) and cannot be done by this tool. That is both a when-to-use and a when-it-won't-help.

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
Inspect

Lists the project's posts (drafts, scheduled, published, failed, missed). A draft_scheduled post is a draft placed on its day: it has a scheduledAt but never sends by itself until it is scheduled in Simplo. A missed post came due while the plan was lapsed and was not sent; reschedule it (once the plan is active) to send it. To see what is planned in a week, pass from and to (dates in timeZone, both days included; a week across two months is one call): posts come in planned order. Otherwise newest first. Narrow with status and platform. Each post is a summary (id, status, postType, platforms, times, firstLine of the caption, slideCount and style of a carousel, a video's length, possibleDuplicateOf, and reelPostIds: the Reels made from it, so an undated draft deck with reelPostIds was only a Reel's source and can be deleted with delete_post after the user agrees); get_post returns one post whole, and fields: "full" returns whole posts here (long: a month can run past what you can read). At most limit posts per call: when nextCursor is in the answer, pass it as cursor for the next page.

NameRequiredDescriptionDefault
toNoLast day planned (included), as YYYY-MM-DD in timeZone
fromNoFirst day planned, as YYYY-MM-DD in timeZone
limitNoPosts per page
monthNoOnly posts scheduled in this month (UTC), as YYYY-MM. from/to is usually what you want
cursorNonextCursor from the previous page
fieldsNosummary (default) or full posts with slides and videosummary
statusNoOnly posts with one of these statuses, e.g. ["scheduled", "draft_scheduled"]
platformNoOnly posts that go to this platform
timeZoneNoThe user's IANA time zone, e.g. America/Sao_Paulo; sets the day boundaries of from and to (needed with them), and each post's scheduledLocal shows its time on that zone's clock
projectIdYesSimplo project id (from list_projects)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and closed-world, so the safety profile is covered; the description adds ordering behavior (planned order vs newest first), pagination semantics (limit + nextCursor), and a genuine cost warning that fields:'full' can run past what the agent can read for a month. It also explains domain states (draft_scheduled never sends by itself, missed posts must be rescheduled). It stops short of describing failure modes or rate limits, so not a 5.

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

Conciseness4/5

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

Purpose and the date-range guidance are front-loaded and no sentence is filler, but the single dense paragraph stacks nested parentheticals (the reelPostIds aside embeds a delete_post recommendation) that slow parsing. It would read better split into scope, filtering, and pagination blocks.

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 output schema, the description carries the return-value burden and does so: it enumerates the summary fields (id, status, platforms, times, firstLine, slideCount/style, video length, possibleDuplicateOf, reelPostIds) and contrasts them with fields:'full'. Combined with ordering and pagination rules, nothing an agent needs to call this 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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: from/to are both inclusive and 'a week across two months is one call', dates are read on the timeZone clock, and fields:'full' is flagged as long output rather than a richer detail level. It leaves month vs from/to tradeoffs mostly to 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 and resource plus scope ('the project's posts') and enumerates the status universe it covers (drafts, scheduled, published, failed, missed). It explicitly separates itself from get_post ('returns one post whole') and delete_post, so an agent can choose without opening sibling schemas.

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 concrete when-to-use rules: pass from and to 'to see what is planned in a week', otherwise results come newest first, and narrow with status/platform. It also names alternatives (get_post for a whole post, delete_post for Reel source drafts after user agreement) and explains cursor reuse.

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

list_projectsList projectsA
Read-only
Inspect

Lists the user's Simplo projects (one per brand). Most other tools need a projectId from here.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds only that results are one-per-brand; it does not say what to expect for a user with no projects, whether the list is paginated or bounded, or what the call costs.

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, and the identity of the resource is front-loaded ahead of the routing hint. Nothing could be removed without losing information.

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 list tool with a clean schema and read-only annotations, this is nearly complete. The one real gap is the return shape: with no output schema, the agent isn't told which fields (e.g. an id vs. a display name) it should extract to feed the downstream projectId.

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?

Zero parameters, so there is nothing for the description to disambiguate; the baseline applies. The note about projectId being consumed elsewhere is useful framing but is not parameter semantics for this call.

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?

States a specific verb and resource ('Lists the user's Simplo projects') and adds a clarifying scope detail ('one per brand'), so the agent knows the granularity. It does not distinguish itself from the sibling list_accounts, which an agent must also disambiguate.

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 sentence 'Most other tools need a projectId from here' is an effective ordering signal that tells the agent to call this before other tools. It stops short of stating prerequisites or when-not-to-use conditions (e.g. when a projectId is already known).

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
DestructiveIdempotent
Inspect

Publishes an existing post to its platforms immediately. This posts publicly on the user's real social accounts and cannot be undone — always ask the user first, then pass confirm: true. Safe to retry: platforms already published are skipped.

NameRequiredDescriptionDefault
postIdYes
confirmYesMust be true — confirms the user approved publishing this post now
projectIdYesSimplo project id (from list_projects)

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds the substantive context behind those flags: it posts publicly on the user's real accounts, cannot be undone, and retries skip platforms already published. That mechanism-level detail about partial-success behavior is not derivable from the annotations and is exactly what an agent needs before an irreversible write.

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, front-loaded with the action, then the risk, then the mitigation. No filler, and the most safety-critical clause ("cannot be undone") is placed where it will be read before the call is made.

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 irreversible write with no output schema, the description covers the essentials: side effects, reversibility, the confirm gate, and retry safety. It does not describe what a partial or total failure looks like in the response, which would help an agent report outcomes, but that is a minor gap given the tool's simplicity.

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 67% (postId undocumented, projectId and confirm documented). The description reinforces confirm's meaning by tying it to the user-approval gate rather than a generic boolean, which is more actionable than the schema's own wording. postId's role is implied by "an existing post" but never explicitly explained.

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 ("Publishes an existing post to its platforms") plus a timing qualifier ("immediately") that cleanly separates it from the sibling schedule_post. An agent can tell at a glance that this is the act-now variant rather than the queued variant.

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 precondition workflow: "always ask the user first, then pass confirm: true," which tells the agent exactly what must happen before invocation. It also notes retry is acceptable because already-published platforms are skipped. What's missing is direct routing advice against siblings (e.g. use schedule_post when the user wants a future time).

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

reread_websiteRe-read the brand's websiteA
Idempotent
Inspect

Reads the brand's website again, e.g. after a rebrand. scope "look" (the default) re-reads only the visual identity (palette, illustration style, typography, mood, visual elements) and a logo Simplo scraped earlier (one the user uploaded is kept), and answers with the updated brand when done, in about a minute. scope "everything" runs the full brand analysis in the background: it also rewrites the description, audience, voice and products, replacing any edits the user made, so it needs confirm: true after the user agrees; read get_brand a few minutes later. Free, but needs an active plan. To set a field to a value you already know, use update_brand instead.

NameRequiredDescriptionDefault
scopeNolook
confirmNoRequired for scope "everything", after the user agrees to have the profile text rewritten
projectIdYesSimplo project id (from list_projects)

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond annotations: it discloses that scope 'everything' rewrites description, audience, voice and products and replaces user edits, that it runs in the background, that scope 'look' preserves an uploaded logo, that the call takes about a minute, and that it is free but requires an active plan. This is exactly the context the readOnlyHint=false / destructiveHint=false annotations cannot convey.

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?

Front-loaded with the core action and the default scope, then the riskier mode. It is dense with nested parentheticals, which slightly hampers scanning, but every clause carries operational information and nothing is 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 long-running, partly background, partly destructive operation with no output schema, the description covers duration, result delivery ('answers with the updated brand when done'), the async polling step, the free/plan constraint, and the confirmation requirement. An agent has everything needed to call it correctly and not surprise the user.

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

Parameters5/5

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

Schema coverage is 67%, but the description fully compensates: it defines what each enum value of scope actually does, explains the logo-preservation side effect, and states that confirm is required only for scope 'everything' after user agreement. That is meaning well beyond the schema's terse field descriptions.

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 ('Reads the brand's website again') plus the trigger scenario ('after a rebrand'). It then splits the tool into its two modes and names the siblings it is not (update_brand, get_brand), so an agent can distinguish it from neighbors without opening the schema.

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

Usage Guidelines5/5

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

Explicit routing: scope 'look' for visual-only refresh, scope 'everything' for full re-analysis, and 'To set a field to a value you already know, use update_brand instead.' It also states the precondition for confirm: true (user agreement) and the follow-up step (read get_brand a few minutes later).

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

schedule_postSchedule postA
Idempotent
Inspect

Schedules an existing post, or moves a scheduled one to a new time. A scheduled post is published to the real social accounts automatically at scheduledAt — ask the user before scheduling, then pass confirm: true. Works on drafts (including draft_scheduled), scheduled, missed and failed posts; a post that already went out cannot be rescheduled. Pass the time as localTime with timeZone (Simplo resolves the offset), or as scheduledAt with its offset. Without a time the post keeps the time it already has. The time must be in the future and on the hour: Simplo publishes once an hour, on the hour. possibleDuplicateOf in the answer names another planned post within 14 days that opens the same way: tell the user.

NameRequiredDescriptionDefault
postIdYes
confirmYesMust be true — confirms the user approved auto-publishing at that time
timeZoneNoThe user's IANA time zone, e.g. America/Edmonton. Needed with localTime; with scheduledAt it only sets the zone scheduledLocal is shown in. The answer's scheduledLocal says how the saved time reads there: check it against what the user asked for
localTimeNoThe time as the user's clock shows it, YYYY-MM-DDTHH:MM with no offset (e.g. 2026-11-09T12:00), with timeZone. Preferred over scheduledAt: Simplo works out the UTC offset in force on that date. Not together with scheduledAt
projectIdYesSimplo project id (from list_projects)
scheduledAtNoISO 8601 time with offset, in the future and on the hour (e.g. 12:00, never 11:45); defaults to the post's current scheduledAt. localTime with timeZone is safer

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only say this is a non-read-only, idempotent, non-destructive write; the description goes well beyond by disclosing that the post is auto-published to real social accounts, that user confirmation is mandatory, that publishing is hourly on the hour, that the time must be in the future, and that a duplicate-detection field (possibleDuplicateOf, 14-day window) may come back and should be surfaced.

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?

Roughly a hundred words for a genuinely complex tool, with the core action first, then preconditions, then time-format guidance, then return-value hints. No filler sentences; the 'publishes once an hour, on the hour' clause justifies rather than repeats the constraint.

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?

No output schema exists, yet the description names the two return fields that matter for correctness (scheduledLocal to verify the saved time, possibleDuplicateOf to warn the user) and instructs how to act on them. Combined with the confirmation gate and time-format rules, an agent has everything needed to call this 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 83%, so the schema already documents confirm, timeZone, localTime and scheduledAt in comparable detail. The description largely restates those rules (localTime with timeZone vs scheduledAt, future-and-on-the-hour) and adds only modest framing, such as the consequence of omitting a time entirely.

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 with scope: scheduling an existing post or moving an already-scheduled one. The phrase 'an existing post' and 'a post that already went out cannot be rescheduled' cleanly separates it from create_post and publish_post in the sibling list.

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?

Explicit when-to-use and when-not: works on drafts (including draft_scheduled), scheduled, missed and failed posts, but not published ones. It also states the consent precondition ('ask the user before scheduling, then pass confirm: true') and the no-time fallback, and routes between the localTime and scheduledAt options with a stated preference.

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

unschedule_postUnschedule postA
Idempotent
Inspect

Takes scheduled posts back to drafts so they no longer go out: the same as the Unschedule button on the Plan page. Nothing is deleted. It changes what goes out on the user's real social accounts, so ask the user first, then pass confirm: true. By default each post stays on its day in the plan (draft_scheduled), ready to be scheduled again with schedule_post or approve_week; keepDay: false moves it to Unscheduled with no time. Pass postId for one post, or postIds to unschedule several (a week being replanned) in one call. Missed and failed posts can be taken back too; a post that already went out, or is publishing right now, is refused.

NameRequiredDescriptionDefault
postIdNoThe post to unschedule; or pass postIds
confirmYesMust be true — confirms the user approved taking these posts off the schedule
keepDayNotrue (the default) keeps each post on its day as a dated draft; false moves it to Unscheduled with no time
postIdsNoSeveral posts to unschedule at once (up to 50); each is answered on its own
projectIdYesSimplo project id (from list_projects)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare non-read-only, non-destructive, idempotent, but the description adds real context an agent needs: nothing is deleted, it alters what publishes to the user's live social accounts, user confirmation is mandatory, the default keeps the post's day while keepDay:false drops it to Unscheduled, and already-published/publishing posts are rejected. Per-item result semantics for batch calls are also disclosed.

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?

One dense paragraph, front-loaded with the core action and safety warning before the option details; nearly every clause carries information. It is on the long side and could be split into short lines for scanability, but nothing is redundant 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?

No output schema exists, and the description covers what an agent needs for a live-account mutation: confirmation requirement, the default placement, batch semantics with per-post answers, and refusal cases. Nothing material is missing for correct invocation.

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 earns slightly above that by framing the postId-vs-postIds choice with a real use case ('a week being replanned') and by tying keepDay to the downstream re-scheduling workflow. It largely restates the schema's own semantics rather than adding format or constraint detail.

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 ('Takes scheduled posts back to drafts so they no longer go out') and explicitly anchors it to a familiar UI action ('the same as the Unschedule button on the Plan page'). It is clearly distinguishable from delete_post (nothing is deleted), schedule_post, and approve_week, which are named as the re-scheduling path.

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 explicit when-to-use ('a week being replanned'), when-not-to-use (a post that already went out or is publishing right now is refused), the prerequisite ('ask the user first, then pass confirm: true'), and the follow-up alternatives (schedule_post or approve_week). No inference is required to pick this tool.

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

update_brandUpdate brand profileA
Idempotent
Inspect

Changes the brand profile, for a rebrand or a correction: pass only the fields to change, the rest stay as they are. colorPalette, illustrationStyle, typography, mood and visualElements are the visual identity every picture follows: colorPalette as "name:#hex" pairs (e.g. "teal:#0E7C86, sand:#F4F1EA"), the first the main brand colour. typography describes the type's feel (e.g. "rounded geometric sans, heavy headlines"); letter case is dropped from it, since posts are always in sentence case. logoUrl sets the logo from a public https PNG, JPEG, WebP or SVG (at most 5 MB); for a file, use create_upload_link with kind "image" and pass the imageUrl get_upload returns once it is ready. clearFeedStyle: true forgets the look learned from the Instagram feed (the "My feed" picture style), which still shows the old look after a rebrand; feedStyleCleared false means none was learned. It is learned again from the feed the next time "My feed" is used or Refresh is pressed, so after a rebrand that waits until the feed shows the new look. Show the user the changes and ask before calling it.

NameRequiredDescriptionDefault
moodNo
nameNo
logoUrlNo
industryNo
projectIdYesSimplo project id (from list_projects)
brandVoiceNoHow the brand sounds: tone, formality, how it addresses people
priceOfferNoOne price or offer line, drawn verbatim by the Price Reel; null clears it
typographyNo
descriptionNo
keyProductsNoReplaces the whole list
colorPaletteNo
clearFeedStyleNo
targetAudienceNo
visualElementsNo
illustrationStyleNo

TDQS

A4.2/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: partial-update semantics, logo constraints (public https, PNG/JPEG/WebP/SVG, ≤5MB), and the full lifecycle of clearFeedStyle including that cleared style is relearned on next 'My feed'/Refresh. The user-confirmation requirement is also disclosed.

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?

Front-loaded with the core behavior in the first sentence and the rest ordered by field importance; nearly every clause adds actionable detail. It is a dense single block, though, and would scan better as bullets.

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 15-parameter mutation with no output schema, the description covers the risky and ambiguous fields plus the upload workflow and feed-style consequence. Remaining gaps (exact semantics of keyProducts replacement, priceOffer null-clearing) are already covered by schema descriptions.

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?

With only 27% schema coverage across 15 params, the description carries most of the burden and does so for the non-obvious ones: colorPalette 'name:#hex' format, typography intent and case-dropping rule, logoUrl sources, clearFeedStyle booleans. Several fields (name, industry, description, targetAudience, mood, visualElements) are only named, not explained, keeping it short of a 5.

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?

Opens with a specific verb+resource ('Changes the brand profile') and immediately frames the patch semantics, so it is distinguishable from get_brand. It doesn't explicitly name the read counterpart as an alternative, which keeps it from a 5.

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 solid when-to-use context ('for a rebrand or a correction', 'pass only the fields to change') and routes logo file uploads to create_upload_link + get_upload. It also instructs asking the user before calling. No explicit when-not-to-use/exclusion against siblings beyond the upload path.

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

update_postEdit postA
Idempotent
Inspect

Edits an existing post's caption, picture or platforms; pass only what changes. scheduledAt places a draft on a day in the plan (draft_scheduled) without scheduling it; a scheduled post's time is changed with schedule_post, and unschedule_post takes it back to a draft. A post that already went out, or is going out right now, cannot be edited. Editing a scheduled post changes what will be published at its time, so ask the user first and pass confirm: true. A carousel's pictures are its slides and cannot be replaced here, and a carousel posts to Instagram only. A video post's picture is its cover; replace its video with videoUrl, or pass only coverAt to take the cover from another second: the cover is the picture Instagram shows on the profile grid, so a video that opens on an empty or animating frame needs the second that shows what the post is about. A local file goes through create_upload_link and is passed as uploadId. A video post cannot go to X. Adding TikTok to a video post without passing a caption rewrites its caption for TikTok (short, its own hashtags; COSTS one credit); pass caption to keep your own.

NameRequiredDescriptionDefault
postIdYes
captionNoFull new caption, including hashtags
confirmNoMust be true to edit a scheduled post — confirms the user approved the new content going out
coverAtNoVideo posts only: the second the cover is taken from (0 to under the video's length, hundredths); changes only the cover
imageUrlNoA hosted image URL, e.g. from generate_image
timeZoneNoThe user's IANA time zone, e.g. America/Edmonton. Needed with localTime; with scheduledAt it only sets the zone scheduledLocal is shown in. The answer's scheduledLocal says how the saved time reads there: check it against what the user asked for
uploadIdNoFrom create_upload_link, once the file was sent: a new picture, or a video post's new video
videoUrlNoA public video URL (MP4 or MOV) to replace a video post's video
localTimeNoThe time as the user's clock shows it, YYYY-MM-DDTHH:MM with no offset (e.g. 2026-11-09T12:00), with timeZone. Preferred over scheduledAt: Simplo works out the UTC offset in force on that date. Not together with scheduledAt
platformsNo
projectIdYesSimplo project id (from list_projects)
aiGeneratedNoWhether the post is AI-made (use it for AI-made video or voices): true shows it on TikTok with its "AI-generated content" label and marks a YouTube video as altered or synthetic content, false does neither. Omit to follow the defaults: on TikTok the brand's "Label TikTok posts as AI-generated" setting when on, else pictures are labelled and videos are not; on YouTube the brand's own synthetic content setting. get_post shows the TikTok result as tiktokAiLabel. null puts the post back on the default
scheduledAtNoDrafts only: ISO 8601 time with offset, the day the draft sits on in the plan. localTime with timeZone is safer
youtubeTitleNoVideo posts going to YouTube only: the video's title on YouTube, at most 100 characters, no < or >. Without it the title is the caption's first line with its hashtags dropped, and the whole caption is the description either way. null goes back to the caption's first line
tiktokSettingsNoTikTok accounts connected directly (not through Simplo's posting partner) need these on every post that goes to TikTok, or TikTok fails with "Choose who can see this TikTok post". Ask the user who can see it and whether comments are allowed; never choose for them. null clears them

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover the generic safety profile (readOnly=false, idempotent=true, destructive=false), and the description goes far past them: edits to a scheduled post change what will publish, carousel slides cannot be replaced here and carousels are Instagram-only, video posts cannot go to X, and adding TikTok to a video post without a caption silently rewrites the caption and costs one credit. These are non-obvious side effects and cost implications that annotations cannot express.

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 most important constraint (partial update) is front-loaded and every sentence carries a distinct rule, so there is little filler. The downside is that it is one dense paragraph of long compound sentences, where bullets for the carousel/video/TikTok branches would have been faster to parse for a 15-parameter tool.

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 15-parameter mutation tool with no output schema, the description covers the failure modes an agent would otherwise hit: editability limits, carousel and video media rules, the confirm gate, the TikTok caption rewrite, and the create_upload_link path for local files. Nothing material needed to call 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?

Schema coverage is already 87%, so the baseline is 3; the description still adds real meaning for the ambiguous params — confirm as the user-approval gate, coverAt as the Instagram profile-grid cover second, uploadId as the create_upload_link handoff, and the caption/TikTok interaction. It does not add much for timeZone, youtubeTitle, tiktokSettings or aiGenerated, which are left to their already-detailed schema text.

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 first clause gives a specific verb and resource ("Edits an existing post's caption, picture or platforms") plus the partial-update rule ("pass only what changes"). It then explicitly separates itself from create_post, schedule_post and unschedule_post, so an agent can pick the right tool without opening any schema.

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

Usage Guidelines5/5

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

Routing is explicit: scheduledAt is for drafts sitting on a plan day, a scheduled post's time goes through schedule_post, unschedule_post returns it to draft, and published/live posts cannot be edited at all. It also states a hard prerequisite — ask the user first and pass confirm: true for scheduled posts — which is exactly the kind of conditional an agent needs before calling.

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.

  1. 2 tool updates
    • Addedget_account_summary
    • Changedget_post_metrics1 field changed
      • addedInput schema / properties / order
        Added value: +{
        +  "default": "desc",
        +  "description": "desc (highest or newest first) or asc (lowest or oldest first: the posts that did worst); rows without the number come last either way",
        +  "enum": [
        +    "desc",
        +    "asc"
        +  ],
        +  "type": "string"
        +}
  2. 9 tool updates
    • Addedarchive_project
    • Changedcreate_carousel5 fields changed
      • addedInput schema / properties / goal
        Added value: +{
        +  "description": "Styled decks only. \"tips\" teaches and closes on a save; \"promo\" sells and closes on the brand's offer (its offer line, or the link in bio). Omitted: read from the topic",
        +  "enum": [
        +    "tips",
        +    "promo"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / localTime
        Added value: +{
        +  "description": "The time as the user's clock shows it, YYYY-MM-DDTHH:MM with no offset (e.g. 2026-11-09T12:00), with timeZone. Preferred over scheduledAt: Simplo works out the UTC offset in force on that date. Not together with scheduledAt",
        +  "type": "string"
        +}
      • changedInput schema / properties / replacesPostId / description
        Previous value: -"A draft this carousel replaces: it takes that draft's day (unless scheduledAt is passed) and the old draft is deleted"New value: +"A draft this carousel replaces: it takes that draft's day (unless a time is passed) and the old draft is deleted"
      • changedInput schema / properties / scheduledAt / description
        Previous value: -"ISO 8601 time with offset: puts the draft on that day in the plan, without scheduling it"New value: +"ISO 8601 time with offset: puts the draft on that day in the plan, without scheduling it. localTime with timeZone is safer"
      • addedInput schema / properties / timeZone
        Added value: +{
        +  "description": "The user's IANA time zone, e.g. America/Edmonton. Needed with localTime; with scheduledAt it only sets the zone scheduledLocal is shown in. The answer's scheduledLocal says how the saved time reads there: check it against what the user asked for",
        +  "type": "string"
        +}
    • Changedcreate_post3 fields changed
      • addedInput schema / properties / localTime
        Added value: +{
        +  "description": "The time as the user's clock shows it, YYYY-MM-DDTHH:MM with no offset (e.g. 2026-11-09T12:00), with timeZone. Preferred over scheduledAt: Simplo works out the UTC offset in force on that date. Not together with scheduledAt",
        +  "type": "string"
        +}
      • changedInput schema / properties / scheduledAt / description
        Previous value: -"ISO 8601 time with offset, on the hour (e.g. 12:00, never 11:45); required when scheduling, and must be in the future"New value: +"ISO 8601 time with offset, on the hour (e.g. 12:00, never 11:45), in the future; scheduling needs it or localTime. localTime with timeZone is safer"
      • addedInput schema / properties / timeZone
        Added value: +{
        +  "description": "The user's IANA time zone, e.g. America/Edmonton. Needed with localTime; with scheduledAt it only sets the zone scheduledLocal is shown in. The answer's scheduledLocal says how the saved time reads there: check it against what the user asked for",
        +  "type": "string"
        +}
    • Addedcreate_project
    • Changedcreate_reel1 field changed
      • addedInput schema / properties / consumeSource
        Added value: +{
        +  "description": "true deletes the source post once the Reel is saved (only a draft that never went out; refused before charging otherwise). Use it when the post was made only to draw this Reel from",
        +  "type": "boolean"
        +}
    • Changedget_post_metrics1 field changed
      • addedInput schema / properties / groupBy
        Added value: +{
        +  "description": "Break the overview down by postType (carousels against Reels and pictures) or style (one carousel style against another)",
        +  "enum": [
        +    "postType",
        +    "style"
        +  ],
        +  "type": "string"
        +}
    • Changedlist_posts1 field changed
      • changedInput schema / properties / timeZone / description
        Previous value: -"The user's IANA time zone, e.g. America/Sao_Paulo; sets the day boundaries of from and to. Needed with them"New value: +"The user's IANA time zone, e.g. America/Sao_Paulo; sets the day boundaries of from and to (needed with them), and each post's scheduledLocal shows its time on that zone's clock"
    • Changedschedule_post3 fields changed
      • addedInput schema / properties / localTime
        Added value: +{
        +  "description": "The time as the user's clock shows it, YYYY-MM-DDTHH:MM with no offset (e.g. 2026-11-09T12:00), with timeZone. Preferred over scheduledAt: Simplo works out the UTC offset in force on that date. Not together with scheduledAt",
        +  "type": "string"
        +}
      • changedInput schema / properties / scheduledAt / description
        Previous value: -"ISO 8601 time with offset, in the future and on the hour (e.g. 12:00, never 11:45); defaults to the post's current scheduledAt"New value: +"ISO 8601 time with offset, in the future and on the hour (e.g. 12:00, never 11:45); defaults to the post's current scheduledAt. localTime with timeZone is safer"
      • addedInput schema / properties / timeZone
        Added value: +{
        +  "description": "The user's IANA time zone, e.g. America/Edmonton. Needed with localTime; with scheduledAt it only sets the zone scheduledLocal is shown in. The answer's scheduledLocal says how the saved time reads there: check it against what the user asked for",
        +  "type": "string"
        +}
    • Changedupdate_post3 fields changed
      • addedInput schema / properties / localTime
        Added value: +{
        +  "description": "The time as the user's clock shows it, YYYY-MM-DDTHH:MM with no offset (e.g. 2026-11-09T12:00), with timeZone. Preferred over scheduledAt: Simplo works out the UTC offset in force on that date. Not together with scheduledAt",
        +  "type": "string"
        +}
      • changedInput schema / properties / scheduledAt / description
        Previous value: -"Drafts only: ISO 8601 time with offset, the day the draft sits on in the plan"New value: +"Drafts only: ISO 8601 time with offset, the day the draft sits on in the plan. localTime with timeZone is safer"
      • addedInput schema / properties / timeZone
        Added value: +{
        +  "description": "The user's IANA time zone, e.g. America/Edmonton. Needed with localTime; with scheduledAt it only sets the zone scheduledLocal is shown in. The answer's scheduledLocal says how the saved time reads there: check it against what the user asked for",
        +  "type": "string"
        +}
  3. 1 tool update
    • Changedcreate_reel1 field changed
      • addedInput schema / properties / tiktokSettings
        Added value: +{
        +  "description": "TikTok accounts connected directly (not through Simplo's posting partner) need these on every post that goes to TikTok, or TikTok fails with \"Choose who can see this TikTok post\". Ask the user who can see it and whether comments are allowed; never choose for them. A Reel never takes these from its source post",
        +  "properties": {
        +    "allowComment": {
        +      "description": "Allow comments; off when omitted",
        +      "type": "boolean"
        +    },
        +    "allowDuet": {
        +      "description": "Videos only: allow Duet; off when omitted",
        +      "type": "boolean"
        +    },
        +    "allowStitch": {
        +      "description": "Videos only: allow Stitch; off when omitted",
        +      "type": "boolean"
        +    },
        +    "brandedContent": {
        +      "description": "A paid partnership promoting someone else (\"Branded content\"); never with SELF_ONLY",
        +      "type": "boolean"
        +    },
        +    "postMode": {
        +      "description": "direct (the default) posts it on the profile; draft sends it to the user's TikTok inbox to finish and post in the TikTok app, and then needs no other field",
        +      "enum": [
        +        "direct",
        +        "draft"
        +      ],
        +      "type": "string"
        +    },
        +    "privacyLevel": {
        +      "description": "Direct posts: who can see the post, as the user chose it: one of the options the account allows (the app shows them)",
        +      "enum": [
        +        "PUBLIC_TO_EVERYONE",
        +        "MUTUAL_FOLLOW_FRIENDS",
        +        "FOLLOWER_OF_CREATOR",
        +        "SELF_ONLY"
        +      ],
        +      "type": "string"
        +    },
        +    "yourBrand": {
        +      "description": "The post promotes the user's own business (\"Your brand\")",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
  4. 23 tool updates
    • First observedapprove_week
    • First observedcreate_carousel
    • First observedcreate_post
    • First observedcreate_reel
    • First observedcreate_upload_link
    • First observeddelete_post
    • First observeddownload_week
    • First observedgenerate_caption_ideas
    • First observedgenerate_image
    • First observedget_brand
    • First observedget_credits
    • First observedget_post
    • First observedget_post_metrics
    • First observedget_upload
    • First observedlist_accounts
    • First observedlist_posts
    • First observedlist_projects
    • First observedpublish_post
    • First observedreread_website
    • First observedschedule_post
    • First observedunschedule_post
    • First observedupdate_brand
    • First observedupdate_post

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    AI-powered social media posting across 14 platforms. Post to Twitter, Instagram, TikTok, Facebook, LinkedIn, YouTube and more with one command. AI adapts content per platform, schedules posts, and generates 30-day content calendars.
    6
    MIT
  • A
    license
    Not graded
    quality
    C
    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.
    187 npm
    106
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources