Skip to main content
Glama

Ghost Styling MCP

An MCP server that builds your own Ghost blog theme from your existing theme and real website data.

Most Ghost integrations manage content; this one handles how your blog looks. It gives the model your real data to design against: the brand (colours, fonts, logo) pulled from your live site, that page's rendered HTML and CSS, your current theme, and your site settings. You get back a complete, custom theme to preview locally and upload when you're ready.

Styling and vision come first. The authenticated client underneath is generic, so the rest of the Ghost Admin API (posts, members, tags, and the other resources) follows as thin tool wrappers, growing this into a full management server.

Status

Working: auth, vision, theme generation/preview/upload, site settings, and content + audience management (posts, tags, members, newsletters). Roadmap:

  • Authenticated Admin API client (generic browse/read/add/edit/delete)

  • Vision: extract_brand distils a live site's brand + navigation; get_theme_structure fetches its markup + CSS; check_contrast scores colour pairs against WCAG

  • Themes: generate, preview locally, upload, restyle, list, download, and (guarded) activate themes

  • Site settings: read/update brand + SEO metadata (title, description, accent, meta/OG/Twitter) and navigation menus

  • Management: posts, tags, members, and newsletters as CRUD tools

  • Guided flow: a theme-a-site prompt and a server instructions block encode the brand-first workflow

  • Management: tiers, offers, and users as they're needed (next)

Related MCP server: Ghost CMS MCP Server

Tools

The server exposes these tools to the model:

Vision

  • extract_brand: distil a live site into clean brand tokens (colour palette, heading/body fonts, logo, button style) plus its navigation menus (header/footer content links, with login/sign-up/account links flagged separately) to design against.

  • get_theme_structure: fetch a live page's HTML skeleton and linked CSS, so styling targets selectors that actually exist.

  • check_contrast: WCAG contrast ratio (and AA/AAA pass levels) between two colours, so text-on-accent stays readable.

Researchoptional; registered only when SERPER_API_KEY is set

  • search_serp: see what currently ranks for a query and whether it's worth writing for. Cheap triage (1 API credit, no crawling).

  • expand_keywords: expand a seed topic into the queries people actually search — "people also ask", related searches and autocomplete — grouped by intent (alternatives / local / comparison / cost / how_to / commercial / informational).

  • build_content_brief: crawl the ranking pages and extract the structure they share: consensus sections, unique angles, target length, and whether they carry pricing tables or FAQs.

  • find_content_gaps: match the SERP's consensus topics against posts already on your blog, so you extend an existing post instead of publishing a competitor to it.

  • plan_research_profile: the questions to ask the user before building a profile — run this first, since a guessed profile fails silently.

  • list_research_profiles / set_research_profile: inspect and switch the niche profile the verdicts are judged against.

  • add_incumbents / remove_incumbents: record domains that keep ranking, so later verdicts account for them. Persisted to disk.

  • create_research_profile / delete_research_profile: define a profile for a niche the bundled ones don't cover.

There's also a set-up-research prompt that runs the whole interview-and-configure flow in one action.

Research profiles

A verdict like "this keyword is unwinnable" only means something relative to a niche. The sites that own "booking software for salons" (Capterra, G2, competing vendors) are not the ones that own "is red light therapy safe" (hospitals, medical publishers) — so the domain list is selectable rather than baked in.

Three profiles ship as starting points: general (the default — social platforms and marketplaces only, no assumptions), saas (review aggregators and "best X software" roundups) and wellness (hospitals, medical and lifestyle publishers, booking directories). They're seeds, not a closed set: create_research_profile defines your own, and a custom profile may reuse a bundled name to override it.

Each profile marks a dominant subset — domains so authoritative that three of them ranking makes a keyword hopeless whatever you write. For wellness that's medical authorities (Google treats health topics as YMYL and leans on institutional trust); for saas it's the review aggregators.

The useful list is the one that grows. When a search turns up a competitor that isn't flagged yet, add_incumbents records it, and every later verdict accounts for it. Custom profiles and additions live in incumbents.json (see GHOST_MCP_DATA_DIR); your own domain is always excluded, so your pages never count against you.

Keep it a "cannot beat this" list rather than a list of every competitor. Each domain added makes verdicts more pessimistic, so logging weak rivals penalises you for discovering that competition is thin.

Verdicts

Verdict

Meaning

UNMET_DEMAND

Forums rank, real pages don't — people are asking and nobody has answered. The best case.

OPEN

Little competition. Write it.

CONTESTED

Winnable, but only with a genuinely better first-party answer.

SKIP

Established pages own it, or three of the profile's dominant domains rank. Re-angle rather than abandon.

LOCAL_INTENT

Google showed a map pack: build a service or location page, not a post.

UPDATE_EXISTING

You already rank — extend that page instead of competing with yourself.

Forum and social results (Reddit, Quora, Facebook, …) are scored separately from competitor pages. A thread ranking usually means no good answer exists yet, so counting it as competition inverts the strongest buying signal there is.

Themes

  • create_theme: generate a complete, valid, previewable theme from a CSS design (and optional index/post/page/default template overrides).

  • preview_theme: render a theme locally and serve it on localhost to review before publishing.

  • upload_theme: package and upload a theme; it installs inactive, so the live site is untouched.

  • restyle_theme: edit an installed theme's stylesheet (append or replace) and re-upload it, to iterate a theme without regenerating it.

  • list_themes: list installed themes and which one is active.

  • download_theme: download an installed theme's source as a zip.

  • activate_theme: make an installed theme the live one — outward-facing; only on explicit user instruction, never an automatic follow-on to upload/restyle.

Images

  • upload_image: upload a local image file; returns a hosted URL to use for a post's feature_image, the site logo/icon, or a newsletter header.

  • upload_image_from_url: fetch a public image (under the same SSRF guard as vision) and re-host it on the blog.

Site settings

  • get_site_settings: read brand and SEO settings.

  • update_site_metadata: site title/description plus SEO and social metadata (meta_*, Open Graph, Twitter cards).

  • update_branding: the brand accent colour.

  • update_navigation: set the primary (header) and secondary (footer) navigation menus.

Posts

  • list_posts / get_post: browse posts, or read one (with rendered HTML and a draft preview_url).

  • create_post / update_post / delete_post: write posts from HTML; drafts by default.

  • publish_post: publish a post and email it to a newsletter's members (outward-facing; a deliberate, explicit send, not a side effect of an edit).

Pages

  • list_pages / get_page: browse standalone pages (about, contact, …), or read one (with rendered HTML and a preview_url).

  • create_page / update_page / delete_page: write pages from HTML; drafts by default. Pages share post fields but have no tags or feed placement.

Tags

  • list_tags / get_tag: browse tags (with post counts), or read one.

  • create_tag / update_tag / delete_tag: manage tags.

Members

  • list_members / get_member: browse members (filter by status:paid, label:vip, …) or read one, with labels and subscribed newsletters.

  • create_member / update_member: add a member from an email; set name, note, labels, and newsletter subscriptions.

Newsletters

  • list_newsletters / get_newsletter: browse newsletters or read one.

  • create_newsletter / update_newsletter: create and configure newsletters; retire one with status: archived (the API has no delete).

Tiers

  • list_tiers / get_tier: browse paid plans (with prices and benefits) or read one.

  • create_tier / update_tier: create and configure tiers; no delete (retire with active: false).

Offers

  • list_offers / get_offer: browse discount offers (each with its linked tier) or read one.

  • create_offer / update_offer: create offers against a tier; no delete (Ghost only allows editing name/code/display fields after creation).

Labels

  • list_labels / get_label: browse member labels or read one.

  • create_label / update_label / delete_label: manage labels for member segmentation.

Users

  • list_users / get_user: browse authors/staff or read one. Read-only — the Admin API forbids integrations from writing users.

Activating a theme is intentionally not a tool: it changes the live site, so it stays a manual step. The Admin API has no delete for members, newsletters, tiers, or offers, so neither does this server; users are read-only.

Guided workflow

The server ships an instructions block (always in the model's context) encoding the recommended order (extract the brand, confirm direction, build, preview, then upload inactive), plus a theme-a-site prompt the user can invoke to start that guided flow. Because those instructions are sent to the model on every connection, anyone who installs the server can simply ask their assistant "how do I use this?" and get the best-practice walkthrough.

  • docs/theming-guide.md — the user-facing best-practices guide: how to use it, the end-to-end theming path, and design/colour/SEO best practices. Start here.

  • docs/theme-conventions.md — the full template and CSS contract, for hand-writing templates.

Requirements

  • An MCP client to run it in, e.g. Claude Desktop, Cline, or Claude Code. This is an MCP server; it runs inside a client, not on its own.

  • Python 3.13+

  • uv

  • A Ghost site and a staff access token (from your user profile page in Ghost Admin). Site-wide styling and management need a token with the Owner or Admin role.

Setup

git clone https://github.com/stemcreations/ghost-mcp.git && cd ghost-mcp
uv sync                  # creates .venv and installs everything

The server reads its configuration from environment variables:

Variable

Required

Example

GHOST_ADMIN_URL

yes

https://yourblog.example.com

GHOST_STAFF_ACCESS_TOKEN

yes

<id>:<secret> (from your Ghost user profile)

GHOST_API_VERSION

no

v6.0 (default; match your Ghost major version)

SERPER_API_KEY

no

a serper.dev key; enables the research tools

SERP_PROFILE

no

starting research profile: general (default), saas, wellness

SERP_INCUMBENTS

no

extra competitor domains, comma-separated

GHOST_MCP_DATA_DIR

no

where incumbents.json lives (default ~/.ghost-mcp)

SERPER_API_KEY is genuinely optional. Without it the research tools are simply not registered and everything else works unchanged — the key is read once at startup, so adding it later needs a server restart.

The other three only matter if you use those tools. SERP_PROFILE picks the starting profile, though set_research_profile persists its own choice and takes precedence. SERP_INCUMBENTS is for deployments where the data directory isn't writable; otherwise prefer add_incumbents, which persists. Set GHOST_MCP_DATA_DIR=. to keep incumbents.json inside the project — it's gitignored there, since the list is specific to your site rather than to the software.

Provide them either way:

  • In your MCP client: put them in the server's env block (see Running). No .env file is needed; this is the usual setup for Claude Desktop.

  • In a local .env: handy for development and the connection check: cp .env.example .env and fill it in. (If both are set, the client's env values win.)

Confirm the credentials reach your site:

uv run python scripts/check_connection.py

Running

Interactively, with the MCP Inspector:

uv run fastmcp dev src/ghost_mcp/server.py

Connecting to Claude Desktop

Add the server to the config file below, then fully restart Claude Desktop (it reads the config only at startup).

OS

Config file

Windows

%APPDATA%\Claude\claude_desktop_config.json

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Use the full path to uv for command; clients often don't have it on their PATH. Find it with (Get-Command uv).Source (Windows PowerShell) or which uv (macOS/Linux). --directory points uv at the project, so the project's .env is loaded automatically (or pass credentials with an env block instead, see below).

Windows:

{
  "mcpServers": {
    "ghost": {
      "command": "C:\\Users\\you\\.local\\bin\\uv.exe",
      "args": ["run", "--directory", "C:\\path\\to\\ghost-mcp", "ghost-mcp"]
    }
  }
}

macOS / Linux:

{
  "mcpServers": {
    "ghost": {
      "command": "/home/you/.local/bin/uv",
      "args": ["run", "--directory", "/home/you/ghost-mcp", "ghost-mcp"]
    }
  }
}

The same command/args work with any MCP client (Cline, Claude Code, …); only the config-file location differs. To pass credentials through the client instead of a .env, add an env block to the server entry:

"env": {
  "GHOST_ADMIN_URL": "https://yourblog.example.com",
  "GHOST_STAFF_ACCESS_TOKEN": "<id>:<secret>",
  "GHOST_API_VERSION": "v6.0"
}

Run without cloning

To skip git clone, have uvx install and run the server straight from the repo. Add this to the same config file (use the full path to uvx if your client doesn't have it on PATH):

{
  "mcpServers": {
    "ghost": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/stemcreations/ghost-mcp.git", "ghost-mcp"],
      "env": {
        "GHOST_ADMIN_URL": "https://yourblog.example.com",
        "GHOST_STAFF_ACCESS_TOKEN": "<id>:<secret>",
        "GHOST_API_VERSION": "v6.0"
      }
    }
  }
}

uvx fetches and builds the package on first launch (git must be installed). With no local .env, the credentials come from the env block above.

Authentication, briefly

Ghost's Admin API never takes the token directly. Each request carries a JWT signed from the staff token (id:secret): split on the colon, hex-decode the secret, sign HS256 with a five-minute expiry. ghost_mcp.admin.auth handles this for you.

Site-wide styling (code injection via /settings/) requires the Owner or Admin role; a standard integration key cannot reach those endpoints.

Architecture

The package is layered so each piece has one job:

Layer

Module

Responsibility

Config

ghost_mcp.config

Load and validate environment configuration.

Errors

ghost_mcp.errors

The shared GhostError exception hierarchy.

Admin

ghost_mcp.admin

Authenticated Admin API: token signing, generic client, theme + settings helpers.

Vision

ghost_mcp.vision

Fetch the public rendered page + CSS (no auth).

Research

ghost_mcp.research

Search the SERP and analyse ranking pages (optional; needs a key).

Themes

ghost_mcp.theme

Generate, locally preview, and package themes.

Tools

ghost_mcp.tools

Thin MCP wrappers over the layers above.

Server

ghost_mcp.server

Assemble the layers into a runnable server.

The Admin API is uniform: every resource shares the same browse/read/add/edit/ delete shape, so GhostAdminClient implements those operations generically. A new resource is a thin tool module, not a new subsystem.

This server is intentionally pure Python. Ghost's own tooling is JavaScript, but nothing here needs it: styling deals in CSS strings and theme zips, and post content can be sent as HTML via the Admin API's ?source=html conversion rather than converting to Lexical client-side.

Contributing

The most important convention: put logic in a service module (admin/, vision/, theme/) as a plain, typed, testable function, then expose it through a thin wrapper in tools/. Tools adapt and shape data; they don't hold business logic.

To add a group of tools:

  1. Write the logic as a plain function in the relevant service module, and test it.

  2. Add tools/<name>.py with a register(mcp) function that wraps it.

  3. Call your register from register_all in tools/__init__.py.

Conventions:

  • Type-hint everything.

  • Docstrings go inside functions (FastMCP reads them to describe tools to the model). Keep them concise; put longer context in the module docstring.

  • Write docstrings for people reading the source: clear, no implementation noise.

Before opening a PR:

uv run ruff format       # format
uv run ruff check        # lint
uv run pytest            # test

Or install the git hook to run all three automatically before each commit:

uv run pre-commit install

Security

Ghost MCP runs locally and never exposes your staff token through any tool. See SECURITY.md for the security model, the prompt-injection trust boundary, and how to report a vulnerability.

License

MIT. See LICENSE.

Available Tools

55 tools
activate_themeA

Activate an installed theme, making it the LIVE theme. Changes the site.

This is the one theme tool that alters what visitors see: it switches the blog's active theme. Call it ONLY on the user's explicit instruction to activate a specific theme -- never as an automatic follow-on to generating, uploading, or restyling one. Upload installs inactive on purpose so a theme can be reviewed first; activation is the deliberate, separate go-live step.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe installed theme to activate (see ``list_themes``).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It clearly discloses that this tool changes what visitors see and is the go-live step. It does not mention permissions or rate limits, but it sufficiently describes the behavioral impact for a simple activation tool.

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

Conciseness5/5

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

The description is a single paragraph with three sentences, front-loaded with the main action. Every sentence adds value with no unnecessary text.

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

Completeness5/5

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

Given the simple one-parameter tool with an output schema, the description is complete: it explains purpose, usage guidelines, and provides a cross-reference. The output schema covers return values, so no further detail is needed.

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

Parameters4/5

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

Schema coverage is 100% (one required parameter 'name' is described). The description adds a helpful cross-reference to list_themes, aiding discoverability. Beyond that, it does not add syntax or format details, but the baseline of 3 is elevated due to the useful reference.

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

Purpose5/5

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

The description clearly states 'Activate an installed theme, making it the LIVE theme. Changes the site.' This provides a specific verb and resource, and distinguishes it from sibling tools like upload_theme or preview_theme by emphasizing the go-live step.

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

Usage Guidelines5/5

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

The description explicitly says 'Call it ONLY on the user's explicit instruction to activate a specific theme -- never as an automatic follow-on...' and explains that upload installs inactive, so activation is a separate deliberate step. This provides clear when-to-use and when-not-to-use guidance.

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

check_contrastA

Check the WCAG contrast ratio between two colours before shipping a theme.

Guards against unreadable text-on-accent: pass two colours -- as hex (#d97706) or rgb()/rgba() -- such as a button's text vs. its accent background, or body text vs. the page background. Use it on the palette and accent from extract_brand when picking text colours.

ParametersJSON Schema
NameRequiredDescriptionDefault
backgroundYesThe colour behind it (hex or ``rgb()``).
foregroundYesThe text/foreground colour (hex or ``rgb()``).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

No annotations are provided, but the description implies a read-only check without side effects. It does not explicitly state whether it's idempotent or non-destructive, but the nature of the tool (calculating a ratio) makes it clear. A higher score would require explicit mention of safety or permissions.

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

Conciseness5/5

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

The description is extremely concise (two sentences) yet packed with information. The first sentence states the core purpose, and the second provides usage guidance and examples. No wasted words.

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

Completeness5/5

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

Given the tool's simplicity (2 parameters, clear purpose) and the existence of an output schema (not provided but noted), the description is complete. It tells the agent what the tool does, when to use it, and what inputs to provide, without needing to explain return values.

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

Parameters5/5

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

The description adds meaning beyond the schema by specifying accepted color formats (hex with example, rgb()/rgba()) and giving real-world context (foreground as text, background as accent). This helps the agent understand parameter roles and valid inputs beyond the schema's minimal descriptions.

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

Purpose5/5

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

The description uses a specific verb ('Check') and resource ('WCAG contrast ratio'), and explicitly states the context ('before shipping a theme'). It clearly distinguishes from sibling tools like extract_brand or restyle_theme by focusing on contrast validation.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'Guards against unreadable text-on-accent' and provides concrete examples (button text vs background, body text vs page background). It also advises to use it in conjunction with extract_brand, offering a clear workflow.

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

create_labelA

Create a member label. Only name is required; slug is derived if omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
slugNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only mentions parameter behavior (slug derivation) without addressing side effects, permissions, or mutation implications. This is insufficient for a creation tool.

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

Conciseness5/5

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

The description is a single sentence that is efficient and front-loaded with the purpose. Every word earns its place without redundancy.

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

Completeness3/5

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

Given the simplicity of the tool and the existence of an output schema, the description is minimally adequate. However, it does not explain the return value or any potential side effects, leaving gaps for an agent to infer.

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

Parameters3/5

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

The schema has 0% parameter descriptions, so the description must compensate. It adds that name is required and slug is derived if omitted, which adds meaning beyond the schema types. However, it does not explain what slug means or any constraints.

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

Purpose5/5

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

The description clearly states the verb 'Create' and the resource 'member label'. It distinguishes itself from sibling tools like update_label, delete_label, and list_labels, ensuring the agent knows this is for creation.

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

Usage Guidelines4/5

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

While the description does not explicitly mention when to use or exclude alternatives, the context is clear: use this tool to create a new label. No counterexamples or prerequisites are given, but the purpose is straightforward.

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

create_memberA

Create a member from an email address.

Only email is required; the member is created as a free member. labels are given as names (created if new); newsletter_ids subscribe the member to those newsletters (get the ids from list_newsletters). Creating a member sends no email. Returns the created member's summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional display name.
noteNoOptional internal note (max 2000 chars).
emailYesThe member's email address (required).
labelsNoOptional label names to attach.
newsletter_idsNoOptional newsletter ids to subscribe the member to.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that member is created as free, labels are created if new, subscribing to newsletters, and that no email is sent. It does not mention auth requirements or side effects, but is fairly transparent for a create operation.

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

Conciseness5/5

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

The description is concise (two sentences plus a bullet-like list) and front-loaded. Every sentence provides essential information without redundancy.

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

Completeness4/5

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

Given 5 parameters (1 required) and the existence of an output schema (which explains return values), the description is complete enough. It covers key aspects like required field, optional parameters, and side effects (no email sent).

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value beyond the schema by explaining that labels are given as names (created if new) and that newsletter_ids need to be obtained from list_newsletters. This aids parameter understanding.

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

Purpose5/5

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

The description clearly states the verb 'Create' and the resource 'member from an email address'. It distinguishes from siblings like update_member and list_members by specifying the creation action.

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

Usage Guidelines4/5

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

The description explains that only email is required, and provides context for optional parameters (labels as names, newsletter_ids from list_newsletters). It also mentions no email is sent, guiding usage. However, it does not explicitly state when not to use or provide alternatives.

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

create_newsletterA

Create a newsletter.

Only name is required. sender_reply_to is either "newsletter" (use the sender address) or "support" (use the Portal support address). Set opt_in_existing=true to also subscribe existing subscribed members to this new newsletter. To set a custom sender_email, create the newsletter first, then update_newsletter (the address needs email verification). Returns the created newsletter's summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
descriptionNo
sender_nameNo
opt_in_existingNo
sender_reply_toNo
subscribe_on_signupNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description fully covers behavioral traits: it returns the created newsletter's summary, explains the opt_in_existing behavior, and notes that setting a custom sender_email requires an additional update step due to email verification. No contradictions.

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

Conciseness5/5

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

The description is concise, with each sentence adding unique value. It is well-structured and front-loaded with the primary action.

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

Completeness4/5

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

For a 6-parameter tool with an output schema, the description covers the key complexities (required vs optional, special parameter values, return type). Minor gaps exist for some optional parameters, but overall it is complete enough for most use cases.

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

Parameters4/5

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

Schema coverage is 0%, so the description adds crucial semantics for 'sender_reply_to' (two possible values), 'opt_in_existing' (subscription behavior), and the 'sender_email' workflow. However, it does not explain 'description', 'sender_name', or 'subscribe_on_signup', leaving some parameters under-specified.

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

Purpose5/5

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

The description begins with a specific verb+resource ('Create a newsletter'), clearly distinguishing it from update_newsletter and other create tools. The purpose is immediately clear.

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

Usage Guidelines5/5

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

Explicitly states that only 'name' is required, explains the values for 'sender_reply_to', and provides guidance on when to use 'update_newsletter' for custom 'sender_email'. No sibling tool ambiguity.

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

create_offerB

Create a discount offer against a tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesShortcode for the offer URL (yoursite.com/<code>).
nameYesInternal name (must be unique).
typeYes``percent`` or ``fixed`` — whether ``amount`` is a percentage or a fixed value.
amountYesThe discount, in percent or the smallest currency unit per ``type``.
cadenceYes``month`` or ``year`` — which of the tier's prices the offer applies to.
tier_idYesThe tier the offer applies to (from ``list_tiers``).
currencyNoRequired when ``type="fixed"``; must match the tier's currency.
durationNo``once``, ``forever``, or ``repeating`` (``repeating`` needs ``cadence="month"``).once
display_titleNoTitle shown in the offer window.
duration_in_monthsNoMonths to repeat when ``duration="repeating"``.
display_descriptionNoText shown in the offer window.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must carry behavioral disclosure, but it only states the basic action. No details on side effects, auth needs, or constraints like unique name.

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

Conciseness4/5

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

A single, front-loaded sentence with no wasted words. However, given the tool's complexity, a bit more detail would be justified without harming conciseness.

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

Completeness2/5

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

Despite a detailed schema and output schema, the description omits context like validation rules (unique name), behavior on duplicate, or relationship to list_tiers, making it incomplete for complex usage.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds no extra semantic value beyond what is already there.

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

Purpose5/5

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

The description 'Create a discount offer against a tier' uses a specific verb and resource, clearly distinguishing it from siblings like update_offer or list_offers.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, such as update_offer, or any prerequisites like having a tier first.

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

create_pageA

Create a page from HTML content.

Defaults to a draft; pass status="published" to publish immediately. Pages are standalone (about, contact, …) with no tags or feed placement. meta_title/meta_description set the page's search-snippet metadata.

Returns the created page's summary, including a preview_url for reviewing the draft in the active theme before publishing.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlNo
titleYes
statusNodraft
excerptNo
meta_titleNo
feature_imageNo
meta_descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It discloses that the tool creates a page (mutation), defaults to draft, and returns a preview_url for reviewing drafts. While it doesn't mention auth requirements or destructive behavior, for a creation tool this is sufficient.

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

Conciseness5/5

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

The description is four sentences with no redundant words. It front-loads the primary action and quickly provides essential details about status behavior, page characteristics, and return values.

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

Completeness5/5

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

Given the tool has 7 parameters (1 required) and an output schema, the description is complete. It explains the default draft, how to publish, the nature of pages, and the return summary including preview_url. The output schema covers return structure, so additional description is unnecessary.

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

Parameters5/5

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

Schema description coverage is 0%, but the description adds meaning to key parameters: it explains the default for status, that pages are standalone (so no tags/feed), and that meta_title/meta_description set search-snippet metadata. This compensates fully for the lack of schema descriptions.

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

Purpose5/5

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

The description clearly states 'Create a page from HTML content' and distinguishes pages from posts by noting they are 'standalone (about, contact, …) with no tags or feed placement.' This provides a specific verb+resource and differentiates from sibling tools like create_post.

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

Usage Guidelines4/5

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

The description explains the default draft status and how to publish immediately by passing 'status="published"'. It also clarifies that pages lack tags/feed placement, guiding when to use this tool versus create_post. However, it does not explicitly state when not to use it or list alternatives.

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

create_postA

Create a blog post from HTML content.

Defaults to a draft; pass status="published" to publish immediately. tags are given as names and created if they don't already exist. meta_title/meta_description set the post's search-snippet metadata.

Returns the created post's summary, including a preview_url for reviewing the draft in the active theme before publishing.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlNo
tagsNo
titleYes
statusNodraft
excerptNo
meta_titleNo
feature_imageNo
meta_descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses default status (draft), tag auto-creation, meta field handling, and return includes preview_url. It does not mention rate limits, authentication, or destructive consequences beyond creation, but the core behavioral traits are well communicated.

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

Conciseness5/5

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

The description is three sentences (after the first line) and uses line breaks for readability. It is front-loaded with the main action, and every sentence provides essential information without redundancy. No filler words.

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

Completeness4/5

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

Given the 8 parameters, 1 required, no annotations, and an output schema exists, the description covers creation flow, default status, tag creation, and return summary. It could mention the behavior for excerpt or feature_image, but overall it provides a solid understanding of the tool's functionality.

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

Parameters3/5

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

Schema coverage is 0%, so description must explain parameters. It covers html (implied from 'HTML content'), tags (created if not exist), status (default and publish option), meta_title/meta_description (search metadata). However, it omits details for excerpt, feature_image, and the html default empty string. The description adds meaning but leaves some gaps.

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

Purpose5/5

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

The description clearly states 'Create a blog post from HTML content', specifying the verb (create) and resource (blog post). It adds unique details like draft default and publishing behavior, which distinguish it from siblings like create_page or publish_post. The sibling list includes create_page and publish_post, but the description makes the tool's role explicit.

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

Usage Guidelines4/5

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

The description explains when to use: creating a new blog post, with default draft behavior and an option to publish immediately. It mentions tag creation and meta fields. However, it does not explicitly contrast with sibling tools like create_page for pages or publish_post for publishing drafts, so an agent might not know the best alternative in all contexts.

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

create_tagA

Create a tag.

Only name is required; slug is derived from it if omitted. Returns the created tag's summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
slugNo
meta_titleNo
descriptionNo
feature_imageNo
meta_descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description must fully explain behavior. It mentions return value ('Returns the created tag's summary'), which is good, but omits other behavioral traits like required permissions, side effects, or error conditions. Acceptable but not thorough.

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

Conciseness5/5

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

The description is extremely concise with two sentences, no filler, and front-loads the core purpose. Every sentence adds value, making it efficient for an AI agent to parse.

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

Completeness3/5

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

Given the tool has 6 parameters and an output schema, the description covers the essential behavior (creation, required field, return). However, it omits details on optional parameters and does not address potential pitfalls or advanced usage, making it minimally adequate.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It clarifies that 'slug' is derived from 'name' if omitted, adding meaning beyond the schema. However, the remaining four parameters (meta_title, description, etc.) receive no explanation, leaving semantic gaps.

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

Purpose4/5

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

The description clearly states the tool creates a tag, distinguishing it from sibling tools like create_label or create_post. It specifies the required resource (tag) and the minimal requirement (name only), giving precise purpose without ambiguity.

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

Usage Guidelines3/5

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

The description provides helpful guidance on parameter usage (only name is required, slug is derived). However, it lacks context on when to use this tool versus alternatives (e.g., create_label for labels), relying on the tool name alone for differentiation.

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

create_themeA

Generate a complete, valid, previewable Ghost theme on disk.

Writes a ready-to-use theme (layout, home/post/page templates, page handling, the Koenig CSS classes Ghost requires, and package.json) to a local directory. Supply styles (CSS) to design the look; the site's brand accent colour is available in CSS as var(--ghost-accent-color), so the theme respects the user's existing branding.

Width convention: the base stylesheet keeps the structural chrome classes (.site-header/.site-footer/.post-feed/.post/.page) at full width and centres their contents with an inner .gh-inner wrapper. So in a custom layout, cap a region by wrapping its content in your own inner element (or reuse .gh-inner) and set max-width there -- setting it on a child of an un-capped region works, but a child can't widen past a capped parent.

Optionally override the home/post/page templates, and the default.hbs layout itself, with your own Handlebars. Stay within the previewable helper subset: {{#if}}/{{#unless}}, {{#foreach}} (with limit=/to=, but not from=), {{#post}}, partials, and bare fields like {{title}} and {{content}}. Avoid block params (as |x|) and the helpers Ghost evaluates server-side ({{#get}}, {{#match}}, {{#is}}, {{date}}) -- block params and from= are rejected outright, and the rest render blank in the local preview.

For content templates (index/post/page), layout inheritance is handled for you: the {{!< default}} directive is injected if an override omits it. A default_template override replaces the whole layout, so it MUST include {{{body}}} (where child templates inject) -- a layout without it is rejected, since every page would render empty. The stylesheet <link> and {{ghost_head}}/{{ghost_foot}} are auto-injected before </head> / </body> if you omit them, so styling, SEO, the accent colour, and members keep working. Note {{asset "built/screen.css"}} only emits the URL -- to load the CSS it must sit inside a real <link rel="stylesheet" href="{{asset "built/screen.css"}}">. See docs/theme-conventions.md for the full contract.

After generating, call preview_theme with the returned path to view it, then upload_theme to install it (activation stays manual).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable theme name (slugified for the package name).
stylesNoCSS appended to the base stylesheet to design the theme.
descriptionNoOptional theme description.
page_templateNoOptional Handlebars override for the page template.
post_templateNoOptional Handlebars override for the single-post template.
index_templateNoOptional Handlebars override for the home template.
default_templateNoOptional Handlebars override for the ``default.hbs`` layout. Must contain ``{{{body}}}``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

No annotations are provided, so the description carries full burden. It thoroughly discloses behaviors: writes to disk, auto-injects stylesheet/ghost_head/foot, rejects certain Handlebars constructs, injects {{!< default}} if missing, and requires {{{body}}} in default_template. It also explains how styles interact with the brand accent color.

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

Conciseness4/5

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

The description is quite long but well-structured: a brief summary followed by detailed sections separated by blank lines. It is front-loaded with the core action. However, some sentences are lengthy and could be trimmed slightly for better readability.

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

Completeness5/5

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

Given the tool's complexity (7 parameters, output schema exists), the description is extremely complete. It covers prerequisites (helper subset), conventions (width, style injection), rejected constructs, and post-usage steps. No gaps remain.

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

Parameters5/5

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

Schema description coverage is 100%, so baseline is 3, but the description adds significant value. It explains the styles parameter with accent color and width conventions, describes template parameters with injection rules and rejected elements, and elaborates on the default_template requirement for {{{body}}}.

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

Purpose5/5

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

The description starts with a clear one-sentence summary stating it generates a complete, valid, previewable Ghost theme on disk. It then details what files are written (layout, templates, CSS, package.json). It distinguishes from sibling tools like preview_theme and upload_theme by suggesting them as next steps.

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

Usage Guidelines5/5

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

The description explicitly tells when to use the tool (to generate a theme) and provides clear guidance on what Handlebars helpers are allowed vs. rejected. It suggests a workflow: generate, then preview_theme, then upload_theme. It also explains the width convention and how to handle layouts.

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

create_tierB

Create a tier (paid plan).

Only name is required. Prices are in the smallest currency unit (e.g. 1000 = $10.00) and pair with a currency (three-letter ISO code). benefits is a list of short strings shown on the tier. Returns the created tier summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
benefitsNo
currencyNo
trial_daysNo
visibilityNo
descriptionNo
yearly_priceNo
monthly_priceNo
welcome_page_urlNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It explains price unit conventions and output but omits safety-related behaviors (e.g., whether creation is reversible, auth requirements, or rate limits).

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

Conciseness4/5

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

The description is four sentences in one paragraph, front-loading the core purpose. It is efficient but could be slightly more structured with bullet-style insights for parameters.

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

Completeness3/5

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

Given the 9-parameter complexity and presence of an output schema, the description addresses core constraints (price units, currency) but lacks explanations for many optional fields and potential restrictions, leaving moderate gaps.

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

Parameters2/5

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

Input schema has 0% description coverage, yet the description only clarifies three parameters (name, currency, benefits, and price units) out of nine. Remaining parameters like trial_days, visibility, welcome_page_url are left undocumented.

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

Purpose5/5

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

The description begins with 'Create a tier (paid plan).' which clearly identifies the action and resource, and the parenthetical disambiguates from other tier-related tools like 'list_tiers' or 'update_tier'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as 'update_tier' or other creation tools. There are no prerequisites, conflicts, or contextual examples.

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

delete_labelA

Delete a label by id. Members keep existing; they just lose the label.

ParametersJSON Schema
NameRequiredDescriptionDefault
label_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

The description mentions that members are not deleted, which is a key behavioral trait. However, it lacks details on permissions, reversibility, or error scenarios. With no annotations, the description partially fulfills this need.

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

Conciseness5/5

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

Two concise sentences that are front-loaded with the action and include a clarifying behavioral note. No wasted words.

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

Completeness4/5

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

For a simple delete tool with one parameter and an output schema present, the description covers the essential effect on associated members. Minor gap: no mention of idempotency or confirmation of deletion.

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

Parameters2/5

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

The only parameter label_id is not described beyond its existence in the schema. With 0% schema coverage, the description should provide context like where to obtain the ID or format, but it does not.

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

Purpose5/5

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

The description clearly states the action 'delete a label by id' and specifies that members retain their existence but lose the label, distinguishing it from other label-related tools.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like update_label or list_labels. No prerequisites or exclusions are mentioned.

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

delete_pageA

Delete a page by id. This cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that deletion cannot be undone, which is key behavioral info. However, it omits details like required permissions, cascading effects, or error conditions, leaving gaps in transparency.

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

Conciseness5/5

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

The description is extremely concise, using two short sentences with no redundancy. The critical information (action and irreversibility) is front-loaded, making it efficient for an agent to parse.

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

Completeness3/5

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

Given the tool is a simple delete operation with one parameter and an output schema exists, the description covers the essential purpose. However, it lacks context about permissions, error handling, or what happens to related content, which is moderate completeness for a mutation tool.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the properties (page_id) have no descriptions in the schema. The description adds only 'by id', which vaguely hints at the parameter's role but does not explain format, examples, or constraints. With one parameter, a more informative description is expected.

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

Purpose5/5

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

The description explicitly states the verb 'delete' and the resource 'page by id', making the tool's purpose unmistakable. It clearly distinguishes from sibling delete tools (e.g., delete_label, delete_post) which target different resources.

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

Usage Guidelines3/5

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

The description mentions irreversibility but provides no explicit guidance on when to use this tool versus alternatives or any prerequisites. Usage is implied by the resource name but lacks context like when not to use it.

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

delete_postB

Delete a post by id. This cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations provided, so the description must disclose behavior. It only states 'This cannot be undone' (permanence), missing other possible side effects, permissions, or error conditions.

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

Conciseness5/5

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

Extremely concise: two sentences, front-loaded with the action, no wasted words.

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

Completeness2/5

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

Despite having an output schema, the description does not explain return values. It lacks usage context and behavioral details beyond permanence, making it incomplete for a delete operation.

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

Parameters1/5

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

Schema coverage is 0% and the description adds no meaning to the 'post_id' parameter beyond its type and required status.

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

Purpose5/5

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

The description clearly states the action ('Delete') and resource ('a post') with identifier ('by id'), and it is distinct from sibling tools like create_post or update_post.

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

Usage Guidelines3/5

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

The description implies use when deletion is intended but provides no explicit guidance on when not to use it or alternatives.

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

delete_tagA

Delete a tag by id. Posts keep existing; they just lose the tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Without annotations, the description carries the full burden. It discloses that posts keep existing after tag deletion, which is important non-obvious behavior. However, it omits information about permissions, error handling, or idempotency.

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

Conciseness5/5

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

Two concise sentences: first states the action, second clarifies the effect. No filler or redundant information.

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

Completeness3/5

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

For a simple delete tool with one parameter, the description covers the essential effect. However, it lacks information about return values, error conditions, or what happens if the tag_id does not exist, leaving gaps for an agent.

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

Parameters2/5

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

The schema has 0% description coverage for the 'tag_id' parameter. The description only says 'by id', adding minimal meaning beyond the schema's definition of a required string. It does not compensate for the lack of parameter documentation.

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

Purpose5/5

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

The description clearly states 'Delete a tag by id', specifying the action (delete) and resource (tag). It further clarifies that posts keep existing, which distinguishes it from destructive deletion that might cascade.

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

Usage Guidelines3/5

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

The description implies when to use the tool (to delete a tag without affecting posts) but does not explicitly state when not to use it or provide alternatives among sibling tools like 'create_tag' or 'update_tag'.

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

download_themeA

Download an installed theme's source as a ZIP to a local temp file.

Useful for grabbing a theme's assets, branding, or package.json as a reference. Returns the path to the downloaded file and its size.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the installed theme to download.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses that the download goes to a local temp file and returns path and size. It does not cover permissions, rate limits, or possible side effects, but the basic behavior is adequately described.

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

Conciseness5/5

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

The description is two sentences with no wasted words. The main action is front-loaded, and additional details are presented efficiently.

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

Completeness4/5

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

With a single parameter and an output schema presumably present, the description covers what the tool returns (path and size). It is complete for a simple download operation, though it could mention authentication requirements.

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

Parameters3/5

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

The input schema has one parameter 'name' with a clear description. Schema coverage is 100%, so baseline is 3. The description does not add extra semantic meaning beyond the schema, which is acceptable.

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

Purpose5/5

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

The description clearly states the verb 'Download', the resource 'installed theme's source as a ZIP', and the target 'local temp file'. It distinguishes from sibling tools like 'upload_theme' and 'preview_theme'.

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

Usage Guidelines4/5

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

The description provides context by stating 'Useful for grabbing a theme's assets, branding, or package.json as a reference.' While it doesn't explicitly list when not to use or alternatives, the context is clear for the intended use case.

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

extract_brandA

Distil a live site's brand into clean tokens to theme against.

Step one of theming a customer's blog: point this at their public product or marketing site and it returns the brand to match, so you design against real colours and fonts instead of guessing or hand-reading a stylesheet. Fetches the page and its CSS (public http(s) only; private/localhost hosts refused).

It also reads the site's menus, so you can offer to reuse them on the blog (write them with update_navigation). navigation.primary / navigation.secondary are the header/footer content links; navigation.membership holds login/sign-up/account links, which are kept OUT of the suggested menu -- they are usually the parent app's own auth, not blog nav. Ask the user what to do with any membership links rather than adding them to the menu automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoThe page to read; the homepage usually carries the brand./
site_urlYesThe public site to inspect, e.g. ``https://example.com``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Despite no annotations, the description fully discloses behavior: fetches page and CSS, reads navigation menus, refuses private/localhost hosts, and clarifies which links are kept out of suggested menus. No contradictions.

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

Conciseness5/5

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

Concise yet comprehensive; every sentence adds value. Front-loaded purpose, then context, then details and warnings. No fluff.

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

Completeness5/5

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

Given the presence of an output schema, the description covers all necessary context: input constraints (public HTTP), behavior (fetching, reading), and output expectations (brand match, navigation structure). Includes practical guidance for handling membership links.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description reiterates the schema's parameter descriptions (site_url, path) but does not add substantial new semantic information beyond the schema.

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

Purpose5/5

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

The description clearly states it extracts brand tokens from a public site, specifically as step one of theming a blog. It distinguishes from siblings like update_branding or restyle_theme by positioning as the initial analysis step.

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

Usage Guidelines5/5

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

Explicitly says when to use it (first step of theming), where not to use (private/localhost), and provides guidance on navigation handling including a reference to update_navigation for writing menus. Gives clear alternative actions for membership links.

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

get_labelA

Read a single label by id or slug. Provide either label_id or slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNo
label_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It correctly indicates a read-only operation ('Read'), but doesn't mention other traits like error handling, authentication needs, or rate limits. The presence of an output schema partially compensates.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It immediately conveys the purpose and usage pattern.

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

Completeness4/5

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

For a simple read tool with two parameters and an output schema, the description covers the essential information. It could mention that the output is a label object, but the output schema provides that detail, making the description sufficiently complete.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must add meaning. It clarifies that either label_id or slug should be provided, which goes beyond the schema's type definitions. It does not specify behavior if both are provided, but the guidance is still useful.

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

Purpose5/5

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

The description clearly states the verb 'Read' and the resource 'a single label', and distinguishes it from sibling tools like create_label, delete_label, update_label, and list_labels by specifying its unique purpose of reading one label by identifier.

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

Usage Guidelines4/5

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

The description provides clear guidance on when to use this tool: to read a single label when you have its id or slug. While it doesn't explicitly mention when not to use it or alternatives, the context of sibling tools like list_labels implies the boundary.

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

get_memberC

Read a single member by id, including labels, newsletters, and tiers.

ParametersJSON Schema
NameRequiredDescriptionDefault
member_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

No annotations provided, so description must disclose behavior. It indicates a safe read operation, but fails to mention error handling, permissions, or rate limits. The existence of an output schema somewhat mitigates this, but the description adds minimal behavioral context.

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

Conciseness4/5

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

The description is a single sentence with no wasted words. However, it is somewhat under-specified for the tool's complexity, balancing conciseness with completeness.

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

Completeness3/5

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

Given the single parameter, existing output schema, and no annotations, the description is adequate for a simple read tool. However, it lacks usage guidance and parameter details, leaving an agent to infer too much.

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

Parameters2/5

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

The description implies the member_id parameter by stating 'by id', but does not specify format, constraints, or examples. With 0% schema description coverage, the description should compensate, but it only minimally clarifies the parameter's role.

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

Purpose4/5

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

The description clearly states it reads a single member by ID and lists included entities (labels, newsletters, tiers). This distinguishes it from list_members and other get tools, but does not explicitly differentiate from siblings like get_label or get_newsletter for specific data.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as list_members or other get tools. No exclusions or prerequisites mentioned.

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

get_newsletterB

Read a single newsletter by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
newsletter_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations provided; description only says 'Read' with no mention of side effects, authentication, or error handling beyond the implicit read-only nature.

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

Conciseness5/5

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

Single sentence, no redundancy or unnecessary words.

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

Completeness3/5

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

Minimal but sufficient for a simple one-parameter read tool with an output schema; lacks details on return value or edge cases.

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

Parameters2/5

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

The parameter 'newsletter_id' is self-explanatory, but the description adds no additional semantics (e.g., format, example) beyond the schema, which has 0% description coverage.

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

Purpose5/5

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

Description clearly states the action ('read') and resource ('a single newsletter by id'), distinguishing it from sibling tools like list_newsletters and create_newsletter.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives, but the simple read operation implies straightforward use.

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

get_offerA

Read a single offer by id, including its linked tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
offer_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It correctly indicates a read operation with no side effects, but fails to disclose behavior on missing IDs, access restrictions, or return format details beyond 'linked tier'.

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

Conciseness5/5

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

Extremely concise: one sentence, no redundancy. Every word adds value, including the detail about the linked tier, which enhances understanding without bloating the description.

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

Completeness4/5

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

For a straightforward read tool with an output schema, the description is nearly complete. It specifies the return includes the linked tier, but omits potential error states or behavior for non-existent IDs. Still, it adequately covers the essential functionality given the tool's simplicity.

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

Parameters2/5

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

Schema coverage is 0% and the description does not elaborate on the required 'offer_id' parameter. Although the parameter name is self-explanatory, the description should provide context on format or expected values. With one parameter, a baseline of 4 would apply if it were documented, but here it is not.

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

Purpose5/5

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

The description clearly states the action ('Read a single offer by id') and the resource ('offer'), and adds specific context ('including its linked tier'). It efficiently distinguishes from sibling tools like list_offers (which returns multiple) and create/update offers.

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

Usage Guidelines3/5

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

No explicit guidance on when to use vs. alternatives. While the context implies using this tool for a single offer (vs. list_offers for multiple), the description lacks information on prerequisites, error handling, or scenarios where other tools would be more appropriate.

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

get_pageA

Read a single page by id or slug, including its rendered HTML.

Provide either page_id or slug. The result includes a preview_url for viewing the page in the active theme.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNo
page_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description must disclose behavior. It adds that the result includes rendered HTML and a preview_url, which are not schema properties. It implies a read-only operation. Could be improved by explicitly stating idempotency or permissions, but still informative.

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

Conciseness5/5

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

Two concise sentences, no redundant information. Key details are front-loaded: what the tool does and how to use it.

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

Completeness5/5

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

For a simple read tool with an output schema, the description is complete. It covers the purpose, parameter usage, and key return fields (rendered HTML, preview_url). No missing critical behavior.

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

Parameters4/5

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

Schema coverage is 0%, so description compensates. It clarifies that page_id and slug are alternative identifiers and that one should be provided. This adds meaning beyond the schema, which only shows types and null defaults.

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

Purpose5/5

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

The description clearly states the tool reads a single page by id or slug, including rendered HTML. The verb 'read' and resource 'page' are specific, and the method (by id or slug) distinguishes it from related tools like list_pages or create_page.

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

Usage Guidelines4/5

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

The description explicitly says to provide either page_id or slug, guiding parameter selection. It implies usage for reading a specific page. However, it does not explicitly state when not to use this tool or mention alternatives like list_pages for discovery.

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

get_postA

Read a single post by id or slug, including its rendered HTML.

Provide either post_id or slug. The result includes a preview_url for viewing the post in the active theme.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNo
post_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations present, so description alone must disclose behavior. It indicates read-only, includes rendered HTML and preview_url, but lacks info on error handling or rate limits.

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

Conciseness5/5

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

Two sentences, front-loaded with core action, no redundant words.

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

Completeness4/5

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

Output schema exists, so return value details are not required. Description still mentions key outputs (rendered HTML, preview_url). Adequate for a simple read tool.

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

Parameters3/5

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

With 0% schema description coverage, description adds value by stating mutual exclusivity of parameters, but does not explain format or constraints beyond that.

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

Purpose5/5

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

Clearly states 'Read a single post by id or slug' with specific verb and resource, differentiating it from list/create/update/delete siblings.

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

Usage Guidelines4/5

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

Explicitly tells to provide either post_id or slug, guiding parameter selection. No explicit when-not-to-use, but context implies it's for single post retrieval.

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

get_site_settingsA

Read the blog's brand and SEO settings.

Returns the site identity (title, description), branding (accent colour, logo, icon, cover), and SEO/social metadata (meta title/description and the Open Graph and Twitter card fields). Use it to review the current state before updating, or to keep the blog aligned with the main site.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. Describes read operation and return fields but does not state idempotency, side effects, or authentication requirements. Minimal behavioral context beyond the verb 'Read'.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, then details. Every sentence adds value with no redundancy.

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

Completeness4/5

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

Covers purpose, return data, and usage context. Lacks error handling or authentication notes, but for a simple read tool with output schema, it is sufficiently complete.

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

Parameters4/5

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

No parameters exist, so schema coverage is trivially 100%. Per guidelines, baseline is 4 for zero params. Description adds no param info but none needed.

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

Purpose5/5

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

The description clearly states the tool reads blog brand and SEO settings, specifying verb 'Read' and resource 'blog's brand and SEO settings'. It distinguishes from siblings like update_branding and get_post by focusing on brand/SEO metadata.

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

Usage Guidelines4/5

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

Explicitly recommends using to 'review the current state before updating' and 'keep the blog aligned with the main site', providing clear context. Does not list exclusions or alternatives, but the usage scenarios are well-defined.

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

get_tagA

Read a single tag by id or slug. Provide either tag_id or slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNo
tag_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description's 'Read' implies a safe, idempotent operation. However, it lacks disclosure on behavior when both parameters are provided, neither, or when the tag is not found. The output schema may compensate, but the description itself is minimal.

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

Conciseness5/5

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

Two concise sentences, front-loaded with the core action and parameter usage. No superfluous words.

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

Completeness4/5

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

Given the tool's simplicity, the description covers the main purpose and parameter semantics. The presence of an output schema reduces the need to explain return values. Missing details on error handling and mutual exclusivity prevent a perfect score.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate. It explains that tag_id and slug are alternative identifiers for the tag, which adds essential meaning beyond the schema's type information.

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

Purpose5/5

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

The description clearly states the verb 'Read' and the resource 'a single tag', and specifies the identification methods (id or slug). This distinguishes it from sibling tools like list_tags or create_tag.

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

Usage Guidelines4/5

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

The description provides guidance on using either tag_id or slug, implying these are the two ways to specify the tag. However, it does not explicitly state when to use this tool versus alternatives like list_tags, nor does it discuss parameter priority or mutual exclusivity.

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

get_theme_structureA

Inspect a live Ghost page and return its markup and CSS.

Fetches the public, rendered page at path along with the stylesheets it links to, so styling changes can target selectors that actually exist rather than guesses. The homepage and individual posts use different templates, so pass the path of the page you intend to restyle.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoThe page path to inspect, such as ``/`` or ``/my-post/``./
blog_urlYesThe public base URL of the blog, e.g. ``https://example.com``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

No annotations provided; description states it fetches public page and stylesheets, implying a safe read operation. Lacks details on error handling or authentication, but adequate for a read-only tool.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, no redundant words. Every phrase adds value: purpose, method, and usage guidance.

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

Completeness5/5

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

Given the tool's simplicity, the description covers the essential aspects: what it does, how to invoke (path vs blog_url), and when to use (before restyling). Output schema exists, so return values don't need elaboration.

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

Parameters4/5

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

Schema coverage is 100% (baseline 3). Description adds value by explaining why 'path' matters (different templates) and gives examples ('/', '/my-post/'), aiding correct usage beyond the schema.

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

Purpose5/5

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

The description clearly states the tool 'inspects a live Ghost page and returns its markup and CSS' with a specific verb and resource. It distinguishes itself from siblings like 'preview_theme' or 'download_theme' by focusing on fetching rendered page structure for styling.

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

Usage Guidelines4/5

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

Explicitly advises passing the correct path because homepage and posts use different templates, implying use before restyling. No explicit exclusions or alternatives, but context is clear.

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

get_tierB

Read a single tier by id, including its prices and benefits.

ParametersJSON Schema
NameRequiredDescriptionDefault
tier_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states the tool is a read operation and includes prices and benefits, but lacks disclosure of authentication needs, error handling (e.g., not found), rate limits, or other behavioral traits.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the key information (read by ID, includes prices and benefits). No unnecessary words or repetition.

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

Completeness4/5

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

Given the output schema exists, the description does not need to detail return values. It adequately specifies the input and output scope. However, it could be more complete by mentioning behavior on missing IDs or error states.

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

Parameters1/5

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

The description does not add any meaning beyond the input schema. The schema has 0% description coverage and only provides the parameter name tier_id. The description never elaborates on the parameter's format, constraints, or role.

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

Purpose5/5

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

The description clearly states the tool reads a single tier by ID and includes prices and benefits. It distinguishes from sibling tools like list_tiers (list all) and update_tier (modify) by specifying a unique operation and output details.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives (e.g., list_tiers). The usage is implied but not stated, and no exclusions or prerequisites are mentioned.

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

get_userB

Read a single user by id or slug. Provide either user_id or slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNo
user_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It only states 'Read', implying safety, but does not address permissions, error handling, idempotency, or rate limits.

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

Conciseness5/5

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

Two sentences with no wasted words. The first sentence front-loads the purpose, and the second covers parameter usage. Ideal conciseness.

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

Completeness3/5

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

Given the output schema exists, return values are covered. However, the description does not mention authentication needs, rate limits, or how this tool differs from similar get_* tools.

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

Parameters3/5

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

Schema coverage is 0%, so the description must add meaning. It clarifies that the two parameters are alternatives (either/or), but lacks details on format, constraints, or usage context.

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

Purpose4/5

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

The description clearly states the action ('Read') and resource ('a single user'), and specifies the two identifiers (id or slug). It is distinguishable from siblings that target different resources like get_member.

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

Usage Guidelines3/5

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

The description advises to provide either user_id or slug, which is helpful, but does not explicitly detail when to use this tool over alternatives like list_users.

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

list_labelsB

List member labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
limitNoLabels per page (Ghost allows up to 100).
orderNoSort order, e.g. ``name asc``.name asc

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries full burden for behavioral disclosure. It does not mention that the tool supports pagination, sorting, or that it is a read-only operation. The agent must infer behavior solely 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.

Conciseness5/5

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

The description is a single, front-loaded sentence with no unnecessary words. It is appropriately sized for a simple list tool.

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

Completeness3/5

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

Given the tool's simplicity and presence of an output schema, the description is minimally adequate. However, it lacks context about pagination defaults, sorting behavior, and whether labels are listed globally or per member.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds no additional meaning beyond what the schema already provides for page, limit, and order.

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

Purpose4/5

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

The description 'List member labels' clearly states the tool's purpose with a specific verb and resource. However, it does not explicitly differentiate from sibling list_* tools (e.g., list_tags, list_posts) or specify the scope (e.g., 'all' vs. filtered).

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

Usage Guidelines2/5

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

No usage guidance is provided. The description does not indicate when to use this tool versus alternatives like get_label (for a single label) or other list tools. There is no mention of prerequisites or context.

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

list_membersA

List members (newest first), with their labels and subscribed newsletters.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
limitNoMembers per page (Ghost allows up to 100).
orderNoSort order, e.g. ``created_at desc`` or ``email asc``.created_at desc
filterNoOptional Ghost NQL filter, e.g. ``status:paid``, ``status:free``, ``label:vip``, or ``subscribed:true``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. Only mentions 'newest first' which matches default order. Does not disclose pagination behavior, authorization needs, rate limits, or side effects (though likely read-only). More detail needed.

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

Conciseness5/5

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

Single sentence, front-loaded with key info, no unnecessary words.

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

Completeness3/5

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

Output schema exists, so return value explanation is not needed. Description is brief; could mention pagination defaults and filter syntax briefly. For a 4-param tool with no annotations, minimally complete.

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

Parameters3/5

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

Schema covers all 4 parameters with descriptions (high coverage). Description adds context about included fields (labels, newsletters) but not substantial beyond schema. Baseline 3.

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

Purpose5/5

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

Clearly states action (list), resource (members), sorting order (newest first), and included data (labels, newsletters). Distinct from sibling tools like get_member or list_posts.

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

Usage Guidelines3/5

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

Implied usage: use for listing members. No explicit guidance on when not to use (e.g., for single member use get_member) or comparisons with other list tools.

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

list_newslettersC

List newsletters (active and archived).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
limitNoNewsletters per page (Ghost allows up to 100).
orderNoSort order, e.g. ``sort_order asc``.sort_order asc
filterNoOptional Ghost NQL filter, e.g. ``status:active``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden for behavioral disclosure. It only mentions listing active and archived newsletters, missing details about pagination defaults, limit constraints, sorting, or filtering behavior. Minimal transparency.

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

Conciseness4/5

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

The description is extremely concise (two words plus parentheses) and front-loaded. It efficiently conveys the core purpose without unnecessary words. Slightly too terse but earns points for brevity.

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

Completeness3/5

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

For a simple list tool with output schema, the description is minimally adequate. It covers the basic listing of newsletters but omits guidance on pagination and filtering. With 4 parameters and an output schema, some additional context would improve completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are fully documented in the schema. The tool description adds no additional meaning beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly specifies the verb 'List' and resource 'newsletters', and distinguishes that it includes both active and archived newsletters. This differentiates it from get_newsletter (single newsletter) and create/update tools. However, it could mention that it returns a paginated list.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives like get_newsletter or other list tools. The description only states what it does without providing context or exclusions.

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

list_offersB

List discount offers, each with its linked tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
limitNoOffers per page (Ghost allows up to 100).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description fully bears the burden of behavioral disclosure. It only states the purpose, omitting critical traits like read-only nature, pagination behavior, rate limits, or whether results are sorted/filtered.

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

Conciseness4/5

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

The description is a single, concise sentence that efficiently conveys the purpose. While it lacks structure (e.g., sections), it wastes no words and is front-loaded.

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

Completeness3/5

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

For a simple list tool with a full schema and an output schema, the description is adequate but lacks context about the nature of 'offers' (e.g., active vs. expired) and any implicit filtering. It meets minimal completeness but has clear gaps.

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

Parameters3/5

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

Schema coverage is 100%, with each parameter already described in the schema. The description adds no additional meaning beyond what the schema provides, meeting the baseline expectation.

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

Purpose5/5

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

The description clearly specifies the action ('list'), the resource ('discount offers'), and adds a distinguishing detail ('each with its linked tier'). This differentiates it from sibling tools like 'list_tiers' or 'list_posts'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of scenarios where this tool is preferred or excluded, leaving the agent without explicit selection criteria.

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

list_pagesA

List pages (standalone content outside the post feed).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
limitNoPages per page of results (Ghost allows up to 100).
orderNoSort order, e.g. ``published_at desc``.updated_at desc
filterNoOptional Ghost filter, e.g. ``status:published``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description must disclose behavior. It correctly implies a read-only operation, but does not mention any side effects, permissions, or pagination details beyond what the schema provides. Minimal but adequate.

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

Conciseness5/5

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

Single sentence that directly states the purpose and distinguishes from posts. No filler, every word contributes.

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

Completeness3/5

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

The tool is simple and has an output schema, so the description does not need to explain return values. However, it lacks guidance on usage context compared to sibling tools and omits any behavioral disclaimers. Adequate but could be more complete.

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

Parameters3/5

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

Schema coverage is 100% with each parameter described. The description adds no additional meaning beyond the schema, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb 'List' and resource 'pages', and clarifies that these are standalone content outside the post feed, effectively distinguishing from the sibling tool 'list_posts'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., list_posts), no prerequisites, and no examples. The description only states the basic function, leaving the agent without decision criteria.

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

list_postsC

List blog posts.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
limitNoPosts per page (Ghost allows up to 100).
orderNoSort order, e.g. ``published_at desc``.updated_at desc
filterNoOptional Ghost filter, e.g. ``status:published`` or ``tag:news``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations and a terse description, the tool fails to disclose behavioral traits like read-only nature, pagination behavior (implicit in schema), or any side effects. The description carries the full burden but offers no insight beyond the verb.

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

Conciseness4/5

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

The description is extremely concise with no redundant words. However, it borders on under-specification; a sentence or two more would enhance usability without sacrificing conciseness.

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

Completeness3/5

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

Given the tool has 4 parameters, no required fields, and an output schema, the description is minimally viable. It lacks contextual hints about features like pagination, filtering, or ordering (present in schema) but the schema compensates partially. The description could be more informative for a complex tool.

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

Parameters3/5

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

The input schema already provides complete descriptions for all 4 parameters (100% coverage). The description adds no additional meaning beyond what the schema conveys, thus meeting the baseline expectation without providing extra value.

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

Purpose4/5

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

The description clearly states the action (list) and resource (blog posts), making the primary purpose obvious. It distinguishes from sibling list tools like list_pages or list_labels. However, it lacks any additional context about scope or filtering, leaving room for ambiguity about what 'list' entails.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as get_post, list_pages, or search-related tools. There is no mention of prerequisites, context, or exclusions, leaving the agent to infer usage from the name alone.

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

list_tagsB

List tags, with how many posts use each.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
limitNoTags per page (Ghost allows up to 100).
orderNoSort order, e.g. ``name asc`` or ``count.posts desc``.name asc
filterNoOptional Ghost filter, e.g. ``visibility:public``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden. It does not disclose pagination behavior, authentication needs, rate limits, or any side effects. The minimal description assumes basic read behavior but omits crucial operational details.

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

Conciseness4/5

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

The description is extremely concise—one short sentence. It avoids redundancy and gets straight to the point. However, it could be more structured (e.g., bullet points for key features) without losing brevity.

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

Completeness2/5

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

Despite having an output schema and well-documented parameters, the description lacks behavioral and usage context. For a list tool with many sibling tools, more detail is needed to ensure correct selection and invocation.

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

Parameters3/5

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

The input schema has 100% coverage, so the baseline is 3. The description adds no parameter-specific meaning beyond what the schema already provides. The mention of 'how many posts use each' is not directly linked to any parameter (e.g., 'count.posts' in 'order').

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

Purpose5/5

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

The description clearly states the action ('List tags') and includes the key feature ('with how many posts use each'). It distinguishes the tool from siblings like list_posts or list_members by specifying the resource (tags) and the additional count information.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., filtering vs. browsing, pagination limits). The description does not mention any prerequisites, exclusions, or comparative context with other list tools.

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

list_themesA

List the themes installed on the blog and which one is active.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It accurately describes the read-only listing behavior but does not disclose authorization needs, rate limits, or other traits. For a zero-parameter tool, this is minimally sufficient.

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

Conciseness5/5

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

Single sentence, front-loaded with the action and result. No unnecessary words.

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

Completeness5/5

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

Given zero parameters and presence of an output schema, the description clearly states what the tool returns (themes and active one). Complete for a list tool.

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

Parameters4/5

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

No parameters exist, so the description does not need to add parameter semantics. Baseline score of 4 applies as per guidelines.

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

Purpose5/5

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

Description clearly states the tool lists installed themes and identifies the active one, with a specific verb and resource. It distinguishes from siblings like activate_theme and create_theme.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives, but the context of listing installed themes is implied. No exclusions or alternatives mentioned, but for a simple list tool this is adequate.

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

list_tiersB

List tiers (paid plans), including their prices and benefits.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
limitNoTiers per page (Ghost allows up to 100).
orderNoSort order, e.g. ``created_at asc``.created_at asc
filterNoOptional Ghost filter, e.g. ``type:paid`` or ``active:true``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations provided; description lacks behavioral details like pagination behavior, rate limits, or response format beyond 'prices and benefits'. Relies on schema for parameter behavior.

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

Conciseness5/5

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

Single sentence, front-loaded with verb and resource, no wasted words.

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

Completeness3/5

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

Minimal but functional for a simple list operation. Output schema exists, but description could mention pagination or default limit. Adequate overall.

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

Parameters3/5

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

Schema coverage is 100%, so parameters are well-documented. Description adds no extra meaning beyond what schema provides, earning baseline 3.

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

Purpose4/5

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

Clearly states it lists tiers (paid plans) with prices and benefits. Distinguishes from get_tier and create_tier, but does not explicitly differentiate from other list tools.

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

Usage Guidelines2/5

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

No guidance on when to use this vs other list tools or alternatives like get_tier. No context about prerequisites or exclusions.

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

list_usersA

List users (authors/staff). Read-only: the Admin API forbids integrations from writing users.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoWhich page of results to return.
limitNoUsers per page (Ghost allows up to 100).
orderNoSort order, e.g. ``name asc``.name asc

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

The description clearly communicates the key behavioral trait of being read-only, which is critical for correct invocation. Without annotations, this fills a necessary gap. It does not discuss pagination or defaults, but these are covered by the schema.

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

Conciseness5/5

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

The description is extremely concise (two sentences) and front-loaded with the primary action. Every word adds value, with no redundancy.

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

Completeness4/5

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

Given the presence of an output schema and full parameter documentation, the description covers the essential purpose and constraint. It could optionally mention the return format, but the existing information is sufficient for correct use.

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

Parameters3/5

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

Schema coverage is 100%, so the description does not need to add parameter details. The description adds no further semantics beyond what the schema provides, which is adequate.

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

Purpose5/5

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

The description clearly states the action ('List') and the resource ('users') with specific scope ('authors/staff'). This is sufficient to distinguish from sibling list tools which target different entities (e.g., list_members, list_posts).

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

Usage Guidelines4/5

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

The description explicitly notes that the tool is read-only and that the API forbids write operations, which guides the agent on appropriate use. However, it does not mention when to prefer this over other list tools or state any exclusions.

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

preview_themeA

Render a Ghost theme locally and serve it for preview in a browser.

Builds a static render of the theme's home, post, and page templates using sample content, then serves it on localhost. Open the returned URL in a browser to check layout and styling before activating the theme on the live site. The render is a style-focused mockup: structure and CSS are faithful, while content is sampled and some dynamic helpers are stubbed.

Only one preview runs at a time: each call stops the previous server and replaces it, so older preview URLs go dead. Always hand the user the URL from the most recent call.

ParametersJSON Schema
NameRequiredDescriptionDefault
theme_pathYesPath to the theme directory to preview.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries full burden and excels: it discloses that the render uses sample content, stubs dynamic helpers, serves on localhost, stops previous previews, and makes old URLs invalid. All critical behavioral traits are covered.

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

Conciseness5/5

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

The description is concise, with three short paragraphs. The first sentence states the main action, followed by details on what is rendered and served, and a final behavioral note. No unnecessary words; every sentence earns its place.

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

Completeness5/5

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

Despite an output schema existing, the description covers all necessary context: purpose, internal behavior, constraints (single preview, live URL expiry), and expected output (URL). It is fully complete for a single-parameter preview tool.

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

Parameters3/5

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

The only parameter, theme_path, is described in the schema as 'Path to the theme directory to preview.' The description does not add further detail (e.g., format, validation). Since schema coverage is 100%, baseline is 3, and no extra value is provided.

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

Purpose5/5

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

The description clearly states the tool's action: 'Render a Ghost theme locally and serve it for preview in a browser.' It specifies building static renders of home, post, and page templates, differentiating it from sibling tools like activate_theme or upload_theme.

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

Usage Guidelines4/5

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

Provides explicit guidance on when to use: 'before activating the theme on the live site.' Also notes the single-preview behavior and advises handing the user the most recent URL. However, it does not explicitly exclude alternative scenarios or other tools.

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

publish_postA

Publish a post AND email it to a newsletter's subscribers. SENDS REAL EMAIL.

This is outward-facing and irreversible: it emails the post to members the moment it publishes (or at scheduled_at). Only call it on explicit user instruction to send. To publish WITHOUT emailing, use update_post(status="published") instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesThe post to publish and send.
scheduled_atNoOptional ISO 8601 time to schedule the send; if given, the post is scheduled and Ghost emails it automatically then. Omit to send now.
email_segmentNoWhich members receive it, as an NQL filter: ``all`` (default), ``status:free``, or ``status:-free`` (paid).all
newsletter_slugYesThe newsletter to send through (from ``list_newsletters``). An archived or unknown slug means no email is sent.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses that the action is outward-facing, irreversible, sends real email, and explains scheduling behavior and the effect of an archived/unknown slug. Strong behavioral context, though could detail error handling or idempotency.

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

Conciseness5/5

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

Two paragraphs with front-loaded key info (publish+email, real email warning). Every sentence adds value; no redundancy. Highly efficient.

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

Completeness5/5

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

Given 4 parameters, no annotations, and presence of output schema, the description covers purpose, usage guidelines, behavioral impacts, parameter details, and alternatives. It is complete for an agent to invoke correctly.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining scheduled_at (schedule vs now), email_segment (NQL filter options), and newsletter_slug (source and archived/unknown behavior), going beyond schema descriptions.

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

Purpose5/5

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

The description clearly states the tool publishes a post and emails it to newsletter subscribers, distinguishing it from update_post which publishes without emailing. The verb 'publish' and resource 'post' are specific.

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

Usage Guidelines5/5

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

Explicitly states to call only on explicit user instruction to send, and provides an alternative (update_post(status='published')) for publishing without emailing. This gives clear when-to-use and when-not-to-use guidance.

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

restyle_themeA

Restyle an installed theme by editing its stylesheet, then re-upload it.

Iterate a theme already on the blog without regenerating it: this downloads the named theme, rewrites its assets/built/screen.css -- appending new rules by default, or mode="replace" to swap the whole stylesheet -- and re-uploads it. The upload itself does NOT activate a theme. But if name is the ACTIVE theme, the new CSS is what visitors see, so this changes the live look; confirm that's intended. Ghost re-validates on upload, so any errors/warnings are returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
cssYesCSS to append (default) or to replace the stylesheet with.
modeNo``"append"`` (safe default) or ``"replace"``.append
nameYesThe installed theme to restyle (see ``list_themes``).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

No annotations provided, but the description fully covers behavioral traits: it downloads, appends or replaces CSS, re-uploads, does not activate, and if the theme is active, CSS changes take effect immediately. It also mentions re-validation and error/warning returns.

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

Conciseness4/5

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

The description is front-loaded with the core action and then provides necessary details. It is slightly longer than minimal but every sentence serves a purpose, with no fluff.

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

Completeness5/5

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

Given the siblings and no output schema description, this description is thorough: it covers the file, modes, side effects, and validation. It fully equips the agent to use the tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value by explaining default append vs replace, the file path, and that 'name' is available via list_themes. It clarifies behavior beyond the schema.

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

Purpose5/5

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

The description clearly states it restyles an installed theme by editing its stylesheet and re-uploading it. It distinguishes from siblings like create_theme, upload_theme, and download_theme by specifying 'iterate a theme already on the blog without regenerating it'.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool (to modify CSS of an installed theme) and warns about live changes if the theme is active. However, it does not explicitly name alternatives or state when not to use it.

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

update_brandingA

Update the blog's brand accent colour.

accent_color is a hex value such as #4a7c59. Keeping it aligned with the main site's brand makes the blog feel like part of the same product.

Returns the fields that were updated.

ParametersJSON Schema
NameRequiredDescriptionDefault
accent_colorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It states the tool updates a field and returns updated fields, but lacks details on permissions, side effects, or destructive potential. The behavior is minimal and clear for a simple update.

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

Conciseness5/5

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

Three concise sentences: purpose, parameter explanation, and rationale/return info. Front-loaded with the action, no wasted words.

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

Completeness5/5

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

For a single-parameter tool with an output schema, the description adequately covers purpose, parameter format, and return value. No additional context is necessary.

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

Parameters4/5

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

Schema description coverage is 0%, so the description compensates by explaining that accent_color is a hex value and providing an example. This adds meaning beyond the schema's type definition.

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

Purpose5/5

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

The description clearly states the tool updates the blog's brand accent colour, a specific verb-resource pair. Among many update siblings, this one is distinguished by targeting the brand accent colour specifically.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives like 'restyle_theme' or other update tools. It only hints at keeping alignment with the main site, which is implicit.

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

update_labelB

Update a label by id; only the fields you pass are changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
slugNo
label_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Discloses partial update behavior ('only the fields you pass are changed'), which is helpful, but lacks details on reversibility, authorization, or side effects; no annotations provided to offload burden.

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

Conciseness5/5

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

Single sentence of 14 words, front-loaded with action and object, no redundancy.

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

Completeness3/5

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

Output schema exists, so return values are covered, but for a mutation tool, more completeness is expected to ensure safe invocation (e.g., error handling, idempotency).

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

Parameters2/5

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

Schema has 0% description coverage, and the description does not explain the meaning of parameters (label_id, name, slug) beyond their names; no added semantics.

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

Purpose5/5

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

Explicitly states 'Update a label by id' using a specific verb and resource, clearly distinguishing it from sibling tools like create_label, delete_label, get_label.

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

Usage Guidelines2/5

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

Provides no guidance on when to use this tool versus alternatives (e.g., create_label, delete_label) and no prerequisites or context.

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

update_memberA

Update a member by id; only the fields you pass are changed.

labels and newsletter_ids REPLACE the member's current sets, so pass the full list you want to keep. subscribed=false unsubscribes the member from all newsletters. Returns the updated member summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
noteNo
emailNo
labelsNo
member_idYes
subscribedNo
newsletter_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description effectively discloses critical behaviors: set replacement for arrays and unsubscription behavior. It does not mention potential side effects like email change implications, but it is mostly transparent.

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

Conciseness5/5

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

Two concise sentences with a note, front-loaded with purpose, no redundant information. Every sentence adds value.

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

Completeness3/5

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

Output schema exists, so return format is covered. However, missing parameter descriptions for name, note, email, and no mention of error cases or prerequisites. Adequate for a standard update but has gaps.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must add meaning. It explains the behavior for 3 of 7 parameters (labels, newsletter_ids, subscribed) but omits name, note, email, and member_id. Partial coverage is adequate but not complete.

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

Purpose5/5

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

The description clearly states the action 'Update a member by id' and specifies that only passed fields are changed, distinguishing it from create, read, and list member tools.

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

Usage Guidelines4/5

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

Provides explicit behavioral notes about replacement semantics for labels and newsletter_ids, and the effect of subscribed=false. Does not explicitly state when to use vs alternatives but context is clear.

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

update_navigationA

Set the blog's navigation menus (primary header and secondary/footer).

Each menu is a list of {"label": ..., "url": ...} items. The whole menu is REPLACED, not appended to, so send the complete set you want; pass only the menu(s) you mean to change and the other is left untouched. URLs are usually site-relative (/about/) or absolute. Extra keys on an item (such as the external/kind hints from extract_brand) are ignored, so links read from a site can be passed straight through.

Membership actions (login/sign-up/account) belong in the theme as Ghost Portal buttons (data-portal), not here -- don't add them as menu links. Confirm the menus with the user before calling this; it changes the live site.

ParametersJSON Schema
NameRequiredDescriptionDefault
primaryNoThe primary (header) menu, or ``None`` to leave it unchanged.
secondaryNoThe secondary (footer) menu, or ``None`` to leave it unchanged.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Without annotations, the description fully discloses behavioral traits: the menu is completely replaced, extra keys are ignored, URLs should be site-relative, and membership actions should not be included. This provides essential transparency for a mutation tool.

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

Conciseness4/5

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

The description is well-structured and front-loaded, with clear sections. It is slightly verbose but every sentence adds value. It could be trimmed slightly without losing clarity, but overall it is effective.

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

Completeness5/5

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

Given the presence of an output schema (not shown but mentioned), the description is complete. It covers purpose, usage, parameter details, behavioral traits, and restrictions. No gaps are apparent.

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

Parameters4/5

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

Although schema coverage is 100%, the description adds meaning beyond the schema by explaining the structure of menu items, the replacement behavior, and that passing null leaves the other menu unchanged. It also clarifies that extra keys are ignored.

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

Purpose5/5

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

Description clearly states the tool's purpose: setting the blog's navigation menus (primary header and secondary/footer). It uses specific verbs and resources, distinguishing it from sibling tools like update_site_settings or others that deal with different aspects.

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

Usage Guidelines5/5

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

Explicitly advises when to use (to set navigation menus) and when not to (membership actions should be in theme as Ghost Portal buttons). It also recommends confirming with user before calling, and strongly implies that this tool replaces menus entirely rather than appending.

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

update_newsletterA

Update a newsletter by id; only the fields you pass are changed.

Set status="archived" to retire a newsletter (there is no delete) or "active" to restore it. Changing sender_email starts an email verification: Ghost emails the new address and it does NOT take effect until the link is clicked, so sender_email may still read as its old value right after this call. sender_reply_to is "newsletter" or "support". Returns the updated newsletter summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
statusNo
descriptionNo
sender_nameNo
sender_emailNo
newsletter_idYes
footer_contentNo
sender_reply_toNo
subscribe_on_signupNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Without annotations, the description fully discloses important behaviors: partial updates, archival/restoration via status, asynchronous email verification for sender_email, and allowed values for sender_reply_to. It leaves no ambiguity about side effects.

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

Conciseness5/5

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

The description is concise and well-structured, using clear sentences and backtick formatting for values. It front-loads the core purpose and provides details in a logical order without wasted words.

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

Completeness4/5

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

The description covers the main update behavior, archival, email verification, and reply_to options. With an output schema present, the lack of return value description is acceptable. However, it omits details on several parameters, making it slightly incomplete for full autonomy.

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

Parameters3/5

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

The description adds meaning for key parameters (status, sender_email, sender_reply_to) but does not cover all nine parameters. Parameters like name, description, footer_content, and subscribe_on_signup are left undocumented. Given 0% schema coverage, the description should provide more comprehensive parameter semantics.

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

Purpose5/5

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

The description clearly states that the tool updates a newsletter by ID and changes only the passed fields. It distinguishes itself from siblings like create_newsletter and get_newsletter by focusing on updates.

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

Usage Guidelines4/5

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

The description provides explicit guidance on using status='archived' as a deletion mechanism and explains the sender_email verification flow. It also specifies valid values for sender_reply_to. However, it does not explicitly compare to other tools like create_newsletter, but the context is clear.

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

update_offerA

Update an offer by id.

Ghost only allows editing name, code, and the display title/description of an existing offer; the pricing terms are fixed once created. Returns the updated offer summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNo
nameNo
offer_idYes
display_titleNo
display_descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses which fields are editable and that pricing is immutable, and states the return value (updated offer summary). It doesn't cover authorization or error conditions, but the key behavioral constraint is communicated.

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

Conciseness5/5

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

Three sentences, no fluff. Purpose stated first, then constraint, then return. Every sentence adds value and is appropriately front-loaded.

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

Completeness4/5

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

Given an output schema exists, the description need not detail return format. It explains editable fields, fixed pricing, and return presence. Could add error cases or mention partial update behavior, but overall sufficient for a simple update tool.

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

Parameters4/5

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

Schema description coverage is 0%, so description must compensate. It summarizes the editable parameters (name, code, display_title, display_description) and explains that pricing is fixed. It doesn't detail individual parameter constraints, but provides context the schema lacks.

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

Purpose5/5

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

The description clearly states the tool updates an offer by ID, listing the exact fields that can be modified (name, code, display title/description), distinguishing it from create_offer, get_offer, and list_offers.

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

Usage Guidelines4/5

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

It implicitly indicates use for modifying existing offers and explicitly notes pricing terms are fixed, but does not contrast with alternatives like create_offer or mention prerequisites like offer existence.

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

update_pageA

Update an existing page by id; only the fields you pass are changed.

Pass status="published" to publish a draft, or status="draft" to unpublish. An empty html is treated as "leave the body unchanged", so it never blanks a page. Returns the updated page summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlNo
titleNo
statusNo
excerptNo
page_idYes
meta_titleNo
feature_imageNo
meta_descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description discloses key behaviors: partial update (only passed fields change), special handling of 'status' (publish/unpublish), and that empty 'html' leaves the body unchanged. It also mentions the return value (updated page summary).

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

Conciseness5/5

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

The description is concise (3 sentences) and front-loaded with the core action. Every sentence adds value without repetition or unnecessary detail.

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

Completeness4/5

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

Given 8 parameters, 0% schema coverage, and no annotations, the description covers the critical behaviors (partial update, status/html handling). It doesn't explain error handling or prerequisites, but the presence of an output schema likely covers return values. Slightly more detail on other parameters would improve completeness.

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

Parameters4/5

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

Despite 0% schema coverage, the description adds meaning to 'html' and 'status' parameters, explaining their special behaviors. It also clarifies the partial update model. However, other parameters (e.g., title, excerpt) are not explicitly described, but their names are self-explanatory.

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

Purpose5/5

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

The description clearly states the verb 'Update' and the resource 'existing page by id'. It distinguishes from siblings like 'create_page' and 'delete_page' by focusing on modification of an existing page.

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

Usage Guidelines4/5

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

Provides specific guidance on using 'status' to publish/unpublish and the behavior of empty 'html'. While it doesn't explicitly state when not to use this tool, the partial update semantics and examples imply its appropriate use case.

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

update_postA

Update an existing post by id; only the fields you pass are changed.

Pass status="published" to publish a draft, or status="draft" to unpublish. An empty html is treated as "leave the body unchanged" (same as create), so it never blanks a post. Returns the updated post summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlNo
tagsNo
titleNo
statusNo
excerptNo
post_idYes
meta_titleNo
feature_imageNo
meta_descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description discloses key behaviors: partial update, status effects, and html never blanks. It could mention idempotency or reversibility but adequately covers essential mutation behaviors.

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

Conciseness5/5

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

Three concise sentences, front-loaded with the main purpose, no filler. Efficient and clear.

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

Completeness3/5

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

Given 9 parameters and an output schema, the description partially covers update semantics but lacks detail on most parameters. The principle 'only fields you pass are changed' provides general context, but specifics are missing.

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

Parameters2/5

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

Schema description coverage is 0%, so description must compensate. Only status and html are explained; the other 7 parameters (title, tags, excerpt, etc.) have no semantic description, leaving a significant gap.

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

Purpose5/5

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

The description clearly states 'Update an existing post by id' with a specific verb and resource, distinguishing it from sibling tools like create_post, publish_post, delete_post.

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

Usage Guidelines4/5

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

Provides guidance on when to use, especially for publishing/unpublishing via status and how html is handled. However, it does not explicitly mention when not to use or alternatives like publish_post.

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

update_site_metadataA

Update the blog's identity and SEO/social metadata.

Sets the site title/description, the search-result metadata (meta_title/meta_description), and the Open Graph and Twitter card fields used when posts are shared. Only the arguments you provide are changed; omit the rest. Good meta_* and social fields help the blog present and rank well.

Returns the fields that were updated, with their new values.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
og_imageNo
og_titleNo
meta_titleNo
descriptionNo
twitter_imageNo
twitter_titleNo
og_descriptionNo
meta_descriptionNo
twitter_descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Transparently describes the partial update behavior and that it returns the updated fields. With no annotations, it adequately covers the nondestructive nature. Could mention if changes are reversible.

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

Conciseness5/5

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

Three concise sentences, front-loaded with purpose, no redundancy. Every sentence adds value.

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

Completeness4/5

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

Given 10 optional parameters, no annotations, and an output schema, the description covers purpose, partial update, and return value. Could mention authentication or rate limits, but not essential for this tool.

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

Parameters4/5

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

Schema coverage is 0%, so description compensates by grouping parameters into categories (title/description, meta, OG, Twitter). However, individual parameter constraints or formats are not defined, which is acceptable given the schema's simplicity (all strings).

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

Purpose4/5

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

Description clearly states the tool updates the blog's identity and SEO/social metadata, listing specific field groups (title, meta, OG, Twitter). However, it does not explicitly differentiate from sibling tools like update_branding.

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

Usage Guidelines3/5

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

States that only provided arguments are changed (partial update). No explicit guidance on when to use this tool vs. alternatives, nor any prerequisites or limitations.

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

update_tagB

Update a tag by id; only the fields you pass are changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
slugNo
tag_idYes
meta_titleNo
descriptionNo
feature_imageNo
meta_descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

With no annotations, the description carries full behavioral disclosure burden. It only states it's an update with partial changes, but omits details like return value, error handling, authorization, or reversibility. The presence of an output schema is not mentioned.

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

Conciseness4/5

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

The description is extremely concise with a single, front-loaded sentence containing the essential action and partial update behavior. However, it could be slightly expanded to mention the output or a hint without losing conciseness.

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

Completeness2/5

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

Given the tool has 7 parameters, no schema descriptions, and no annotations, the description is too sparse. It does not cover return values, error scenarios, or parameter relationships. The existence of an output schema reduces the need for return value explanation, but overall completeness is low.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description adds no explanation for any of the 7 parameters (name, slug, tag_id, etc.). It fails to compensate for the lack of schema descriptions, leaving parameter meaning entirely to the schema property names.

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

Purpose5/5

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

The description clearly states the action (Update), the resource (a tag), and the identifier (by id). It also specifies partial update behavior ('only the fields you pass are changed'), distinguishing it from create, delete, or full replacement tools.

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

Usage Guidelines3/5

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

The description implies use for modifying existing tags but does not explicitly mention when to use this tool over siblings like delete_tag or create_tag. No alternatives or when-not-to-use guidance is provided.

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

update_tierA

Update a tier by id; only the fields you pass are changed.

There is no delete for tiers; retire one with active=False instead. Returns the updated tier summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
activeNo
tier_idYes
benefitsNo
currencyNo
trial_daysNo
visibilityNo
descriptionNo
yearly_priceNo
monthly_priceNo
welcome_page_urlNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, but the description discloses partial update behavior and the retirement workaround. It does not mention authorization or rate limits, but covers key mutation aspects.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core purpose. No unnecessary words; every sentence adds value.

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

Completeness5/5

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

Output schema exists so return details are not needed. The description covers partial update, retirement workaround, and the general usage pattern adequately for the complexity.

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

Parameters3/5

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

The description explains that any passed field is updated, but with 11 parameters and 0% schema coverage, it does not provide individual parameter details. The names are self-explanatory but no additional context given.

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

Purpose5/5

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

The description clearly states the action 'Update a tier by id' and specifies that only passed fields are changed. It distinguishes from create_tier and mentions the return value.

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

Usage Guidelines5/5

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

Explicitly states that partial updates are done by passing only the fields to change, and provides guidance on how to retire a tier (active=False) since there is no delete operation.

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

upload_imageA

Upload a local image file to the blog and return its hosted URL.

Use the returned URL for a post's feature_image, the site logo/icon (via update_branding), or a newsletter header_image.

ParametersJSON Schema
NameRequiredDescriptionDefault
purposeNo``image`` (default), ``profile_image``, or ``icon``. The latter two must be square images.image
file_pathYesPath to a local image (WEBP, JPEG, GIF, PNG, SVG; ICO for icons).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses upload action and return, but does not mention file size limits, overwrite behavior, or privacy implications. Adequate for a straightforward upload but could be more transparent.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action followed by usage guidance. Every sentence adds value without redundancy.

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

Completeness4/5

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

Given that an output schema exists, the description need not explain return values. It covers purpose and usage adequately, though it omits file size limits or error handling. Overall complete for a simple upload tool.

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

Parameters3/5

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

Schema description coverage is 100%, baseline 3. The description adds limited new context: the square requirement for 'profile_image' and 'icon' is already in the schema. No additional parameter semantics are provided beyond the schema.

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

Purpose5/5

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

The description uses the verb 'Upload' and specifies the resource 'local image file to the blog,' with a clear return of a hosted URL. It differentiates from the sibling tool 'upload_image_from_url' by emphasizing 'local' upload.

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

Usage Guidelines4/5

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

The description explicitly states where the returned URL can be used (feature_image, logo/icon via update_branding, newsletter header_image). It provides context but lacks explicit when-not-to-use or alternatives, though the sibling list suggests alternatives.

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

upload_image_from_urlA

Fetch a public image by URL and re-upload it to the blog, returning the URL.

The source is fetched under the same SSRF guard as the vision tools (public http(s) only; private/localhost hosts and oversized responses are refused), then uploaded to Ghost so the image is served from the blog itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
purposeNo``image`` (default), ``profile_image``, or ``icon``.image
source_urlYesA public image URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries full responsibility and does an excellent job disclosing behavioral traits: SSRF guard restrictions, source limitations (public http(s) only, rejects private/localhost and oversized responses), and the upload-to-Ghost hosting behavior. No contradictions.

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

Conciseness5/5

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

The description consists of two focused sentences: the first states the core action, and the second adds essential constraints. It is front-loaded and contains no extraneous information.

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

Completeness5/5

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

Given the tool's simplicity, an output schema exists (returning the URL), so the description does not need to cover return values. It fully covers fetching, constraints, and hosting behavior, making it complete 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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond the schema for 'source_url' and does not mention the 'purpose' parameter. Thus, it provides no extra value over the input schema.

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

Purpose5/5

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

The description clearly states the action: 'Fetch a public image by URL and re-upload it to the blog, returning the URL.' The verb 'fetch' and 're-upload' combined with the resource 'image' make the purpose unambiguous. It distinguishes itself from sibling tools like 'upload_image' by explicitly mentioning fetching from a URL.

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

Usage Guidelines4/5

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

The description provides clear context on when to use the tool: when you have a public image URL and want to host it on the blog. It also lists constraints (SSRF guard, public http(s) only, no private/localhost, oversized responses refused). However, it does not explicitly state when not to use it or mention alternatives like 'upload_image' for local files.

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

upload_themeA

Package a theme directory and upload it to Ghost WITHOUT activating it.

The live site keeps its current theme; the uploaded theme is installed but inactive, so it can be reviewed and activated manually. Ghost validates the theme on upload; any errors or warnings are returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
theme_pathYesPath to the theme directory to upload.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Discloses key behavior: packages directory, uploads, installs without activation, returns validation errors/warnings. However, no annotations exist, and it omits details like idempotency, overwrite behavior, required permissions, or rate limits.

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

Conciseness5/5

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

Two sentences, front-loaded with the key disambiguation (not activating), no filler. Every sentence provides essential information.

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

Completeness4/5

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

Tool has only one parameter, output schema exists, and description covers outcome and error handling. Missing overwrite behavior or theme ID return, but sufficient for an upload tool with clear purpose.

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

Parameters3/5

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

With 100% schema coverage, the description adds minimal value beyond the schema by implying packaging of the directory. The schema already describes theme_path as 'Path to the theme directory to upload.'

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

Purpose5/5

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

Description uses specific verb 'upload', resource 'theme', and explicitly states 'WITHOUT activating it', clearly distinguishing from sibling tools like activate_theme and create_theme.

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

Usage Guidelines4/5

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

Clearly explains that the theme is installed but inactive, allowing manual review and activation, and mentions validation on upload. However, it does not explicitly differentiate from other upload tools like upload_image or create_theme.

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

TDQS

A3.6/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, with detailed descriptions that prevent confusion between similar operations (e.g., publish_post vs update_post, create_theme vs upload_theme vs activate_theme). The boundaries between content types (post/page/member/newsletter) are well-defined.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (e.g., create_post, list_members, update_theme). Even longer names like upload_image_from_url adhere to the same scheme. No mixing of casing or irregular verbs.

Tool Count2/5

55 tools is excessive for a single MCP server, especially one focused on 'Styling'. The server includes full CRUD for many Ghost entities (members, offers, newsletters, etc.) well beyond styling, making the surface overwhelming and the scope unfocused.

Completeness4/5

The tool set covers the full styling workflow (extract brand → create/restyle/preview/upload/activate theme) and basic CRUD for most content types. Minor gaps exist (no delete_theme, delete_newsletter only via archive, no user management) but these are often API limitations.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/stemcreations/ghost-mcp'

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