Skip to main content
Glama

Server Details

Turn the AI you already pay for into an SEO agent: measured topics, SERP briefs, rule-checked drafts

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

TDQS

A3.7/5.0

Scored across 38 tools

Disambiguation4/5

Most tools target distinct resources/actions and the very detailed descriptions differentiate purpose well. However a few pairs genuinely overlap: calendar_view vs list_calendar, and approve_post vs deliver_draft (the latter admits it only exists as a retry path). Scheduling tools (plan_topics, schedule_entry, reschedule_post, unschedule_post) also cluster closely but are reasonably separable.

Naming Consistency4/5

Strong overall verb_noun snake_case pattern: add_evidence, add_topics, approve_post, archive_post, get_post, list_posts, run_gate, update_profile, upsert_post. Minor deviations exist (calendar_view is noun_verb, next_write, get_linkgraph drops the underscore, dataforseo_status/delivery_status are noun_noun), but the convention is largely predictable.

Tool Count3/5

38 tools is heavy and above the comfortable 3-15 band, though the server genuinely spans several sub-domains (onboarding, topics, posts, calendar, evidence, delivery, translations, site analysis, gating). Some breadth is justified, but the surface feels larger than necessary, with a few candidate consolidations.

Completeness5/5

Coverage is unusually thorough: full lifecycle for topics (add/list/archive/merge/refresh/plan/propose/suggest/research/analyze), posts (upsert/get/list/archive/schedule/reschedule/unschedule), evidence, profile, delivery, and translations, plus diagnostics (dataforseo_status, check_ai_access, import_sitemap, get_skill, run_gate). Deliberate soft-delete semantics (archive instead of delete) leave no obvious dead ends.

Available Tools

38 tools
add_evidenceAdd evidenceA
Idempotent
Inspect

Add pieces to the evidence bank (what only this business knows): a measured number, a named case, a mistake made, a credential, a screenshot to take. Every article draws at least three accepted pieces from it. saidByHuman is true only when transcribing something the human said in this conversation; anything inferred, measured or fetched is false and waits for the human's approval in the app. A true piece is stored accepted with source "conversation"; a false piece is stored pending, and citing it in brief.evidence fails the rules as evidence-unaccepted until the human accepts it. weakFirsthand: true marks a piece that reads as a general claim anyone could repeat rather than something this business knows; it never blocks the write. Deduped on the text, so re-sending a piece never creates a second row and never resets a verdict the human already gave: duplicates names those and returns the row they collapsed onto. pendingReview is the number of pieces in the whole bank waiting for the user's review.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4.2/5.0
Behavior5/5

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

Less explicit than annotations alone: it explains the lifecycle and side effects that annotations don't cover. It details saidByHuman semantics (true only for transcription; inferred/measured/fetched false and waits for approval), storage outcomes (true becomes accepted with source 'conversation'; false becomes pending and blocks brief.evidence until accepted), weakFirsthand semantics (never blocks), deduplication on text (never resets a human verdict, duplicates named in response), and pendingReview meaning. This adds rich behavioral context beyond the provided hints such as idempotentHint, destructiveHint, readOnlyHint, openWorldHint.

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

Conciseness3/5

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

The description is dense and front-loaded with the core purpose, but it is a long run-on paragraph mixing multiple concerns (purpose, saidByHuman logic, storage outcomes, weakFirsthand, deduplication, pendingReview) without clear structure. It is not unduly verbose for the complexity, but readability and scanability could be improved with paragraph breaks or bullets. Every sentence does carry distinct 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 2-parameter mutation tool with no output schema and 50% schema coverage, the description is quite complete: it covers purpose, approval workflow, deduplication behavior, and response fields. It leaves some gaps around the kind enum and source parameter semantics, and doesn't explicitly say the tool is non-destructive/openWorld, but annotations cover safety and the description covers the nuanced business logic that annotations cannot.

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 50%, so half the parameters (items and its nested fields) are only enumerated as a shape in the schema, not explained in the description. The description explains the semantics of saidByHuman, weakFirsthand (though not in the schema at the top level), source 'conversation', and deduplication on text, adding value. But it does not fully compensate for the coverage gap, nor explain kind enum or source field meaning. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb (add) and resource (evidence bank) and immediately qualifies the scope with a parenthetical definition: 'what only this business knows' followed by concrete examples (a measured number, a named case, a mistake made, a credential, a screenshot to take). This distinguishes it from siblings like add_topics or list_evidence, and an agent can tell what belongs in this tool 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 Guidelines4/5

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

The description gives clear context: it is the source pool that articles draw from ('Every article draws at least three accepted pieces from it'), implying when to add. However, it does not explicitly contrast with siblings like add_topics or list_evidence, or state when not to use this tool. Usage is strongly implied but not fully routed against alternatives.

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

add_topicsAdd topicsAInspect

Adds questions to the topic bank. Uses BYO DataForSEO for Google volume, AI search volume, and intent when connected; otherwise stores estimates. Costs the user about USD 0.11 per batch, whatever the term count; terms already measured in the last 30 days are skipped and cost nothing. One call covers all terms at that cost. Every term is checked against the stored topics and against the others in the same call before anything is measured. duplicates names terms identical to something already there (scope stored collapsed onto an existing topicId; scope in-call was sent twice in this call); no row is created. similar names terms withheld for competing with an existing topic (score, term, topicId, inserted: false); re-sending with allowSimilar: true stores both on purpose (inserted: true then). similarityThreshold is the cutoff in use. published names terms withheld for resembling a page the site already published, with url, path, score, inserted: false and a source: source sitemap is a content page from import_sitemap, compared by a title inferred from its slug (inferredTitle); source profile is a page that sells, such as the home, compared by the keyword the founder declared for it in profile.pageKeywords (targetKeyword). Each published entry names the phrase and the existing URL it resembles; re-sending with allowSimilar: true stores it anyway. semanticOverlaps is a separate, softer signal: terms that were stored and measured, but a classifier read as asking the same question as an existing topic in different wording: probability, term and the topicId it overlaps, stored either way. semanticOverlapThreshold is the cutoff in use, and the list is empty when the classifier is unavailable. Returns measured (terms DataForSEO answered for) and unmeasured (terms it did not); an unmeasured term keeps source estimate and is not ranked. volumeStatus and aiVolumeStatus on the returned topics report observed, unavailable or unmeasured; an unavailable volume is never a 0. Can be refused before spending with degraded: true, reason: spend-limit and a spend object naming the ceiling that tripped; nothing is charged. resurrected names terms whose archived topic was brought back instead of creating a new row, keeping the metrics and brief it was archived with.

ParametersJSON Schema
NameRequiredDescriptionDefault
termsYes
sourceNo
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.
allowSimilarNo

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false), it discloses cost (~USD 0.11 per batch), 30-day skip behavior, spend-limit refusal via degraded:true with nothing charged, and per-outcome semantics for duplicates, similar, published, semanticOverlaps, unmeasured and resurrected. This is unusually rich disclosure for a mutating tool.

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?

For a tool with no output schema, the dense prose is doing necessary work: cost and skip rules are front-loaded, then return-field semantics. Some sentences are telegraphic ('duplicates names terms identical to something already there'), but almost every clause carries actionable information rather than restating structured fields.

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 and 25% schema coverage, the description carries the return-value and behavior burden and mostly does so: it enumerates the result buckets (measured, unmeasured, duplicates, similar, published, semanticOverlaps, resurrected) and status values. Gaps remain around the `source` parameter and the exact shape of the `terms` input.

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 only 25%, so the description must compensate. It explains allowSimilar well (re-sending stores withheld terms, inserted:true), but never clarifies the `terms` payload or the `source` enum (add/generate/chat), leaving half the parameters under-specified. Partial compensation merits a 3.

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

Purpose5/5

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

The opening sentence states a specific verb and resource ('Adds questions to the topic bank'), and the surrounding detail about measurement, cost, and dedup makes clear this is the write path distinct from siblings like plan_topics, propose_topics, suggest_topics, and research_topic. An agent can identify the tool 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 Guidelines3/5

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

The description thoroughly explains what happens during a call (cost, dedup checks, allowSimilar overrides) but never states when to choose this tool over the adjacent topic tools (propose_topics, suggest_topics, plan_topics). Usage is implied by the topic-bank framing rather than explicitly routed.

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

approve_postApprove postA
Destructive
Inspect

Approve one article: the human's act, in one call. It refuses unless the last run_gate check passed (degraded reason gate-failed, and nothing changes), then moves the article to ready and, when this workspace has a delivery destination and a token saved, delivers it in the same act. That is the whole approval: there is no separate deliver step to remember, and there is still no publish anywhere in this product. delivered is the receipt or null when nothing is configured to deliver to. For a git destination (provider github) it carries label, repo, branch, path, previousPath, commitUrl, htmlUrl, updated and pendingImageSlots. For Sanity (provider sanity) the draft drafts.seodraft-<id> is created or patched, never published and never deleted, and re-delivering patches only the fields seodraft maps; the receipt carries label, projectId, dataset, documentId, studioUrl, updated, pendingImageSlots and degradations (what the destination's Portable Text could not carry, which the human fixes in Studio). If the destination refuses the write the article stays ready (the approval was valid) and degraded reason delivery-failed carries the CMS's own reason; re-approving retries the delivery and overwrites the same draft. Intended to record an approval the user gave explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the gate-refusal behavior and its degraded reason, the ready-state transition, inline delivery, the exact shape of the delivered receipt per destination provider, retry semantics, and that Sanity drafts are never published or deleted. This is exactly the mutation context an agent needs that the hint flags alone 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-loads the core action and prerequisite before the receipt details, and most sentences carry behavioral weight. It is dense and long-winded in the receipt enumeration, but that detail is genuinely useful for a no-output-schema tool.

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

Completeness4/5

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

With no output schema, the description compensates well by describing the delivered receipt fields, degradation reasons and failure behavior. The only meaningful omission is any description of the id parameter and the distinction between the two input fields.

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?

The description never mentions the id or workspaceId parameters, so it adds nothing beyond the schema. With only 50% schema description coverage, the required id parameter is documented nowhere at all, leaving a real gap the description should have filled.

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?

Names a specific verb and resource ('Approve one article: the human's act, in one call') and immediately scopes what approval means in this product. It distinguishes itself from siblings like run_gate, deliver_draft and delivery_status by stating it performs approval plus delivery in one act with no separate deliver step.

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

Usage Guidelines4/5

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

Explicitly states the precondition ('refuses unless the last run_gate check passed') and the intent ('record an approval the user gave explicitly'), which tells the agent when this tool is appropriate. It also clarifies that delivery happens inline rather than via a separate step, implicitly steering away from the deliver_draft sibling, though it never names that alternative outright.

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

approve_profileApprove profileA
Destructive
Inspect

Records that the human approved their profile. The summary passed (business, audience, voice, language and the proposed topics) is stored verbatim as what was approved. complete_onboarding, plan_topics and the quarter planner all refuse with degraded reason profile-not-approved until this has been called once. Approving again after a change is normal and expected; the timestamp moves every time.

ParametersJSON Schema
NameRequiredDescriptionDefault
summaryYes
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, and the description adds real context beyond them: the summary is persisted verbatim, re-approval moves the timestamp each time, and other tools gate on this call. It never explains why destructiveHint is set (what prior approval state is replaced), leaving a small gap for a write operation.

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

Conciseness5/5

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

Front-loaded with the action, then each subsequent sentence earns its place: persistence semantics, downstream dependency, and re-approval behavior. No filler or repetition of the tool name.

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 2-parameter mutation with no output schema, the description covers purpose, persistence, gating behavior, and repeat-call semantics. It stops short of describing permissions/auth requirements or what the caller receives back beyond the implied timestamp, which are minor gaps here.

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 only 50%, and the undescribed 'summary' parameter is exactly the one the description compensates for by enumerating its intended content (business, audience, voice, language, proposed topics) and stating it is stored verbatim. The workspaceId semantics are left to the schema, but overall this does more than the baseline of 3.

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

Purpose5/5

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

States a precise verb+resource: it records a human approval of their profile. An agent can immediately distinguish this from get_profile (read) and update_profile (edit) because the description frames the call as a committed approval record rather than a mutation of profile fields.

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 context for when to call it: downstream tools (complete_onboarding, plan_topics, the quarter planner) refuse with profile-not-approved until it has been called once, and re-approval after a change is explicitly expected. It does not, however, contrast itself with the sibling update_profile, so no explicit alternative/exclusion is stated.

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

archive_postArchive postA
DestructiveIdempotent
Inspect

Retire an article from the queue, the calendar, the planner, the link graph and next_write. Nothing is deleted: the body and the paid brief stay in the database and get_post still reads it. Without confirm this returns a dry run (degraded reason confirm-required) describing what would be retired: status, whether it has a body and how many words, and which calendar day it occupies; confirm: true applies it. Archiving is idempotent (alreadyArchived: true). If the result carries danglingTopicLink, a topic still points at the retired article. Use unschedule_post to only free the calendar day.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
confirmNo
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4.8/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: nothing is deleted and body/brief remain readable via get_post, the confirm-gated dry run returns a specific degraded reason, archiving is idempotent (alreadyArchived), and danglingTopicLink signals a residual topic reference. This goes well past destructiveHint/idempotentHint.

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 non-destructive guarantee are front-loaded, and every sentence carries distinct information (scope, dry run, idempotency, dangling link, alternative). The dense compound sentences with semicolons are efficient but border on cramped.

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 documents the return shape (dry-run fields: status, body presence, word count, calendar day) and result flags (alreadyArchived, danglingTopicLink). Nothing needed to invoke or interpret the tool 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 description coverage is only 33% (workspaceId only), so the description must compensate. It thoroughly explains the confirm parameter's two modes but never explicitly defines id. It adds real meaning for confirm while leaving id contextually inferred.

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 (retire/archive) and resource (article) plus the exact scope of removal: queue, calendar, planner, link graph, and next_write. It distinguishes itself from the sibling unschedule_post by naming what that tool does instead.

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 tells the agent when to use this tool versus the alternative: 'Use unschedule_post to only free the calendar day.' It also explains the dry-run-vs-apply condition (confirm required to actually retire).

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

archive_topicArchive topicA
DestructiveIdempotent
Inspect

Retire one topic-bank question by term or topicId. Nothing is deleted: the measured metrics and the citability brief were paid for out of the user's DataForSEO balance, so the row stays and only disappears from the reads that rank, plan, dedupe and re-measure. Archiving the same topic twice is not an error (alreadyArchived: true, and the original archivedAt is kept). hadMeasuredMetrics and hadBrief say what the workspace loses from ranking. articlePostId names the linked article, which is not modified. Re-adding the same term through add_topics brings the row back with its metrics and brief (reported there as resurrected), so an archive is always reversible. Degraded with reason topic-not-found when no topic matches.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYes
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: annotations say destructive=true/idempotent=true, but the description explains that nothing is deleted, that the row merely drops out of ranking/planning reads, that a repeat archive is not an error and keeps the original archivedAt, that hadMeasuredMetrics/hadBrief/linkage are preserved, and that the effect is fully reversible via add_topics. This is rich, non-obvious behavioral disclosure that the structured fields cannot carry.

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 one-line purpose before expanding into behavior. It is long, but nearly every sentence carries distinct, decision-relevant information (idempotency, reversibility, return fields, error case), with only mild redundancy around 'nothing is deleted' vs. the metric-preservation detail.

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 proactively documents the response surface (alreadyArchived, archivedAt retention, hadMeasuredMetrics, hadBrief, articlePostId, and the topic-not-found degradation). Combined with the reversibility and idempotency notes, an agent has everything needed to call and interpret this tool correctly.

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 only 50% and the undocumented 'topic' param carries the important semantics; the description supplies them by clarifying it accepts either a term or a topicId. It does not add much to workspaceId, which the schema already documents, so it falls short of a 5.

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 precise verb+resource: 'Retire one topic-bank question by term or topicId.' The agent immediately knows what is being acted on (a topic-bank question) and how it is identified, which distinguishes it from sibling tools like archive_post or merge_topics.

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 operational context — it disappears from the reads that rank, plan, dedupe and re-measure, is reversible by re-adding via add_topics, and degrades with topic-not-found. It names add_topics as the undo path but never explicitly frames when an agent should archive rather than merge_topics or list_topics-first.

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

calendar_viewView calendar monthB
Read-only
Inspect

Show a month of the content calendar: each day is occupied or free, with post ids and statuses.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
monthYes
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description usefully adds what is returned (per-day occupancy plus post ids and statuses), but says nothing about pagination, timezone, or how the current workspace is resolved.

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 sentence with no wasted words, front-loading the verb and resource before the output shape.

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

Completeness3/5

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

With no output schema, the description does roughly cover the return shape, and annotations cover the safety profile. But it leaves the required year/month semantics undocumented and never separates this tool from 'list_calendar', which an agent needs in order to choose correctly.

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 only 33%: 'year' and 'month' carry no descriptions, and the description only hints at a single month. It adds no format, range, or semantics beyond the schema and does not compensate for the undocumented required parameters.

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

Purpose4/5

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

States a specific verb and resource ('Show a month of the content calendar') and describes the shape of the result (day occupied/free, post ids, statuses). However, it does not distinguish itself from the sibling 'list_calendar', which an agent could easily confuse with it.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no prerequisite (e.g. which workspace), and no disambiguation from the near-identical sibling 'list_calendar'. Usage is only implied by the tool name.

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

check_ai_accessCheck AI crawler accessA
Read-only
Inspect

Which AI crawlers the site's robots.txt lets in, per bot, at the home page and at a content path. Free, read-only. Without url it checks profile.siteUrl, and the content path is the blog prefix import_sitemap detected. bots groups each crawler as search (behind an AI product's citations), user (a fetch a person asked for; honorsRobots false means the operator says it may ignore robots.txt) or training (model training only; blocking it does not remove the site from that operator's answers, it is the owner's choice). findings is ordered by severity: googlebot-blocked, robots-unreachable and search-bots-blocked are critical, user-bots-blocked and cloudflare-edge are warnings, training-bots-blocked and llms-txt-missing are informational. There is no score. It reads robots.txt, /llms.txt and the home page headers only: a CDN or firewall can still block a bot robots.txt allows, which is what cloudflare-edge warns about.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover safety (readOnly, non-destructive, openWorld), yet the description adds substantial context: it reads only robots.txt, /llms.txt and home-page headers, so a CDN or firewall can still block an allowed bot, and it explicitly states there is no score. The honorsRobots semantics and bot grouping definitions are behavior an agent could not infer.

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 purpose, then defaults, then the bots/findings semantics. It is long and packs several distinct ideas into run-on sentences, but nearly every clause carries needed meaning given there is no output schema.

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 defines the bots groups (search/user/training), the honorsRobots flag, and the severity ordering of findings, plus what the tool cannot see. An agent has everything required to call and interpret it.

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

Parameters4/5

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

Schema coverage is 50% — url is undocumented in the schema, and the description compensates by explaining the url-omitted fallback to profile.siteUrl and the content-path derivation. workspaceId is already documented in the schema, so it needs no further elaboration.

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: which AI crawlers the site's robots.txt lets in, per bot, at the home page and at a content path. No sibling tool does anything comparable, and the scope (robots.txt/llms.txt/headers) makes it unmistakable.

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 context for calling it — without url it checks profile.siteUrl and the content path is the blog prefix import_sitemap detected — so the agent knows the defaults. It does not name exclusions or alternatives, but no sibling overlaps this function.

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

complete_onboardingComplete onboardingA
Idempotent
Inspect

Finishes setup once the profile has business name, description, audience, site URL and language, and 12-15 search phrases are stored with add_topics. Deterministic: no model call, and DataForSEO is optional. With credentials connected it measures the topics no paid call has covered in one batch (~USD 0.115), then builds a citability brief for the best-evidenced topic (one SERP, ~USD 0.004); mode comes back validated. Without credentials it spends nothing and returns a first brief with mode: preview, built from the topic the founder named, with every market signal unmeasured (dataConnected: false is not an error; credentials are a persistent secret collected in the web app). Does not use the brand or competitor names as seeds. Reports the data state in one vocabulary: observed (the provider returned a number, 0 included), unavailable (asked, nothing reported), unmeasured (never asked). measurement.attempted / answered / unanswered names the topics DataForSEO did or did not answer for, alongside measurement.reportedVolume and measurement.aiVolumeSignal. signals covers the whole bank: queriesChecked, reportedVolume (0 counts), aiVolumeSignal (above zero only), aiOverviewFound, relatedQuestions, and noVolumeReported (true when no topic carries a provider-reported volume, which is normal for long-tail questions). firstBriefEvidence names what the pick rested on: volumeStatus, aiVolumeStatus, aiOverview (found | absent | unmeasured), relatedQuestions, citedDomains, ownSite, serpObserved, and rule (volume-signal | serp-evidence | unranked). firstBriefObserved is the raw SERP verbatim (AI Overview state, cited domains, People Also Ask, result titles, builtAt) or null when none was read. analysisRequest names the tool (submit_topic_analysis), the topic, and the exact strings admissible as evidence for the gaps, angles and intent-grouped questions it asks for. firstBriefAnalysis is what is already stored, if anything. A partial measurement still returns status ready. A ready result activates the workspace (idempotent); activationUrl is the app root.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A3.8/5.0
Behavior4/5

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

Far exceeds the annotations, which only declare non-read-only, open-world, idempotent, non-destructive. The description adds determinism ('no model call'), cost estimates (~USD 0.115 / ~USD 0.004), the credentials-optional branch, the validated vs preview mode semantics, and the explicit caveat that dataConnected:false is not an error, and that a partial measurement still returns ready.

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

Conciseness3/5

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

The opening sentence is well front-loaded and states purpose, precondition and determinism. However the remainder is an undifferentiated block that mixes cost, auth branching, response vocabulary and field-by-field return documentation into dense prose, making it hard to scan; some of the measurement/signal field detail could be tightened.

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 and a complex, branching operation, the description carries the full burden and largely succeeds: it documents mode values, dataConnected semantics, the observed/unavailable/unmeasured vocabulary, the signals and firstBriefEvidence fields, and activationUrl. It is close to complete for an agent to interpret the result, with only minor ambiguity remaining.

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?

With a single optional parameter and a 100% schema description coverage, the schema already defines workspaceId's meaning and its runtime fallback. The description adds no further parameter-level guidance, so the 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 action (finishing setup/onboarding) and its completion conditions: profile fields populated and 12-15 search phrases stored via add_topics. It names related siblings (add_topics, submit_topic_analysis) so the agent can locate it in the workflow, though it never says explicitly how it differs from the other research/planning tools.

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

Usage Guidelines4/5

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

Gives a concrete precondition for calling it (profile complete + topics stored) and clearly partitions behavior by credential state (with credentials: measure + brief, mode validated; without: preview, no spend). It stops short of naming alternatives to use instead if the precondition is not yet met, so the agent must infer that gap.

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

dataforseo_statusDataForSEO statusA
Read-only
Inspect

Whether DataForSEO is connected, the account balance in USD (balanceUsd and totalUsd, rounded to cents), and what seodraft has already spent from it: spentTotal and spentLast30d in USD at thousandth-of-a-dollar precision, with httpRequestsTotal and httpRequestsLast30d counting the paid HTTP requests behind that spend (one metrics batch is three requests). Also returns rates, the per-endpoint price map used for estimates, and rateSources, saying for each endpoint whether that price came from the account's own rate card or the public list; there is no platform DataForSEO account, credentials are always the user's own. measurementAvailable answers whether this workspace can measure anything: false without credentials or when the account lookup fails, returned degraded: true with reason missing-credentials, the same refusal add_topics gives. Free to call. Never returns the password. signals is the stored topic bank in the observed/unavailable vocabulary: topics, queriesChecked, reportedVolume (0 counts), aiVolumeSignal (above zero only), aiOverviewFound, relatedQuestions, unmeasured, complete (every topic answered for) and noVolumeReported (no topic carries a reported volume, normal for long-tail questions). limits returns perRunUsd, perDayUsd and windowHours, the ceilings the next paid call is checked against, and spentLast24h is what has already been spent inside that rolling window.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A3.9/5.0
Behavior5/5

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

With readOnlyHint/destructiveHint already covering safety, the description still adds a lot: credentials are always the user's own with no platform account, the password is never returned, 'free to call', and measurementAvailable=false degrades with reason missing-credentials mirroring add_topics. These are concrete behavioral facts an agent cannot get from the annotations.

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

Conciseness3/5

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

Front-loaded with the connectivity answer, but the body is a single semicolon-chained run-on packing rate maps, rateSources, signal vocabulary and limits into one breath. It is dense and hard to scan, though for a tool with no output schema most of that content is load-bearing.

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?

There is no output schema, so the description carries the full return-value burden and does so thoroughly — field-by-field meaning of balance, spend, signals vocabulary, limits and spentLast24h. An agent has everything needed to interpret the response.

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?

Only one optional parameter (workspaceId) and schema coverage is 100%, so the schema already documents it fully, including the current-workspace default. The description's 'this workspace' phrasing adds nothing beyond the schema; baseline 3.

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

Purpose4/5

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

The description states a specific resource — DataForSEO connection status plus account balance, spend, rates and limits — with concrete field names (balanceUsd, spentLast30d, measurementAvailable). It is unambiguous what the tool is, but it never explicitly distinguishes itself from siblings (e.g. refresh_metrics, check_ai_access), which all touch related measurement concepts.

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?

'Free to call' is useful cost guidance, and the degraded/missing-credentials clause hints at when the answer is unusable, but there is no explicit statement of when to call this versus a sibling or what to do with the result. Usage is only implied.

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

deliver_draftRe-deliver draft to CMSA
DestructiveIdempotent
Inspect

Re-deliver one already approved article to the workspace's destination as a draft: a file in its git repository, or a draft document in its Sanity dataset. approve_post already delivers on approval, so this is the retry and the re-send after an edit, not the normal path. Requires the last run_gate check to have passed and the article to be ready (approve_post first); otherwise it refuses with degraded reason gate-failed or not-ready. It never publishes, never deletes and never removes the draft flag: publishing stays the human's. Git (provider github): the file is written with draft: true forced, whatever key the destination maps that to. Delivering the same article again overwrites the same path, so it is safe to repeat; if the slug changed since the last delivery the new path is written and previousPath names the old file, which is left in place for the human to delete. Returns path, commitSha, htmlUrl (the file on GitHub), commitUrl, updated (false on the first delivery) and pendingImageSlots: the pictures the article asked for and nobody uploaded, which the human adds in the CMS. Sanity (provider sanity): it creates or patches the draft drafts.seodraft-<id>; re-delivering patches only the fields seodraft maps, so an author, category or image set in Studio survives. Returns documentId, studioUrl (opens the draft in Studio), updated, pendingImageSlots and degradations: what the destination's Portable Text could not carry (kind image-skipped with the image URL, or converter with what was flattened), which the human fixes in Studio. Other degraded reasons: no-target (nothing configured in Profile -> Publishing), no-token, secrets-key-missing, github-error or sanity-error (with status and the CMS's own message).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare the safety profile (readOnly=false, idempotent=true, destructive=true, openWorld=true), but the description adds substantial behavior on top: it never publishes/deletes, forces draft:true in git, overwrites the same path on repeat, handles slug changes via previousPath, patches only seodraft fields in Sanity, and enumerates degraded reasons (no-target, no-token, secrets-key-missing, github-error, sanity-error). This is exactly the added context the 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 key differentiator (retry vs normal path) and prerequisites, and every sentence carries behavioral or return-value information. It is nonetheless a dense single block of ~1500 characters; some return-field detail could be tightened, though with no output schema much of it is load-bearing.

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 a mutation-style tool, the description carries the full burden and does so: it documents prerequisites, provider-specific behavior (github vs sanity), idempotency/overwrite semantics, returned fields (path, commitSha, htmlUrl, documentId, studioUrl, updated, pendingImageSlots), and the complete set of degraded reasons. An agent has everything needed 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 50%: workspaceId is documented in the schema but id has no schema description. The description only indirectly identifies the parameters ('one already approved article', 'the workspace's destination') without stating that id is the article identifier or clarifying workspaceId behavior, so it does not fully compensate for the undocumented id parameter. Baseline 3 is appropriate given partial schema coverage and only indirect param meaning in the description.

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 ('Re-deliver one already approved article ... as a draft') and explicitly positions itself against the sibling approve_post, calling itself 'the retry and the re-send after an edit, not the normal path'. An agent can distinguish it from approve_post and upsert_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?

Gives explicit preconditions ('Requires the last run_gate check to have passed and the article to be ready (approve_post first)') and an explicit exclusion ('not the normal path'), plus the failure modes when the conditions are unmet (gate-failed, not-ready). Nothing about when to select this tool is left to inference.

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

delivery_statusDelivery statusA
Read-only
Inspect

Where this workspace delivers drafts, plus whether a token for that provider is saved. Never returns the token. provider is github or sanity. For github: repo, branch, path template, body format, label and the frontmatter mapping; check is a live read of the repository and the branch with that token: ok plus permissions.push, or a reason (no-target, no-token, secrets-key-missing, repo-not-found, branch-not-found, no-push, github-error). For sanity: label, the mapping of canonical fields to Sanity field names, and sanity with projectId, dataset, documentType, studioUrl, slugField, bodyField, languageField, dateType and tables; check is a count query of published documents of that type plus a dry-run write: ok, canWrite and documentCount, or a reason (no-target, no-token, secrets-key-missing, dataset-not-found, sanity-unauthorized, no-write, sanity-error). check is null when nothing is configured. Free to call.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A3.7/5.0
Behavior5/5

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

With readOnlyHint and destructiveHint already set, the description goes far beyond annotations by disclosing token non-disclosure, provider-specific return fields, live repository reads, dry-run writes, push permission checks, detailed failure reasons, and the null-when-unconfigured case. This is unusually rich behavioral detail.

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

Conciseness4/5

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

The purpose is front-loaded in the first sentence, and the provider-specific detail is necessary given the absence of an output schema. The dense semicolon-heavy paragraph is information-rich but could be easier to scan, keeping it just short of a 5.

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?

Because there is no output schema, the description must carry return-value documentation, and it does so thoroughly for both providers, including check outcomes, permission fields, counts, and null configuration. Nothing essential for correct invocation or interpretation appears 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% for the single workspaceId parameter, and the schema already documents its fallback behavior. The description adds no syntax or format detail beyond the schema, so the baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific purpose: reporting where a workspace delivers drafts and whether a provider token exists, with provider-specific fields. It clearly distinguishes the status/configuration role, but it never acknowledges or contrasts with siblings like deliver_draft, so an agent gets no explicit routing signal.

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

Usage Guidelines2/5

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

The description explains what information is returned but gives no explicit guidance on when to call this versus alternatives such as deliver_draft or list_workspaces. 'Free to call' is a cost note, not a usage condition, so the agent must infer the appropriate context.

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

get_linkgraphGet internal link graphA
Read-only
Inspect

List posts as internal-link targets (id, slug, title, description, headings) plus the template each one used, so the next article can take a different shape. Includes headings so targets can be matched by topic.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds the output shape (templates and headings for topic matching), but discloses no pagination, rate, or scoping behavior beyond what annotations provide.

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

Conciseness4/5

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

Two compact sentences, front-loaded with what is returned and followed by the purpose. No padding, though the closing clause about headings partly restates the earlier field list.

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 carries the return-shape burden by listing the fields, and the tool is a simple optional-param read. Only pagination or result-size behavior is absent, a minor gap for this read-only list tool.

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

Parameters3/5

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

The single workspaceId parameter is fully documented in the schema (100% coverage), including its default behavior. The description adds nothing about it, which is acceptable given the schema does the work, so the 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 concrete verb and resource ('List posts as internal-link targets') and enumerates the returned fields (id, slug, title, description, headings, template), which distinguishes it from the plain list_posts sibling by the linking purpose. It never names list_posts explicitly, so the differentiation is implied rather than foregrounded.

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?

The phrase 'so the next article can take a different shape' conveys the intent (picking internal-link targets before writing), which implies usage. There is no explicit when-not guidance and no alternative tool named, so it stays at implied context rather than routing.

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

get_postGet postC
Read-only
Inspect

Get one post by id. brief is this article's editorial plan (null until written with upsert_post); serpBrief and customInstructions are the paid Google SERP research, separate from brief, the editorial plan. standard summarizes the rules a draft has to pass.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral/data context – that `brief` is null until upsert_post writes it, and that `serpBrief`/`customInstructions` are paid SERP research distinct from `brief` – but says nothing about errors (e.g. missing id) or the read's scope.

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

Conciseness3/5

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

Front-loads the core action well with 'Get one post by id.' However, the middle sentences about brief/serpBrief/customInstructions are tangled and partly redundant ('separate from `brief`, the editorial plan' re-explains `brief`), making them harder to parse than they need to be.

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

Completeness3/5

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

With no output schema, field semantics are valuable, and the description does explain several returned fields. But it explains only a subset, gives no guidance on the `id` parameter, and omits any concurrency/error behavior, so a get-by-id tool remains only partially specified.

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 coverage is 50%: workspaceId is documented in the schema, while the required `id` is undocumented. The description, however, spends its words on return fields (brief, serpBrief, customInstructions, standard) and adds no semantics for either parameter, so it fails to compensate for the gap on `id`.

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: 'Get one post by id.' Naturally distinguishable from list_posts (single vs many), but it never names or explicitly contrasts with any sibling, so the differentiation is left implicit.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance. The mention of upsert_post is only a note about when `brief` becomes non-null, not routing advice for choosing this tool over list_posts or get_profile. Usage must be inferred from the tool name alone.

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

get_profileGet business profileA
Read-only
Inspect

Read the workspace business profile. evidence is the bank, split in two: accepted is what an article may lean on and pending is what you proposed and the human has not ruled on yet; citing a pending piece in brief.evidence fails the rules as evidence-unaccepted. profileApprovedAt is null until the human approved the summary with approve_profile. siteInventory summarises the last import_sitemap run (status, pageCount, contentPages, contentPrefix, importedAt), or is null when the site was never imported. Every piece carries weakFirsthand: true means a classifier read it as a general market claim rather than something this business measured or lived. It is advisory, it never changed the status, and the flagged pieces sort to the top of the review queue. Flagged pending pieces are not accepted evidence; citing one in brief.evidence fails the rules as evidence-unaccepted.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A3.9/5.0
Behavior5/5

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

Annotations already establish it as a safe read (readOnlyHint=true, destructiveHint=false), and the description goes well beyond that: it explains the accepted/pending split, that profileApprovedAt is null until approve_profile runs, that siteInventory reflects the last import_sitemap, and that weakFirsthand is advisory-only and never alters status. That is rich domain behavior an agent cannot infer 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.

Conciseness3/5

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

Purpose is front-loaded and the info density is high, but the description is bloated and partly redundant: the rule that citing a pending piece in brief.evidence 'fails the rules as evidence-unaccepted' is stated twice, wasting space. It is more repetition than an 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?

With no output schema, the return shape is entirely on the description, and it covers the profile's key structures (evidence bank, approval timestamp, site inventory, firsthand flag) thoroughly. For a read-only, single-optional-param tool this is complete enough to call correctly.

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

Parameters3/5

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

Schema coverage is 100% with a single optional workspaceId already fully documented in the schema (including the default behavior). The description adds no parameter-level detail, so the 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 clear verb+resource: 'Read the workspace business profile.' The read orientation implicitly distinguishes it from the update_profile sibling, but it never names that alternative or explicitly contrasts them, so it stops short of full sibling differentiation.

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 only implied by explaining what the returned fields mean. It references approve_profile and import_sitemap as related concepts but does not state when to choose get_profile over alternatives or any preconditions for calling it.

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

get_skillGet writing pipelineA
Read-only
Inspect

Returns the seodraft write pipeline (brief, evidence and the rules) used when drafting an article.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnly, non-destructive, and closed-world, so the safety profile is covered. The description adds content-level context about what the pipeline comprises (brief, evidence, rules), but says nothing about config freshness, whether the pipeline can be overridden, or what happens if none exists.

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

Conciseness5/5

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

A single sentence with no filler that front-loads the verb and resource and then qualifies the return content. Every clause earns its place.

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

Completeness4/5

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

For a no-param, read-only getter with no output schema, the description must at least signal what comes back, and it does (brief, evidence, rules). It is close to complete, with only minor gaps around the exact shape/limits of the returned pipeline.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-param tool applies. The description correctly does not invent parameter detail.

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 a specific resource (the seodraft write pipeline), and enumerates what the pipeline contains (brief, evidence, rules). It is readily distinguishable from the mutation/listing siblings, though it does not explicitly name a sibling it differs from.

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 only implied through 'used when drafting an article' — an agent can infer it is the config/pipeline fetch, but there is no explicit when-to-use vs. alternatives guidance and no mention of prerequisites or ordering relative to drafting tools.

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

import_sitemapImport sitemapA
DestructiveIdempotent
Inspect

Read the site's sitemap into the workspace inventory of pages it already published, so add_topics can withhold a phrase an existing page covers. Free: no DataForSEO, and it never downloads a page: it reads sitemap files only, so every page title is inferred from its URL slug (titleSource slug), never read. Without sitemapUrl it discovers one from profile.sitemapUrl, then the Sitemap lines of robots.txt, then /sitemap.xml and /sitemap_index.xml. Needs profile.siteUrl; a sitemapUrl on another host is refused (off-host). Idempotent: re-running updates the inventory, and pages that left the sitemap drop out of it. Bounded at 20 sitemaps, 5,000 URLs and about 25 seconds; past that status is partial and sitemapsSkipped says why. contentPrefix is the path the blog lives under (detected, e.g. /blog); pass it only when the detection is wrong. If it fails, carry on: nothing else depends on it.

ParametersJSON Schema
NameRequiredDescriptionDefault
sitemapUrlNo
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.
contentPrefixNo

TDQS

A4.9/5.0
Behavior5/5

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

Goes far beyond the annotations: no DataForSEO cost, never downloads pages, titles inferred from slugs (titleSource slug), off-host sitemapUrl refused, idempotent re-run semantics including pages dropping out, and explicit bounds (20 sitemaps, 5,000 URLs, ~25s) with partial status and sitemapsSkipped. Nothing here contradicts readOnly=false/destructive=true/idempotent=true; the removal-on-reimport note actually substantiates destructiveHint.

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, routing, and the cross-tool rationale are front-loaded, and almost every clause carries new information (cost, discovery order, bounds, failure tolerance). It is dense rather than bloated, though the single long paragraph could be broken up for scanning.

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 discloses the outcome shape (inventory updated, partial status, sitemapsSkipped) and the preconditions, limits, and dependency-free failure mode. An agent has everything needed to decide whether and how to call it.

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 only 33% and the description compensates fully: it explains sitemapUrl's optionality plus the four-step discovery fallback, defines contentPrefix as the blog path with a detection default and an when-to-pass rule, and reinforces workspaceId scoping. These are semantics no structured field supplies.

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 ('Read the site's sitemap into the workspace inventory of pages it already published') and ties it to a downstream sibling ('so add_topics can withhold a phrase an existing page covers'). An agent can distinguish this from add_topics or research_topic 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 Guidelines5/5

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

Explicitly tells the agent when discovery applies ('Without sitemapUrl it discovers...'), when to override contentPrefix ('pass it only when the detection is wrong'), a hard precondition ('Needs profile.siteUrl'), and whether failure matters ('carry on: nothing else depends on it'). This is unusually complete routing guidance.

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

list_calendarList calendar entriesA
Read-only
Inspect

List queue entries with date, status, title and term. Article bodies and briefs are not included; get_post returns one article and list_posts the full queue.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond that: exactly which fields come back and that 'article bodies and briefs are not included', which prevents an agent from expecting full content. Pagination behavior is not mentioned.

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

Conciseness5/5

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

Two tight sentences, zero waste. The field list and exclusions are front-loaded, and the routing to alternatives follows immediately.

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?

No output schema exists, so the description must cover return values, and it does by naming the fields and stating the two exclusions. Read-only annotations cover the safety dimension. It stops short of pagination limits and the relationship to calendar_view, so it is strong but not fully complete.

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

Parameters3/5

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

Only one parameter (workspaceId) and schema description coverage is 100%, so the schema already carries the full semantic load, including the default-workspace behavior. The description adds nothing further about it. 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+resource ('List queue entries') and enumerates the returned fields (date, status, title, term), which distinguishes it from the article-oriented siblings. However, it never addresses the sibling calendar_view, and the 'queue entries' phrasing sits oddly against the name/title 'calendar', leaving a small ambiguity about scope.

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

Usage Guidelines4/5

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

Explicitly routes the agent: 'get_post returns one article and list_posts the full queue', giving a clear alternative and the condition that selects it. The distinction between this tool and list_posts is only implied (this appears to be the calendar-visible subset), and no guidance covers the calendar_view sibling.

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

list_evidenceList evidenceA
Read-only
Inspect

List the evidence bank with each piece's id, kind, text, source, who added it, its status and when it was accepted. Without a status it returns everything. accepted is what brief.evidence may cite; pending is waiting for the human in the app; rejected is what they said no to, and citing either one fails the rules as evidence-unaccepted. Free to call.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds meaningful domain behavior: status filtering semantics, the rule that citing unaccepted evidence fails rules, and the 'Free to call' cost signal. It doesn't describe pagination or result ordering, keeping it from a 5, but it goes well beyond the annotations.

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

Conciseness4/5

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

Two sentences are front-loaded with the return contents and then the status filter semantics. Every sentence adds value, though the second sentence is dense and could be split for readability. No wasted filler.

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

Completeness4/5

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

For a 2-parameter read tool with no output schema, the description supplies the necessary behavioral context: status filtering semantics, default behavior, and the evidence-acceptance rule. It omits pagination/ordering and workspaceId fallback context, which are minor gaps given annotations cover safety and the schema documents workspaceId.

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 50% and the status enum is defined in the schema, but the description adds real meaning: status omission defaults to returning everything, and the three enum values are contextualized with what each means for downstream rule checks. workspaceId is not described beyond the schema, but the main semantic parameter is well covered.

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

Purpose4/5

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

The description clearly states a specific verb (list) and resource (evidence bank) and enumerates the returned fields (id, kind, text, source, adder, status, acceptance time). It doesn't explicitly contrast with a sibling tool, but the returned-field enumeration and 'evidence bank' scope make the tool's unique role clear enough that an agent can identify it.

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 by the status semantics: omitting status returns everything, and accepted vs pending vs rejected meanings are explained. However, there is no explicit when-to-use vs alternative guidance, and no statement of when NOT to use it (e.g., for a single evidence item). The guidance is adequate but not comparative.

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

list_postsList postsC
Read-only
Inspect

List posts in the workspace queue.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered structurally. The description adds only the 'workspace queue' scope and says nothing about pagination, ordering, limits, or default workspace resolution, which is the main behavioral unknown for a list 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?

A single front-loaded sentence with zero filler. It is tightly sized, though arguably terse to the point of under-specification about what the listing contains.

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

Completeness3/5

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

For a simple, annotated read tool with a fully documented optional parameter, the definition is minimally sufficient to invoke correctly. It falls short on distinguishing this list from sibling list views and on describing what is returned or how results are bounded.

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

Parameters3/5

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

Schema description coverage is 100%, and the single optional workspaceId parameter is fully documented in the schema including the fallback behavior when omitted. The description adds no parameter meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource with a scope qualifier ('List posts in the workspace queue'), which is clear. However, it offers no differentiation from siblings like get_post, list_calendar, or calendar_view, so the agent must infer which listing tool to pick.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisite, and no named alternative. The agent is not told when this is preferred over list_calendar or calendar_view, both of which also surface post-related data.

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

list_topicsList topicsA
Read-only
Inspect

List topic-bank questions with the citability brief and, for every number, the state it is in: volumeStatus and aiVolumeStatus are observed (the provider returned a number; a reported 0 counts), unavailable (we paid to ask and it reported nothing for this term) or unmeasured (no paid call has covered it yet). null volume is never a zero and never a dash: it reads as "no exact-match volume reported", and long-tail questions routinely have none, which is not evidence of zero demand. source=estimate means nothing was measured. agentAnalysis is a reading submitted through submit_topic_analysis: provenance inferred, source agent, never a measurement; previewRank is the position a topic held before any provider number existed; editorNote is the founder's own angle. Archived questions are excluded; pass archived: true to list only the retired ones (they keep their metrics and brief and can be brought back by re-adding the term).

ParametersJSON Schema
NameRequiredDescriptionDefault
archivedNo
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, so safety is covered; the description adds real behavioral context beyond that: archived rows are filtered out and can be restored by re-adding the term, source=estimate means nothing was measured, and null reads as 'no exact-match volume reported' rather than zero. That is substantive disclosure an agent could not get from the annotations or schema.

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

Conciseness3/5

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

Front-loaded with the purpose, which is good, but the remainder is a single dense paragraph of comma-spliced clauses about volumeStatus, aiVolumeStatus, agentAnalysis, previewRank and editorNote. The information is useful yet the run-on structure makes it hard 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?

With no output schema, the description carries the return-value semantics itself and does so thoroughly for the key fields (volume statuses, source=estimate, agentAnalysis provenance, previewRank, editorNote). What it omits is pagination/limit behavior and the overall result shape, a minor gap for a read-only list tool.

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 only 50% (workspaceId documented, archived bare), and the description compensates by fully defining archived's two-way behavior — omit to exclude retired questions, pass true to list only them. It does not restate workspaceId, but the schema already handles that side.

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 concrete verb+resource: list topic-bank questions together with the citability brief. It is clearly distinct from write-side siblings like add_topics, merge_topics or propose_topics, but it never explicitly contrasts itself with the other read siblings (list_evidence, list_posts), so it stops short of full sibling differentiation.

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?

The only routing guidance is the archived branch: archived questions are excluded by default and archived: true lists only the retired ones. There is no statement of when to prefer this over suggest_topics/plan_topics/research_topic, so usage is implied rather than framed.

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

list_workspacesList workspacesA
Read-only
Inspect

The workspaces this account can open, one per site, with each one's id, name, site URL and the caller's role. The entry marked current is the one a call that omits workspaceId acts on. Read it first when the person works on more than one site, and pass the id of the site they mean as workspaceId to every other tool. Archived workspaces are left out.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description's value is in the semantics it adds: which entry is the implicit default when `workspaceId` is omitted, and that archived workspaces are excluded from results. It does not mention pagination or ordering, which are the only remaining behavioral gaps.

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 what the tool returns, followed by the default-selection rule and the call-to-action. Every sentence removes a concrete ambiguity; nothing is padding.

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 burden of describing the return shape and does so precisely (id, name, site URL, role, and the 'current' marker). It also covers the one exclusion rule an agent needs, leaving nothing essential to inference.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. The description does add meaning about `workspaceId` — that omitting it falls back to the 'current' entry — though that parameter belongs to sibling tools rather than this one, so it stops short of a 5.

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

Purpose5/5

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

The description states a specific verb and resource ('The workspaces this account can open') and immediately enumerates the returned fields (id, name, site URL, caller's role), which distinguishes it from every sibling list_* tool. An agent knows exactly what this tool yields 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 Guidelines5/5

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

It gives an explicit trigger ('Read it first when the person works on more than one site') and an explicit follow-up action ('pass the id of the site they mean as `workspaceId` to every other tool'). That is genuine when-to-use guidance plus routing to downstream tools, not just context.

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

merge_topicsMerge topicsA
Destructive
Inspect

Fold one topic-bank question into another when two phrasings are the same query. Both sides are named by term or topicId. Without confirm this is a dry run: same envelope, applied: false, nothing written, and plan says exactly what would move (article: move|keep-into|none, brief, metrics, metricsFilled, status). With confirm: true the survivor keeps the fresher paid brief, the measured or fresher metrics block (an estimate never overwrites measured numbers, and empty fields are filled from a measured loser instead of being dropped), the article link when only one side has one, and the most advanced status; from ends archived, never deleted. Refuses instead of losing work: article-conflict when both sides already have an article (it names both post ids; one article has to be archived first), same-topic, topic-not-found, into-archived.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromYes
intoYes
confirmNo
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations: it details dry-run semantics (same envelope, applied:false, nothing written, plan contents), the exact field-resolution rules for the survivor (fresher brief, measured-beats-estimate metrics, empty-field fill, article link, most advanced status), and that 'from' ends archived, never deleted. It also enumerates specific refusal errors (article-conflict, same-topic, topic-not-found, into-archived).

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 purpose, then the dry-run behavior, then the merge resolution rules, then refusals — a sensible order. It is a single dense paragraph with heavy parenthetical nesting, and the metrics-fill detail is more granular than most callers need, so it is thorough rather than maximally tight.

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?

There is no output schema, yet the description still defines the returned plan shape and applied flag, plus all failure modes and the archive-not-delete outcome. For a destructive, non-idempotent merge tool, nothing an agent needs 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?

With only 25% schema coverage, the description carries the load: it explains that 'from' and 'into' are named by term or topicId, that 'into' is the survivor and 'from' the archived side, and that 'confirm' toggles dry-run vs real write. This fully compensates for the undocumented schema properties.

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 ('Fold one topic-bank question into another') plus the precise condition that triggers it ('when two phrasings are the same query'). An agent can distinguish this from archive_topic or add_topics 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 Guidelines4/5

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

Gives a clear when-to-use condition (duplicate phrasings of the same query) and thoroughly documents the dry-run vs confirm:true workflow and the refusal conditions that block the call. It does not name sibling tools (e.g. archive_topic) as the alternative path, so routing guidance is implied rather than explicit.

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

next_writeGet next post to writeA
Read-only
Inspect

Return the next post to write: the earliest-dated post whose status is scheduled. Posts with no date sort last. Statuses ready, writing and failed are never returned: ready already has a body, and list_posts returns those. Returns null when nothing is scheduled. Use the term it returns for the write pipeline. standard is the short form of the rules that block a draft, carried here because this is the call you make before the first sentence exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true, so safety is covered. The description adds genuine behavioral detail: null is returned when nothing is scheduled, undated posts sort last, and three statuses are filtered out. The dangling clause about the 'standard' term being 'carried here' is opaque and slightly muddies rather than clarifies.

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

Conciseness3/5

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

The first four sentences are tight and front-loaded with the selection and null-return rules. The trailing sentences about 'the term it returns' and 'standard' are confusing, undefined, and appear to carry context that does not belong in a tool description.

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

Completeness4/5

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

For a one-optional-param read tool with no output schema and annotations covering safety, the description covers return semantics (null, sort order, filtered statuses) well. The ambiguous 'term'/'standard' passage is the only real gap in an otherwise sufficient definition.

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

Parameters3/5

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

Schema description coverage is 100% and the single workspaceId parameter is fully documented in the schema, including its default behavior. The description adds no parameter-level information, so 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+resource ('return the next post to write') and immediately defines the selection rule: the earliest-dated post whose status is scheduled, with undated posts sorting last. An agent can distinguish this from list_posts and get_post 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 Guidelines4/5

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

Explicitly excludes statuses ready, writing and failed and reasons why, and routes the agent to list_posts for those. The final line implies this is the pre-writing call, but it never states a positive 'use this when you are about to start drafting' instruction outright.

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

plan_topicsPlan topics onto calendarBInspect

Schedule topic-bank questions onto the queue. everyDays is the gap between articles (1 = daily, 7 = weekly). Defaults to 7. Attaches any citability brief, plus the founder's own angle when they wrote one, as writer instructions. Returns slots (term, rank, score, rule, basis) and excluded (term, reason, rank, score, rule, basis) saying why each topic took a slot or missed it, in the same observed/unavailable vocabulary as dataforseo_status.signals; reason beyond-slots means it ranked below the last slot, not that it was rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
nextNo
termsNo
everyDaysNo
startDateNo
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.
customInstructionsNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations only declare the safety profile (not read-only, not idempotent, not destructive), so the description adds real value: it discloses that citability briefs and the founder's angle are attached as writer instructions, that output splits into slots vs excluded with per-item reasons, and clarifies the 'beyond-slots' reason semantics. It does not cover permissions or re-run/idempotency effects, which matters for a non-idempotent write.

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 three dense but purposeful sentences; everyDays and the return-shape details each earn their place. It is slightly run-on and the long final sentence could be split, but there is little waste.

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

Completeness3/5

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

With no output schema, the description usefully explains the return shape (slots/excluded vocabulary), which is a real strength. However, for a 6-parameter scheduling write tool it still leaves next, terms, and startDate undefined, and offers no guidance on how topic-bank input is sourced, so an agent cannot call it fully correctly from the definition alone.

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 only 17% (just workspaceId), so the description must compensate. It does explain everyDays well (gap between articles, 1=daily, 7=weekly, default 7) and hints at customInstructions via the founder's-angle note, but leaves next, terms, and startDate entirely undocumented in both schema and description.

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: 'Schedule topic-bank questions onto the queue.' An agent can tell this writes to the calendar/queue rather than listing topics like list_topics. However it never contrasts itself with close siblings such as schedule_entry, add_topics, or propose_topics, so the boundary is inferred rather than stated.

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

Usage Guidelines2/5

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

The description says what the tool does but gives no when-to-use guidance, no prerequisites, and no alternatives in a crowded sibling set (add_topics, propose_topics, suggest_topics, schedule_entry). The reader must infer that this is the tool that places already-chosen topic-bank items onto the calendar.

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

propose_topicsPropose topics from profileBInspect

Propose topic-bank questions from the workspace profile (business name and competitors) via DataForSEO related keywords, ranked later by AI search volume. Costs the user about USD 0.014 per profile seed plus one AI volume batch, roughly USD 0.03 for a typical profile. Degraded with reason empty-profile (fill the profile), missing-credentials (connect DataForSEO), or spend-limit (a spend ceiling refused the run before any request; the spend object names the ceiling and nothing was charged).

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

B3.4/5.0
Behavior4/5

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

Annotations only give readOnly/openWorld/idempotent/destructive flags, so the description's cost model (~USD 0.014 per seed plus an AI volume batch, ~USD 0.03 typical) and the enumerated degraded reasons (empty-profile, missing-credentials, spend-limit) add substantial context beyond what is structured. It even clarifies that spend-limit refuses before any request and charges nothing. It stops short of saying whether proposed topics are persisted into the topic bank or merely returned, and whether repeat calls re-charge.

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 purpose is front-loaded in the first clause, and the cost and degradation sentences are dense but each carries actionable information (price estimate, remediation hints). The degradation sentence is a bit list-heavy but not wasteful.

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

Completeness3/5

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

With no output schema, the description carries the burden of explaining results, yet it never says what comes back (a proposed topic list? persisted topics?) though it does hint that ranking by AI search volume happens later, not in this call. Cost and failure modes are well covered, but the return behavior an agent needs is only implied.

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 workspaceId parameter is fully documented there, so the baseline is 3. The description does add the notion that the call is seeded by profile fields (business name and competitors), which gives useful semantic framing for what the tool consumes, but it says nothing extra about the workspaceId parameter itself.

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 (propose) and resource (topic-bank questions) plus the source signal (workspace profile business name/competitors via DataForSEO related keywords). It is clear on its own, but does not distinguish itself from close siblings like suggest_topics, plan_topics, or research_topic, leaving the agent to guess which topic-generation tool to pick.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance and no routing against the topic-generation siblings (suggest_topics, plan_topics, add_topics). The degraded-reason list hints at prerequisites (profile must be filled, DataForSEO connected) but frames them as failure modes rather than usage conditions.

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

refresh_metricsRefresh topic metricsA
Destructive
Inspect

Re-measure Google volume, AI search volume and intent for topics already in the topic bank. This is the only way to refresh measured metrics, and it is always a batch: three requests total, about USD 0.11 for the whole run whether you pass 1 term or 200. Priced per batch, not per term. Terms beyond 200 are dropped and reported as overflow. refreshed counts the terms DataForSEO actually answered for and unmeasured names the rest. The run is refused before spending, with degraded: true and reason: spend-limit, when its estimate would break the per-run or rolling 24h ceiling; the spend object carries the estimate, the ceiling and what was already spent in the window, and nothing is charged. archived names terms dropped before anything was priced because their topic is retired; they are never re-measured, so no money is spent on them.

ParametersJSON Schema
NameRequiredDescriptionDefault
termsYes
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations (which only flag destructive/expensive/non-idempotent) by disclosing concrete cost (~USD 0.11 per batch, priced per batch not per term), the 200-term overflow drop, the pre-spend refusal path with degraded:true and reason:spend-limit, and that archived terms are dropped before pricing so nothing is charged. This is exactly the operational context an agent needs before committing spend.

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 and fairly long, but front-loaded with the action and cost, then layered with constraints; each sentence carries distinct operational information. No filler or repetition, though it could be tightened slightly.

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 explains the meaningful return fields (refreshed, unmeasured, archived, spend object, degraded) and the failure semantics. Combined with the cost and cap 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.

Parameters4/5

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

Schema coverage is 50% (terms has no schema description), and the description compensates by defining what terms are measured, that the batch is capped at 200 with overflow reported, and how refreshed/unmeasured partition the input. workspaceId is left to the schema, so it isn't fully covered, but the description adds real meaning over 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 (re-measure) plus the exact resources measured (Google volume, AI search volume, intent) and the scope (topics already in the topic bank), and explicitly contrasts itself with the sibling family by being 'the only way to refresh measured metrics.' An agent can distinguish this from research_topic/add_topics 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 a clear usage condition ('only way to refresh measured metrics') and a hard prerequisite/caveat set: always batch, 200-term cap, spend-ceiling refusal, archived terms never re-measured. It does not name the alternative tool to use for brand-new topics, so the when-not boundary 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.

reschedule_postReschedule postB
DestructiveIdempotent
Inspect

Move an article to another YYYY-MM-DD date.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
dateYes
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so safety behavior is covered. The description adds the action (move article) and date format, but no additional context like auth needs, what happens to the previous schedule, 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.

Conciseness5/5

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

A single efficient sentence with zero waste, front-loading the core action and date format.

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

Completeness2/5

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

For a mutating tool with 3 parameters and sparse schema, the description is too minimal. It omits usage guidance, does not explain the required 'id' parameter, and provides no output or side-effect context beyond what annotations already state.

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 coverage is only 33% (only workspaceId has a description). The description clarifies the date format as YYYY-MM-DD, but the required 'id' parameter remains completely undocumented, and no other param details are added.

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

Purpose4/5

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

The description states a specific verb (Move) and resource (article) and gives the date format. It is clear what the tool does, but it does not differentiate from siblings like unschedule_post or schedule_entry, and 'article' vs the tool name 'post' may cause slight confusion.

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

Usage Guidelines2/5

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

No when-to-use guidance or alternatives are provided. The description does not indicate when to choose reschedule_post over unschedule_post, schedule_entry, or upsert_post.

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

research_topicResearch topic SERPA
Destructive
Inspect

Build a citability brief for one question: People Also Ask, related queries, cited domains, and an AI Overview check. The SERP is always requested with the AI Overview load, so aiOverviewRequested: true with aiOverview: false means Google serves none for this query, not that we did not look. Costs the user about USD 0.004 (one SERP including the AI Overview load) when the topic already has measured metrics, or about USD 0.116 when it must be measured first. A brief built in the last 14 days is returned from storage for free. refreshMetrics re-measures volume (about USD 0.11 extra); refresh_metrics covers more than one term. The whole call is priced and approved as one plan, so it can come back degraded with reason spend-limit before any request: nothing is charged and no brief is stored. It also refuses with reason archived-topic before estimating any cost when the topic is retired; re-adding the term brings it back.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYes
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.
refreshMetricsNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark destructive/open-world/non-idempotent, but description adds pricing, plan approval, spend-limit degradation with no charge/no storage, archived-topic refusal, 14-day cache, and AI Overview semantics. Rich beyond structured fields.

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

Conciseness5/5

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

Front-loads the purpose, then layers cost, caching, and failure behavior without filler. Length is justified by the number of non-obvious operational traits.

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?

Includes brief contents, cost model, caching, failure reasons, and AI Overview interpretation. With no output schema, this gives the agent enough to call and interpret results.

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?

WorkspaceId is documented in schema; description explains refreshMetrics' cost/effect and frames term as one question. With 33% schema coverage, it compensates for two of three parameters, though term format isn't specified.

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 'Build' and resource 'citability brief', and enumerates the brief's contents. The final clause 'refresh_metrics covers more than one term' implicitly distinguishes this single-question tool from the sibling bulk 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?

Clearly describes cost contexts, free cached briefs, refreshMetrics behavior, and degraded/refusal states. It does not explicitly state when to choose this tool over refresh_metrics, only that refresh_metrics handles more than one term.

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

run_gateCheck draft against the rulesA
DestructiveIdempotent
Inspect

Check a post against the seodraft rules. Two layers, one list of findings: the package rules measure shape (lengths, headings, internal links, placeholders, cannibalization) and the editorial rules measure the standard: a saved brief, at least three pieces of evidence that actually reach the article, the keyword in the title and the intro, a PPP intro, every H2 opening with the answer, no filler phrases, no generic closing heading, a template that differs from the last two posts, and image slots that match the body. Read get_skill for what each rule wants. Does not mark ready.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true and destructiveHint=true, and the description adds a useful behavioral note ('Does not mark ready') plus the two-layer evaluation model. But it never explains the destructive/'does not mark ready' tension or what state a run touches, which matters for a tool flagged destructive.

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

Conciseness3/5

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

Purpose and the 'Does not mark ready' caveat are front-loaded, which is good, but the long embedded enumeration of every editorial rule is dense and largely duplicates what get_skill is said to contain, costing readability.

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 usefully hints at the return shape ('one list of findings') and covers the two rule layers. Combined with the pointer to get_skill and the no-output caveat, an agent has enough to invoke it, though parameter semantics remain thin.

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 coverage is only 50%: workspaceId is documented in the schema while id has no description. The description says 'a post' but never maps that to the required id parameter or explains scoping/fallback behavior, so it fails to compensate for the undocumented required parameter.

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

Purpose5/5

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

States a specific verb and resource ('Check a post against the seodraft rules') and immediately scopes the work into two named layers (package rules, editorial rules), so an agent can tell it apart from siblings like approve_post or get_post. The closing 'Does not mark ready' sharpens the boundary further.

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

Usage Guidelines4/5

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

It names the companion tool to read ('Read get_skill for what each rule wants') and implies the contrast with approve_post through 'Does not mark ready'. However it never states the trigger conditions explicitly (e.g., run this before delivery/approval), so usage context is clear but not fully specified.

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

schedule_entrySchedule postB
DestructiveIdempotent
Inspect

Set a post status to scheduled. Optional ISO date (YYYY-MM-DD).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
dateNo
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

B3.2/5.0
Behavior3/5

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

The annotations already declare the operation is a non-read-only, idempotent, destructive write, so the safety profile is largely covered. The description adds only the ISO date format hint and nothing about what the destructiveHint implies (e.g. whether an existing status is overwritten) or permission needs, so it adds modest value.

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 short sentences with the action front-loaded and no wasted words. It is terse to the point of under-specification rather than overly verbose.

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

Completeness3/5

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

With no output schema and annotations covering safety, the description is minimally adequate but leaves real gaps: what happens when date is omitted (schedule immediately?), what the required id refers to, and how this differs from the listing/rescheduling siblings.

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 33% (only workspaceId is documented), so the description carries extra burden. It usefully specifies the date format (YYYY-MM-DD), but says nothing about the required id parameter, leaving the most important parameter to inference.

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 ('Set a post status to scheduled'), which is unambiguous on its own. However, it does not differentiate from close siblings like reschedule_post or unschedule_post, which an agent could easily confuse with it.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus reschedule_post, unschedule_post, or approve_post. The only usage-adjacent detail is that the date is optional, but no condition is given for omitting it or for choosing among the scheduling siblings.

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

submit_topic_analysisSubmit topic analysisA
DestructiveIdempotent
Inspect

Stores an agent-authored analysis of one topic's observed evidence: content gaps, angles and the People-Also-Ask questions grouped by intent. This is the only inference in the product (seodraft never calls a model, so gaps and angles only exist if sent), and it is stored with provenance inferred and source agent, never mixed into the observed numbers. Free: no provider call. topic is a term or a topicId. Every gap and every angle must carry evidence: one or more strings that match exactly what the workspace already holds: a cited domain, a result title, a People-Also-Ask question (from the topic's stored brief, returned by complete_onboarding as firstBriefObserved and analysisRequest.evidence) or one of the stored topic terms. Same rule applies inside paaGroups. A reference that matches none of them is refused with degraded: true, reason: unknown-evidence and unknownRefs naming the offenders; nothing is stored, and the reply carries the admissible evidence for a corrected resubmission. Other refusals: unsupported-finding (a gap or angle with no evidence), empty-analysis (no gap, angle or group), topic-not-found, archived-topic. In preview mode (no SERP read yet) the only admissible references are the stored topic terms: grouping the founder's own questions by intent is legitimate, a market gap claimed from nothing is not, and the stored basis records which happened (observed-serp, topic-bank or mixed). Used once per topic, after complete_onboarding or research_topic has produced the evidence to cite.

ParametersJSON Schema
NameRequiredDescriptionDefault
gapsNo
topicYes
anglesNo
paaGroupsNo
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4.5/5.0
Behavior5/5

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

Goes far beyond annotations: it discloses idempotent-once-per-topic behavior, provenance handling (never mixed into observed numbers), the free/no-provider-call nature, and a full catalogue of refusal codes (unknown-evidence with degraded:true and unknownRefs, unsupported-finding, empty-analysis, topic-not-found, archived-topic) plus what happens on refusal (nothing stored, admissible evidence returned).

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 purpose, then behavior, then usage. It is dense and long, but each sentence (refusal codes, evidence rule, preview mode) carries actionable detail rather than redundancy, so the length is largely earned.

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

Completeness4/5

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

For a complex, destructive, evidence-validating write tool with no output schema, the description covers the refusal surface, evidence contract, preview constraints, and provenance. Complete enough to invoke correctly, though the intent enum values and the exact shape of the success reply are left implicit.

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 20% schema description coverage, the description carries the burden and does so well: it explains topic as 'a term or a topicId', the exact evidence-matching rule for gaps/angles and inside paaGroups, and the preview-mode restriction. It doesn't enumerate the paaGroups intent enum values, a minor gap.

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: storing an agent-authored analysis of one topic's evidence (gaps, angles, PAA question groups). It clearly distinguishes itself from sibling tools like research_topic and complete_onboarding by being the only write path for inferred findings.

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 when-to-use: 'Used once per topic, after complete_onboarding or research_topic has produced the evidence to cite,' and clarifies the preview-mode case. It names triggering siblings but doesn't spell out a when-not alternative beyond the evidence prerequisites.

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

suggest_topicsSuggest related topicsAInspect

Suggest related questions from a seed (semantic related keywords, then Google suggestions). Set keep=true to merge into the topic bank. Costs the user about USD 0.03 per seed. Degraded if DataForSEO is missing, or with reason spend-limit when a spend ceiling refused the run before any request.

ParametersJSON Schema
NameRequiredDescriptionDefault
keepNo
seedYes
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4/5.0
Behavior5/5

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

The description adds rich behavioral context beyond annotations: it discloses cost (~USD 0.03 per seed), external dependency on DataForSEO, and a specific degradation reason ('spend-limit'). This is critical for an agent to understand side effects and failure modes, far exceeding what the readOnlyHint and openWorldHint provide.

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 tight sentences with zero waste, front-loading the tool's purpose, then key parameter behavior, then cost and failure modes. Every sentence earns its place.

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

Completeness4/5

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

For a tool with no output schema and 3 parameters, the description covers purpose, cost, dependency, and failure states well. It omits whether the suggestions are persisted or returned directly, and the seed parameter's expected format remains unspecified.

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 only 33%, with 'keep' lacking a description. The tool description clarifies that keep=true merges into the topic bank, compensating for that gap. However, the seed parameter is undocumented in both schema and description, leaving its format or expected input unclear.

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

Purpose4/5

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

The description clearly states a specific verb and resource: it suggests related questions from a seed using semantic keywords and Google suggestions. It distinguishes itself from siblings like add_topics (which just adds) and research_topic by naming its source methodology.

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?

The 'keep=true' instruction implies when to use the tool for merging versus not. However, there is no explicit guidance on when to use suggest_topics versus siblings like propose_topics or research_topic, which likely fill similar roles.

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

unschedule_postUnschedule postA
DestructiveIdempotent
Inspect

Take an article off the calendar without retiring it: status goes back to writing and the calendar day is freed for planning. The body, tldr, FAQs and brief are kept untouched. This is the inverse of schedule_entry, not a delete. Refuses with degraded reason not-scheduled when the article is not scheduled but still holds a day (move it with reschedule_post instead), and already-unscheduled when it is already a dateless draft. To retire an article instead, use archive_post.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag this as a non-read-only, destructive, idempotent mutation, but the description adds what the annotations cannot: the exact state transition (status back to writing, calendar day freed), what is preserved (body, tldr, FAQs, brief), and two named degraded-reason error codes for refusal. That is substantive behavioral disclosure beyond structured fields.

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

Conciseness4/5

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

Front-loaded with the core effect before the sibling routing and error cases, and every sentence carries information. Slightly dense as a single unbroken block, but there is no filler to cut.

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 2-param mutation tool with no output schema, the definition covers state change, data preservation, refusal conditions, and sibling alternatives. Annotations cover the safety profile, so nothing an agent needs in order to invoke this 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 50%: workspaceId is fully documented in the schema, while id is undocumented there and only implied by the description's references to 'the article'. The description adds no syntax, format, or fallback detail for the id parameter, so it neither compensates for nor worsens the coverage gap.

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 precise verb+resource (take an article off the calendar) and immediately disambiguates against three siblings: schedule_entry (inverse), reschedule_post (for the held-day case), and archive_post (for retiring). An agent can pick correctly 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?

Explicit when-to-use and when-not-to-use, including the two refusal conditions (not-scheduled when a day is still held, already-unscheduled when a dateless draft) with the correct alternative named for each case.

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

update_profileUpdate business profileB
DestructiveIdempotent
Inspect

Update the workspace business profile. Evidence is no longer stored here: the bank of what only this business knows is its own list, written with add_evidence and read from get_profile as evidence.accepted / evidence.pending. pageKeywords is the keyword each page that sells targets, as { path, keyword } pairs (path "/" is the home; a full URL is reduced to its path; up to 50 pairs, a page may hold several). It replaces the whole list; send [] to clear it. add_topics withholds a new topic that collides with one, so ask the human which query the home and each feature page are meant to rank for rather than guessing it.

ParametersJSON Schema
NameRequiredDescriptionDefault
voiceNo
siteUrlNo
audienceNo
languageNo
includeCtaNo
includeTocNo
sitemapUrlNo
competitorsNo
descriptionNo
firstPersonNo
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.
articleStyleNo
businessNameNo
pageKeywordsNo
referenceUrlsNo
internalLinksMinNo
globalInstructionsNo

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true; the description adds concrete behavior on top of that: pageKeywords 'replaces the whole list; send [] to clear it' and 'Evidence is no longer stored here.' These are genuine disclosures beyond the annotation flags, though the destructive semantics of the other 16 fields are left unstated.

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

Conciseness3/5

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

The purpose is front-loaded, but the final sentence about add_topics withholding colliding topics is an off-topic tangent that belongs to a different tool and muddies the read. The description spends more words on evidence routing than on what the tool actually changes.

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

Completeness2/5

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

For a 17-parameter, zero-required, destructive mutation with no output schema, the description covers only pageKeywords and evidence routing and omits what happens to the remaining fields. An agent cannot confidently invoke this tool across most of its parameters from the given text.

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 coverage is only 6% (just workspaceId documented), so the description must carry the burden. It explains pageKeywords well (format, path '/' as home, URL reduction, 50-pair limit, replacement semantics) but is silent on 15 of 17 parameters such as voice, audience, competitors, includeCta, articleStyle, and internalLinksMin, leaving most parameters semantically opaque.

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: 'Update the workspace business profile,' which cleanly separates it from read-side siblings like get_profile. However, the bulk of the text focuses on pageKeywords and evidence routing rather than conveying that 17 distinct profile fields are being updated, so the scope of the update is under-represented.

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?

It routes the evidence concern elsewhere ('written with add_evidence and read from get_profile') and mentions add_topics withholding colliding topics, which gives some context about adjacent tools. But it never states when to call update_profile itself versus approve_profile or upsert_post, so guidance is fragmented and implicit.

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

upsert_postCreate or update draftA
Destructive
Inspect

Create or update a draft. Pass version when updating to avoid overwrites. Cannot mark ready. language is the language this article is written in (2-letter code: "en", "es", "pt") and it is what decides the folder deliver_draft files it under, so it needs to be set whenever the article is not in the workspace profile language, because the profile is only the fallback for drafts that never declared one. Changing it on an article that is linked to a translation is refused when another article in that cluster already covers the new language: unlink first, or fix the other side. brief is the editorial plan and it is saved before the body: intent and template read off the SERP, the angle the SERP does not cover, at least three pieces of first-hand evidence, the H2 outline with the sentence each section opens with, and the image slots the body references as alt. The rules block a draft that has no brief, fewer than three evidence items, or evidence that never reaches the article (get_skill describes the rules). It is separate from serpBrief/customInstructions on get_post, which is the paid Google SERP research.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
bodyNo
dateNo
faqsNo
slugNo
tagsNo
tldrNo
briefNo
titleNo
versionNo
languageNo
descriptionNo
workspaceIdNoThe workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnly false, destructive true, non-idempotent). It discloses optimistic-concurrency behavior via version, the refusal condition for language changes on translation-linked articles, that brief is persisted before body, and the validation rules (no brief, <3 evidence items, evidence that never reaches the article).

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 core action, the version guard, and the 'cannot mark ready' constraint before the denser language and brief explanations. Content is information-dense, though the language paragraph is a long run-on chain of clauses that could be tightened.

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 13-parameter, zero-required, nested-object mutation tool with no output schema, it covers the non-obvious semantics, validation blockers, and concurrency risk. Remaining gaps are the unexplained simple scalar fields, which are largely self-describing.

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 only 8% across 13 parameters, so the description must compensate; it does explain the highest-risk ones (language semantics and folder delivery, brief contents, version). It leaves title/body/slug/tags/date/faqs/tldr/description entirely to name inference, so the compensation is partial.

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 ('Create or update a draft') plus a hard boundary ('Cannot mark ready'), which implicitly distinguishes it from approve_post. It also names siblings it is not (get_skill, get_post's serpBrief), though it never directly routes to a create-vs-update alternative.

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

Usage Guidelines4/5

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

Gives concrete operating conditions: pass version when updating, cannot mark ready, set language when the article is not in profile language, unlink first when a linked translation blocks a language change. Exclusions are stated clearly, but no explicit 'use X instead when…' routing across the sibling set.

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. 1 tool update
    • Changedupdate_profile1 field changed
      • addedInput schema / properties / pageKeywords
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "keyword": {
        +        "type": "string"
        +      },
        +      "path": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "path",
        +      "keyword"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
  2. 37 tool updates
    • Changedadd_evidence1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedadd_topics1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedapprove_post1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedapprove_profile1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedarchive_post1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedarchive_topic1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedcalendar_view1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedcheck_ai_access1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedcomplete_onboarding1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changeddataforseo_status1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changeddeliver_draft1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changeddelivery_status1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedget_linkgraph1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedget_post1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedget_profile1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedimport_sitemap1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedlink_translation1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedlist_calendar1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedlist_evidence1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedlist_posts1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedlist_topics1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Addedlist_workspaces
    • Changedmerge_topics1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changednext_write1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedplan_topics1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedpropose_topics1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedrefresh_metrics1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedreschedule_post1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedresearch_topic1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedrun_gate1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedschedule_entry1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedsubmit_topic_analysis1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedsuggest_topics1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedunlink_translation1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedunschedule_post1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedupdate_profile1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
    • Changedupsert_post1 field changed
      • addedInput schema / properties / workspaceId
        Added value: +{
        +  "description": "The workspace this call acts on, as listed by list_workspaces. Left out, the call uses the workspace the account is in right now.",
        +  "type": "string"
        +}
  3. 1 tool update
    • Removedmark_ready
  4. 38 tool updates
    • First observedadd_evidence
    • First observedadd_topics
    • First observedapprove_post
    • First observedapprove_profile
    • First observedarchive_post
    • First observedarchive_topic
    • First observedcalendar_view
    • First observedcheck_ai_access
    • First observedcomplete_onboarding
    • First observeddataforseo_status
    • First observeddeliver_draft
    • First observeddelivery_status
    • First observedget_linkgraph
    • First observedget_post
    • First observedget_profile
    • First observedget_skill
    • First observedimport_sitemap
    • First observedlink_translation
    • First observedlist_calendar
    • First observedlist_evidence
    • First observedlist_posts
    • First observedlist_topics
    • First observedmark_ready
    • First observedmerge_topics
    • First observednext_write
    • First observedplan_topics
    • First observedpropose_topics
    • First observedrefresh_metrics
    • First observedreschedule_post
    • First observedresearch_topic
    • First observedrun_gate
    • First observedschedule_entry
    • First observedsubmit_topic_analysis
    • First observedsuggest_topics
    • First observedunlink_translation
    • First observedunschedule_post
    • First observedupdate_profile
    • First observedupsert_post

Publisher details

Operator
seodraft · Publisher source
Vendor relationship
First-party · Publisher source
Trust center
Not available
Restrictions
Paid plan: $5/month after a 7-day free trial (no card needed for the trial). Sign-in with a seodraft account via OAuth is required. Measured keyword volume and live SERPs require the user's own DataForSEO account (optional; without it numbers are labeled as estimates). · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    GEO (Generative Engine Optimisation). This tool shows you exactly how AI search engines see your content - claim density, writing quality, E-E-A-T signals, extractability. Research-backed metrics that correlate with 40% higher AI citation rates.
    2
    264 npm
    21
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Run the full agency SEO loop from your AI assistant: Search Console insights, prioritized actions, article generation, CMS publishing, indexing, and performance measurement.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Connects AI agents to live SEO data and hosted tools for site audits, keyword research, competitor analysis, local SEO, and link prospecting, with guided workflows for structured search optimization.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to access self-hosted SEO data and workflows, including keyword research, rank tracking, competitor insights, backlinks, site audits, and AI visibility.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources