GO AI Tools
Server Details
31 no-AI tools: image conversion and EXIF stripping, App Store assets, colour maths. No API key.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
Each tool has a distinct job, and the descriptions clearly separate close pairs like image_compress vs image_compression_curve and appstore_search vs appstore_compare_markets. A few similar names (image_compress/image_compression_curve, generate_app_icon_set/generate_favicon_set) still require a quick read, so it is not a perfect 5.
Most names follow a consistent snake_case verb_noun pattern: calculate_*, check_*, convert_*, generate_*, image_compress, resize_images. A few outliers like css_clamp_calculator, oklch_convert, recipe_convert_ingredient, and goai_build_app_privacy_label break the pattern but remain readable and predictable.
31 tools under one 'GO AI Tools' umbrella is a heavy selection surface for an agent, even though each tool is individually useful. This falls into the 25+ too-many tier; splitting this into focused per-domain servers would improve coherence.
The major sub-domains have their core operations covered: App Store work has search, market comparison, link building, revenue calculation, privacy labels, and screenshot rendering; image work has compression, resizing, conversion, metadata stripping, and icon/favicon generation. Minor gaps exist (.xcstrings unsupported, no App Store reviews tool, no generic crop/rotate), but most workflows have no dead end.
Available Tools
31 toolsappstore_compare_marketsCompare an App Store listing across marketsAInspect
Looks up one app (by numeric App Store id, or a pasted apps.apple.com URL) in up to 30 App Store storefronts in a single call, via Apple's public iTunes Lookup API, and reports per-market availability, localized title, price and rating. Capped at 30 storefronts per call by design -- there are 173 total App Store storefronts, and this deliberately never sweeps all of them in one call; call again with a different storefronts list to cover more markets. Lookups run one at a time with a short pause between each (matching the pacing the source browser tool uses for its 30-market quick-compare), so a full 30-market call takes roughly ten seconds, not an instant burst.
| Name | Required | Description | Default |
|---|---|---|---|
| appIdOrUrl | Yes | Numeric App Store id (e.g. "6742322421") or a full apps.apple.com URL containing one. | |
| storefronts | No | Up to 30 2-letter storefront codes (e.g. ["US","GB","JP"]) after de-duplication. Omit to use the same 30 major markets the source tool defaults to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, but the description carries the burden well: it discloses the use of Apple's public iTunes Lookup API, the hard 30-storefront cap, sequential one-at-a-time lookups, and the roughly ten-second duration. It does not cover failure modes or rate-limit edge cases, but the most important behavioral constraints are clearly stated.
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?
Every sentence earns its place: purpose, inputs, output fields, API source, cap rationale, and pacing are all included without redundancy. The most important information is front-loaded, and the description is appropriately sized for the tool's complexity.
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, but the description names the output dimensions (availability, localized title, price, rating) and fully explains input, default behavior, cap, and timing. For a lookup tool, this is sufficient for an agent to select and invoke it correctly; missing error-case detail is minor.
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 both parameters thoroughly. The description reinforces that appIdOrUrl can be an id or URL and that storefronts defaults to 30 major markets, but it adds little beyond the schema beyond context like the 173 total storefronts and deduplication behavior.
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 uses a specific verb and resource: 'Looks up one app... in up to 30 App Store storefronts' and lists the reported fields. It clearly distinguishes this from the sibling appstore_search by framing it as a targeted lookup across markets rather than a search.
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?
Clear context is provided: use this when you have a numeric App Store id or apps.apple.com URL and want per-market availability, title, price, and rating. The description also gives practical guidance to call again with a different storefronts list to cover more markets, though it does not explicitly name appstore_search as an alternative or state when to prefer that tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appstore_searchSearch an App Store storefrontAInspect
Searches one Apple App Store country storefront by term, via Apple's public iTunes Search API (the same request the GO AI "App Store storefront checker" tool makes from the browser), and returns matching apps with title, seller, price, rating and a direct App Store link. Returns up to 200 results, Apple's own per-request maximum -- a result of exactly 200 likely means more exist. Results are ordered by Apple's internal relevance, which does not match the ranked list shown in the App Store app, so this cannot be used to track keyword rank.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Search phrase, up to 200 characters. Sent verbatim to Apple's Search API as the query term. | |
| entity | No | App type: "software" (iPhone), "iPadSoftware" (iPad), or "macSoftware" (Mac). | software |
| country | No | 2-letter App Store storefront code, e.g. "US", "GB", "JP". Defaults to "US". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and succeeds: it discloses the public API source, the 200-result maximum, the meaning of exactly 200 results (truncation likely), and the ordering caveat that relevance does not match App Store ranking. This is rich, non-obvious behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the first states the core action and output, the second covers result limits, and the third covers the ranking caveat. The structure is progressively more specific and each sentence 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?
There is no output schema, so the description must explain return shape and caveats; it lists output fields, result cap, truncation signal, and relevance ordering. For a simple three-parameter search tool with full schema coverage, an agent has enough to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies. The description mentions the term and country concept, but the schema already documents all three parameters thoroughly, including verbatim query sending, entity enum values, and country defaults. The description adds no substantive parameter meaning beyond the structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Searches one Apple App Store country storefront by term' and names the underlying iTunes Search API. It lists concrete return fields (title, seller, price, rating, direct link), and by stressing 'one ... storefront' it implicitly distinguishes itself from the market-comparison 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?
Clear operational context is present: this searches a single storefront via the public API and returns up to 200 results. It also gives a when-not signal ('cannot be used to track keyword rank'), but it does not name an alternative tool or explicitly say what to use for multi-storefront or ranking needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_delay_calculatorBPM tap tempo & delay time calculatorAInspect
Resolves a musical tempo — either a direct BPM, or a set of tap timestamps/intervals run through the same median-filtered outlier rejection and 2-second session-reset logic as GO AI's tap-tempo tool — then returns the full straight/dotted/triplet delay and LFO-rate table (ms and Hz) for a set of note divisions, plus bar-length and bars<->seconds conversion for a time signature. All arithmetic (not a real audio engine) — useful for setting delay/reverb/LFO times to a track's tempo.
| Name | Required | Description | Default |
|---|---|---|---|
| bpm | No | Tempo in beats per minute, used directly and unrounded. Provide exactly one of bpm, tapTimesMs, or tapIntervalsMs. | |
| bars | No | Number of bars to convert to seconds. At most one of bars/seconds is used if both are given (bars takes priority). | |
| seconds | No | Number of seconds to convert to bars. Ignored if bars is also given. | |
| divisions | No | Note divisions (denominator of 1/d) to include in the delay table, up to 64. Defaults to [1,2,4,8,16,32]. | |
| tapTimesMs | No | Strictly increasing millisecond timestamps of taps (e.g. from a high-resolution clock), in tap order, up to 4096. Provide exactly one of bpm, tapTimesMs, or tapIntervalsMs. | |
| timeSignature | No | One of "4/4","3/4","2/4","6/8","5/4","7/8","12/8" (the site's presets), or a custom {beats, unit} pair. Defaults to 4/4. Uses the written beat count — 6/8 is 6 beats of an eighth-note unit, not 2 dotted-quarter beats. | |
| tapIntervalsMs | No | Milliseconds between each tap and the one before it (one fewer entry than the number of taps), up to 4096. Provide exactly one of bpm, tapTimesMs, or tapIntervalsMs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses the median-filtered outlier rejection, 2-second session-reset logic, arithmetic-only nature, and the fact that it returns millisecond and Hz values. It could mention edge cases or exact output structure, but the main behavioral traits are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two well-structured sentences that front-load the core purpose and then detail the returned outputs and use case. Every clause contributes useful information, and the length is justified by the tool's combined tempo-resolution and conversion behavior.
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 appropriately outlines the return values: straight/dotted/triplet delay and LFO-rate tables with ms and Hz units, plus bar-length and bars<->seconds conversions. Combined with the fully documented input schema, this is sufficiently actionable for an agent to call the 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 100%, and the schema already documents every parameter in detail, including exclusivity of bpm/tapTimesMs/tapIntervalsMs, defaults, limits, and custom time-signature handling. The description adds conceptual context about tap-tempo logic but no per-parameter semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific verb and resource: it resolves a tempo and returns delay/LFO-rate tables plus bar-length conversions. It also distinguishes itself from GO AI's tap-tempo tool by noting it reuses the same tap-processing logic, so an agent can tell exactly what this tool 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?
The description gives concrete usage context: it is for setting delay/reverb/LFO times to a track's tempo and explicitly clarifies it is arithmetic-only, not a real audio engine. There are no direct sibling tools that compete with this calculator, so explicit exclusion criteria are not necessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_app_store_linkApp Store campaign link builder + QR codeAInspect
Builds a correct apps.apple.com URL for an app ID or a pasted App Store URL, in a chosen two-letter storefront, with optional App Store Connect campaign attribution parameters (pt, ct, and mt=8). Always returns the assembled URL and a params table describing what each part does. When includeQr is true, also renders the URL as a QR code PNG using the same hand-rolled, dependency-free Reed-Solomon byte-mode encoder (error-correction level M, versions 1-10) the source browser page draws to its own -- not a generic QR library, so the module layout, masking, and pixel output match that page exactly. The encoder tops out at 213 UTF-8 bytes for the assembled URL (version 10 ceiling); a longer URL fails cleanly naming the byte counts rather than returning a broken code -- shorten pt/ct or call again with includeQr:false to still get the plain URL. The storefront code is not checked against the list of real App Store storefronts -- a well-formed but unused code just will not have the app listed on it.
| Name | Required | Description | Default |
|---|---|---|---|
| ct | No | Campaign token (ct) for App Store Connect campaign attribution, up to 256 characters. Trimmed; omitted from the URL entirely if empty after trimming. | |
| mt | No | Append mt=8 (media type: software), marking the link as pointing at an app. Defaults to true, matching the source page's checkbox (checked by default). | |
| pt | No | Provider token (pt) for App Store Connect campaign attribution, up to 256 characters. Trimmed; omitted from the URL entirely if empty after trimming. | |
| store | Yes | 2-letter App Store storefront code (e.g. "us", "gb", "jp"). Decides which country's listing, price, and availability the link opens. | |
| includeQr | No | Also render the URL as a QR code PNG and return it as image bytes. Defaults to false (URL + params only). | |
| appIdOrUrl | Yes | Numeric App Store app ID (e.g. "6478912345"), or a full pasted App Store URL containing one (e.g. "https://apps.apple.com/us/app/x/id6478912345"). The id is extracted from anywhere in a URL; a bare value must be 4+ digits with nothing else, and at most 24 digits either way. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries full responsibility and does so thoroughly. It reveals the custom Reed-Solomon encoder, the 213-byte UTF-8 ceiling, clean failure that names byte counts, the fallback to includeQr:false, and the fact that storefront codes are not validated against real storefronts. These are exactly the non-obvious behaviors an agent needs to anticipate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries distinct information: core output, return values, QR implementation details, size limits and failure mode, and storefront validation caveat. It is front-loaded with the main purpose and then adds densely relevant edge-case context that would otherwise be invisible to the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description adequately defines the return contract: the assembled URL plus a params table, and image bytes when includeQr is true. It also covers the main failure mode and validation limitation, making the tool callable without dangerous assumptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies. The description adds useful contextual details such as shortening pt/ct to fit the QR byte limit and the unchecked storefront behavior, but individual parameter meanings are already thoroughly documented in the schema, so the description does not need to compensate.
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 verb and resource: 'Builds a correct apps.apple.com URL for an app ID or a pasted App Store URL, in a chosen two-letter storefront.' It also clearly separates the optional QR rendering behavior and names the attribution parameters, making the tool's purpose unambiguous and distinct from siblings like appstore_search or appstore_compare_markets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool applies: whenever a correctly formed App Store campaign link (and optionally a QR code) is needed from an app ID or pasted URL. It does not explicitly name sibling alternatives or exclusion conditions, but the core scenario is unmistakable, and the QR/URL distinction is spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_app_store_net_revenueApp Store net revenue calculatorAInspect
Computes what a developer actually receives from an App Store sale: first removes the storefront's VAT/GST already baked into the customer-facing sticker price, then applies Apple's commission (standard 30%, Small Business Program 15%, or the post-year-one subscription 15%) to that tax-exclusive remainder -- NOT to the sticker price itself, which is the mistake most naive calculators make. Returns a full price breakdown, the effective share of the sticker Apple actually keeps, a side-by-side comparison across all three commission rates (including per-1,000-sales figures), a naive-calculator sanity check showing how far off a 'just take the commission off the top' estimate would be, and warnings when the selected storefront's real tax rate varies by province, state or category (India, Canada, Brazil) rather than being a single fixed number.
| Name | Required | Description | Default |
|---|---|---|---|
| price | Yes | The customer-facing sticker price for this storefront (already tax-inclusive everywhere except the US). | |
| countryCode | No | Two-letter App Store storefront code (e.g. us, gb, de, jp, in). Selects the default tax rate and currency symbol. Defaults to gb, matching the tool page. | gb |
| taxRatePercent | No | Override the storefront's default tax rate baked into the price, as a percent (e.g. 20 for 20% VAT). Defaults to the selected countryCode's standard rate (0 for the US). Some storefronts' real rates vary by province, state or category -- see the warnings array. | |
| commissionScenario | No | Which Apple commission rate applies to the tax-exclusive remainder: 'standard30' (30%, the default for most apps), 'small15' (15%, Apple's Small Business Program for developers under the program's proceeds threshold), or 'yearTwo15' (15%, the reduced rate a subscription bills at after a subscriber has accumulated one year of paid, unlapsed service). All three are always returned side by side in the comparison array regardless of which is selected here. | standard30 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does so thoroughly: it reveals the exact order of operations (tax removal before commission), explicitly states what is NOT done (commission is not applied to the sticker price), and enumerates the full return set including breakdown, effective share, comparisons, sanity check, and warnings. This is strong transparency for a stateless calculator.
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 two-sentence structure front-loads the core calculation and then lists the returns without filler; every clause earns its place. However, the second sentence is a dense enumeration of outputs, so while content is appropriate, the structure is somewhat heavy rather than crisp.
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 4-parameter calculator with no output schema, the description covers the calculation method, all commission scenarios, output contents, and edge-case warnings for variable tax rates. Field-level defaults and enums are appropriately left to the schema, but nothing an agent needs to correctly understand and call this tool 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 substantial meaning beyond the schema. It explains that commission applies to the tax-exclusive remainder rather than the sticker price, clarifies the role of taxRatePercent and countryCode, and relates commissionScenario to the returned comparison. This materially improves an agent's ability to invoke the tool correctly.
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 uses a specific verb ('Computes') and names the exact resource ('what a developer actually receives from an App Store sale'), with a precise calculation method. It doesn't explicitly distinguish itself from sibling tools by name, but the purpose is unmistakable and clearly unique among the listed siblings.
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 clearly implies use when a developer needs the net revenue from an App Store sale and corrects a common naive approach, but it never explicitly says when to prefer this tool over alternatives or names sibling tools. There are no exclusion criteria or routing hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_bmi_and_body_fatBMI and Navy body fat calculatorAInspect
Computes BMI (with its standard weight-category label) and body fat percentage via the US Navy circumference method from height, weight, neck, waist, and (for females) hip measurements, plus the resulting lean body mass. The Navy equations are fitted in inches, so metric inputs are converted internally; the body-fat percentage is clamped to 2-75% and rounded to a whole number, matching GO AI's body-fat tool page exactly, including its 'waist must exceed neck (and hip, for the female formula)' impossible-input warning and its out-of-fitted-range caution for raw results below 4% or above 60%.
| Name | Required | Description | Default |
|---|---|---|---|
| hip | No | Hip circumference at the widest point, in cm or inches. Required when sex is 'female'; ignored for 'male'. | |
| sex | Yes | Sex, which selects the Navy formula variant. | |
| neck | Yes | Neck circumference, just below the larynx, in cm or inches. | |
| units | No | metric = cm/kg, imperial = inches/lb. Applies to every measurement below. | metric |
| waist | Yes | Waist circumference (at the navel for men, at the narrowest point for women), in cm or inches. | |
| height | Yes | Height, in cm (metric) or inches (imperial). | |
| weight | Yes | Weight, in kg (metric) or lb (imperial). Used for BMI and lean mass, not for the body-fat percentage itself. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers: it discloses internal metric-to-inch conversion, clamping to 2-75%, whole-number rounding, the waist-exceeds-neck/hip impossible-input warning, and the out-of-fitted-range caution. This goes well beyond a typical calculator description.
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 dense sentences with no filler: the first front-loads the purpose and inputs, the second packs all behavioral quirks. Every clause adds technical information an agent needs to call the tool correctly.
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 7-parameter, no-annotation, no-output-schema calculator, this description is unusually complete: it names inputs, outputs, formula variant, unit handling, rounding/clamping, and both warning conditions. The only conditional nuance (hip required for female) is already documented in the input 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 100%, so the baseline is 3, but the description adds meaning by explaining that Navy equations are fitted in inches and metric values are converted internally, and by clarifying which measurements feed BMI vs body fat. This enriches the schema's per-parameter 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?
The description uses specific verbs and resources: it computes BMI with a category label, Navy-method body fat, and lean body mass, naming the exact input measurements. This clearly distinguishes it from sibling calculators like calculate_tdee without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clear statement of what it computes and the note that it matches GO AI's body-fat tool page exactly provide strong context for when to invoke it. It gives no explicit when-not-to-use guidance or named alternatives, 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.
calculate_tdeeTDEE & macro calculatorAInspect
Calculate Basal Metabolic Rate with Mifflin-St Jeor and Harris-Benedict (plus Katch-McArdle when body_fat_percent is given), then Total Daily Energy Expenditure, a goal-adjusted calorie target (cut/maintain/bulk), and a protein/fat/carb macro split, from sex, age, height, weight and activity level. These are population-average formulas, not a measurement of the person's actual metabolism -- real expenditure commonly varies 200-300 kcal from the estimate, and the result includes a warning flag when a deficit target falls below the usual safety floor.
| Name | Required | Description | Default |
|---|---|---|---|
| age | Yes | ||
| sex | Yes | ||
| goal | Yes | ||
| units | No | metric | |
| height_cm | No | ||
| height_ft | No | ||
| height_in | No | ||
| weight_kg | No | ||
| weight_lb | No | ||
| activity_level | Yes | ||
| body_fat_percent | No | Optional. Unlocks the Katch-McArdle formula, which uses lean mass instead of total weight. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does well: it warns that formulas are population averages, states that real expenditure can vary by 200–300 kcal, and mentions the safety warning flag for aggressive deficit targets. It also discloses conditional formula selection based on body_fat_percent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense but purposeful sentences with no filler. The first sentence front-loads the main operation and outputs, and the second sentence adds essential caveats and safety behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 11 parameters, the description covers core behavior, output categories, and caveats, so an agent can understand what the tool does. However, it omits details about how units and height/weight fields interact and does not describe the return shape beyond mentioning the warning flag, leaving meaningful gaps for a complex calculator.
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 only 9%, so the description must compensate, but it only paraphrases sex, age, height, weight, activity level, and body fat. It does not explain the units parameter, the metric/imperial height and weight field pairs, or map the goal enums (lose_20, lose_15, gain_10) onto the cut/bulk language beyond loose labeling.
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 ('Calculate') and resource: BMR via multiple formulas, TDEE, goal-adjusted calorie target, and macro split. It clearly distinguishes itself from the sibling BMI/body-fat calculator by enumerating outputs that go beyond body composition.
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 when this tool is appropriate: whenever an estimated TDEE, calorie goal, or macro split is needed. However, it does not explicitly state when to prefer calculate_bmi_and_body_fat or another sibling, and it offers no exclusion criteria or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_contrastWCAG/APCA contrast checkerAInspect
Computes the WCAG 2.x contrast ratio between a foreground (text) and background hex colour, and reports AA/AAA pass or fail for normal text, large text, and UI components (icons/borders/focus rings) separately, since WCAG grades each case on its own threshold. Also reports the newer APCA Lc figure alongside it for information -- APCA is not yet what conformance is measured against, only the WCAG ratio is.
| Name | Required | Description | Default |
|---|---|---|---|
| background | Yes | Background colour as a hex string, same format as foreground. | |
| foreground | Yes | Foreground/text colour as a hex string, e.g. "#6b7280" or "6b7" (3- or 6-digit, leading # optional). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden of behavioral disclosure, and it handles this well. It explicitly reveals that APCA is reported for information only and not used for conformance, and that WCAG results are graded separately for normal text, large text, and UI components. The only minor gap is no mention of behavior on invalid or non-hex input, but the schema partially covers format expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero filler. The first sentence fronts the core computation and the output categories; the second clarifies the APCA/WCAG relationship and which metric governs conformance. Every clause earns its place, and the structure is immediately 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?
For a simple two-parameter calculator with no output schema, the description adequately conveys what is computed, how results are categorized (AA/AAA statuses per text size/component type), and the informational role of APCA. It doesn't spell out the exact return JSON shape, but an agent can infer the result semantics well enough. A brief pointer to find_nearest_passing_color for correction workflows would improve routing, but this is a minor omission.
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 parameters are already fully documented with format and examples. The description adds minimal extra meaning beyond labeling foreground as 'text' and noting hex colors, which is a slight reinforcement but not substantial. It does not introduce any semantic detail absent from the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Computes') and resource ('WCAG 2.x contrast ratio'), names the exact inputs (foreground and background hex colours), and details the output categories (AA/AAA for normal text, large text, and UI components). This clearly distinguishes it from siblings like find_nearest_passing_color and oklch_convert, which serve different color-related purposes.
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 tool's purpose makes its use case self-evident: check WCAG contrast between two hex colors. However, it never explicitly names sibling alternatives or states when NOT to use this tool (e.g., when you need to adjust a color to pass, find_nearest_passing_color would be appropriate). The APCA comment explains metric choice but not tool selection, so usage guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_strings_filesiOS .strings localization checkerAInspect
Compares two or more iOS Localizable.strings files (sent as base64-encoded raw file bytes, not text) against a base file and reports keys missing from each other file, keys present in another file but not the base ("extra", reported but not counted toward the issue total), values byte-identical to the base (often untranslated, sometimes intentionally so), duplicate values under different keys within the same file (case- and trailing-punctuation-insensitive), and lines that fail to parse with their line number. Sniffs a UTF-8 or UTF-16 LE/BE byte-order mark per file so files exported by Xcode in UTF-16 decode correctly instead of producing a wall of parse errors. Does not support the newer .xcstrings JSON catalogue format, and does not check plural rules or placeholder (%@/%d) consistency between files -- it is a pure key/value diff.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Two to 40 .strings files to compare against each other. | |
| baseFile | No | Exact name of one of files[] to treat as the base ("compare against") file. When omitted, auto-selects the first file (after sorting all names alphabetically) whose name starts with "base." / "base-" / "base_" or "en." / "en-" / "en_" (case-insensitive), falling back to the alphabetically-first file if none match. A name that does not match any loaded file falls back the same way. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it is exceptionally transparent: it discloses BOM sniffing for UTF-16 decoding, case- and trailing-punctuation-insensitive duplicate detection, that extra keys are reported but not counted toward the issue total, that parse failures include line numbers, and that placeholder/plural consistency is out of scope. No behavioral trait is hidden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one dense paragraph, but every clause earns its place; it front-loads the primary action, details the comparison checks, and ends with clear non-goals. It is longer than a minimal description, but the tool's behavior is genuinely complex. Some bullet-point structure would help skimming, but there is no fluff or redundancy.
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?
The description covers input encoding, comparison semantics, edge cases (BOM, duplicates), and limitations, leaving the agent well-equipped to call the tool correctly. The only notable gap is that the return/report format is not described, and there is no output schema to fill that void. Still, the scope is clear enough that the agent can invoke the tool and interpret the findings.
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 schema already documents both parameters well. The description adds critical semantics by specifying that content must be base64-encoded raw bytes (not decoded text) and that the file name appears in the report and participates in base-file selection. It does not add beyond the schema for baseFile, but the raw-bytes clarification is essential.
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 specific verb and resource ('Compares two or more iOS Localizable.strings files ... against a base file') and then enumerates a precise list of findings: missing keys, extra keys, byte-identical values, duplicate values, and parse failures. It also explicitly states non-goals (.xcstrings, plural rules, placeholders), making its purpose unmistakable and distinct from any conceivable 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?
The description clearly tells the agent how to invoke the tool ('sent as base64-encoded raw file bytes, not text') and when not to use it ('Does not support the newer .xcstrings JSON catalogue format'). It stops short of naming an explicit alternative tool or an explicit 'use this when...' condition, but the strong scope boundaries make that unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_heic_to_jpg_pngConvert HEIC/HEIF to JPG or PNGAInspect
Converts iPhone HEIC/HEIF photos to JPEG or PNG, decoding with a WebAssembly build of libheif (LGPL-3.0) and re-encoding with sharp -- the same pipeline as GO AI's browser-based HEIC converter tool, run server-side. Accepts 1-50 files as {filename, dataBase64} (each up to ~30MB decoded); every file is byte-sniffed by its actual magic bytes, never by filename extension or claimed mime type, so an iPhone photo that iOS already delivered as a JPEG (picked from Photos rather than Files) is detected and reported as already_converted -- passed through unchanged, not re-encoded -- while real HEIC/HEIF input is decoded and re-encoded to the requested format (JPEG with a caller-set quality 50-100, or lossless PNG). Any orientation stored on the HEIC is applied automatically during decode, so output comes out right-side up. Metadata (EXIF: GPS, timestamp, camera) is not carried over, matching the source page. Each converted or passed-through file is returned individually (inline if small, as a download link if large), or bundled as one converted.zip when bundleAsZip is true and more than one file produced output; a file that fails to decode is reported with status failed and an error message rather than aborting the batch. The JSON report lists status, dimensions, and before/after byte sizes for every input file, in input order.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | 1 to 50 files, in the order results are reported. Mix HEIC/HEIF and already-JPEG/PNG files freely -- each is byte-sniffed on its own. The batch is additionally capped at 4000000 bytes of combined decoded input, which is what binds in practice for real photos. | |
| format | No | Output format for any real HEIC/HEIF input. Ignored for input already sniffed as JPEG or PNG, which is passed through unchanged rather than re-encoded. | image/jpeg |
| quality | No | JPEG quality, 50-100. Ignored when format is image/png (PNG is lossless). | |
| bundleAsZip | No | When true and more than one file produced output bytes (converted or passed-through), bundle them into one converted.zip instead of returning each file as its own separate output. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and excels: it discloses byte-sniffing (never trusting extensions), pass-through behavior for already-converted files, automatic orientation application, metadata stripping, per-file error handling, and zip bundling logic. It even explains the report fields. This is far more transparent than typical tool descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries unique constraints or behavioral details; information density is high. It is logically organized: purpose first, then input rules, processing behavior, output format, and error semantics. However, it is one massive block of text with no paragraph breaks, making parsing harder than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description thoroughly explains return formats: individual inline/download-link results, optional converted.zip, failure statuses, and a JSON report with status/dimensions/sizes. It covers mixed inputs, orientation, and error handling. The only gap is the inconsistent size limit mention, which slightly undermines otherwise comprehensive coverage.
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 description adds useful parameter semantics not in the schema: format is ignored for already-JPEG/PNG inputs, quality only applies to JPEG, and bundleAsZip requires more than one produced output. However, it introduces a potential contradiction by stating 'each up to ~30MB decoded' while the schema's dataBase64 description caps decoded input at 4,000,000 bytes. This ambiguity could mislead an agent about file size limits.
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 specific verb-resource pair: 'Converts iPhone HEIC/HEIF photos to JPEG or PNG'. This clearly distinguishes it from siblings like image_compress or resize_images, which handle different transformations. The technical pipeline mention (libheif + sharp) adds specificity without obscuring the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: when you have HEIC/HEIF photos needing conversion to JPEG/PNG, and it also accepts already-JPEG/PNG files to pass through. It does not explicitly name alternatives or say 'when not to use', but the highly specific input/output scope makes the usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_video_to_gifTrim a short video into a GIF, MP4 or WebMAInspect
Ports GO AI's browser Live Photo-to-GIF tool server-side: trims a SHORT video clip and converts it to an animated GIF, or (a server-side addition the browser tool cannot do) a real MP4/WebM video. Input is base64 video bytes plus its mimeType (any container/codec this server's ffmpeg build can decode) and a trim range in seconds (startSeconds/endSeconds).
HARD LIMITS -- this runs in a 400 MB container on one shared vCPU behind a proxy that hangs up at 125s, so an over-budget request is REJECTED up front with a message naming the limit rather than accepted and then killed. Read these before calling: (1) the video itself must decode to at most 4 MB -- send a pre-trimmed clip, not a whole recording; (2) the trim range must span at least 0.25s and at most 10s; (3) width x height x frames must not exceed 12 megapixels TOTAL across the whole animation. That third one is the binding limit in practice and it is easy to trip with a portrait clip: at size=480 a 9:16 video is 480x854, so it fits about 29 frames (~2.9s at fps=10) -- while a 16:9 video at the same size is 480x270 and fits the full frame cap. If a call is rejected, the error names the exact frame/size that would fit; do not retry with the same numbers.
size picks the output width in px (0 keeps the source's own width, clamped to 720; otherwise 720/480/320/240, default 320). Height is derived to preserve aspect ratio and both are forced even (a hard requirement of GIF and most video codecs). fps (10/12/15/20/25, default 10) is the target sampling rate; because GIF frame delays are whole hundredths of a second, the achieved rate (actualFps in the result) is rounded and rarely matches exactly what was requested -- always read actualFps back, do not assume it equals fps. speed (0.5/1/1.5/2) scales playback; speed below 1 samples MORE frames from the same span and so costs more of the pixel budget. motion is loop (plays once per cycle, restarts abruptly), bounce (plays forward then backward so it never visibly cuts -- this roughly DOUBLES the emitted frame count and therefore halves the span that fits the pixel budget), or once (plays through and stops; GIF only, this disables the NETSCAPE2.0 loop extension).
For format 'gif' (the default): at most 120 frames are sampled from the trim range (bounce mirrors the middle back on top of that afterward, so a bounced GIF can carry up to 238 frames if the pixel budget allows), and colours (256/128/64, default 256) sets the palette size. The palette is a single median-cut palette built across every sampled frame at once, not per frame, exactly like the source -- a clip with wildly different scenes (e.g. a cut between two very different shots) will show banding because the whole clip is sharing one 256-or-fewer-colour palette. dither (default true) enables Floyd-Steinberg dithering, which smooths gradients at the cost of file size and adds visible noise to flat graphics/screen recordings -- turn it off for those. For format 'mp4' (H.264) or 'webm' (VP9): frame sampling and the GIF palette pipeline are skipped entirely and ffmpeg encodes the trimmed/scaled/speed-adjusted clip directly in one pass; audio is always dropped, since the source tool this is ported from is silent-GIF/loop focused and has no audio-preserving path of its own. The same trim-span and pixel limits apply. Frame extraction for GIF approximates the source's exact evenly-spaced-timestamp sampling with ffmpeg's own fps-filter resampling of the decoded stream (documented in code as a deliberate simplification, not a literal port) -- for most clips this is visually indistinguishable, but timing will not be bit-identical to the browser tool's output for the same input. Returns the encoded file (inline if small, otherwise a download link) plus a JSON stats object: frameCount (gif only), width, height, byteSize, requestedFps, actualFps, delayCentiseconds (gif only), format, outputPixels, maxOutputPixels, and more. An oversized request, a trim under 0.25s, an undecodable video, or an unsupported codec is reported as a tool error naming the problem, never a crash.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Target sampling/output frame rate: 10 (default), 12, 15, 20 or 25. Higher fps spends the frame budget faster, so it shortens the trim range that will fit. For GIF, the true achieved rate is reported back as actualFps and will differ slightly due to whole-centisecond frame delays. | |
| size | No | Output width in px: 0 keeps the source's own width (clamped to 720); otherwise 720, 480, 320 (default) or 240. Height is derived to preserve aspect ratio; both dimensions are forced even. Bigger sizes buy fewer frames -- width x height x frames is capped at 12 megapixels. | |
| speed | No | Playback speed multiplier: 0.5, 1 (default), 1.5 or 2. Higher speed samples fewer frames per second of source video (and so fits a longer trim); 0.5 samples twice as many. | |
| dither | No | Floyd-Steinberg dithering for the GIF palette (default true). Smooths gradients at the cost of file size and adds noise to flat graphics -- turn off for screen recordings or flat artwork. Ignored for mp4/webm. | |
| format | No | Output container. 'gif' (default) runs the full sampling + shared-palette + LZW pipeline. 'mp4' (H.264) and 'webm' (VP9) skip that pipeline and have ffmpeg encode the trimmed/scaled/speed-adjusted clip directly, with audio always dropped. | gif |
| motion | No | 'loop' (restarts from the first frame each cycle), 'bounce' (plays forward then backward, never visibly cuts -- roughly doubles the emitted frame count and so halves the span that fits the pixel budget), or 'once' (plays through and stops -- GIF only, disables looping). | loop |
| colours | No | GIF palette size: 256 (default), 128 or 64 shared colours across the whole clip. Ignored for mp4/webm. | |
| mimeType | Yes | The source video's mime type, e.g. "video/quicktime" or "video/mp4". Used only to pick a temp-file extension; the actual format is content-sniffed by ffmpeg. | |
| endSeconds | Yes | Trim end, in seconds. Must leave at least 0.25s and at most 10s between startSeconds and endSeconds. | |
| videoBase64 | Yes | Base64-encoded source video bytes (not a file path or URL). The decoded video must be at most 4 MB; larger payloads are rejected before any decoding happens. | |
| startSeconds | No | Trim start, in seconds from the beginning of the video. Clamped to the video's own duration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: it discloses hard resource limits, up-front rejection behavior, the 12-megapixel pixel budget, actualFps rounding, palette sharing/banding, dithering side effects, bounce doubling frame count, audio dropping, and the frame-sampling approximation vs the original browser tool. This goes far beyond the schema and gives an agent accurate expectations for edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but the tool is genuinely complex with 11 parameters, no annotations, and no output schema. The hard limits are prominently front-loaded with a direct 'Read these before calling,' and later sections are organized by format and parameter concerns. Every major sentence adds operational or behavioral value rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the absence of both annotations and an output schema, the description is exceptionally complete. It covers input size limits, trim constraints, output width rules, frame budget math, palette and audio behavior, return payload contents, and error semantics, leaving an agent with enough information to select parameters and interpret results 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?
Although schema coverage is 100%, the description adds substantial cross-parameter meaning that the schema alone cannot convey: the width x height x frames cap, how bounce doubles frame count, how speed below 1 costs more of the pixel budget, how dithering affects flat graphics, and how actualFps will differ from requested fps. It effectively teaches the agent how the parameters interact.
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 specific verb and resource: trims a SHORT video clip and converts it to an animated GIF, MP4, or WebM. It also clearly distinguishes itself from the browser-based Live Photo-to-GIF tool by noting the server-side addition of MP4/WebM output, so an agent can tell this from other conversion tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage preconditions: send a pre-trimmed clip, not a whole recording, keep the decoded video at most 4 MB, and keep the trim span between 0.25s and 10s. It also advises when not to retry after rejection and explains format-specific behavior such as audio always being dropped, making the when-to-use and when-not-to-use guidance unusually concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
css_clamp_calculatorCSS clamp() CalculatorAInspect
Generates a CSS clamp() declaration (in rem) that linearly interpolates a size between a value at a small viewport width and a value at a large one, exactly matching GO AI's clamp() calculator tool (same slope/intercept math, rounded to 4 decimal places). Returns a status: 'sameViewports' when the two viewport widths are equal (no line can be drawn -- css is null), 'flat' when the min and max sizes are equal (a constant, clamp() unneeded), 'inverted' when the max size is smaller than the min (still valid CSS, but the computed size shrinks as the viewport grows), or 'ok' otherwise. Optionally evaluates the computed pixel size at a list of preview viewport widths, and optionally generates a matched fluid type scale by multiplying both endpoints by ratio^step for a given number of steps -- unlike the website's five-option dropdown, any positive ratio is accepted here since the underlying math is not limited to those presets.
| Name | Required | Description | Default |
|---|---|---|---|
| maxSizePx | Yes | Size in px at the large viewport. | |
| minSizePx | Yes | Size in px at the small viewport. | |
| typeScale | No | Optional: when provided, also returns a fluid type scale of this many steps, each step scaling both endpoints by ratio^step. | |
| maxViewportPx | Yes | The large viewport width in px. | |
| minViewportPx | Yes | The small viewport width in px. | |
| rootFontSizePx | No | Root font size in px used to convert the px sizes to rem. Defaults to 16; a value of 0 also falls back to 16. | |
| previewViewportsPx | No | Optional list of viewport widths (px), up to 64, to evaluate the resulting clamp() at, returned as computed pixel sizes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and excels: it discloses the exact status return values ('sameViewports', 'flat', 'inverted', 'ok') and explains the meaning of each edge case, the 4-decimal rounding, the GO AI math equivalence, the rootFontSizePx=0 fallback, and both optional behaviors (preview evaluation and type-scale generation). Nothing about the tool's behavior is left hidden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense with no filler — every clause earns its place. It is front-loaded with the core purpose, then systematically covers return statuses, optional behaviors, and the website divergence. For a tool with 7 parameters, a nested object, and four status branches, this length is proportionate and well-organized.
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?
Even without an output schema, the description fully explains return semantics (the clamp() declaration in rem, the status strings and their meanings, computed pixel sizes for previews, and the type-scale output). Combined with 100% schema coverage on parameters, an agent has everything needed to select and correctly invoke 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 100%, so the baseline is 3. The description adds meaningful value beyond the schema: it explains that typeScale ratio is not limited to the website's presets (any positive value works), describes how preview viewports get 'returned as computed pixel sizes', and ties parameter combinations to distinct status outcomes (e.g., equal viewports produce no line). This is more than the schema alone provides.
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: 'Generates a CSS clamp() declaration (in rem) that linearly interpolates a size between a value at a small viewport width and a value at a large one.' This is unambiguous and clearly differentiates the tool from the sibling calculators (BMI, TDEE, contrast, oklch, etc.), which all occupy distinct domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when the tool applies — generating fluid CSS clamp() values with optional type-scale generation — and even contrasts itself with GO AI's website ('unlike the website's five-option dropdown, any positive ratio is accepted here'). It doesn't explicitly name sibling tools to use instead, but the sibling set is homogeneous (all different calculators), making cross-tool confusion unlikely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_ai_tokensEstimate AI token count, context fit & costAInspect
Heuristic estimate (NOT a real per-model BPE tokenizer) of how many tokens a piece of text will become, ported from GO AI's browser-side token counter. Blends a chars/4 and words/0.75 baseline with surcharges for punctuation, digits and non-Latin script; typically within ±10-15% for ordinary English prose and ±15-25% when non-Latin script is detected -- code and heavily punctuated text tend to tokenize denser than this suggests. Also reports whether the text fits a set of context windows (default: 8K/128K/200K/1M/2M tokens, or pass your own) and, if you supply per-million-token prices, an estimated USD cost. Use a provider's own tokenizer for exact billing figures.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to estimate, up to 1000000 characters (roughly 250K tokens). An empty string is valid and yields 0 tokens. | |
| calls | No | Number of times this input/output pair will be sent, to scale total cost. Defaults to 1; values below 1 are treated as 1. | |
| contextWindows | No | Custom context windows to check fit against, e.g. [{"name":"my-model","sizeTokens":32000}]. Omit to use the site default set (8K, 128K, 200K, 1M, 2M). | |
| expectedOutputTokens | No | Assumed reply length in tokens, used only to estimate output cost. Defaults to 500. | |
| inputPricePerMillionUsd | No | USD price per 1,000,000 input tokens, from the provider's current pricing page. Omit to skip input cost -- no default is assumed, since a stale hardcoded price would be worse than none. | |
| outputPricePerMillionUsd | No | USD price per 1,000,000 output tokens. Omit to skip output cost. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does so thoroughly: it explains the estimation algorithm (chars/4 and words/0.75), accuracy bands (±10–15% English prose, ±15–25% non-Latin), known biases (code and heavy punctuation tokenize denser), and cost behavior (only when prices are supplied, no stale default assumed).
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 dense sentences, front-loaded with the most important caveat ('Heuristic estimate... NOT a real per-model BPE tokenizer') followed by accuracy detail, additional features, and a final billing caveat. Every sentence earns its place 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?
despite no output schema and no annotations, the description names what the tool reports (token count, context fit, optional USD cost), specifies defaults, and explains accuracy and cost behavior. Combined with a fully described input schema, this is enough for an agent to select and invoke the 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 coverage is 100% and each parameter already has a detailed description, so the baseline is 3. The description mostly restates what the schema already says, such as default context windows and per-million-token pricing, though it does add useful high-level context fit and algorithm behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear, specific purpose: a heuristic token-count estimate plus context-window fit and optional cost estimation. It is unambiguous about the resource and action, but it does not explicitly differentiate itself from sibling tools such as recommend_ai_model, so it misses the 'distinguishes from siblings' bar for a 5.
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 tool as a heuristic and warns 'NOT a real per-model BPE tokenizer,' then closes with 'Use a provider's own tokenizer for exact billing figures.' This gives a clear when-to-use / when-not-to-use boundary and names an alternative for exactness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_window_lightWindow light estimator for houseplantsAInspect
Estimates the indoor light level a window gives a plant, in the category words houseplant care guides use (Direct sun / Bright indirect / Medium light / Low light / Too dark), from the window's hemisphere, compass aspect, what obstructs it, and how far back the plant sits from the glass. This is a small heuristic scoring table ported from GO AI's window-light tool page, not a physical light-meter reading or a per-location sun-position model — it correctly flips which compass direction is 'bright' for the southern hemisphere and flags the direct-west-sun scorch risk, and returns the reasoning behind the verdict plus a shortlist of plants suited to that light level.
| Name | Required | Description | Default |
|---|---|---|---|
| aspect | Yes | True compass direction the window faces (before any hemisphere adjustment). | |
| blocked | Yes | What stands between the glass and the open sky: 'clear' = nothing, 'sheer' = a net curtain/blind or distant trees, 'near' = a tree or building close by, 'heavy' = mostly blocked. | |
| distance | Yes | How far back from the glass the plant sits: 'sill' = on the sill, 'd1' = within an arm's reach, 'd2' = one to two metres back, 'd3' = two to three metres back, 'd4' = further into the room. | |
| hemisphere | Yes | Hemisphere the window is in. South of the equator the sun tracks the northern sky, so the compass direction that gets the strongest light is reversed from what most (northern-hemisphere-written) plant guides assume. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden of behavioral disclosure, and it delivers: it states what kind of estimate is produced, that hemisphere is handled correctly, that direct-west-sun scorch risk is flagged, and that reasoning plus a suitable-plant shortlist are returned. It also explicitly warns about the tool's limitations, which is valuable transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured: it front-loads the purpose and output vocabulary, then adds exclusions and behavior in the second sentence. There is no filler, no repetition of schema content, and every sentence contributes useful 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?
Despite having no output schema and no annotations, the description tells an agent what inputs affect the result, what category vocabulary will be produced, how the estimate behaves across hemispheres, and what the return includes (reasoning plus plant recommendations). This is enough context to call the tool correctly and interpret its 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?
All four parameters are already well documented in the input schema with enums and explanatory descriptions, so the schema carries the semantic weight. The description only recaps the inputs at a high level ('window's hemisphere, compass aspect, what obstructs it, and how far back') without adding per-parameter detail beyond what the schema already provides.
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 specific verb ('Estimates') and a concrete resource ('indoor light level a window gives a plant'), then names the exact output vocabulary an agent should expect: Direct sun / Bright indirect / Medium light / Low light / Too dark. It also disambiguates itself from a physical light meter or sun-position model, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear boundary conditions: it is a heuristic scoring table, not a physical light-meter reading or a per-location sun-position model, which tells an agent when not to rely on it. It does not explicitly compare against a sibling tool, but the context makes the intended use case—quick houseplant light-level categorization—clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_nearest_passing_colorNearest WCAG-passing colour (hue-preserving)AInspect
Given a foreground/background hex pair, moves only the lightness of one side (hue and saturation held fixed) in the smallest step that clears a target WCAG contrast ratio, so a failing brand colour can be fixed without draining its hue. Defaults to the 4.5:1 normal-text AA threshold, matching the source page's fix buttons; pass a named threshold ('normal-aa', 'normal-aaa', 'large-aa', 'large-aaa', 'ui-aa') or a custom numeric ratio to target something else. Reports found:false when even pure black or white in that hue cannot reach the target -- that pair needs a different hue, not a different lightness.
| Name | Required | Description | Default |
|---|---|---|---|
| adjust | Yes | Which colour to move toward passing; the other one stays fixed. | |
| target | No | WCAG threshold to clear: 'normal-aa' 4.5:1 (default, matches the page's buttons), 'normal-aaa' 7:1, 'large-aa'/'ui-aa' 3:1, 'large-aaa' 4.5:1, or any custom positive ratio. | normal-aa |
| background | Yes | Background colour as a hex string, same format as foreground. | |
| foreground | Yes | Foreground/text colour as a hex string, e.g. "#6b7280" (3- or 6-digit, leading # optional). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it handles it well. It discloses that only lightness is moved, hue and saturation stay fixed, it takes the smallest step that clears the target, it defaults to 4.5:1, and it reports found:false when no lightness change can succeed. This is far beyond what the schema alone provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler. The core behavior is front-loaded, then thresholds, then failure behavior. Every clause earns its place, including the practical consequence of an impossible pair.
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 relatively simple tool with no annotations and no output schema, the description covers algorithm, thresholds, adjustable side, and the impossible-case result. The only gap is that it never explicitly states the success return shape (e.g., whether found:true comes with the adjusted hex), which would be useful given the absence of an 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 100%, so the baseline is 3, and the description adds genuine value on top by explaining adjust as 'move one side while the other stays fixed' and by expanding the target enum into concrete ratios and custom numeric support. It does not redundantly restate hex format details, which the schema already covers.
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 ('moves'), a clear resource ('foreground/background hex pair'), and a precise constraint (hue and saturation held fixed). It immediately differentiates itself from contrast-checking tools like check_contrast by presenting itself as a hue-preserving fixer rather than a checker.
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 clearly frames when to use it: to fix a failing contrast pair while preserving brand hue, and it explicitly notes the default threshold and available named thresholds. It also tells the agent when the tool is not the answer ('that pair needs a different hue, not a different lightness'). It stops short of naming sibling alternatives explicitly, hence not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_app_icon_setApp icon set generator (iOS + Android)AInspect
Turns one source image into a ZIP containing a complete iOS Xcode AppIcon.appiconset (AppIcon.png at 1024x1024, plus a hand-written Contents.json Xcode accepts, and optionally AppIcon-Dark.png and AppIcon-Tinted.png for the appearance variants modern iOS asks for), a full Android mipmap-mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi set of ic_launcher.png files (48/72/96/144/192px), and a flat sizes/ folder with 24 icon-.png files from 16 to 1024px. Any transparency in the source is flattened onto the given background colour first (Apple rejects icons with alpha). A non-square source is centered and letterboxed onto a square canvas rather than stretched. Every output size is produced by repeatedly halving the source (a box-filter-equivalent downscale) before one final resize to the exact target, which keeps small icons sharp instead of muddy. The dark variant is a mechanical darken (source composited at 82% opacity over black) offered as a starting point, not a real design pass -- review it before shipping. The tinted variant is a Rec.709 greyscale luminance map, which is what iOS actually wants for that slot (it applies the colour itself). The JSON result reports the source dimensions, whether it had transparency, the file count, and two non-fatal warnings when the source was not square or not exactly 1024px on its longest side. Always returns as a resource_link (a 30+ file ZIP is never small enough to inline) -- fetch the link to get the archive.
| Name | Required | Description | Default |
|---|---|---|---|
| variants | No | Which iOS appearance variants to include alongside the required light AppIcon.png. 'none': light only. 'dark': light + AppIcon-Dark.png. 'all': light + AppIcon-Dark.png + AppIcon-Tinted.png. Contents.json is written to match whichever set is chosen. | all |
| imageBase64 | Yes | Base64-encoded source image bytes (PNG, JPEG, or WebP). 1024x1024 is ideal; anything else is padded to square and/or scaled. | |
| backgroundColor | No | CSS/hex colour (e.g. "#ffffff") used to flatten transparency and to pad a non-square source before it is centered onto a square canvas. | #ffffff |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it delivers thoroughly. It discloses that transparency is flattened because Apple rejects alpha, non-square images are letterboxed rather than stretched, scaling is done by repeated halving, the dark variant is a mechanical 82% black overlay that needs review, the tinted variant is a Rec.709 luminance map, and the result is always returned as a resource_link.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the core function, and every sentence carries useful signal with no obvious filler. However, it is one long unbroken paragraph with many nested clauses; bullet points or short segmented paragraphs would make it easier for an agent to scan and parse.
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?
The tool is complex, with multi-platform outputs, appearance variants, color handling, and resampling details, and there is no output schema. The description compensates by reporting the JSON result fields, non-fatal warnings for non-square/undersized sources, and the guaranteed resource_link return, so an agent has enough to invoke and consume the result 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, and the description adds meaningful behavioral context beyond the schema. It connects variants to which AppIcon files appear in Contents.json, backgroundColor to flattening and padding, and imageBase64 to the ideal 1024px source and non-square handling.
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: it turns one source image into a ZIP containing an iOS AppIcon set, Android mipmap set, and a flat sizes folder. The title scopes it to iOS + Android, and the output details clearly distinguish it from sibling tools like generate_favicon_set.
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 makes its context explicit by listing the exact artifacts produced for iOS and Android, so an agent knows when this tool is appropriate. It does not explicitly name alternatives or state when not to use it, such as directing favicon-only work to generate_favicon_set, 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.
generate_favicon_setGenerate a favicon and web-app-manifest setAInspect
Turns one source image into a complete favicon set: favicon.ico (a real multi-resolution ICO container holding 16, 32 and 48px PNG-encoded entries -- not a single-size file with an .ico extension), favicon-96x96.png, apple-touch-icon.png (180px, flattened onto backgroundColor because iOS paints transparency black there), web-app-manifest-192x192.png and web-app-manifest-512x512.png (optionally padded to Android's maskable safe zone -- the artwork shrunk to a centred 80%-width square on the background colour, reproducing the source tool's square padding rather than clipping to the actual inscribed-circle safe area), site.webmanifest, and the exact 5-line HTML snippet (favicon.ico link, favicon-96x96.png link, apple-touch-icon link, apple-mobile-web-app-title meta, manifest link) ready to paste. A non-square source is centred on a transparent square canvas first, so nothing is stretched. Ported from GO AI's browser-based favicon tool, run server-side with @napi-rs/canvas instead of a DOM . Every PNG and the .ico are small (a few KB to worst-case a couple hundred KB), so all six files are returned individually rather than zipped -- each name matters (favicon.ico and site.webmanifest belong at the site root) and there is no batching benefit to a ZIP at this size. The JSON result carries the manifest JSON text, the HTML snippet text, a per-file table of what each output is for, and a warning when the source is smaller than 512px on its longer side (the 512 icon will be upscaled). Fails with a clear message rather than throwing if the input cannot be decoded as an image.
| Name | Required | Description | Default |
|---|---|---|---|
| siteName | No | Full site name, used as the manifest's "name" field and as the fallback for short_name / the apple-mobile-web-app-title meta tag when shortName is empty. | My site |
| shortName | No | Short name for a home-screen label (roughly 12 characters fit). Used as the manifest's "short_name" and in the apple-mobile-web-app-title meta tag; falls back to siteName when empty. | |
| themeColor | No | Hex colour (# optional, 3- or 6-digit) written to the manifest's theme_color field. Purely metadata -- never painted onto any icon. | #0a0a0c |
| imageBase64 | Yes | Source image, base64-encoded. Any raster/SVG format @napi-rs/canvas can decode (PNG, JPEG, WebP, GIF, SVG). May be non-square and may carry transparency -- it is centred on a square canvas before anything else happens to it. Capped by this server's per-input byte limit. | |
| backgroundColor | No | Hex colour (# optional, 3- or 6-digit) used three ways: the manifest's background_color field, the flatten colour behind the apple-touch-icon (iOS does not honour alpha there), and the padding colour around the maskable-cropped manifest icons. | #ffffff |
| maskablePadding | No | When true (default), the 192x192 and 512x512 manifest icons are padded: the artwork is shrunk to a centred 80%-width square on the background colour, matching Android's maskable-icon safe zone, and the manifest icons' "purpose" is set to "maskable". When false, those two icons are the plain resized artwork with "purpose": "any". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it delivers extensively: it discloses that the ICO is a real multi-resolution container not a renamed PNG, that apple-touch-icon is flattened because 'iOS paints transparency black', that the maskable padding approximates the source tool's square padding rather than the true inscribed-circle safe area, that non-square sources are centred on transparent canvas, that the JSON result includes manifest text, HTML snippet, per-file table, and an upscaling warning, and that it 'Fails with a clear message rather than throwing'. This is exceptional transparency. It doesn't explicitly state the operation is non-destructive, but no destructive hint could reasonably apply to a generation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but long (approximately 180 words) and runs as a single paragraph. Every sentence adds real information — no filler — but the wall of text makes it harder for an agent to quickly extract key facts. The output format explanation (files returned individually, JSON result structure) could be tightened or moved later given the description's length.
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?
Despite having no output schema, the description explicitly enumerates the JSON result contents (manifest text, HTML snippet, per-file table, warning), making the return contract clear. With 6 parameters all fully documented in the schema plus deep behavioral notes (iOS flattening, maskable safe-zone semantics, ICO container detail, decode failure behaviour), nothing an agent needs to call this correctly or set expectations 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 substantial meaning beyond the schema: it explains that `backgroundColor` is also the flatten colour for apple-touch-icon and the padding colour for maskable icons, that `maskablePadding` sets 'purpose' to 'maskable' vs 'any', that `themeColor` is 'purely metadata -- never painted onto any icon', and that `shortName` falls back to `siteName`. This transforms parameter semantics from names into actionable decisions.
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 specifies a clear verb ('Turns') and resource ('one source image into a complete favicon set') and enumerates concrete outputs (favicon.ico with a real multi-resolution ICO container, PNG files, site.webmanifest, HTML snippet). It distinguishes itself from sibling `generate_app_icon_set` by referencing 'Ported from GO AI's browser-based favicon tool' and being specific to web favicon assets rather than app icons.
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 when to use by naming the exact output artifacts (web-app manifest, apple-touch-icon, favicon.ico) and states a specific constraint: files are returned individually rather than zipped because 'each name matters (favicon.ico and site.webmanifest belong at the site root)'. It also explains the alternative behavior via `maskablePadding` and the fallback semantics. It doesn't explicitly say 'use generate_app_icon_set for app store icons' though — that exclusion is implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
goai_build_app_privacy_labelBuild an App Store privacy label checklistAInspect
Given which SDKs and features are present in an iOS app (analytics, crash reporting, ads, attribution, accounts, in-app purchases, location, HealthKit, contacts, search, etc.), returns the App Store Connect privacy data types those items most likely require declaring, grouped the way Apple groups them (Contact info, Identifiers, Usage data, Diagnostics, ...), each with the reason (which chosen item(s) caused it), plus whether App Tracking Transparency/tracking applies and the vendor-documentation date the mapping was checked against. This is a fixed, deterministic lookup table shipped with GO AI's privacy-label-builder page -- not a code scanner and not compliance advice. SDKs change what they collect (sometimes in a minor version) and app configuration changes it further, so treat the result as a starting checklist to verify against each SDK's current documentation, not an answer to submit as-is.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | SDKs/features present in the app binary. One or more of: firebaseAnalytics, crashlytics, sentry, amplitude, admob, metaSdk, attribution, push, accounts, signInApple, iap, revenuecat, support, userPhotos, preciseLocation, healthKit, contactsAccess, search. Repeats are ignored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and handles it well: it discloses that the tool is a fixed, deterministic lookup table, identifies the vendor-documentation date as the mapping reference, and explicitly states limitations around SDK changes and app configuration. This is far beyond a minimal description and accurately sets expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but every sentence earns its place: it front-loads the output structure, then adds necessary caveats about determinism, non-legal status, and documentation drift. No filler or repetition of schema details is present.
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 deterministic lookup tool with full schema coverage and no output schema, the description completely explains what the agent can expect: grouped privacy data types, reasons, tracking applicability, and the vendor-documentation date. The caveats about verification against SDK documentation make the tool's practical usage and limitations fully clear.
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 fully documents the single `items` parameter and its enum values. The description adds context about treating those items as 'SDKs/features present' and mentions chosen items causing reasons, but it does not need to add parameter-level detail beyond what the schema already provides.
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: given SDKs/features, it returns App Store Connect privacy data types grouped by Apple's categories, with reasons and tracking applicability. This clearly distinguishes it from the unrelated sibling tools and makes the tool's function immediately obvious.
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 explicitly frames when to use the tool (when you have a list of SDKs/features and need a starting privacy checklist) and when not to rely on it: it is not a code scanner and not compliance advice. It also warns that results must be verified against current SDK documentation, giving clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_compressCompress an image (JPEG/WebP/AVIF)AInspect
Downscales an image to fit within a maximum dimension (default 1600px on the longer side, never enlarges -- matching GO AI's browser compressor tool) and re-encodes it as JPEG, WebP or AVIF at a given quality (1-100 scale, default 75). Input is base64-encoded image bytes (any format sharp/libvips can decode: JPEG, PNG, WebP, AVIF, GIF, TIFF, ...), not a file path or URL, capped at this server's input size limit. Returns the compressed image bytes plus a stats object: original and compressed dimensions and byte sizes, and the percent size change (positive = smaller, negative = the re-encode came out bigger, which happens when compressing an already-small, already-compressed image). Re-encoding always strips EXIF/ICC metadata, exactly like the source tool.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format. 'webp' (default, matches the source's own default whenever WebP is available) is smaller than JPEG at equivalent visual quality; 'jpeg' is the safest choice for old viewers or print; 'avif' is smaller still but slower to encode. | webp |
| quality | No | Encoder quality, 5-100 (matches the source's slider range). Defaults to 75. 100 is the least-lossy setting the encoder offers, not truly lossless. | |
| imageBase64 | Yes | Base64-encoded source image bytes (not a file path or URL). | |
| maxDimension | No | Longer-side cap in pixels before encoding; the image is downscaled to fit inside this (aspect preserved) and is never enlarged. Defaults to 1600, matching the source. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently explains that images are never enlarged, that EXIF/ICC metadata is always stripped, the meaning of positive/negative percent size change, the input size cap, and the output stats object. This is exemplary for a tool without 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 description is three dense sentences, front-loaded with the core operation. Every sentence carries distinct value: downscale/re-encode behavior, input format and constraints, and output/metadata details. There is no filler or redundancy.
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 tool with four parameters, no annotations, and no output schema, the description is remarkably complete. It covers input format, input size limits, output shape, edge cases (re-encode may be larger), metadata stripping, and format selection tradeoffs. An agent has everything needed to call 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 100%, so baseline is 3. The description adds meaningful context beyond the schema: it explains the input is 'base64-encoded image bytes' in any decoder-supported format, clarifies the output includes a stats object with size-change semantics, and gives practical format guidance (e.g., 'jpeg is the safest choice for old viewers or print'). It does not merely repeat schema fields.
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 uses specific verbs and resources: 'Downscales an image to fit within a maximum dimension' and 're-encodes it as JPEG, WebP or AVIF at a given quality'. It clearly states the operation and scope, making it easy to distinguish from sibling tools like resize_images or strip_image_metadata even without explicit naming.
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 indirectly implies when to use the tool through details like 'matching GO AI's browser compressor tool' and format tradeoffs, but it does not explicitly state when to use this tool over alternatives such as resize_images or image_compression_curve. There are no exclusions or direct sibling comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_compression_curveImage compression size-vs-quality curveAInspect
Analysis-only tool (no image bytes returned): re-encodes an image at the same fixed 14 quality levels GO AI's browser compressor samples to draw its size-against-quality curve (5, 10, ..., through 100 -- see the qualities in each returned point), for JPEG, WebP or AVIF, and reports the resulting byte size and percent change at each level. The image is first downscaled to fit within maxDimension (default 1600px on the longer side, never enlarged), exactly as the source's working canvas is, then every quality level is encoded one at a time. Because this repeats the encode 14 times, its maxDimension is capped at 2000px -- lower than image_compress's 4000px -- which costs nothing in practice, since the knee of the curve is a property of the image's content and sits in the same place at either size. Use this to find that 'knee' (where size stops dropping much per quality point) for a specific image, or image_compress to actually get the compressed bytes at one chosen quality. Input is base64-encoded image bytes, not a file path or URL.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Format to sample the curve in. Defaults to 'webp', matching the source's own default. | webp |
| imageBase64 | Yes | Base64-encoded source image bytes (not a file path or URL). | |
| maxDimension | No | Longer-side cap in pixels before encoding, aspect preserved, never enlarged. Defaults to 1600, matching the source. Capped at 2000 here (vs 4000 for image_compress) because this tool runs the encode 14 times. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses analysis-only behavior, no byte return, repeated 14x encoding, downscaling without enlargement, the 2000px cap rationale, accepted formats, and the per-level reported fields. Minor ambiguity between '14 quality levels' and the '(5, 10, ..., through 100)' example prevents a perfect score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the critical 'analysis-only (no image bytes returned)' caveat and is dense with useful detail. It is long, but most sentences justify their place; the slightly confusing parenthetical about quality levels and the comparison with image_compress add minor noise.
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?
Even without an output schema, the description explains the input encoding, accepted formats, resizing behavior, output fields per level, and the alternative tool for actual bytes. An agent has enough information to invoke the tool correctly and interpret its results.
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 adds meaningful context beyond the schema, such as why maxDimension is capped at 2000 vs image_compress's 4000, that defaults match the source, and that input must be base64 image bytes. It does not merely repeat schema text.
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 operation—re-encoding an image across fixed quality levels and reporting byte size and percent change—and immediately clarifies that it is analysis-only with no image bytes returned. It clearly distinguishes itself from sibling tool image_compress.
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 this tool: 'Use this to find that knee... or image_compress to actually get the compressed bytes at one chosen quality.' It also explains the maxDimension tradeoff relative to image_compress, leaving no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_mobileprovisionInspect a provisioning profileAInspect
Reads an iOS/macOS provisioning profile (.mobileprovision or .provisionprofile, given as base64) by byte-searching its CMS/PKCS7-signed container for the embedded '<?xml ... ' property list and parsing that XML -- it never validates or decodes the cryptographic signature, and does not report on the embedded certificates beyond how many there are. Reports expiry status and days remaining, profile type (development/ad hoc vs. enterprise vs. App Store distribution, classified only from the registered-device list and the ProvisionsAllDevices flag), team and application identifiers, the full entitlements dictionary, and the count and UDIDs of registered devices. Returns a structured { ok: false, error, message } result (not a thrown error) for an unreadable input, a file with no embedded plist, or a plist that fails to parse.
| Name | Required | Description | Default |
|---|---|---|---|
| base64 | Yes | Base64-encoded raw bytes of the .mobileprovision or .provisionprofile file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains that the tool byte-searches the CMS/PKCS7 container, never validates or decodes the signature, does not report on certificates beyond count, classifies profiles using specific fields, and returns a structured { ok: false, error, message } result instead of throwing. This is exemplary transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the core action, followed by methodology, limitations, and output details. While long, every clause earns its place because there is no output schema or annotations to supplement it. Slight redundancy with the schema's base64 wording keeps it from 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?
Given the tool's complexity and the absence of annotations and output schema, the description covers all essential aspects: input encoding, file types, parsing approach, limitations, reported fields, and error behavior. An agent has enough context to invoke the tool correctly and interpret its results.
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 schema description already fully documents the single parameter 'base64', including the accepted file types. The tool description adds little beyond what the schema provides, which meets the baseline for high schema coverage but does not elevate it further.
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 clearly states a specific verb ('Reads'), the resource (iOS/macOS provisioning profile), and the accepted input formats. It also describes the internal mechanism and differentiates this from broader cryptographic validation tasks. No sibling tool overlaps with this functionality.
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 makes the intended use obvious by explaining exactly what inputs are accepted and what information is extracted. It does not explicitly name when not to use the tool, but there are no closely related sibling tools, so the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
oklch_convertConvert an OKLCH / hex / RGB / HSL colorAInspect
Converts a color to and from OKLCH. Accepts either a CSS color string via color (hex, rgb()/rgba(), hsl()/hsla(), or oklch()) or explicit OKLCH lightness/chroma/hue via l, c and h — supply one or the other. Returns the canonical oklch() text for the color exactly as requested, plus its sRGB-gamut-mapped hex/rgb()/hsl() equivalents. Gamut mapping follows the CSS Color 4 algorithm (bisecting on chroma at constant lightness and hue, not channel-clipping) and only targets sRGB — there is no P3 or Rec2020 support.
| Name | Required | Description | Default |
|---|---|---|---|
| c | No | OKLCH chroma. sRGB's most saturated colour reaches about 0.31; the source page's own slider goes to 0.4 so out-of-gamut requests are possible on purpose. Used (with l and h) only when color is omitted. | |
| h | No | OKLCH hue in degrees, 0-360. Used (with l and c) only when color is omitted. | |
| l | No | OKLCH lightness, 0 (black) to 1 (white). Used (with c and h) only when color is omitted. | |
| color | No | CSS color to convert from — hex ('#5b8cff' or '#58f'), rgb()/rgba(), hsl()/hsla(), or oklch(). Takes precedence over l/c/h when both are supplied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and handles it well. It discloses the return value shape (canonical oklch() text plus sRGB-gamut-mapped hex/rgb()/hsl() equivalents), explains the CSS Color 4 gamut-mapping algorithm rather than channel-clipping, and explicitly states the sRGB-only limitation with no P3 or Rec2020 support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense, front-loaded sentences. The first establishes the core function and input modes, and the second covers output format and algorithm behavior. Every clause adds information; there is no filler or 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?
The description is unusually complete for a tool with no output schema and no annotations: it explains input modes, output structure, gamut mapping, and limitations. The main gaps are unspecified behavior when neither input mode is supplied (no required parameters), and no mention of how alpha values are handled for rgba()/hsla() inputs.
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 meaningful interaction semantics beyond the schema: callers must supply either `color` or l/c/h, and `color` takes precedence when both are present. It also summarizes what each parameter group represents, reinforcing the schema without contradicting it.
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 leads with a specific verb and resource: 'Converts a color to and from OKLCH.' It enumerates the accepted input formats (hex, rgb()/rgba(), hsl()/hsla(), oklch()) and the explicit l/c/h alternative, which clearly distinguishes this conversion tool from siblings like oklch_ramp or check_contrast.
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 clearly frames when to use the tool: any time a color needs converting to or from OKLCH. It also gives concrete guidance on input selection, noting that callers should supply either `color` or l/c/h, and that `color` takes precedence when both are supplied. It does not explicitly name alternatives or exclusions, 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.
oklch_rampBuild an OKLCH swatch ramp / CSS custom-property blockAInspect
Builds a perceptually even OKLCH swatch ramp from a base color (same color or l/c/h input as oklch_convert) by sweeping one channel — hue, lightness, or chroma — while holding the other two fixed, so every swatch keeps the same visual weight (this is the reason to build a ramp in OKLCH rather than HSL). Each step is gamut-mapped to sRGB with the CSS Color 4 chroma-reduction algorithm and returned with its hex preview, plus a ready-to-paste :root { --name-1: oklch(...); ... } CSS block.
| Name | Required | Description | Default |
|---|---|---|---|
| c | No | OKLCH chroma. sRGB's most saturated colour reaches about 0.31; the source page's own slider goes to 0.4 so out-of-gamut requests are possible on purpose. Used (with l and h) only when color is omitted. | |
| h | No | OKLCH hue in degrees, 0-360. Used (with l and c) only when color is omitted. | |
| l | No | OKLCH lightness, 0 (black) to 1 (white). Used (with c and h) only when color is omitted. | |
| mode | No | Which channel the ramp sweeps while holding the other two fixed: 'hue' rotates hue around the wheel, 'light' sweeps lightness from a near-black floor to a near-white ceiling, 'chroma' sweeps chroma from 0 up to the base colour's own chroma. | hue |
| name | No | Stem for the generated CSS custom properties (e.g. 'brand' produces --brand-1, --brand-2, ...); sanitized to [a-z0-9-] the same way the source page does. | brand |
| color | No | CSS color to convert from — hex ('#5b8cff' or '#58f'), rgb()/rgba(), hsl()/hsla(), or oklch(). Takes precedence over l/c/h when both are supplied. | |
| steps | No | Number of swatches in the ramp, 3-24. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the exact transformation approach (sweep one channel, hold two fixed), gamut-mapping to sRGB using the CSS Color 4 chroma-reduction algorithm, and the output format including hex previews and a ready-to-paste CSS block. It could add caveats about out-of-gamut or extreme inputs, but the core behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but well organized: it front-loads the main purpose, explains the method and rationale, then describes the output. Every clause earns its place, and there is no redundant repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters and no output schema, the description is remarkably complete. It explains inputs, the sweep behavior, the color-mapping algorithm, and the exact deliverable (hex previews plus a CSS custom-property block). An agent has enough context to invoke it correctly 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?
Schema description coverage is 100%, so the schema already documents every parameter. The description adds useful context by tying the color/l/c/h inputs to oklch_convert and clarifying what 'mode' does when sweeping, but it does not substantially expand on parameter meanings 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 ('Builds'), a precise resource ('OKLCH swatch ramp / CSS custom-property block'), and the core operation (sweeping one channel while holding others fixed). It clearly differentiates from the sibling oklch_convert by focusing on multi-step ramp generation rather than single-color conversion.
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 makes the use case clear: build a perceptually even ramp by sweeping hue, lightness, or chroma. It references oklch_convert for the shared input format and explains why OKLCH is preferred over HSL for this purpose, though it does not explicitly state when to choose this tool over a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plant_watering_calendarPlant watering calendar (.ics)AInspect
Builds a soil-check interval per houseplant from a fixed drought-tolerance table (32 common houseplants), adjusted by pot size, pot material, light and season, and returns both a schedule breakdown and the full text of a downloadable RFC 5545 .ics calendar file -- one recurring all-day 'check the soil' reminder per plant (deliberately never 'water', since only the plant's own soil can say that). Matches GO AI's browser watering-calendar tool exactly, including its northern-hemisphere-season default when season is omitted, its terracotta/glazed/low-light/winter multipliers, and its 75-octet .ics line folding. The starting intervals are heuristic drought-tolerance bands, not a measurement of any specific plant, pot or room -- the tool says so in its own FAQ.
| Name | Required | Description | Default |
|---|---|---|---|
| light | No | Light level: bright direct sun dries soil fastest, low light slowest. Defaults to bright-but-indirect. | indirect |
| plants | Yes | Houseplant ids to include (each event uses this exact catalog, no free text). Duplicates are ignored. Ids: snake, zz, aloe, jade, echeveria, cactus, hawortia, ponytail, rubber, monstera, pothos, philodendron, fiddle, dracaena, yucca, schefflera, spider, peaceLily, anthurium, orchid, birdOfPara, parlour, kentia, areca, chinese, prayer, calathea, fern, maidenhair, fittonia, begonia, africanViolet. | |
| season | No | Current season, which scales every interval (summer fastest, winter roughly 60% slower). If omitted, defaults from today's calendar month assuming the *northern* hemisphere, exactly like the source page -- pass this explicitly for a southern-hemisphere season or to plan for a season other than the current one. | |
| potSize | No | Pot diameter band: small (under 12cm), medium (12-25cm, default), large (over 25cm). A larger pot holds more soil and dries more slowly. | medium |
| startDate | No | First reminder date, YYYY-MM-DD. Every plant's recurring event starts on this same date, each with its own repeat interval. Defaults to today. | |
| potMaterial | No | Unglazed terracotta breathes and dries noticeably faster than plastic (default) or glazed ceramic. | plastic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, and it succeeds. It reveals the algorithm's origin (fixed drought-tolerance table, exact multiplier compatibility), the output format details (RFC 5545, 75-octet line folding, recurring all-day events), and an important caveat that the intervals are heuristic rather than measurements. This is exemplary transparency for a tool with no structured annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and outputs, then moves to compatibility and caveats. It is dense but each sentence earns its place; the middle sentence overlaps somewhat with schema parameter descriptions, so it is not maximally concise, but the structure is logical and 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?
For a tool with six parameters and no output schema, the description adequately outlines both deliverables (schedule breakdown + full .ics text), the event format (recurring all-day reminders), and the RFC 5545 standard. It leaves the internal structure of the 'schedule breakdown' unspecified, but an agent has enough information to call the tool and know what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds some flavor by mentioning terracotta/glazed/low-light/winter multipliers and the northern-hemisphere default, but these details already appear in the parameter descriptions. It doesn't introduce new parameter-level semantics beyond what the schema already provides.
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 specific verb ('Builds') and names the exact resource ('soil-check interval per houseplant'), then lists the two concrete outputs: a schedule breakdown and a downloadable RFC 5545 .ics calendar file. It also draws a clear behavioral distinction by noting reminders are deliberately 'check the soil' rather than 'water', making the tool's purpose unmistakable even among unrelated siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong contextual guidance: it establishes fidelity to GO AI's browser tool, explains the northern-hemisphere season default, and implies the tool is the right choice for generating houseplant watering-check calendars. It doesn't explicitly list alternatives or exclusions, but since no sibling tool overlaps in this domain, the context is sufficient for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_weight_goal_dateWeight loss goal-date projectorAInspect
Projects the calendar date a goal body weight is reached under a fixed daily calorie intake. Unlike a naive straight-line calculator (kg to lose x 7700 / deficit, also returned here for comparison), this recomputes Mifflin-St Jeor maintenance calories at each simulated day as weight falls, so the effective deficit narrows the way it really does -- meaning the projected date is later than, or equal to, the naive one, never earlier. Refuses to project a date when the resulting intake falls below a 1500 kcal (men) / 1200 kcal (women) floor, and reports a 'plateau' outcome instead of a date when the goal sits at or below the weight where maintenance would settle at that intake (an asymptote that a fixed intake alone can never cross). Adult-only inputs (18+); only projects weight loss (goalWeight must be less than currentWeight).
| Name | Required | Description | Default |
|---|---|---|---|
| age | Yes | Age in years, 18-120. The source page is not validated for children; 18+ only. | |
| sex | Yes | Biological sex, used by the Mifflin-St Jeor formula. | |
| units | No | metric = cm/kg, imperial = ft+in/lb. Applies to height and both weight fields. | metric |
| heightCm | No | Height in centimeters. Required when units is 'metric'. | |
| heightFt | No | Feet part of height. Required when units is 'imperial'. | |
| heightIn | No | Inches part of height (0-11). Required when units is 'imperial'. | |
| goalWeight | Yes | Goal body weight, same unit as currentWeight. Must be less than currentWeight -- this tool only projects weight loss, matching the source page. | |
| activityLevel | Yes | Activity multiplier bucket, the site's five options: sedentary x1.2 (desk job, no exercise), light x1.375 (1-3 sessions/week), moderate x1.55 (3-5 sessions/week, the site default), very_active x1.725 (6-7 sessions/week), extra_active x1.9 (physical job or 2x/day training). | |
| currentWeight | Yes | Current body weight, kg if units is metric, lb if imperial. | |
| referenceDate | No | ISO date (YYYY-MM-DD) the projection counts forward from. Defaults to today (UTC) when omitted. | |
| dailyDeficitKcal | Yes | Daily calorie deficit to hold against today's computed maintenance. The site's quick picks are 250/500/750/1000 kcal, but any positive number is accepted. | |
| includeChartSeries | No | If true, also return the weekly weight series and the naive straight-line end week -- the same two lines the source page charts. Set false to skip them for a lighter response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and does so thoroughly. It reveals the day-by-day Mifflin-St Jeor recalculation, the widening gap versus the naive projection, the 1500/1200 kcal refusal floor, the plateau asymptote behavior, and the adult-only/weight-loss-only constraints. This is far more than a typical tool description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, algorithmic contrast, refusal/plateau conditions, and input constraints. It is front-loaded with the core purpose and does not include filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description does a strong job of explaining key outputs: a projected date, the naive straight-line comparison, and a plateau outcome. It also references the weekly weight series via the includeChartSeries parameter. The main gap is that it never explicitly states the return shape, field names, or date format, so an agent must infer some output details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies. The description adds useful algorithmic context about how the intake interacts with changing maintenance calories, but it does not meaningfully explain individual parameters beyond the schema. There is also a mild ambiguity between 'fixed daily calorie intake' and the dailyDeficitKcal parameter's schema wording, which is left unresolved.
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 specific verb and resource: 'Projects the calendar date a goal body weight is reached under a fixed daily calorie intake.' It then distinguishes itself from a naive straight-line calculator and states the dynamic-model behavior, making the tool's purpose unmistakable and differentiated from sibling health calculators.
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 makes usage context clear: a weight-loss goal-date projection under a calorie plan, with explicit constraints (adult-only, goalWeight must be less than currentWeight) and clear failure modes (calorie floor, plateau). It does not explicitly name sibling alternatives like calculate_tdee or calculate_bmi_and_body_fat, but the purpose is specific enough that an agent can infer when to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_convert_ingredientCup-to-grams converter (per-ingredient density)AInspect
Converts an amount of one ingredient between cup, tablespoon, teaspoon, millilitre, gram and ounce using that specific ingredient's own USDA FoodData Central portion weight, not a single water-based figure applied to everything -- a cup of flour (125 g) and a cup of honey (339 g) do not weigh the same. Supports an ingredient's own measurement-style variants where USDA publishes more than one (packed vs loose brown sugar, sifted vs unsifted powdered sugar, whole vs sliced/slivered/ground nuts, etc.), and for baking powder, baking soda and yeast uses USDA's own published teaspoon weight rather than dividing the cup weight by 48, since a spoon measurement of a fine powder is not proportionate to its cup measurement. Also reports, for information, what a generic water-density converter would have said for the same input and by how much that would have been wrong -- omitted when the requested unit is already grams or ounces.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | Yes | Unit the amount is given in. | |
| amount | Yes | Amount as a decimal ("1.5"), a simple fraction ("3/4"), or a mixed number ("1 1/2"). | |
| variant | No | Measurement style for ingredients that have more than one USDA figure (e.g. sugar-brown: "packed"/"loose"; sugar-icing: "unsifted"/"sifted"; almonds: "whole"/"sliced"/"slivered"/"ground"). Omit for ingredients with only one style. | |
| cupSizeMl | No | Cup size in ml, for the 'cup' unit (and 'tbsp'/'tsp' on ingredients without their own USDA spoon weight). Defaults to the US customary cup (236.588 ml); other common values are 240 (US nutrition-label cup) or 250 (metric cup). Does not affect the reported density, which is always derived from the customary cup regardless of this value, matching the source tool. | |
| ingredient | Yes | Which ingredient to convert, identified by its GO AI recipe-tool id (e.g. "flour-ap", "sugar-brown", "honey"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well. It discloses that baking powder, baking soda, and yeast use USDA teaspoon weights rather than proportional cup weights; that variants are supported; and that a comparison with a generic water-density converter is reported except when the requested unit is already grams or ounces. It even explains the cupSizeMl/density derivation caveat.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but information-dense, front-loaded with the core purpose and followed by necessary caveats and special cases. It could be lightly restructured with sentence breaks for readability, but every clause adds useful behavior not available in the 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?
The description thoroughly covers ingredient semantics, variants, unit behavior, and the comparison output. There is no output schema, and while the description explains the comparison report, it does not explicitly state the shape of the returned conversion result. This is a minor gap for an otherwise very complete definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema: why variants matter, the special teaspoon-weight behavior for certain ingredients, and the caveat that cupSizeMl does not affect the reported density. This goes beyond simple parameter labels.
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 specific verb and resource: 'Converts an amount of one ingredient between cup, tablespoon, teaspoon, millilitre, gram and ounce using that specific ingredient's own USDA FoodData Central portion weight.' It clearly distinguishes this from generic water-based converters, and the title reinforces the per-ingredient density focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: any per-ingredient conversion where density matters, including variant handling and special spoon-weight cases. It contrasts with a generic water-density converter, but it does not explicitly name sibling alternatives or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_scaleRecipe servings scaler with gram weightsAInspect
Scales a pasted recipe (one ingredient per array entry, e.g. '2 cups all-purpose flour') from one servings count to another, multiplying each line's leading amount by the ratio and reformatting it as a whole number or simple/mixed fraction rather than a decimal. When a line's unit and ingredient can both be recognised against GO AI's density table, appends the scaled amount's weight in grams in parentheses; lines already given in grams or ounces, lines whose ingredient isn't recognised, and lines that don't start with a parseable amount are returned unchanged (the last completely as-is, typos included).
| Name | Required | Description | Default |
|---|---|---|---|
| lines | Yes | One ingredient per array entry, as free text (e.g. "2 cups all-purpose flour", "1/2 tsp table salt"), up to 500 lines of 1000 characters each. Lines with no parseable leading amount, or with an amount but no recognisable unit/ingredient after it, are returned unchanged. | |
| cupSizeMl | No | Cup size in ml used when converting a scaled "cup"/"tbsp"/"tsp" amount to grams. Defaults to the US customary cup (236.588 ml); other common values are 240 or 250. | |
| toServings | No | Servings wanted. 0 (or an omitted field) falls back to 1, matching the source tool's own guard. | |
| fromServings | No | Servings the recipe as written makes. 0 (or an omitted field) falls back to 1, matching the source tool's own guard. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it does so thoroughly. It discloses the algorithm (multiply by ratio), the formatting (whole number or simple/mixed fraction), conditional gram appendage, and explicit fallback rules for unrecognized or unparseable lines. It also notes that unchanged lines are returned exactly as-is, including typos, which is important behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence with no filler, and the core action is front-loaded. It packs a lot of behavioral detail efficiently, though the length and subordinate clauses make it slightly harder to parse quickly. It earns its words overall, but a short structured break into main behavior and edge cases would improve 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?
The description covers the input format, transformation logic, conditional gram conversion, and edge-case fallbacks thoroughly, which is impressive given there is no output schema or annotations. However, it never explicitly states the return value shape (e.g., that the tool returns an array of strings mirroring the input lines). This is a minor gap since the behavior implies the return type, but a clear statement would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema already documents each parameter's meaning, defaults, and constraints. The description adds useful high-level context about how the parameters interact (e.g., density table and gram conversion), but it does not add meaning per-parameter beyond what the schema provides. It neither harms nor significantly improves on the already-excellent schema 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?
The description states a specific verb ('Scales'), a specific resource ('a pasted recipe ... from one servings count to another'), and the exact transformation behavior. It clearly differentiates from sibling tools like recipe_convert_ingredient by focusing on bulk scaling with gram-weight enrichment. The title reinforces the purpose, and the description's detail leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool: when you have a multi-line recipe to scale and want servings-adjusted amounts with optional gram weights. It also describes edge cases where lines are passed through unchanged, which helps an agent understand the tool's behavior. However, it does not explicitly name alternatives or state when not to use this tool in favor of recipe_convert_ingredient or another sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_ai_modelRecommend which AI model to use for a taskAInspect
Static editorial recommendation -- NOT a live benchmark or leaderboard -- for which of six AI models (GPT-5, Gemini, Grok 4, Claude, DeepSeek, Kimi) to use for a given kind of task, ported from GO AI's own daily side-by-side-use judgement, current as of August 2026. Pick a task and get the recommended model plus the reasoning and a second-opinion backup. The optional priority can bias the pick toward cost (routes to DeepSeek) or freshness (routes to Grok) instead of the default quality pick -- but only for tasks where that tradeoff is actually offered; otherwise the quality default is returned unchanged. This reflects one team's opinion, not measured accuracy or pricing data.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | The kind of task, one of: write (Long or structured writing), copy (Punchy copy, hooks, social), edit (Editing my own draft), longdoc (Summarising long documents), code (Writing code), review (Reviewing code someone else wrote), math (Maths and calculations), news (Current events, what's trending), research (Research and synthesis), translate (Translation), brainstorm (Brainstorming ideas), voice (Talking out loud), prose (Prose you'll publish as-is), longinput (Very long inputs on a budget), image (Generating images), video (Generating video), bulk (Running the same prompt hundreds of times). | |
| priority | No | "quality" (default) returns the task's default best-result pick. "cost" swaps to DeepSeek when this task supports a cheaper substitute. "fresh" swaps to Grok when this task supports a fresher/more current substitute. Has no effect for tasks that don't offer that tradeoff. | quality |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden—and it delivers: it discloses that the recommendation is static, subjective opinion, current as of August 2026, not measured accuracy or pricing data, and that priority only changes the result when the tradeoff is offered. This is unusually transparent about the tool's limitations and conditional behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the first sentence scopes the tool and disclaims it, the second describes the returned value, and the third explains priority semantics and its limits. Front-loaded with the most important caveat (static editorial, not a benchmark), it remains dense without being wordy.
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 states what the caller gets: recommended model, reasoning, and a second-opinion backup. It also explains the priority parameter's no-op behavior and the input vocabulary via the schema, leaving no major gap for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds modest context—e.g., that cost routes to DeepSeek and freshness routes to Grok, and that the default is 'quality'—but this largely echoes the schema's own parameter descriptions. It doesn't add significant new meaning for the task parameter beyond what the enum already documents.
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 is specific: it names the exact verb ('recommend'), the resource ('which of six AI models to use for a given kind of task'), and the concrete output (recommended model plus reasoning and backup). It also distinguishes itself from siblings by explicitly saying it is NOT a live benchmark or leaderboard, so an agent can tell it apart without opening schemas.
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 clearly frames when this tool is appropriate: for editorial opinion-based model selection, and explicitly excludes live benchmark/leaderboard use. It doesn't name an alternative tool because no sibling offers the same functionality, but it does explain the optional priority behavior and when it has no effect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_app_store_screenshotApp Store screenshot generatorAInspect
Composite one or more app screenshots into a drawn device frame (rounded bezel, Dynamic Island on phone-shaped canvases) with a gradient background and optional headline/caption text, and export as PNG at any/all of the 4 official App Store Connect sizes. A blank page (image omitted) draws no device, for a title card or an outro. A device positioned past the edge of its page is drawn spilling onto the neighbouring page too, so a set can run one screenshot into the next. LIMITS — this runs on a small shared host, so an over-limit call is refused immediately, before any rendering, with a message saying how to split it: at most 10 pages at any one size, 2 at size:"all" (which renders every page 4 times over — a longer set needs one call per size); at most 12 rendered PNGs per call (pages x sizes); 6 MP per screenshot and 4 MB of screenshot bytes summed across the whole call (send JPEG, not PNG, for a multi-page set); and at most 40 text layers of 512 characters each.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Which official App Store Connect size to export: 6.9"/6.7"/6.5" iPhone or 13" iPad, or "all" for every size (returned as a ZIP). "all" renders 4 canvases per page, so it is limited to 2 pages per call; for a longer set, make one call per size — a single-size call carries all 10. | 6.9 |
| pages | Yes | One entry per exported page/PNG, in order. Use null for a blank page. At most 10 pages at any single size; size:"all" renders every page 4 times over and fits 2. Over that, the call is refused before any rendering. | |
| texts | No | Zero or more text layers, at most 40. Order is z-order (later entries draw on top); each is confined to one page. | |
| joinedScene | No | When true and there is more than one page, one gradient stretches across the whole set instead of repeating per page. | |
| backgroundTo | No | Gradient end color (bottom-right), hex. | #2b2140 |
| backgroundFrom | No | Gradient start color (top-left), hex. | #12121a |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It thoroughly discloses limits and refusal behavior, rendering constraints, the 'all' size ZIP expansion, blank-page behavior, edge spill, and input format guidance such as using JPEG for multi-page sets. This is far beyond typical disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded: core purpose first, then rendering behavior, then limits. Nearly every clause adds information, though the long LIMITS passage is somewhat harder to scan than a structured breakdown would be.
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?
The description covers how pages, device frames, blank pages, text limits, gradient options, and size expansion behave, and it gives concrete call-level constraints. There is no output schema, so the only slight gap is not describing the exact returned artifact or response shape, though PNG export and ZIP-for-all are at least mentioned in the description/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 100%, so the baseline is 3. The description adds some cross-parameter context like total byte limits and the edge-spill behavior, but most per-parameter meaning is already fully documented in the schema. It does not meaningfully expand individual parameter semantics beyond what the schema provides.
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: composite screenshots into a device frame, add background/text, and export PNG at App Store Connect sizes. It also gives distinctive behaviors (blank pages, device edge spill) that separate it from sibling image tools such as generate_app_icon_set or resize_images.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context for the tool: producing App Store screenshot sets, title cards, outros, and multi-page continuations. It does not explicitly name alternatives or state when-not-to-use, but the domain is distinct enough that an agent can infer when this tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resize_imagesBatch image resizer with real presetsAInspect
Resizes a batch of 1+ images to a named real-world preset (App Store screenshots, Open Graph/social cards, Android launcher icon densities, a favicon set) or a custom width/height, using contain (whole picture, padded), cover (fills the frame, crops overflow) or stretch (distorts to fit) fitting. Each resized image is PNG-encoded (EXIF/ICC metadata stripped on re-encode, matching the source page) and every image is auto-rotated per its embedded EXIF orientation before resizing. All outputs are packaged into one uncompressed ZIP (PNG bytes are already compressed, so a second pass would not shrink them), foldered by preset (e.g. "social/photo-1200x630.png", or "android/mipmap-hdpi/icon.png" for the Android density preset, which names each size's folder after its density instead of suffixing the pixel size). This always returns as a resource_link (a batch ZIP is never small enough, or singular enough, to inline) -- fetch the link to get the archive. Per-file output dimensions and byte sizes are reported in the JSON result. Each input image (base64) is capped by this server's per-input byte limit.
| Name | Required | Description | Default |
|---|---|---|---|
| fit | No | How each image fills its target box. 'contain' keeps the whole picture and pads the gap with paddingColor. 'cover' fills the box and crops whatever hangs over. 'stretch' distorts the image to the exact box, ignoring aspect ratio. | contain |
| images | Yes | One to 60 images. Each is resized independently to every size in the chosen preset. A call is additionally capped at 48000000 total output pixels across images x sizes, so a preset with large or numerous sizes admits fewer images than one with small ones. | |
| preset | No | Which size(s) to produce for every image. appstore69: App Store screenshot, 6.9" iPhone, 1320x2868. appstore67: App Store screenshot, 6.7" iPhone, 1290x2796. appstoreIpad: App Store screenshot, 13" iPad, 2064x2752. androidIcon: Android launcher icon, 5 densities (48/72/96/144/192px, each output foldered as mipmap-mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi). favicon: favicon set, 16/32/48/180/192/512px. og: Open Graph card, 1200x630. xcard: X (Twitter) summary card, 1200x628. linkedin: LinkedIn share image, 1200x627. igSquare: Instagram square post, 1080x1080. igPortrait: Instagram portrait post, 1080x1350. igStory: Instagram story, 1080x1920. youtube: YouTube thumbnail, 1280x720. custom: a single arbitrary size taken from customWidth/customHeight. | og |
| customWidth | No | Target width in px. Only used when preset is "custom". | |
| customHeight | No | Target height in px. Only used when preset is "custom". | |
| paddingColor | No | Hex color (e.g. "#ffffff") used to pad the frame when fit is "contain". Ignored for "cover" and "stretch". | #ffffff |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: PNG re-encoding, EXIF/ICC stripping, auto-rotation, uncompressed ZIP rationale, preset folder naming, always-resource_link return behavior, per-file output metrics, and input byte caps. This goes well beyond typical descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place: core operation, encoding behavior, ZIP packaging rationale, link return, and limits. It is front-loaded with the primary action and uses the length to clarify genuinely complex behavior.
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, yet the description fully covers return behavior (resource_link to a ZIP, JSON with per-file dimensions/bytes) plus all operational constraints. For a 6-parameter tool with complex preset logic, 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?
Schema coverage is 100%, so the baseline is 3; the description adds value by explaining folder naming conventions ('social/photo-1200x630.png', 'android/mipmap-hdpi/icon.png') and exposing the server-level per-input byte cap not present in 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 and resource: 'Resizes a batch of 1+ images to a named real-world preset ... or a custom width/height', and names the fitting modes and output packaging. This clearly differentiates from sibling tools like image_compress or strip_image_metadata by focusing on preset-driven batch resizing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context about when to invoke: batch resizing to presets, custom dimensions, and the fact that output is a ZIP via resource_link. It doesn't explicitly name alternative tools or state when NOT to use it, but the preset and ZIP framing makes the use case evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strip_image_metadataStrip image metadata (EXIF/GPS/XMP/IPTC/PNG text)AInspect
Reads a JPEG or PNG's hidden metadata (JPEG: EXIF — camera make/model, lens, body/lens serial numbers, capture date, GPS coordinates and altitude — plus XMP, IPTC/Photoshop resources and comment segments; PNG: tEXt/iTXt/zTXt/eXIf/tIME chunks) and returns a structured report of exactly what it found, including the size of every metadata segment/chunk that was removed. Optionally (include_cleaned_image, default true) also returns the same image with those segments/chunks stripped at the byte level: no re-encoding and no pixel decode, so the compressed image data, ICC profile, and JFIF/PNG structure are copied unchanged. It runs a byte-for-byte self-check that the retained image data is actually unchanged before handing back a cleaned file — if that check fails, no cleaned file is returned even though the report is still produced. Only JPEG and PNG signatures are recognized (not TIFF or other formats); stripping a photo's EXIF Orientation tag can make it appear rotated, which the report flags.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | Original filename, used only to name the returned cleaned file (defaults to "image"). Format detection is by content signature, not by this name or extension. | |
| image_base64 | Yes | Base64-encoded bytes of the JPEG or PNG file to inspect. | |
| include_cleaned_image | No | When true (default), also return the metadata-stripped image bytes alongside the report. Set to false to get only the report. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so exceptionally. It discloses byte-level stripping with no re-encoding or pixel decode, a byte-for-byte self-check, the failure behavior when the check fails, and the EXIF Orientation side-effect. This is rich, non-obvious behavioral context that an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every clause is information-dense and earns its place. The core action and optional mode are front-loaded, followed by process guarantees, failure behavior, and limitations. There is no redundancy or 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?
There is no output schema, yet the description adequately explains the report contents, cleaned image behavior, self-check failure handling, supported formats, and the orientation caveat. An agent has enough information to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful parameter semantics, particularly for include_cleaned_image: it explains the default true, byte-level stripping, and that no cleaned file is returned if the self-check fails. It also reinforces that format detection is by content signature, not filename.
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 uses specific, action-oriented language: 'Reads a JPEG or PNG's hidden metadata' and 'returns a structured report', plus clearly states the optional stripping behavior. It clearly differentiates this tool from image compression, conversion, and resizing siblings by focusing on metadata inspection and byte-level removal.
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 clearly defines the tool's job—inspect and strip metadata—and gives an explicit eligibility limitation: 'Only JPEG and PNG signatures are recognized (not TIFF or other formats)'. It doesn't explicitly name alternative tools, but none of the siblings share this metadata-specific purpose, so the usage context 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. Dates show when Glama detected each change.
31 tool updates
- First observed
appstore_compare_markets - First observed
appstore_search - First observed
bpm_delay_calculator - First observed
build_app_store_link - First observed
calculate_app_store_net_revenue - First observed
calculate_bmi_and_body_fat - First observed
calculate_tdee - First observed
check_contrast - First observed
check_strings_files - First observed
convert_heic_to_jpg_png - First observed
convert_video_to_gif - First observed
css_clamp_calculator - First observed
estimate_ai_tokens - First observed
estimate_window_light - First observed
find_nearest_passing_color - First observed
generate_app_icon_set - First observed
generate_favicon_set - First observed
goai_build_app_privacy_label - First observed
image_compress - First observed
image_compression_curve - First observed
inspect_mobileprovision - First observed
oklch_convert - First observed
oklch_ramp - First observed
plant_watering_calendar - First observed
project_weight_goal_date - First observed
recipe_convert_ingredient - First observed
recipe_scale - First observed
recommend_ai_model - First observed
render_app_store_screenshot - First observed
resize_images - First observed
strip_image_metadata
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity – fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge – works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge – works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
84+ free local-first tools: image, PDF, docs, dev utils. Wasm, zero upload, x402 API.
49 free agent tools: WHOIS, PDF to text, email checks, FX rates, X12 EDI, JSON repair. No API key.
31 deterministic tools: JSON→Zod, regex, JWT, curl→fetch, hashing, encoding, UUIDs, encrypted links
35 AI tools for image/video generation, TTS, transcription, OCR & embeddings via deAPI
Related MCP Servers
- AlicenseNot gradedqualityBmaintenance21 tools for things AI is bad at — deterministic math, cryptographic randomness, date arithmetic, hashing, encoding, unit conversion, and more.1599MIT
- FlicenseNot gradedqualityBmaintenancefree dev tools (JWT, JSON, Base64, image converter, hash, UUID, and more) — each with a UI, REST API, and MCP server. No auth, stateless, <5s.-
- AlicenseNot gradedqualityAmaintenanceOn-device AI image generation for macOS with 17 tools and zero API keys, combining Apple Intelligence and Pollinations for stylized and photorealistic images, auto-cropping for 40+ social media platforms.211MIT

ToolPiperofficial
AlicenseNot gradedqualityDmaintenance426+ MCP tools for macOS, all on-device — local AI inference (llama.cpp on Metal), voice, vision OCR, local RAG, browser automation, and ~140 system actions across 26 macOS domains. Nothing leaves your Mac.2MIT