Ghost Styling MCP
The Ghost Styling MCP server lets you design, build, and manage a Ghost blog — from generating custom themes to managing content, members, and monetization — using your site's real brand data.
Vision & Brand Analysis
Extract brand tokens (colors, fonts, logo, navigation) from any live site
Inspect a Ghost page's HTML/CSS to target selectors that actually exist
Check WCAG contrast ratios (AA/AAA) between two colors
Theme Management
Generate, preview locally, upload, restyle, list, download, and activate themes
Upload installs themes as inactive; activation only happens on explicit instruction
Site Settings
Read/update site title, description, accent color, SEO metadata (meta tags, Open Graph, Twitter cards), and primary/secondary navigation menus
Posts & Pages
Full CRUD on posts and standalone pages; publish posts with email delivery, scheduling, and audience segmentation
Images
Upload local images or fetch and re-host public images onto the blog
Tags
Full CRUD for content organization
Members
List, read, create, and update members with labels and newsletter subscriptions
Newsletters
List, read, create, and update newsletters; archive to retire (no delete in Ghost API)
Tiers & Offers
List, read, create, and update paid membership tiers and discount offers
Labels
Full CRUD for member segmentation labels
Users
List and read authors/staff (read-only; Ghost API forbids writing users via integrations)
Research Tools (optional — requires a SERPER_API_KEY)
Search SERPs, expand keywords by intent, build content briefs, find content gaps, and manage research profiles for SEO strategy
Provides tools for styling and managing a Ghost blog, including fetching live page markup and CSS, and eventually managing posts, members, tags, and other resources through the Ghost Admin API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Ghost Styling MCPShow me the current markup and CSS of my homepage"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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_branddistils a live site's brand + navigation;get_theme_structurefetches its markup + CSS;check_contrastscores colour pairs against WCAGThemes: 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-siteprompt and a server instructions block encode the brand-first workflowManagement: 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.
Research — optional; 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 |
| Forums rank, real pages don't — people are asking and nobody has answered. The best case. |
| Little competition. Write it. |
| Winnable, but only with a genuinely better first-party answer. |
| Established pages own it, or three of the profile's dominant domains rank. Re-angle rather than abandon. |
| Google showed a map pack: build a service or location page, not a post. |
| 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 optionalindex/post/page/defaulttemplate 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'sfeature_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 draftpreview_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 apreview_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 bystatus: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 withstatus: 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 withactive: 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+
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 everythingThe server reads its configuration from environment variables:
Variable | Required | Example |
| yes |
|
| yes |
|
| no |
|
| no | a serper.dev key; enables the research tools |
| no | starting research profile: |
| no | extra competitor domains, comma-separated |
| no | where |
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
envblock (see Running). No.envfile is needed; this is the usual setup for Claude Desktop.In a local
.env: handy for development and the connection check:cp .env.example .envand fill it in. (If both are set, the client'senvvalues win.)
Confirm the credentials reach your site:
uv run python scripts/check_connection.pyRunning
Interactively, with the MCP Inspector:
uv run fastmcp dev src/ghost_mcp/server.pyConnecting 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 |
|
macOS |
|
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 |
| Load and validate environment configuration. |
Errors |
| The shared |
Admin |
| Authenticated Admin API: token signing, generic client, theme + settings helpers. |
Vision |
| Fetch the public rendered page + CSS (no auth). |
Research |
| Search the SERP and analyse ranking pages (optional; needs a key). |
Themes |
| Generate, locally preview, and package themes. |
Tools |
| Thin MCP wrappers over the layers above. |
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:
Write the logic as a plain function in the relevant service module, and test it.
Add
tools/<name>.pywith aregister(mcp)function that wraps it.Call your
registerfromregister_allintools/__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 # testOr install the git hook to run all three automatically before each commit:
uv run pre-commit installSecurity
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 toolsactivate_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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The installed theme to activate (see ``list_themes``). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| background | Yes | The colour behind it (hex or ``rgb()``). | |
| foreground | Yes | The text/foreground colour (hex or ``rgb()``). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| slug | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional display name. | |
| note | No | Optional internal note (max 2000 chars). | |
| Yes | The member's email address (required). | ||
| labels | No | Optional label names to attach. | |
| newsletter_ids | No | Optional newsletter ids to subscribe the member to. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | No | ||
| sender_name | No | ||
| opt_in_existing | No | ||
| sender_reply_to | No | ||
| subscribe_on_signup | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Shortcode for the offer URL (yoursite.com/<code>). | |
| name | Yes | Internal name (must be unique). | |
| type | Yes | ``percent`` or ``fixed`` — whether ``amount`` is a percentage or a fixed value. | |
| amount | Yes | The discount, in percent or the smallest currency unit per ``type``. | |
| cadence | Yes | ``month`` or ``year`` — which of the tier's prices the offer applies to. | |
| tier_id | Yes | The tier the offer applies to (from ``list_tiers``). | |
| currency | No | Required when ``type="fixed"``; must match the tier's currency. | |
| duration | No | ``once``, ``forever``, or ``repeating`` (``repeating`` needs ``cadence="month"``). | once |
| display_title | No | Title shown in the offer window. | |
| duration_in_months | No | Months to repeat when ``duration="repeating"``. | |
| display_description | No | Text shown in the offer window. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | ||
| title | Yes | ||
| status | No | draft | |
| excerpt | No | ||
| meta_title | No | ||
| feature_image | No | ||
| meta_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | ||
| tags | No | ||
| title | Yes | ||
| status | No | draft | |
| excerpt | No | ||
| meta_title | No | ||
| feature_image | No | ||
| meta_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| slug | No | ||
| meta_title | No | ||
| description | No | ||
| feature_image | No | ||
| meta_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable theme name (slugified for the package name). | |
| styles | No | CSS appended to the base stylesheet to design the theme. | |
| description | No | Optional theme description. | |
| page_template | No | Optional Handlebars override for the page template. | |
| post_template | No | Optional Handlebars override for the single-post template. | |
| index_template | No | Optional Handlebars override for the home template. | |
| default_template | No | Optional Handlebars override for the ``default.hbs`` layout. Must contain ``{{{body}}}``. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| benefits | No | ||
| currency | No | ||
| trial_days | No | ||
| visibility | No | ||
| description | No | ||
| yearly_price | No | ||
| monthly_price | No | ||
| welcome_page_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| label_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the installed theme to download. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | The page to read; the homepage usually carries the brand. | / |
| site_url | Yes | The public site to inspect, e.g. ``https://example.com``. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| label_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| member_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| newsletter_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| offer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| page_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| post_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| tag_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | The page path to inspect, such as ``/`` or ``/my-post/``. | / |
| blog_url | Yes | The public base URL of the blog, e.g. ``https://example.com``. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tier_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| user_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Which page of results to return. | |
| limit | No | Labels per page (Ghost allows up to 100). | |
| order | No | Sort order, e.g. ``name asc``. | name asc |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Which page of results to return. | |
| limit | No | Members per page (Ghost allows up to 100). | |
| order | No | Sort order, e.g. ``created_at desc`` or ``email asc``. | created_at desc |
| filter | No | Optional Ghost NQL filter, e.g. ``status:paid``, ``status:free``, ``label:vip``, or ``subscribed:true``. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Which page of results to return. | |
| limit | No | Newsletters per page (Ghost allows up to 100). | |
| order | No | Sort order, e.g. ``sort_order asc``. | sort_order asc |
| filter | No | Optional Ghost NQL filter, e.g. ``status:active``. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Which page of results to return. | |
| limit | No | Offers per page (Ghost allows up to 100). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Which page of results to return. | |
| limit | No | Pages per page of results (Ghost allows up to 100). | |
| order | No | Sort order, e.g. ``published_at desc``. | updated_at desc |
| filter | No | Optional Ghost filter, e.g. ``status:published``. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Which page of results to return. | |
| limit | No | Posts per page (Ghost allows up to 100). | |
| order | No | Sort order, e.g. ``published_at desc``. | updated_at desc |
| filter | No | Optional Ghost filter, e.g. ``status:published`` or ``tag:news``. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Which page of results to return. | |
| limit | No | Tags per page (Ghost allows up to 100). | |
| order | No | Sort order, e.g. ``name asc`` or ``count.posts desc``. | name asc |
| filter | No | Optional Ghost filter, e.g. ``visibility:public``. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Which page of results to return. | |
| limit | No | Tiers per page (Ghost allows up to 100). | |
| order | No | Sort order, e.g. ``created_at asc``. | created_at asc |
| filter | No | Optional Ghost filter, e.g. ``type:paid`` or ``active:true``. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Which page of results to return. | |
| limit | No | Users per page (Ghost allows up to 100). | |
| order | No | Sort order, e.g. ``name asc``. | name asc |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| theme_path | Yes | Path to the theme directory to preview. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | The post to publish and send. | |
| scheduled_at | No | Optional ISO 8601 time to schedule the send; if given, the post is scheduled and Ghost emails it automatically then. Omit to send now. | |
| email_segment | No | Which members receive it, as an NQL filter: ``all`` (default), ``status:free``, or ``status:-free`` (paid). | all |
| newsletter_slug | Yes | The newsletter to send through (from ``list_newsletters``). An archived or unknown slug means no email is sent. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| css | Yes | CSS to append (default) or to replace the stylesheet with. | |
| mode | No | ``"append"`` (safe default) or ``"replace"``. | append |
| name | Yes | The installed theme to restyle (see ``list_themes``). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| accent_color | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| slug | No | ||
| label_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| note | No | ||
| No | |||
| labels | No | ||
| member_id | Yes | ||
| subscribed | No | ||
| newsletter_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| status | No | ||
| description | No | ||
| sender_name | No | ||
| sender_email | No | ||
| newsletter_id | Yes | ||
| footer_content | No | ||
| sender_reply_to | No | ||
| subscribe_on_signup | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ||
| name | No | ||
| offer_id | Yes | ||
| display_title | No | ||
| display_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | ||
| title | No | ||
| status | No | ||
| excerpt | No | ||
| page_id | Yes | ||
| meta_title | No | ||
| feature_image | No | ||
| meta_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | ||
| tags | No | ||
| title | No | ||
| status | No | ||
| excerpt | No | ||
| post_id | Yes | ||
| meta_title | No | ||
| feature_image | No | ||
| meta_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| og_image | No | ||
| og_title | No | ||
| meta_title | No | ||
| description | No | ||
| twitter_image | No | ||
| twitter_title | No | ||
| og_description | No | ||
| meta_description | No | ||
| twitter_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| slug | No | ||
| tag_id | Yes | ||
| meta_title | No | ||
| description | No | ||
| feature_image | No | ||
| meta_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| active | No | ||
| tier_id | Yes | ||
| benefits | No | ||
| currency | No | ||
| trial_days | No | ||
| visibility | No | ||
| description | No | ||
| yearly_price | No | ||
| monthly_price | No | ||
| welcome_page_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| purpose | No | ``image`` (default), ``profile_image``, or ``icon``. The latter two must be square images. | image |
| file_path | Yes | Path to a local image (WEBP, JPEG, GIF, PNG, SVG; ICO for icons). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| purpose | No | ``image`` (default), ``profile_image``, or ``icon``. | image |
| source_url | Yes | A public image URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| theme_path | Yes | Path to the theme directory to upload. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
Publish and manage articles, series, comments, reactions, newsletters and blog analytics.
Manage BrightSite websites: pages, blog posts, components, forms, media, and analytics.
Turn any live website into brand colors, fonts, design tokens, SVGs, Lottie and paste-ready code.
Automate any website: discover, run and create browser scripts that work behind logins.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceIntegrates with the Ghost Admin API to allow programmatic management of Ghost CMS features, including posts, pages, tags, authors, members, and image uploads, providing efficient content management capabilities.183MIT
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive management of Ghost CMS instances through the Admin API, supporting content operations (posts, tags), member management, newsletters, tiers, offers, and webhooks through natural language interactions.141MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Ghost CMS content including posts, members, users, tags, tiers, offers, newsletters, invites, roles, and webhooks via the Ghost Admin API.
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Ghost CMS sites through both Content (read-only) and Admin (read/write) APIs, allowing natural language management of posts, pages, tags, and settings.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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