ScriptGrain
Server Details
ScriptGrain makes ChatGPT, Claude and the rest better at being you. Connect it and your assistant can build a voice profile from writing you’ve already done, draft in that voice, and score any text against it from 0 to 1.
The profile covers 45 attributes in eight groups: lexical, syntax, tone and register, rhetoric, punctuation and format, function words, content patterns, and quirks and cadence. On-voice drafts typically score 0.85 to 0.95. Clearly off-voice text scores below 0.45.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 41 tools
Descriptions go to unusual lengths to mark boundaries, explicitly contrasting polish vs humanize, check_voice_match vs compare_voice, and get_generation vs get_job vs list_generations. A few families remain close (three text-scoring tools, three rewriting tools, six memory tools), but each has a stated use case, so misselection is unlikely with careful reading.
The set is overwhelmingly consistent snake_case verb_noun (create_profile, get_memory, list_generations, set_voice_brain, save_edit). Exceptions like ai_detect, humanize, polish and what_next drop the verb_noun shape but stay readable and snake_case-free of style clashes.
41 tools is heavy and pushes past the comfortable band, though the platform genuinely spans voice profiling, generation, memory/Voice Brain, monitoring, page rewriting, billing and templates. Most tools earn their place, but a few (get_invoice, get_billing, upgrade_plan) and overlapping scoring tools could be consolidated.
The surface covers the full lifecycle: profile creation and extraction, outline, generation, polish, humanize, save_edit, draft versioning and restore, memory CRUD plus sync, monitoring, brief templates, companies and billing. No obvious dead ends for the stated domain.
Available Tools
41 toolsadd_monitor_urlWatch a page for voice driftAInspect
Watch a public page for voice drift against a profile: it is read and scored on every monthly run (and on run_voice_monitor). Counts against the plan's page allowance; returns the updated monitor state. Use for the about page, pricing, recent posts, anywhere the voice is published. Calls the ScriptGrain API, POST /v1/profiles/{id}/monitor/urls. API reference: https://scriptgrain.com/docs/api.md
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public http(s) page URL. | |
| label | No | Short name shown in the monitor, e.g. 'Pricing'. | |
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true, idempotentHint=false), so the description is free to add what structured fields can't: that the page is rescored on every monthly run, that it consumes the plan's page allowance, and that it returns updated monitor state. These quota and repeat-scoring behaviors are the kind of context annotations don't carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and cadence, then quota, then return value and endpoint. Dense but each sentence carries distinct information; the API reference URL is the only slightly expendable element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description covers the return value ('updated monitor state'), the side effect (counts against page allowance), the trigger cadence, and the underlying endpoint. For a 3-param mutation with annotations already handling safety, an agent has what it needs to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the description adds little per-parameter meaning: 'against a profile' loosely maps to profile_id (which has no schema description) and 'public page' restates the url constraint the schema already documents. The 'label' parameter is never addressed, so it does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'watch a public page for voice drift against a profile'. The parenthetical about running on every monthly run and on run_voice_monitor implicitly separates it from the sibling that performs the run, so an agent can distinguish add_monitor_url from remove_monitor_url and run_voice_monitor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context ('the about page, pricing, recent posts, anywhere the voice is published') and clarifies the ongoing cadence (monthly run/run_voice_monitor). It stops short of stating when NOT to use it or explicitly naming remove_monitor_url as the counterpart for undoing the watch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_memoryAdd to the Voice Brain memoryAInspect
Add to the profile's Voice Brain memory, one of two ways. (1) A piece it does not have (a published post, a newsletter, a talk transcript) by pasted text or a public URL: it is indexed now and its ideas, claims, stories and topics join the memory with verbatim quotes (60+ words; the same text twice is skipped). (2) One memory stated directly with memory (a sentence the voice says or believes, 300 characters max) plus optional kind (default idea) and topic (topic_id from get_memory, or topic_label to find or create one by name; neither = the nearest close topic). It is linked to what the memory already holds. Free either way. Calls the ScriptGrain API, POST /v1/profiles/{id}/memory/pieces or /memory/units. API reference: https://scriptgrain.com/docs/api.md
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | a public page URL to read, or | |
| kind | No | With memory: its kind (default idea). | |
| text | No | A piece's text, or | |
| title | No | The piece's title (text or url only). | |
| memory | No | ONE memory stated directly, instead of a piece. | |
| topic_id | No | With memory: an existing topic's id from get_memory. | |
| profile_id | Yes | ||
| topic_label | No | With memory: a topic by name, created if new. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-readonly, open-world, non-idempotent write; the description adds rich context beyond that—indexing on submission, verbatim quotes of 60+ words, duplicate-skip behavior, auto-linking to existing memory, default kind, and topic fallback to 'the nearest close topic'. It even names the exact API endpoints, which the annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph, but the numbered (1)/(2) structure is front-loaded with the two-mode framing and every sentence carries information (dedup rule, char limits, default values, endpoint). Slightly heavy for a single block, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, no-output-schema write tool, the description covers modes, constraints, dedup, linking, and endpoint references. It says little about the response shape (beyond 'it is indexed now'), which is a minor gap given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 88%, so the baseline is 3, but the description meaningfully clarifies the interplay among memory/kind/topic_id/topic_label (default kind, topic_id from get_memory, topic_label creates if new, neither = nearest close topic). It adds semantics the schema hints at but does not fully spell out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (add) and resource (Voice Brain memory) and defines two distinct modes: a 'piece' via text/URL, or a single 'memory' statement. This lets an agent distinguish it immediately from siblings like get_memory, edit_memory, delete_memory, and sync_memory 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the choice between the two modes ('one of two ways', 'instead of a piece') and routes topic resolution to the get_memory sibling and its topic_id. It does not explicitly compare against other writing siblings (edit_memory, sync_memory), so it falls short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_detectCheck text for AI tellsARead-onlyIdempotentInspect
Stylometric human-vs-AI analysis of any text (50+ words): returns human_score (0-1, higher = more human), the specific stylistic signals detected in each direction, and a short summary. Free. Correlates with detectors like GPTZero and Originality.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to analyse (50+ words). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, idempotent, closed-world operation, so safety is covered. The description adds that it is free and correlates with GPTZero/Originality, which is genuine extra context not carried by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence, front-loaded with the method and output, no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-input tool with an inline description of return fields, the definition is nearly complete. Only minor gaps remain, such as what happens with inputs under 50 words.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the only parameter already documents the 50+ word requirement. The description repeats the word-count constraint but adds no format or syntax detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (stylometric analysis of text) and the exact output artifact (human_score plus detected signals). Distinct from siblings like check_novelty or check_voice_match, which measure different properties of text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 50+ word minimum is stated as a usage condition, which is useful. But no explicit guidance on when to prefer this over siblings like check_novelty or check_voice_match, and no when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_noveltyCheck a brief against the memoryARead-onlyIdempotentInspect
Before you write: check a brief against the profile's Voice Brain memory. Returns verdict ('repeats' when two or more prior pieces already make the argument, 'builds_on' when related ideas exist, 'new'), the closest prior pieces (each with the unit and its verbatim quote), the ESTABLISHED ideas to build on, GAPS (topics in the brief the writing has not covered) and up to three grounded angles, each naming the established idea it builds on and the gap it fills. Use it before generate_content: put the chosen angle into the brief so the piece adds something rather than repeating the last thirty posts. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | Yes | The brief or topic you intend to write about. | |
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/non-destructive, so safety is covered; the description adds real value beyond that by disclosing the cost ('Free.') and enumerating the verdict semantics ('repeats' at two or more prior pieces, 'builds_on', 'new'). It does not describe latency or failure behavior, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the trigger ('Before you write') and then the return shape; every clause carries information. It is dense and long for a two-parameter tool, but no sentence is idle.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must explain returns and it does so completely: verdict values, closest prior pieces with quotes, ESTABLISHED ideas, GAPS, and up to three grounded angles. Combined with the usage guidance, an agent has everything needed to call and consume this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: 'brief' is documented in the schema and the description adds only light framing (the brief/topic you intend to write about, plus that a chosen angle goes in it). 'profile_id' is undocumented in both schema and description. Baseline 3 is appropriate when the schema carries half the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check) and resource (a brief against the profile's Voice Brain memory) and immediately distinguishes itself from sibling checks like check_voice_match. An agent knows exactly what this produces: a novelty verdict against prior writing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the sequence: 'Before you write... Use it before generate_content: put the chosen angle into the brief.' It states when to call it and what to do with the result, which is stronger guidance than most siblings provide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_voice_matchScore text against a voiceARead-onlyIdempotentInspect
Score any text against a voice profile using feature-delta measurement: stylometric features are computed from the text (sentence lengths, contraction/punctuation rates, signature-phrase usage, and more) and compared against the profile's stored attributes. Returns voice_match_score (0-1), a deltas array with the per-feature measurements (each entry carries the draft-vs-profile numbers and a 0-1 similarity), and short notes rendered from those same deltas, plus a score_context array explaining measurement caveats (short samples, deliberately brief formats, profiles with unmeasurable stored vocabulary) so a structurally low score is never mistaken for a bad voice. When reporting results, cite the delta numbers — do not invent supporting detail beyond them. Free — no credit consumed. Use it to verify drafts you wrote yourself and iterate. Scale: on-voice drafts typically score 0.85-0.95, partial matches 0.5-0.8, and clearly off-voice text falls below 0.45. Text must be 20+ words.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to score (20+ words, max ~50k chars). | |
| profile_id | Yes | A 'complete' voice profile id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds genuinely new behavior: no credit consumed, the score_context caveat array that prevents misreading structurally low scores, the reporting rule to cite deltas rather than invent detail, and the 20+ word minimum. That is context an agent cannot get from the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and mechanism before the return-value detail, and most sentences carry information an agent needs (thresholds, caveats, reporting rule). It runs long and has mild redundancy around the deltas/notes relationship, but nothing is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description correctly carries the full return-shape burden and does so: voice_match_score range, deltas array contents, notes provenance, and score_context caveats. Combined with the input constraints and usage scale, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), but the description adds a real constraint the schema does not express: the schema declares minLength 1 while the prose requires 20+ words and ~50k char ceiling. It also clarifies profile_id must be a 'complete' profile, which is more specific than the schema's plain uuid format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Score any text against a voice profile') and explains the mechanism (stylometric feature-delta measurement) in concrete terms. It is clearly distinguishable from most siblings, but never names the obviously adjacent sibling compare_voice, leaving an agent to infer which of the two to reach for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use context ('verify drafts you wrote yourself and iterate') and useful scale interpretation (0.85-0.95 on-voice, 0.5-0.8 partial, <0.45 off-voice). However it offers no explicit when-not-to-use condition and does not route the agent away from compare_voice, so the guidance is clear but not discriminating.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_voiceCompare writing samplesARead-onlyIdempotentInspect
Off-voice check with NO profile: score up to three pieces of writing against a main piece. Each piece is pasted text (120+ words) or a public URL (the page's prose is fetched; menus and footers are skipped). The main piece is measured and judged into a temporary baseline and every other piece is scored against it with the same feature-delta engine as check_voice_match. Returns per-piece score (0-1, pairwise-calibrated: 0.8+ on voice (about 1 in 10 pairs by different writers reach it), 0.55-0.8 drifting (common for two short pieces by one writer), below 0.55 off voice), band, top_differences and top_matches with the measured numbers behind each, plus notes. Free — no credit consumed. Use it to compare two writers, or a draft against a reference piece, when no profile exists. On website pages the score reads brand voice only weakly: two pages from one brand score closer than two rivals' pages in the same sector only 55% of the time, and half of a brand's own page pairs read drifting (study SGR-009, 299 pages from 89 UK brands), so pass on notes and judge brand fit from the measured differences, not the band. Cite the numbers, do not invent supporting detail.
| Name | Required | Description | Default |
|---|---|---|---|
| main | Yes | The reference piece: the one that sounds most like the writer or brand. | |
| others | Yes | One to three pieces to score against the main piece (text or url each). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly, idempotent, non-destructive), but the description adds substantial behavioral context beyond them: it is free/no credit consumed, prose is fetched from URLs with menus and footers skipped, inputs need 120+ words, and the score bands are calibrated with base rates. It even discloses a measured reliability limitation (brand-voice reads weak on website pages, 55% / half of pairs drifting, study SGR-009).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and constraints before the calibration detail, and every sentence carries information (bands, output fields, study caveat, citation instruction). It is dense with parentheticals and long clauses, so it is heavier than ideal, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description fully covers the return surface — per-piece score with calibration bands, band, top_differences, top_matches with the numbers behind each, and notes. Input constraints and the intended interpretation of the score are also covered, so an agent can call and use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by adding meaning the schema does not carry — the URL path fetches only page prose (menus/footers skipped) and the 120+ word threshold for pasted text. The '0 to 3 pieces' and label semantics are largely already in the schema, so it is not a full 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('score up to three pieces of writing against a main piece') and immediately delimits scope with 'with NO profile', which separates it from check_voice_match. The first sentence alone lets an agent distinguish it from every sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('compare two writers, or a draft against a reference piece, when no profile exists') and implicitly names the alternative path via 'NO profile' plus the reference to check_voice_match's engine. It also gives a when-not nuance: pass on the score band for website pages and judge from measured differences instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_companyCreate a company profileAInspect
Create a company/product context profile for company-grounded generation. Three modes: (a) pass url and up to ~10 pages of the site (home, about, product, pricing) are read and distilled into a profile (paid plans; only claims the pages actually make); (b) pass text with ANY freeform description (a pitch, rough notes) and it is organised into the profile (all plans); (c) pass name/summary/audience/key_points manually. Free — no generation credit. Returns the company (check the extracted facts with the user before generating against them). Calls the ScriptGrain API, POST /v1/companies. API reference: https://scriptgrain.com/docs/api.md
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Company website to import from; ~10 pages read (http(s); paid plans). | |
| name | No | Company/product name (manual mode). | |
| text | No | Freeform description of the product to organise into a profile (all plans). | |
| summary | No | What it does, 2-3 sentences (manual mode). | |
| audience | No | Who it is for (manual mode). | |
| key_points | No | Factual bullets: features, differentiators, proof points (manual mode). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish only the generic profile (not read-only, open-world, non-idempotent, non-destructive). The description adds genuinely new behavior: the operation is free and consumes no generation credit, url imports are restricted to paid plans, ~10 pages are read and only claims those pages actually make are used, and the call is a POST to /v1/companies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then the three modes in parallel structure, then cost/return caveats. Dense but every clause carries information; the trailing API-reference URL is the only mildly expendable element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six optional parameters and no output schema, the description does the necessary work: it explains mode selection, plan constraints, cost, and states what is returned ('Returns the company'). Return-shape detail is thin, but the caution to check extracted facts compensates for the missing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the schema carries the per-field meaning and the baseline is 3. The description adds value the schema does not: it maps parameter groups to named modes, clarifies that `text` accepts ANY freeform input (a pitch or rough notes), and that manual mode is the fallback when no url/text is supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a company/product context profile') plus the downstream purpose ('company-grounded generation'), so the agent knows what artifact is produced. It does not, however, differentiate itself from the sibling create_profile, which an agent must disambiguate on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly enumerates three mutually exclusive input modes (url, text, manual fields) with the condition that selects each, and states the plan gating (url import is paid, text and manual are all plans). It also gives a procedural guideline: verify extracted facts with the user before generating.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_outlineCreate an outlineAInspect
Generate a markdown outline for a long-form piece so the user can review the structure before drafting. Free — consumes no generation credit. Returns a generation_id with status 'outline' — the same id tracks the piece through its whole lifecycle ('outline' → 'drafted' once generate_content runs → 'edited' once save_edit stores a final version); every tool that reads the id returns the current status. Pass the id to generate_content to draft from the (optionally edited) outline. Best for article, newsletter, email, press_release and other long-form types; short social types don't need one.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | No | What to write about, max 8,000 chars (required unless template_id supplies a topic; with a template it becomes the topic line). | |
| register | No | Override the profile's formality register for this piece. | |
| company_id | No | Write this FOR the user's product/company: a company profile id from list_companies. The draft is grounded in that company's facts, terminology and audience (never invented specifics). Omit company_id to use the voice's default company (set in the app under Voice Brain, when the voice has one); pass null for none. | |
| continuity | No | Voice Brain continuity. Default true once the memory knows 10+ pieces: the draft is told what the author has already established on the subject (build on it) and which prior arguments not to repeat. Pass false to write fresh, ignoring the memory. | |
| profile_id | Yes | A 'complete' voice profile id from list_profiles. | |
| template_id | No | Start from a saved brief template (list_brief_templates): it fills every field this call leaves empty. | |
| content_type | No | What kind of piece this is (required unless template_id supplies it). article = standalone long-form article; blog_intro = ONLY the opening section of a blog post, not a full piece; newsletter = an email newsletter issue; email = a single one-to-one or marketing email; short_story = fiction; linkedin = LinkedIn post; social_post = generic short social caption; twitter_thread = X/Twitter thread; instagram_caption = Instagram caption; press_release = press announcement; product_description = catalogue blurb for ONE product; ad_copy = very short advert copy; website_landing = campaign landing page driving one action; website_home = homepage introducing the whole brand; website_product = site page for one product/feature; website_about = about-us page. | |
| english_variant | No | English spelling/idiom variant. Defaults to the profile's stored variant. | |
| extra_direction | No | One-off styling guidance for this piece (max 2,000 chars). | |
| word_count_target | No | Target length in words (50-15,000, lands within ±15%; each content type has its own range: long-form articles, short stories and the four website page types go to 15,000, newsletters to 5,000, short formats such as linkedin keep short ranges). Credits by length: up to 5,000 words 1 credit, up to 10,000 words 2, up to 15,000 words 3. Above 4,000 words the draft is written in the background: generate_content returns at once with status 'generating'; call get_job or get_generation until the job has succeeded (about a minute per 2,000 words). Omit for the content type's default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: it is free ('consumes no generation credit'), it returns a generation_id with status 'outline', and the id tracks the piece through 'outline' → 'drafted' → 'edited'. This lifecycle contract is exactly the kind of context annotations cannot convey and is consistent with readOnlyHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the free-credit fact, then the id lifecycle, then the use-case guidance — a logical order with no filler sentences. It is dense and slightly long, but essentially every clause carries information, so it stops just short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates fully by describing the return value (generation_id + status) and its lifecycle, and it clarifies the free/first-step position in the pipeline. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 10 parameters thoroughly; per the baseline this caps the value-add at 3. The description only references the returned id and the 'optionally edited outline' flow, adding no parameter syntax or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Generate a markdown outline for a long-form piece') plus the scope (review structure before drafting), clearly distinguishing it from the sibling generate_content that actually drafts. An agent can tell what this produces and why without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to use it ('Best for article, newsletter, email, press_release and other long-form types') and when not to ('short social types don't need one'), and routes forward by naming generate_content as the next step consuming the returned id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_profileCreate a voice profileAInspect
Create a new voice profile from writing samples and start the stylometric extraction (45 measured attributes). Samples MUST be the user's own human-written prose — real emails, posts, articles or messages they wrote, never AI-generated text, or the profile captures the wrong voice. You can use writing you already hold for the user (messages they typed to you, documents or emails they shared, posts of theirs you can read): their exact words, never your memory notes or summaries about them, and never text you or another AI wrote or rewrote. Tell the user which pieces you are sending before you call this; the result's samples_used lists each piece's first line and word count so you can show them. 1-20 samples, each under 5,000 words; a sample needs 50+ words to count; 3+ samples totalling 3,000+ words gives a confident profile. Uses one of the plan's monthly extraction slots (rate limit: 5 extractions per hour); if refused for slots, get_billing shows the plan's extraction usage and remaining allowance. Extraction runs asynchronously, usually for under a minute (the longest take about two): poll get_profile until status is 'complete'.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Profile name, e.g. "Jack's newsletter voice". Defaults to 'API profile'. | |
| shared | No | true places the profile in the organisation's shared team workspace; default is the key owner's personal workspace. | |
| samples | Yes | The user's own writing samples, one string per piece. | |
| english_variant | No | British (uk) or American (us) spelling for the profile's narrative and drafts. Defaults to the owner's market. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only establish that this is a non-read-only, non-idempotent write; the description goes far beyond that with rate limits (5 extractions/hour, one monthly plan slot), async execution with expected duration, the polling contract via get_profile, and the result field samples_used for user confirmation. It also warns the agent to tell the user which pieces are being sent before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and every paragraph carries operational content, but the anti-AI-text rule is restated several times ('never AI-generated text', 'never your memory notes or summaries', 'never text you or another AI wrote or rewrote'), which adds length without new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, asynchronous tool with no output schema, the description supplies everything needed: input validity rules, sample-count and length thresholds, rate/slot limits, escape hatch via get_billing, and the polling path to completion. Nothing an agent needs to invoke and follow up correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real constraints not present in the schema: 1-20 samples, each under 5,000 words, 50+ words minimum to count, and 3+ samples totalling 3,000+ words for a confident profile. It does not enrich the name, shared or english_variant parameters, which the schema already documents well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Create a new voice profile from writing samples') and states the downstream effect ('start the stylometric extraction (45 measured attributes)'). An agent can distinguish this from get_profile, list_profiles and create_company 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use it and what constitutes valid input, including which sources are acceptable ('writing you already hold for the user') and which are not ('never your memory notes or summaries', 'never text you or another AI wrote'). It also routes the agent to siblings at the right moments: get_profile for polling status and get_billing when refused for slots.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_brief_templateDelete a brief templateADestructiveIdempotentInspect
Delete a brief template. Only its author, or a team owner or admin for a shared one, can delete it. Drafts already written from it are untouched. Confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| template_id | Yes | A template id from list_brief_templates. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: the authorization model (author vs. team owner/admin), the non-cascading effect ('drafts already written from it are untouched'), and an explicit confirm-with-user instruction. Annotations only supply the generic destructive/idempotent profile; the description supplies the permission and blast-radius context that matters for a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action, then permissions, side effects, and the confirmation cue. No sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with no output schema, the description covers exactly what an agent needs: what it does, who may do it, what is preserved, and that user confirmation is required. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents itself as 'A template id from list_brief_templates.' The description adds no format or sourcing detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a brief template') that is unambiguously distinguishable from siblings such as save_brief_template and list_brief_templates. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional context for when the call is permitted (author, or team owner/admin for shared templates) and requires user confirmation before proceeding. It stops short of naming a sibling alternative (e.g., save_brief_template for edits), so it is clear but not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_memoryDelete a memoryADestructiveIdempotentInspect
Delete one memory (unit_id from get_memory). It stays deleted when its source piece is read again. In a shared brain this removes it for every voice. Confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| unit_id | Yes | ||
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint/idempotentHint annotations by disclosing what actually gets destroyed and its downstream semantics: the deletion persists even when the source piece is re-read, and in a shared brain it removes the memory for every voice. It also adds an interactive safety requirement (user confirmation), which is exactly the kind of context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler; the core action leads, and each following sentence adds a distinct behavioral fact (persistence, blast radius, confirmation). Nothing is redundant with the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, no-output-schema tool, this covers purpose, irreversibility semantics, cross-voice impact, and a safety step. The only meaningful gap is the unexplained profile_id, which the agent must infer or obtain elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains unit_id's provenance ('unit_id from get_memory'), which is genuinely useful, but profile_id is never mentioned, leaving one of two required parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and scoped resource ('one memory'), and points at get_memory as the source of the id, which helps the agent distinguish deletion from retrieval. It does not, however, differentiate from the more confusable siblings edit_memory or forget_piece, so sibling selection still requires inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose plus the procedural directive 'Confirm with the user first', which is a real prerequisite. But it never states when to choose this over edit_memory (modify) or forget_piece, so guidance on alternatives is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_memoryEdit a memoryADestructiveIdempotentInspect
Change one memory (an idea, claim, story, framework or example; unit_id from get_memory): reword it (text), change its kind, or move it to another topic (topic_id from get_memory, null for no topic, or topic_label to find or create one by name). Send at least one. The change is used by novelty and what_next, and kept when the source piece is read again.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| text | No | ||
| unit_id | Yes | ||
| topic_id | No | ||
| profile_id | Yes | ||
| topic_label | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds genuine beyond-annotation context: the change feeds novelty and what_next, and is preserved when the source piece is re-read. It leaves implicit that rewording discards the prior text, but the downstream effects are real added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence front-loads the verb and then packs the mutation options into parentheticals; every clause carries information. The nested parentheses make it slightly harder to scan than a flatter structure would.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-param mutation tool with no output schema, the description covers the meaningful parameters, id provenance, the at-least-one rule, and downstream effects. Remaining gaps (profile_id, whether prior text is recoverable) are minor against annotations that already signal destructiveness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does: text='reword it', kind='change its kind', topic_id/topic_label with null and find-or-create semantics. Only profile_id is left unexplained, and its role is inferable from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Change one memory') and enumerates the three exact mutations available: reword via text, change kind, or move topics. It anchors unit_id and topic_id to get_memory, distinguishing it from add_to_memory and delete_memory without needing either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Send at least one' gives the key precondition, and it names get_memory as the source of unit_id/topic_id, plus the null-vs-label semantics for topic. It stops short of explicitly contrasting with the sibling it displaces (add_to_memory for new units), but the context for when to call it is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forget_pieceForget a pieceADestructiveIdempotentInspect
Forget a whole piece (item_id from get_memory) and every memory taken from it. A draft, sample or watched page is never re-imported; a pasted piece is deleted. Confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely new consequence detail: a draft/sample/watched page is never re-imported while a pasted piece is deleted, which tells the agent how permanent the effect is per source type.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the destructive scope, then the source-type consequence, then the confirmation prerequisite. No filler and no repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive two-parameter tool with no output schema, the description covers scope, permanence by source type, and the user-confirmation requirement. The remaining gap is the undocumented profile_id parameter and any indication of what the caller gets back after the delete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden for both parameters. It usefully explains where item_id comes from (get_memory) but says nothing about profile_id, leaving one of two required parameters with no semantics in either place.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Forget a whole piece ... and every memory taken from it') and clarifies the unit of deletion, which distinguishes it from the sibling delete_memory that acts on a single memory. The parenthetical 'item_id from get_memory' ties the input to the tool that produces it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite ('Confirm with the user first') and the scope rule that makes this the right tool when an entire piece, not one memory, is being removed. It does not name delete_memory as the alternative for single-memory removal, so the routing is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_contentWrite a draft in a voiceAInspect
Generate a finished draft in the user's measured voice, with an automatic voice-match score (0-1) against the profile. Two modes: (a) one-shot — pass profile_id + brief + content_type; (b) from an approved outline — pass a generation_id with status 'outline' from create_outline instead (profile_id/brief/content_type are then ignored; the word_count_target set at outline time is honoured automatically, and passing word_count_target here overrides it). The response reports the length measurement — word_count, word_count_target, within_tolerance (±15%) — so check within_tolerance before presenting a draft as on-target, and the id's status becomes 'drafted'. Multiple variants are diversified server-side along declared axes, returned per variant as variant_axis: variant 1 'standard', variant 2 'alternative_opening' (question/concrete-detail opener, different structure), variant 3 'oblique_angle' (mid-scene or counterintuitive opening); variants 2-3 only up to 4,000 words. COSTS CREDITS by length: up to 5,000 words 1 credit, up to 10,000 words 2, up to 15,000 words 3 (the cap), per produced variant (failed variants are not charged). LONG DRAFTS: above 4,000 words the draft is written in the background, section by section, from an outline (a one-shot request gets one made first). The call returns at once with status 'generating', the generation id and a job; call get_job (or get_generation, whose content fills in as sections land) until the job's status is 'succeeded', about a minute per 2,000 words, then get_generation for the finished draft and its voice-match score. Credits are charged as the words are delivered, never above the tier asked for. Don't loop this tool speculatively — confirm with the user before generating many variants, long drafts or re-generating.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | No | What to write about, max 8,000 chars (one-shot mode). | |
| register | No | Override the profile's formality register for this piece. | |
| variants | No | How many alternative drafts to produce (1-3, default 1; 2-3 only up to 4,000 words). Each costs its own credit. Diversified server-side; each returns its variant_axis. | |
| company_id | No | Write this FOR the user's product/company: a company profile id from list_companies. The draft is grounded in that company's facts, terminology and audience (never invented specifics). Omit company_id to use the voice's default company (set in the app under Voice Brain, when the voice has one); pass null for none. | |
| continuity | No | Voice Brain continuity. Default true once the memory knows 10+ pieces: the draft is told what the author has already established on the subject (build on it) and which prior arguments not to repeat. Pass false to write fresh, ignoring the memory. | |
| profile_id | No | Voice profile id (one-shot mode; required unless generation_id is set). | |
| template_id | No | One-shot mode: start from a saved brief template (list_brief_templates); it fills every field this call leaves empty. Not with generation_id. | |
| content_type | No | Piece type (one-shot mode). article = standalone long-form article; blog_intro = ONLY the opening section of a blog post, not a full piece; newsletter = an email newsletter issue; email = a single one-to-one or marketing email; short_story = fiction; linkedin = LinkedIn post; social_post = generic short social caption; twitter_thread = X/Twitter thread; instagram_caption = Instagram caption; press_release = press announcement; product_description = catalogue blurb for ONE product; ad_copy = very short advert copy; website_landing = campaign landing page driving one action; website_home = homepage introducing the whole brand; website_product = site page for one product/feature; website_about = about-us page. | |
| generation_id | No | A generation_id with status 'outline' (from create_outline) — drafts from that outline instead of one-shot. | |
| english_variant | No | English spelling/idiom variant. Defaults to the profile's stored variant. | |
| extra_direction | No | One-off styling guidance for this piece (max 2,000 chars). | |
| idempotency_key | No | Optional retry-safety key: retrying with the same key replays the stored result instead of generating (and charging) again; for a long draft it returns the same job instead of starting a second. | |
| word_count_target | No | Target length in words (50-15,000, lands within ±15%; each content type has its own range: long-form articles, short stories and the four website page types go to 15,000, newsletters to 5,000, short formats such as linkedin keep short ranges). Credits by length: up to 5,000 words 1 credit, up to 10,000 words 2, up to 15,000 words 3. Above 4,000 words the draft is written in the background: generate_content returns at once with status 'generating'; call get_job or get_generation until the job has succeeded (about a minute per 2,000 words). Omit for the content type's default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false; the description goes well beyond that with credit costs by length tier, per-variant charging, background section-by-section writing above 4,000 words, the 'generating' status and get_job/get_generation polling loop, and the status transition to 'drafted'. It also discloses server-side variant diversification and the within_tolerance contract the caller must check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, then modes, response fields, costs, and long-draft behavior in a logical order. The dense stacked-parenthetical style risks overloading a single read, but nearly every sentence carries a distinct operational fact essential for a 13-parameter, dual-mode tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description correctly carries the return contract — voice-match score, word_count/word_count_target/within_tolerance, variant_axis, and status — and covers costs, background execution, and the polling alternative. Nothing an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds mode-dependent semantics the schema cannot express: which parameters are ignored when generation_id is set, that the outline's word_count_target is honoured automatically but can be overridden here, and the meaning of the variant axes. It stops short of re-documenting fields the schema already covers thoroughly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first clause states a specific verb and resource ('Generate a finished draft in the user's measured voice') plus the automatic voice-match scoring behavior. An agent can distinguish this from siblings like create_outline, polish, humanize, and mimic_brand purely from the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly defines the two mutually exclusive modes — one-shot (profile_id + brief + content_type) versus from an approved outline (generation_id with status 'outline' from create_outline) — and states that the one-shot fields are ignored in outline mode. It also adds an explicit when-not ('Don't loop this tool speculatively — confirm with the user before generating many variants, long drafts or re-generating').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_billingGet plan and creditsARead-onlyIdempotentInspect
Show the account's ScriptGrain subscription: plan, billing cycle, status, remaining credits (generation, top-up, brand-mimic), extraction usage, renewal date and whether the subscription is set to cancel. Free and read-only. Useful when a generation was refused for credits, or before suggesting an upgrade.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered; 'read-only' largely repeats the annotation. The one genuinely additive detail is that the call is free, plus the disclosure of what data is exposed (credits breakdown, cancel flag). Adequate but not 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and its returned fields, followed by the usage trigger. The field enumeration is dense but each item is meaningful; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description carries the burden of telling the agent what comes back, and it does so by listing the concrete fields (plan, cycle, credit buckets, extraction usage, renewal, cancel status). Only minor gaps remain, such as nothing about error or empty-account behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate and schema coverage is trivially complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Show') and resource ('the account's ScriptGrain subscription') and enumerates exactly what is returned: plan, billing cycle, status, credits, extraction usage, renewal, cancel flag. An agent can distinguish it from list_generations, get_invoice, or upgrade_plan 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete triggers: when a generation was refused for credits, and before suggesting an upgrade. The latter implicitly routes the agent toward upgrade_plan, but no alternative is named explicitly, so it falls just short of a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_generationGet a draftARead-onlyIdempotentInspect
Fetch one past generation in full: lifecycle status ('outline' = structure only, no draft yet; 'generating' = a long draft still being written in the background, content holds the sections delivered so far; 'drafted'; 'edited' = the user saved a final version), content, outline, brief, word count, word_count_target, voice-match score and notes, plus a job object (progress, credits charged) when a background job wrote it. Check status before acting on the content — an 'outline' generation has no draft to polish or edit, and a 'generating' one is not finished.
| Name | Required | Description | Default |
|---|---|---|---|
| generation_id | Yes | Generation id from list_generations or generate_content. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description goes well beyond that by defining each lifecycle state's meaning, noting that 'content holds the sections delivered so far' during a background write, and disclosing that a job object with progress and credits charged appears only when a background job wrote it — real behavioral context an agent could not get from the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and scope, then spends its second sentence on the status-check caveat that matters most for correct invocation. The parenthetical status glossary is dense and slightly listy, but each element maps to a distinct return field that would otherwise be undocumented given there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so thoroughly — naming the fields an agent will act on and interpreting the lifecycle states. The single input parameter is fully covered by the schema, so nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter's origin ('from list_generations or generate_content') is already stated in the schema description. The prose adds no syntax, format, or constraint detail beyond that, so the baseline 3 for full schema coverage is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch one past generation in full') and enumerates exactly what is returned: lifecycle status, content, outline, brief, word count, word_count_target, voice-match score, and a job object. This clearly separates it from siblings like list_generations and list_draft_versions, which are collection-oriented.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly warns to 'Check status before acting on the content' and explains the operative conditions ('outline' has no draft to polish or edit; 'generating' is unfinished), which effectively routes the agent to polish/edit only for complete drafts. It does not, however, name a sibling tool to use instead or contrast itself with list_generations for discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoiceGet the latest invoiceARead-onlyIdempotentInspect
Fetch the account's latest ScriptGrain invoice: number, amount, status and dates, plus a Stripe-hosted web link and a directly downloadable PDF link (invoice_pdf). Free and read-only. Returns no_billing_account if the account has never had a paid subscription.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuine value beyond the annotations by disclosing the edge-case return (no_billing_account when there has never been a paid subscription) and confirming the call is free.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the resource, then the returned fields, then the edge case. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of describing the return surface, which it does by listing fields and the no_billing_account condition. It is complete enough to invoke correctly, though it does not describe the web/PDF link lifetimes or the no_billing_account shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document; the baseline for a zero-param tool is 4. The description correctly adds no misleading parameter claims.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (the account's latest ScriptGrain invoice), then enumerates the exact fields returned (number, amount, status, dates, web link, PDF). An agent can distinguish it from get_billing because it is scoped to the single latest invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies context ('Free and read-only', latest-invoice scope) but never states when to choose this over the sibling get_billing, nor any exclusion conditions. Usage is inferable rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobCheck a background jobARead-onlyIdempotentInspect
Check a background job: a long draft from generate_content (over 4,000 words) or a polish/humanize over 3,000 words. Returns status (queued, running, succeeded, cancelled, stopped_no_credits, failed), sections done of total, words written so far, the credit cap and credits charged so far (charged as words are delivered, never above the tier asked for). When status is 'succeeded', result holds the finished text, word count and voice-match score (polish/humanize) or the generation_id to read with get_generation (drafts). A job that stopped part way keeps what it delivered. Writing runs at about a minute per 2,000 words, so poll every 30-60 seconds rather than in a tight loop. Free and read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job id (job.id) returned by generate_content, polish or humanize. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds the read-only/idempotent annotations: it enumerates every status value, explains partial-delivery behavior ('a job that stopped part way keeps what it delivered'), discloses credit semantics ('charged as words are delivered, never above the tier asked for'), and gives throughput expectations. Nothing about runtime behavior is left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: it leads with scope, then status semantics, then result shape, then polling advice. Every sentence carries information, though the single-block paragraph could be broken up for faster scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing return values and does so: status enum, sections done of total, words written, credit cap and charges, and what 'result' holds on success. An agent has everything needed to interpret a response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is fully documented in the schema as 'job.id returned by generate_content, polish or humanize.' The description restates the same origin-tool information without adding format, validation, or lookup detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Check a background job') and immediately scopes which jobs it covers: long drafts from generate_content (>4,000 words) or polish/humanize (>3,000 words). This distinguishes it cleanly from get_generation and list_generations, which handle finished/finished-draft artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: use get_generation to read the actual draft once a job succeeds. It also tells the agent how often to call it ('poll every 30-60 seconds rather than in a tight loop') and why, which is exactly the operative guidance for a polling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_memoryGet the Voice Brain memoryARead-onlyIdempotentInspect
Voice Brain: what this profile's writing has already SAID. Returns the ideas the author returns to (with how many pieces repeat each), the stories they have told, the claims they have made (with the context the piece gave), the frameworks they use, and the topics covered with counts. Every unit carries a verbatim quote from the source piece, so cite the quote rather than paraphrasing. Use it before drafting to build on established ideas and avoid repeating them, and to answer 'what have I written about X?'. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered; the description earns extra credit by disclosing that every unit carries a verbatim quote and instructing to cite rather than paraphrase, plus the cost attribute ('Free'). It omits output size/pagination behavior, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the definition, then the return contents, then usage and cost, in a dense, low-waste structure. Slightly long, but every clause (repeat counts, context, quote-citation instruction) adds selection or invocation value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by detailing the returned categories and their counts, and it is complete for calling the tool. The only gap is that the required profile_id parameter and any empty-memory behavior are never described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter (profile_id) has 0% schema description coverage, so the description must carry the burden. It only implies profile scoping via 'this profile's writing' and never names or explains profile_id, though the parameter is a self-evident required UUID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb (get/return) and resource ('Voice Brain') and then enumerates the exact payload: recurring ideas with repeat counts, stories, claims with context, frameworks, and topic counts. An agent can distinguish this read tool from the mutating memory siblings (add_to_memory, edit_memory, delete_memory) without opening schemas, though no sibling is named outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit trigger conditions: 'Use it before drafting to build on established ideas and avoid repeating them' and 'to answer \'what have I written about X?\''. There are no when-not conditions or named alternatives (e.g. check_novelty, list_brains), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profileGet a voice profileARead-onlyIdempotentInspect
Fetch one profile's status and detail. While extraction runs it returns progress_percent; once status is 'complete' it includes the narrative voice description and all 45 measured attributes, plus company_id: the voice's default company (null when it has none). Poll every ~10 seconds after create_profile.
| Name | Required | Description | Default |
|---|---|---|---|
| profile_id | Yes | Profile id from create_profile or list_profiles. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds real behavioral context on top: conditional return values (progress_percent while extraction runs, narrative plus 45 attributes once complete), null semantics for company_id, and a polling cadence. This is exactly the kind of state-transition detail 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all front-loaded and free of filler; the return-value description and the polling instruction each pull their weight. The middle sentence is dense, packing several conditional returns into one clause, which slightly hurts scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing returns and does so well, including the two states of the profile and the company_id null case. It does not cover error behavior (e.g., unknown or still-queued profile), which is the one remaining gap for a polling-oriented getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single profile_id parameter is already documented in the schema, including its UUID format and origin (create_profile or list_profiles). The description adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch one profile's status and detail') and scopes it to a single profile, which cleanly separates it from siblings like list_profiles and create_profile. An agent can identify what it returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete workflow guidance: poll every ~10 seconds after create_profile, which tells the agent exactly when this tool is the right call. It does not explicitly state when not to use it or name list_profiles as the alternative for retrieving many profiles, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_voice_monitorGet the voice monitorARead-onlyIdempotentInspect
Voice monitor state for a profile: the public pages being watched for published-content drift, the plan allowance, the latest monthly run with per-page scores (profile-calibrated voice match, band, top_differences with numbers, unchanged-since-last-run flag), the previous run for comparison, and whether a run can be triggered now. Paid plans only (Writer/Operator 5 pages, Studio 15, Agency 50). Free.
| Name | Required | Description | Default |
|---|---|---|---|
| profile_id | Yes | A 'complete' voice profile id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds value beyond that: it discloses the paid-plan gating, the tier page limits, and the interior structure of the response (per-page calibrated voice match, band, numeric top_differences, unchanged-since-last-run flag, prior-run comparison, triggerable-now state).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the noun phrase that identifies the resource, then a single dense enumeration of returned fields — no redundant restatement of the name. It is somewhat overloaded as one run-on sentence, and the truncated trailing 'Free.' costs a little polish.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the return-shape burden, and it does so in detail (scores, bands, diffs, comparison run, trigger state). Combined with the plan-gating prerequisite, an agent has nearly everything needed; only the truncated free-plan clause leaves a small hole.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter exists and schema description coverage is 100%, with the schema itself explaining that profile_id must be a 'complete' voice profile id. The description reinforces the profile framing but adds no syntax, format, or constraint detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete resource and scope ('Voice monitor state for a profile') and enumerates the specific payload an agent will get: watched public pages, plan allowance, latest run with per-page scores and top_differences, previous run, and trigger availability. That distinguishes it from write-side siblings such as run_voice_monitor and add_monitor_url, though it never uses an explicit verb like 'retrieve' or 'read'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a real usage constraint — paid plans only, with per-tier page allowances — which tells the agent when the call will succeed. However, it gives no explicit guidance on choosing this over run_voice_monitor or check_voice_match; the trailing 'Free.' is a dangling, evidently truncated clause that leaves the free-plan behavior unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
humanizeHumanise textAInspect
Iteratively rewrite text (50 to 15,000 words), or an existing draft by generation_id, to remove the measurable machine-writing tells (evened-out sentence lengths, symmetric hedging, stock connective phrases) while preserving structure, tone and every factual detail — up to 3 rewrite+rescore passes against a target human_score (default 0.85). Costs credits by length: up to 5,000 words 1 credit, up to 10,000 words 2, up to 15,000 words 3. Up to 3,000 words, if the text already clears the target it returns skipped:true for free (pass force=true to rewrite anyway). Over 3,000 words it runs in the background, section by section: the call returns at once with status 'processing' and a job; call get_job until it has succeeded (its result holds the rewritten text). Otherwise returns the final text, before/after scores and remaining signals. Tension with polish: humanising drifts text off the measured voice profile, and a later polish pass can reintroduce the regularity detectors flag. If using both, run polish FIRST and humanize last, then verify the result with the free check_voice_match.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | The text to humanise (50 to 15,000 words). Required unless generation_id is set. | |
| force | No | Rewrite even if the baseline already clears the target (still 1 credit). | |
| target_score | No | Target human_score to reach (default 0.85). | |
| generation_id | No | Humanise this generation's draft instead of pasted text (it must be drafted, not 'outline' or 'generating'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses substantial behavior beyond the annotations: credit costs tiered by length, the free skip path, the >3,000-word background/async job flow with get_job polling, and the drift tension with polish. Annotations (non-read-only, non-idempotent) are consistent with a credit-charging mutating rewrite.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then layers cost, async behavior, and ordering guidance in one dense but well-ordered block. Nearly every clause carries distinct operational value, though the run-on structure could be split for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with credit accounting, async jobs, and sibling interactions, and with no output schema, the description fully covers the return shapes (final text, before/after scores, remaining signals, or a job + status). Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real meaning — credit cost tied to text length, what force overrides, and the requirement that generation_id reference a drafted (not outline/generating) piece. It reinforces rather than merely repeats the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource (iteratively rewrite text to remove measurable machine-writing tells) and names the specific mechanisms (evened-out sentence lengths, symmetric hedging). An agent can immediately distinguish it from siblings like ai_detect, polish, and check_voice_match.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: when to use force, when it free-skips (<=3,000 words already clearing target), and critically how to sequence against a sibling — 'run polish FIRST and humanize last, then verify with check_voice_match'. This is richer than most definitions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_brainsList brainsBRead-onlyIdempotentInspect
List the Voice Brains this voice may use: its own and every other brain on the account, each with the voices that share it. A brain is a memory (ideas, claims, stories, topics). One brain per voice keeps voices apart; one brain shared by several voices (a founder and their company, a writer's personal and client voices on one subject) lets novelty checks and what_next see everything any of them has said, while each still writes in its own voice. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior, and the description adds real value on top: the scope of the result ('its own and every other brain on the account'), the return shape ('each with the voices that share it'), and cost ('Free'). It does not cover pagination or ordering, but the added context is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The leading clause is well front-loaded, but the remainder is a long conceptual digression about brain-sharing tradeoffs that reads like rationale rather than operational guidance. For a one-parameter list tool this is more text than the task requires.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full annotations and no output schema, the description carries the burden of describing what comes back, and it does so ('its own and every other brain on the account, each with the voices that share it'). The unexplained profile_id parameter is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter (profile_id, uuid) is never mentioned in the description. 'This voice' loosely maps to profile_id, but nothing clarifies that this is the profile identifier or its format, so the description fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first clause states a clear verb and resource ('List the Voice Brains this voice may use') and scopes the result to the voice's own brain plus every account brain. The contrast with the sibling set_voice_brain is inferable but never stated, so differentiation relies on the agent's own reasoning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what brains are and how sharing affects novelty checks and what_next, which implies this is a discovery/inspection call before setting a brain, but it never states when to call it versus alternatives. Usage 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.
list_brief_templatesList brief templatesARead-onlyIdempotentInspect
List the user's saved brief templates (their own, plus any shared with the API key's team), most recently used first. Each holds a content type, topic, angle, audience, register, key points, extra direction and length. Pass a template's id as template_id to create_outline or generate_content to start from it. Free and read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so 'read-only' is largely redundant. The description nonetheless adds genuinely new behavioral facts not in annotations: the sort order (most recently used first), the visibility scope (own + team shared), and that the call is free.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the scope and ordering front-loaded, then the payload description, then the routing hint. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates what each returned template holds (content type, topic, angle, audience, register, key points, extra direction, length), and annotations already cover the safety profile. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the useful cross-tool convention that a template's id is passed as template_id elsewhere, but there are no input parameters to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (list brief templates) with explicit scope: the user's own plus team-shared templates, returned most-recently-used first. It is immediately distinguishable from save_brief_template and delete_brief_template.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the downstream purpose clearly — pass a template's id as template_id to create_outline or generate_content — which tells the agent why it would call this tool. It does not, however, state when not to use it or contrast it against any alternative listing path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_companiesList company profilesARead-onlyIdempotentInspect
List the user's company/product context profiles (id, name, summary, audience, key facts). Pass a company_id to create_outline or generate_content to ground the piece in that company: its real facts and terminology, written for its audience. A voice can have a default company (set in the app under Voice Brain; get_profile returns it as company_id): omit company_id to use it, pass null for none. Create one with create_company if the list is empty and the user wants company-grounded content.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower; the description still adds real context by disclosing the returned fields and the empty-list state that warrants create_company. It does not describe pagination or ordering, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and payload fields, then the cross-tool wiring. It is dense but every sentence carries information; the final create_company sentence is the least essential yet still actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing the fields returned, and it covers the empty-list case and default-company semantics. An agent has everything needed to call this tool and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description's discussion of company_id concerns other tools rather than this one's schema, but it usefully clarifies the default-company resolution behavior an agent will encounter immediately downstream.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the user's company/product context profiles') and even enumerates the returned fields (id, name, summary, audience, key facts). It does not explicitly distinguish itself from the sibling list_profiles, which is a minor differentiation gap given how closely named the two are.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Highly explicit: it names the downstream tools that consume company_id (create_outline, generate_content), states the omit-to-use-voice-default and pass-null-for-none semantics, and routes to create_company when the list is empty. Nothing about when to use 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.
list_draft_versionsList a draft's earlier versionsARead-onlyIdempotentInspect
List the earlier texts of a draft, newest first (up to 50). A version is kept every time the draft's text was replaced: a hand edit in the app, a paragraph rewrite, polish, humanize, the AI-tell repair or a redraft. Each has replaced_at (when it was replaced), word_count, voice_match_score and the full content. Free and read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| generation_id | Yes | Generation id from list_generations or generate_content. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/non-open-world, so the description's 'read-only' is largely redundant. It does add genuinely new behavior: the 50-item cap, newest-first ordering, the retention trigger (only on text replacement), and 'Free' (a cost trait not present in annotations).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and constraints ('List the earlier texts... newest first (up to 50)'), then adds only the retention rule and returned fields. Three sentences, each carrying distinct information, no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with no output schema, the description compensates well by naming returned fields (replaced_at, word_count, voice_match_score, full content), the item cap, ordering, and cost. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (generation_id) and schema description coverage is 100%, so the schema already fully documents it and the description adds nothing about the parameter. Baseline 3 is correct when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (a draft's earlier versions/texts) plus scope details (newest first, up to 50). This clearly distinguishes it from list_generations, though it never names the closely related sibling restore_draft_version, which is the natural counterpart for actually reverting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real context on when results exist: a version is created on hand edit, paragraph rewrite, polish, humanize, AI-tell repair, or redraft. That tells the agent what history is retrievable, but there is no explicit when-not or pointer to restore_draft_version for acting on a listed version.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_generationsList draftsARead-onlyIdempotentInspect
List past generations, most recent first. Optional filters: profile_id, content_type, limit (1-50, default 20). Returns id, lifecycle status ('outline' = no draft yet, 'generating' = a long draft being written in the background, 'drafted', 'edited'), content type, truncated brief, word count and voice-match score per row; fetch full content with get_generation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows to return (default 20). | |
| profile_id | No | Only drafts for this profile. | |
| content_type | No | Only this content type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only/idempotent profile, but the description adds real behavioral context: result ordering, the meaning of each lifecycle status value (including that 'generating' means asynchronous background work), and per-row fields. With no output schema, this disclosure of return semantics is genuinely load-bearing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and ordering before filters and return shape, with no filler sentences. It is dense and slightly run-on in the return-field enumeration, but every clause carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must carry return-value semantics, and it does — row fields, status meanings, and where to get full content. Combined with 100% schema coverage for inputs, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three filters and the limit bounds are already documented in the schema. The description restates the filters and the 1-50/default-20 range without adding format or selection nuance beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List past generations') plus the sort order ('most recent first'), which is scope information an agent needs. It also distinguishes itself from get_generation by naming that sibling for full-content retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to get_generation when full content is needed, which is a concrete when-to-use-vs-alternative condition. It stops short of saying when not to use this tool (e.g. browsing vs. targeted retrieval across unrelated list_* siblings), so it is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_profilesList voice profilesARead-onlyIdempotentInspect
List the voice profiles this API key can generate with (the key's organisation profiles plus the key owner's personal ones, up to 100, most recent first). Returns id, name, status, confidence_score and sample_count per profile. Only status 'complete' profiles can be used for generation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered; the description adds real behavioral context beyond them: the 100-item cap, most-recent-first ordering, and the constraint that only status 'complete' profiles are usable for generation. Return-field disclosure is a bonus since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: scope and ordering first, return shape second, actionable constraint about 'complete' status last. No filler, nothing repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters, no output schema, and annotations already covering read safety, the description supplies everything an agent needs: the credential-scoped contents, the cap, the sort order, the returned fields, and the 'complete' status prerequisite for downstream generation calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which sets the baseline at 4. The description's listing of returned fields (id, name, status, confidence_score, sample_count) is return-value information rather than parameter semantics, so it neither raises nor lowers this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the voice profiles') and precisely scopes what is returned (the key's organisation profiles plus the key owner's personal ones), which distinguishes it from the singular sibling get_profile. An agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope sentence makes clear when this tool applies (enumerating everything the credential can access) and implicitly routes single-profile lookups to get_profile. It does not name alternatives or exclusions explicitly, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimic_brandBuild a voice from a websiteAInspect
Build a voice profile from a PUBLIC brand website: discovers and scrapes up to 8 content pages, runs the stylometric analysis, and saves a ready-to-use profile (confidence capped at 0.85; the scraped excerpts are stored as the profile's samples so drafts get exemplar anchoring). Costs one brand-mimic credit from the plan's monthly allowance and takes 1-2 minutes. REQUIRES CONSENT: ask the user to explicitly accept the inspired-by terms (using a mimicked voice is their responsibility) before calling with consent=true. Rate limit: 3 per hour. Calls the ScriptGrain API, POST /v1/mimic. API reference: https://scriptgrain.com/docs/api.md
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The brand's website (e.g. monzo.com or a /blog URL). | |
| consent | Yes | Must be true, and only after the user explicitly agreed to the inspired-by terms. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark this as non-read-only, non-destructive, non-idempotent, and open-world; the description goes far beyond that by disclosing credit consumption, expected duration, a rate limit of 3/hour, the consent gate, the 0.85 confidence cap, that scraped excerpts are persisted as profile samples, and the underlying POST /v1/mimic call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then layered with operational facts. It is a dense paragraph with no filler sentences, though the API endpoint and docs URL are marginally redundant for an agent choosing a tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers what the agent needs: what gets produced (a ready-to-use profile with anchored samples), how long it takes, what it costs, and the consent prerequisite. Nothing material about invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented. The description still adds meaning the schema lacks: the site must be PUBLIC and it will scrape up to 8 pages from the given URL, and it spells out the consent workflow (obtain explicit user acceptance, then pass consent=true).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Build a voice profile from a PUBLIC brand website') and details the mechanism (scrapes up to 8 pages, runs stylometric analysis, saves a profile). This clearly separates it from siblings like create_profile or compare_voice, which would not start from a live website.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete context for use: a public site URL, a 1-2 minute runtime, a 3/hour rate limit, a credit cost, and a hard precondition (user must accept the inspired-by terms before consent=true). It does not, however, name an alternative tool for building a voice from non-website sources (e.g. create_profile), so routing between siblings 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.
polishPolish a draft toward the voiceAInspect
Auto-polish a draft toward a voice-match target: the draft is measured against the profile, the concrete divergences (with numbers) drive a targeted revision, and the result is re-measured — up to 3 passes, best-scoring version returned with its per-feature deltas. Use after generate_content when the score falls short, or on any text with profile_id + text. Needs a generation with status 'drafted' or 'edited' — an id whose status is still 'outline' has no draft to polish and returns no_draft. Default target 0.9. Costs credits by length: up to 5,000 words 1 credit, up to 10,000 words 2, up to 15,000 words 3; returns skipped:true for free when the text already clears the target (checked on the whole text first, at any length). Over 3,000 words the polish runs in the background, section by section: the call returns at once with status 'processing' and a job; call get_job until it has succeeded (its result holds the polished text and score). Pass save=true (generation_id mode) to persist the polished text and score back onto the generation. Tension with humanize: polishing toward voice-match can reintroduce regularity AI detectors flag. If using both, run polish FIRST and humanize last, then verify with the free check_voice_match/ai_detect.
| Name | Required | Description | Default |
|---|---|---|---|
| save | No | generation_id mode only: persist the polished text + score to the generation. | |
| text | No | With profile_id: the text to polish (50 to 15,000 words). | |
| profile_id | No | With text: profile to polish toward. | |
| target_score | No | Voice-match target to reach (default 0.9). | |
| generation_id | No | Polish this existing generation's draft (preferred). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (non-readonly, non-destructive, non-idempotent), so the description carries most of the burden and does it well: credit costs by word band, free skipped:true path, 3-pass cap, background processing over 3,000 words with status 'processing' and a get_job follow-up, and save semantics. It stops short of describing the delta/return structure, but coverage is otherwise rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but densely packed and front-loaded with the core mechanism before edge cases and costs. Nearly every sentence carries operational detail (statuses, credits, job flow, humanize ordering); it is verbose but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-mode, paid, potentially asynchronous tool with no output schema, the description covers modes, prerequisites, cost, async return path, persistence, and the sibling-ordering constraint — everything an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real value: it clarifies the two mutually exclusive modes (text + profile_id vs generation_id, with generation_id 'preferred'), notes save only applies in generation_id mode, and restates the default target of 0.9 beyond the schema's minimum/maximum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (auto-polish) and resource (draft) with a precise target mechanism: measured against a profile, divergences drive revision, re-measured up to 3 passes. This clearly distinguishes it from siblings like humanize, generate_content, and check_voice_match.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('after generate_content when the score falls short, or on any text with profile_id + text') and states the prerequisite status ('drafted' or 'edited') plus the failure mode ('outline' returns no_draft). It also resolves the ordering tension with humanize.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_monitor_urlStop watching a pageADestructiveIdempotentInspect
Stop watching a page (by its url id from get_voice_monitor). Past results are kept.
| Name | Required | Description | Default |
|---|---|---|---|
| url_id | Yes | ||
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds genuinely useful context beyond that: 'Past results are kept' clarifies the blast radius of the destructive operation, and the id source hint is an extra. It doesn't cover reversibility or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence plus a short clause; the core action is front-loaded and there is no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-param destructive mutation with no output schema and zero schema descriptions, the description handles the id source and retention behavior but leaves profile_id and permission/error behavior undocumented. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the full burden. It explains url_id's origin (get_voice_monitor) but says nothing about profile_id, leaving one of two required UUIDs completely opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Stop watching a page') with a clear scope, and the implicit contrast with the sibling add_monitor_url is easy to infer. It stops short of naming the sibling outright, so it lands at clear-but-undifferentiated rather than a top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by telling the agent where the id comes from ('url id from get_voice_monitor'), which is real precondition context. However, it offers no explicit when-to-use/when-not or fallback guidance beyond that single hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_draft_versionRestore an earlier version of a draftAInspect
Put an earlier version back as the draft's text (with the score it had). The text it replaces is itself kept as a version, so a restore can be undone the same way. Refused while a long draft is still being written. Returns the draft as get_generation does. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| version_id | Yes | A version id from list_draft_versions. | |
| generation_id | Yes | The draft's generation id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds rich context beyond the annotations: the replaced text is itself preserved as a version so the restore is undoable, the operation is refused during in-progress writing, the response shape matches get_generation, and it is free. These properties reconcile and extend the declared destructiveHint=false / idempotentHint=false hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct information (effect, undo semantics, refusal condition, return shape), with the primary effect front-loaded and the 'Free.' note ending cleanly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by stating the return mirrors get_generation, and it covers the mutation's reversibility, failure mode, and cost. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already documents both uuid parameters (including that version_id comes from list_draft_versions). The description adds nothing about parameter format or selection, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (restore), resource (an earlier version of a draft) and the effect (becomes the draft's text, with its score). This clearly separates it from list_draft_versions (which enumerates versions) and get_generation (which it cites only as a return-shape reference).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete precondition that acts as a when-not rule: 'Refused while a long draft is still being written.' It does not name alternative tools or explicitly say when a restore is preferable to other actions, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rewrite_pageRewrite a web page in a voiceAInspect
Rewrite a public web page's copy in the profile's voice, block by block, with the page's own context in the prompt (title, description, what its images show, its calls to action). Headings keep their key terms, every fact and number is kept, prices / legal lines / button labels are protected and never changed, each block stays within 20% of its length so the layout holds. Returns the ordered blocks (original + rewritten), a markdown of the whole page, and voice-match + AI-tell scores before and after. Costs 1 generation credit per 1,500 rewritable words (pages over 6,000 words are refused); paid plans only. Takes 10 to 90 seconds depending on length. Show the user a few before/after blocks, not the whole deck. Calls the ScriptGrain API, POST /v1/profiles/{id}/rewrite-page. API reference: https://scriptgrain.com/docs/api.md
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The public page to rewrite. | |
| continuity | No | Default true: the rewrite is told what the profile has already said. false ignores the memory. | |
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety/mutability profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false); the description adds substantial behavioral context on top: per-word credit cost, the 6,000-word refusal threshold, 10-90s latency, preservation guarantees for headings, facts, prices, legal lines and button labels, the ±20% length constraint, and the exact backend endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then layered with constraints, cost, latency, output shape, and presentation guidance — essentially every clause carries information. It is a single dense paragraph that runs long, so it is efficient but not maximally scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates fully by listing the return payload (ordered blocks with original + rewritten, whole-page markdown, voice-match and AI-tell scores before and after). With annotations covering safety and the description covering cost, limits, latency, and returns, an agent has everything needed to call and present this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% and the schema already documents url and continuity in detail. The description only implies profile_id via 'the profile's voice' and says nothing about the continuity flag, so it adds marginal meaning beyond the structured fields — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Rewrite a public web page's copy in the profile's voice, block by block') and scopes it to public pages with the page's own context used as prompt material. An agent can distinguish this from humanize, polish, or generate_content 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete gating conditions: paid plans only, pages over 6,000 words refused, and it tells the agent how to present results ('Show the user a few before/after blocks, not the whole deck'). It never names an alternative sibling (humanize, polish, mimic_brand) or states when not to use this tool, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_voice_monitorRun the voice monitor nowAInspect
Run this month's voice monitor now for a profile: every watched page is fetched, measured and scored against the profile (one judge call per changed page; unchanged pages carry their score over). One run per profile per calendar month; the scheduled run happens on the 1st. Returns the run summary, per-page results and the refreshed state. Free (no generation credit). Takes a few seconds per page.
| Name | Required | Description | Default |
|---|---|---|---|
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only flag non-read-only, non-idempotent, open-world): it discloses per-page judge-call cost, that unchanged pages carry their score over, a monthly rate limit, the scheduling cadence, that the call is free of generation credit, and a latency estimate. That is exactly the extra context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that front-loads the action and scope, then layers quota, cost, output and latency. Every sentence carries information, though the parenthetical about judge calls and carried-over scores makes the middle slightly packed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still names what comes back (run summary, per-page results, refreshed state), covers cost, latency and the monthly quota, so an agent has everything needed to decide and call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one required parameter (profile_id, uuid) with 0% schema description coverage, and the description adds only the phrase 'for a profile.' It does not say how to obtain a profile_id or whether it accepts a name, but with a single self-evident identifier the gap is small.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run this month's voice monitor now for a profile') with explicit scope. It is clearly distinguishable from the sibling get_voice_monitor (retrieval) and add_monitor_url (page management) 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description supplies the key usage constraint: 'One run per profile per calendar month; the scheduled run happens on the 1st,' which tells an agent this is a manual override of a scheduled job and that a second call in the same month is likely rejected. It never explicitly names the alternative for reading past results (get_voice_monitor), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_brief_templateSave a brief templateAInspect
Save a brief as a named template to start the next piece from (the same templates the app's Brief panel shows). Needs at least a topic, key points or extra direction. share_with_team shares it with the API key's team workspace (the key must belong to one). Free.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | A short name, e.g. 'Weekly newsletter'. | |
| angle | No | The angle to take. | |
| topic | No | The topic line. | |
| audience | No | Who it is for. | |
| register | No | The register, e.g. 'plain and dry'. | |
| key_points | No | Points every piece from this template should cover. | |
| word_count | No | Target length in words. | |
| content_type | Yes | What kind of piece this is. article = standalone long-form article; blog_intro = ONLY the opening section of a blog post, not a full piece; newsletter = an email newsletter issue; email = a single one-to-one or marketing email; short_story = fiction; linkedin = LinkedIn post; social_post = generic short social caption; twitter_thread = X/Twitter thread; instagram_caption = Instagram caption; press_release = press announcement; product_description = catalogue blurb for ONE product; ad_copy = very short advert copy; website_landing = campaign landing page driving one action; website_home = homepage introducing the whole brand; website_product = site page for one product/feature; website_about = about-us page. | |
| extra_direction | No | One-off styling guidance carried into each piece. | |
| share_with_team | No | Share with the API key's team workspace. Default false (private). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the bar is lower, and the description adds genuinely new behavioral facts: the minimum content requirement, that share_with_team targets the API key's team workspace and the key must belong to one, and that the operation is free. It does not note that repeated calls (idempotentHint=false) create distinct templates, which is the one remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what the tool does and what it produces, followed by prerequisites and the sharing/cost notes. No filler and no repetition of schema-declared field meanings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 parameters, no output schema and annotations already covering the safety profile, the description supplies the pieces an agent actually needs: the minimum content requirement, the sharing constraint, and cost. It omits any indication of what is returned (e.g. a template id) and duplicate-creation behavior, but neither is critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema by adding the cross-field validation rule (at least one of topic / key_points / extra_direction) and the constraint that team sharing only works if the key belongs to a workspace. That is meaningful semantics the schema fields alone don't express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Save a brief as a named template') and clarifies what a template is by pointing at the app's Brief panel, which separates it from siblings like generate_content and create_outline. It stops short of explicitly naming the adjacent list_brief_templates / delete_brief_template siblings, so it's clear rather than fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a real prerequisite ('needs at least a topic, key points or extra direction') which helps an agent decide whether the call will succeed. However, it gives no when-to-use-vs-alternative guidance — nothing about when to template versus generating directly, or how this relates to the other brief-template tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_editSave the final edit of a draftAIdempotentInspect
Save the user's FINAL edited version of a generated draft. Call this when the user has finished editing a draft (in conversation or elsewhere) and is happy with it — the diff against the original feeds ScriptGrain's closed-loop voice learning, so future drafts in that profile improve. Needs a generation with status 'drafted' (an 'outline' id has no draft to diff against); afterwards its status is 'edited'. Optional voice_rating (1-5): how well the ORIGINAL draft matched their voice. Saving again for the same generation replaces the previous edit. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| final_text | Yes | The user's final version of the text. | |
| voice_rating | No | User's 1-5 rating of how well the original draft matched their voice. | |
| generation_id | Yes | The generation the user edited. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the status transition ('drafted' -> 'edited'), the replace-on-resave behavior, the downstream voice-learning effect of the diff, and the cost ('Free'). Annotations already declare idempotent/non-destructive; the description enriches this with operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The primary action is stated first, then conditions, then side effects and cost in tight parentheticals. Dense but every clause carries necessary information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries return-value burden and does so by explaining the resulting status and the diff/learning consequence. Preconditions, side effects, idempotency, and cost are all covered for a 3-param mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning: it clarifies voice_rating rates the ORIGINAL draft (not the edit) and that generation_id must reference a 'drafted' generation. This adds real state semantics beyond the field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Save the user's FINAL edited version of a generated draft') and distinguishes itself from siblings like restore_draft_version and list_draft_versions by scoping to the final edited version. An agent can tell exactly what this does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('when the user has finished editing a draft and is happy with it') and states a hard prerequisite (generation must have status 'drafted', not 'outline'). It doesn't name competing tools such as restore_draft_version as alternatives, so it stops just short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_repeat_policySet whether repeats are allowedAIdempotentInspect
Set whether similar content is allowed for a profile. 'avoid' (default): drafts are steered away from restating arguments earlier pieces already made and check_novelty flags repeats. 'allow': repeating the message is the point for this voice (a brand line, a campaign); drafts may restate established points and repeats are reported as information only.
| Name | Required | Description | Default |
|---|---|---|---|
| profile_id | Yes | ||
| repeat_policy | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotent=true, destructive=false, readOnly=false, and openWorld=false, so the safety profile is covered. The description adds genuinely non-structured behavior: the default value ('avoid') and the downstream effect on drafting and on how check_novelty reports repeats. It just doesn't describe what the call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The setting is front-loaded before the value semantics, and every clause carries information the schema lacks. It is somewhat dense in the second half but wastes no sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, mutation-without-output-schema tool, the description covers purpose, default, and downstream behavior adequately. It omits only the return shape and any permission requirements, which is a minor gap given annotations signal an idempotent, non-destructive write.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so for repeat_policy by spelling out the meaning and consequence of both enum members and flagging 'avoid' as the default. profile_id is left undescribed, though its purpose is self-evident from the format and name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set whether similar content is allowed for a profile'), with per-profile scope made explicit. It implicitly distinguishes itself from check_novelty, which the description names as the reporter rather than the setter of repeats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when each value is appropriate: 'avoid' steers drafts away from restating prior arguments, while 'allow' suits voices where repetition is the point (a brand line, a campaign). It does not explicitly state when not to use this tool or route the agent to alternatives, so it stops short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_voice_brainMove a voice to another brainADestructiveIdempotentInspect
Move a voice to another brain (brain_id from list_brains): joining brings the voice's memory with it. brain_id null gives the voice its own brain again, taking a copy of the shared memory so nothing it relied on disappears. Only brains on the same account or team. Confirm with the user before moving a voice, and say which brain it will join.
| Name | Required | Description | Default |
|---|---|---|---|
| brain_id | Yes | ||
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, readOnlyHint=false, and idempotentHint=true, so safety is covered. The description adds genuine effect semantics beyond that: joining carries the voice's memory along, and a null brain_id copies the shared memory so nothing relied on disappears, plus a same-account/team constraint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then adds the null semantics and safety constraints. Every clause earns its place, though the sentences are dense enough that it is more thorough than minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and rich annotations already present, the description covers behavior, constraints, and confirmation procedure adequately for a 2-param mutation. The unmapped profile_id is the only notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load; it does this well for brain_id (uuid from list_brains vs null detach and its copy semantics). profile_id is never mapped to "the voice," leaving one of two parameters to inference despite the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Move a voice to another brain") and immediately scopes it against the sibling that supplies brain_id (list_brains). An agent can tell what this does and how it relates to list_brains 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: use brain_id from list_brains to join, pass null to give the voice its own brain, and only same-account/team brains qualify. Also instructs the agent to confirm with the user first. Lacks an explicit when-not-to-use beyond the account/team restriction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_memoryRead new pieces into the memoryAIdempotentInspect
Bring the Voice Brain up to date with the profile's latest drafts and samples: each new or changed piece is read once and its ideas, claims, stories and topics are indexed with verbatim quotes. Free (no generation credit). Takes a few seconds per new piece; run it after finalising drafts, then call get_memory.
| Name | Required | Description | Default |
|---|---|---|---|
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description adds real context beyond them: it is free (no generation credit), takes a few seconds per new piece, and only reads new/changed pieces once. Error behavior and what the index looks like afterwards are left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no filler; the core action and its incremental nature come first, then cost and timing. The second sentence is a long compound clause, but each element (cost, duration, sequencing) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, no-output-schema tool, the description covers what it does, its cost, its duration, and the correct next call. Missing only the profile_id semantics and any failure/edge-case behavior, which are minor given the simple contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One required parameter with 0% schema description coverage, so the description carries the burden but only implies scope via 'the profile's latest drafts and samples'. It never states that profile_id selects which profile's pieces are synced, leaving the single parameter under-specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Bring the Voice Brain up to date... each new or changed piece is read once'), and the incremental, one-pass indexing behavior distinguishes it from the manual add_to_memory sibling. It also names get_memory as the follow-up read, so an agent can place it in the workflow 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit timing ('run it after finalising drafts, then call get_memory'), which is actionable sequencing. It does not state when NOT to use it (e.g. versus add_to_memory for a single piece), so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upgrade_planGet a checkout or billing linkAInspect
Get a secure Stripe link for the user to upgrade or manage their ScriptGrain plan — everything completes in their browser on Stripe's hosted pages; this tool itself never modifies the subscription or charges anything. Two modes: pass plan (and optionally billing_cycle) to mint a CHECKOUT link starting that subscription — the right move when a free account hits a credit wall (plans: writer £12/mo, operator £29/mo, studio £99/mo, agency £299/mo; annual saves ~20%). Omit plan to get the billing-PORTAL link for managing an existing subscription. Already-subscribed accounts asking for a new checkout are routed to the portal automatically. Share the returned link with the user promptly — links expire after a few minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | No | Start a NEW subscription checkout for this plan. Omit to manage an existing subscription via the portal. | |
| billing_cycle | No | Billing cycle for a new-plan checkout (default monthly; annual is ~20% cheaper). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false, but the description adds crucial context the agent can't get from them: the tool itself never modifies the subscription or charges anything, everything completes on Stripe's hosted pages, and links expire after a few minutes. This is exactly the added value expected beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most important facts (secure link, no direct mutation) are front-loaded and each sentence earns its place. It is slightly dense with parenthetical pricing detail, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent what is returned (a shareable link) and its expiry behavior, and it covers both modes and the auto-routing edge case. Nothing needed to call this correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning not present in the schema: concrete plan tiers with prices (£12/£29/£99/£299) and the ~20% annual saving plus the monthly default for billing_cycle. The enum values themselves are already in the schema, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — 'Get a secure Stripe link' for upgrading or managing the ScriptGrain plan — and cleanly separates the two modes (checkout link vs billing-portal link). The sibling get_billing is distinguishable because this tool mints an upgrade/manage link rather than reading billing data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use conditions: pass plan when a free account hits a credit wall, omit plan to manage an existing subscription. It also names a routing rule (already-subscribed accounts asking for checkout are sent to the portal), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
what_nextSuggest what to write nextARead-onlyIdempotentInspect
What should I say next? Five angles proposed from the profile's Voice Brain memory: each builds on an idea the author returns to and either fills a topic they have touched only once or revisits one they have not written about for the longest time, cited explicitly. Returns the angles with their reasons plus the established / thin / stale lists they came from. Pass a chosen angle to generate_content as the brief (or the angle field). Free.
| Name | Required | Description | Default |
|---|---|---|---|
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds real value beyond that: it discloses the return shape (angles with reasons plus established/thin/stale lists) and notes the call is Free, which annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The agent-facing question is front-loaded, followed by the mechanism, the return values, and the follow-up action. It is dense and slightly verbose in the middle clause, but every sentence carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description correctly takes on describing the return (angles with reasons plus the established/thin/stale lists) and the downstream handoff to generate_content. Given a single-parameter, low-complexity tool, this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single profile_id parameter, and the description only implies its meaning through 'the profile's Voice Brain memory'. With one obvious parameter and no enum or nested structure, the baseline is met but the description adds little explicit parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific function: proposing five content angles from the profile's Voice Brain memory. It names the sibling it feeds into (generate_content), so an agent can tell it apart from the raw generation tool. It is somewhat flowery but the core verb+resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with the triggering question ('What should I say next?') and closes by directing the agent to pass a chosen angle to generate_content as the brief or angle field, giving clear context and a named next step. It does not state explicit exclusions, but the workflow is clear.
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.
41 tool updates
- First observed
add_monitor_url - First observed
add_to_memory - First observed
ai_detect - First observed
check_novelty - First observed
check_voice_match - First observed
compare_voice - First observed
create_company - First observed
create_outline - First observed
create_profile - First observed
delete_brief_template - First observed
delete_memory - First observed
edit_memory - First observed
forget_piece - First observed
generate_content - First observed
get_billing - First observed
get_generation - First observed
get_invoice - First observed
get_job - First observed
get_memory - First observed
get_profile - First observed
get_voice_monitor - First observed
humanize - First observed
list_brains - First observed
list_brief_templates - First observed
list_companies - First observed
list_draft_versions - First observed
list_generations - First observed
list_profiles - First observed
mimic_brand - First observed
polish - First observed
remove_monitor_url - First observed
restore_draft_version - First observed
rewrite_page - First observed
run_voice_monitor - First observed
save_brief_template - First observed
save_edit - First observed
set_repeat_policy - First observed
set_voice_brain - First observed
sync_memory - First observed
upgrade_plan - First observed
what_next
Publisher details
- Operator
- Adapt Progress Evolve Limited · Publisher source
- Operator website
- https://adaptprogressevolve.com/ventures/scriptgrain
- Vendor relationship
- First-party
- Documentation
- https://scriptgrain.com/docs/mcp.md
- Trust center
- https://scriptgrain.com/trust
- Restrictions
- Free & Paid Tier · Publisher source
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1611 npm1MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs117 npm54 PyPIMIT
- AlicenseAqualityCmaintenanceRevnuvo Company Intelligence tells AI agents what changed at a company, with evidence. It observes company websites, technologies, and DNS over time and returns timestamped, confidence-aware changes, signals, and monitoring.9MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.