Skip to main content
Glama
submitator

Submitator MCP Server

Official
by submitator

Submitator MCP server

Launch your clients' products on up to 100 directories each from Claude, ChatGPT, Cursor or VS Code.

This MCP server is for agencies on Submitator's white label plan. Your assistant creates a client project from a URL, shows which directories it would reach, launches it once you agree, and follows the listings as they go live. The badge, the report and the client page carry your agency's brand. It calls the Submitator API with your agency key and does nothing the API does not.

What you need

  • An agency account: app.submitator.com/agency/start.

  • An API key from Developers in the agency console. With claude.ai or ChatGPT, the sign-in creates one (see Remote server).

    • A sbm_test_ key is free from the day you create the agency. It runs in test mode: projects and listings are test data, nothing is submitted, and its test launches are not bought ones.

    • A sbm_live_ key comes with your first purchase. Each launch_project spends one launch.

Related MCP server: NotFair

Install

The package runs on your machine with npx (Node.js 20 or newer). Keep the key in your user-level config, never in a file that lives in a repository.

Claude Code (user scope, so the key stays out of the project's .mcp.json)

claude mcp add --scope user submitator --env SUBMITATOR_API_KEY=sbm_test_... -- npx -y submitator-mcp

Cursor (~/.cursor/mcp.json, the user-level file)

{
  "mcpServers": {
    "submitator": {
      "command": "npx",
      "args": ["-y", "submitator-mcp"],
      "env": { "SUBMITATOR_API_KEY": "sbm_test_..." }
    }
  }
}

VS Code (.vscode/mcp.json): VS Code asks for the key and keeps it out of the file.

{
  "inputs": [
    { "type": "promptString", "id": "submitator-key", "description": "Submitator API key", "password": true }
  ],
  "servers": {
    "submitator": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "submitator-mcp"],
      "env": { "SUBMITATOR_API_KEY": "${input:submitator-key}" }
    }
  }
}

Claude Desktop (claude_desktop_config.json): the same block as Cursor, under mcpServers. Claude Desktop starts servers in the disk root, so add "SUBMITATOR_FILES_DIR": "/path/to/client/images" to env if you want to upload local images.

Devin Desktop (formerly Windsurf), Cline and other MCP clients: run npx -y submitator-mcp with SUBMITATOR_API_KEY in its environment, or use the remote server below.

Remote server

The remote server at https://mcp.submitator.com/mcp needs no install. There are two ways in: claude.ai and ChatGPT sign in to Submitator, and other clients send an agency key in a header.

claude.ai: sign in

  1. In claude.ai, open Customize > Connectors, press + Add, then Add custom connector.

  2. Enter the name Submitator and the URL https://mcp.submitator.com/mcp, then press Continue. Check the settings it found and press Continue again.

  3. Under Authentication pick Sign in now, keep Use Claude's published identity (Recommended) as the OAuth client, leave Request headers empty and press Add.

  4. Submitator's sign-in opens: log in to the agency console. The consent page names the client and its host (Claude, claude.ai). Pick Test or Live and Full or Read only, then press Allow Claude.

  5. In a chat, open +, then Connectors, and switch Submitator on.

This link opens the dialog of step 1 with the name and the URL filled in.

The sign-in creates a key labelled MCP: Claude on the console's Developers page. Revoke it there to disconnect: the next call asks to sign in again. Live needs an agency that has bought launches, so a new agency gets Test only, and test mode submits nothing.

On Team and Enterprise plans an Owner adds the connector first, under Organization settings > Connectors: Add, Custom, Web. Members then press Connect under Customize > Connectors, and each of them signs in.

ChatGPT: sign in

  1. In ChatGPT on the web, open Plugins (chatgpt.com/plugins), press the plus button, then Add custom MCP server.

  2. Enter the name Submitator and, under Connection, the Server URL https://mcp.submitator.com/mcp.

  3. For authentication pick OAuth with a Client ID Metadata Document (CIMD), and enter no client ID or secret: Submitator's sign-in reads ChatGPT's published client document and needs no client registration.

  4. Review the risk warning, select I understand and want to continue, then Create as a plugin.

  5. Install the plugin, then in a chat type @ and pick it.

When ChatGPT sends you to Submitator's sign-in, log in to the agency console, pick Test or Live and Full or Read only on the consent page, and allow ChatGPT. As with claude.ai, the sign-in creates a key whose label starts with MCP: on the console's Developers page (revoke it there to disconnect), and a new agency gets Test only.

OpenAI's documentation says ChatGPT asks for confirmation before write actions by default and treats a tool without readOnlyHint as a write. Here the tools that only read carry readOnlyHint: true, and every other tool false. In a workspace, its permissions and security settings apply to adding and using custom MCP servers.

Claude Code, Cursor, VS Code and other clients: a key in a header

URL:    https://mcp.submitator.com/mcp
Header: Authorization: Bearer <your key>   (X-API-Key: <your key> works too)

Claude Code

claude mcp add --transport http submitator https://mcp.submitator.com/mcp \
  --header "Authorization: Bearer $SUBMITATOR_API_KEY"

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "submitator": {
      "url": "https://mcp.submitator.com/mcp",
      "headers": { "Authorization": "Bearer sbm_test_..." }
    }
  }
}

VS Code (.vscode/mcp.json): VS Code asks for the key and keeps it out of the file.

{
  "inputs": [
    { "type": "promptString", "id": "submitator-key", "description": "Submitator API key", "password": true }
  ],
  "servers": {
    "submitator": {
      "type": "http",
      "url": "https://mcp.submitator.com/mcp",
      "headers": { "Authorization": "Bearer ${input:submitator-key}" }
    }
  }
}

Other clients that connect over HTTP take the same URL and header.

The remote server keeps nothing between requests: it passes the key, from the header or from the sign-in's access token, on to the Submitator API and forgets it. Files cannot be read or saved there, so save_report_file and local image paths work only with the npx package.

Tools

Tool

What it does

whoami

The agency and mode behind the key, its permissions, launches left and the hourly budget

list_projects, get_project

Find client projects; read one in full

create_project, update_project, delete_draft

Create a project from a URL, change its fields, delete a draft

set_logo, add_screenshot, remove_image

Images from a public URL, or a local file with the npx package

preview_launch

Free dry run of a launch or an add with the same arguments: how many directories, what is missing, the cost, plus the top and median DR of the auto pick

find_directories, project_directories

Search the catalog; see one project's directory choices

launch_project

Start submissions. Spends one launch; refuses unless confirm_selected equals the count preview_launch shows for the same arguments

add_directories

Reach more directories from a launched project's free allowance, with the same check

list_listings, list_events

Follow listings and what changed since a given time

get_badge, verify_badge

The badge install code for the client's site, and a check that it is there

create_report, get_report, save_report_file

Build a PDF or XLSX report; save it to disk with the npx package

get_share_link, create_share_link, delete_share_link

The client's progress page (live keys)

advance_test_listing, set_test_launches

Test mode helpers (test keys)

Prompts: launch_client_project walks through a launch, and client_progress_update drafts a note for your client that does not name Submitator.

Keys and safety

  • Keep your client's approval prompt on for launch_project, add_directories and update_project instead of allowing them always: a launch spends money. These three, like every tool that overwrites or deletes data or submits to directories, carry destructiveHint: true, so clients that read the hint ask before each call. Tools that only add or check, such as create_project, add_screenshot and verify_badge, carry false. With a live key, clients that support questions to their user (MCP elicitation) also ask you before a launch or an add, and the answer never passes through the model. The remote server keeps no session, so there this question reaches only clients on MCP protocol 2026-07-28.

  • The npx package reads the key from its environment and sends it only to https://api.submitator.com.

  • Local images are read only from SUBMITATOR_FILES_DIR (or the folder the client starts the server in), only real PNG, JPEG, GIF or WebP files, and never through a link. Reports are saved to Downloads by default and never over an existing file; reports that include logins are not saved here.

  • A read-only key fits an assistant that only checks status: projects, listings, events and existing reports. Building a report or a client page link needs a key with full permissions.

  • Logins and their passwords are not exposed through this server. Read them in the agency console.

  • Every call shows up in Developers, Request log with a request id that starts with mcp-. Revoke a key there at any time.

  • Report a vulnerability by email to vlad@submitator.com, not in a public issue (SECURITY.md).

Development

npm install
npm test               # unit, contract and protocol tests
npm run build
npm run sync:openapi   # refresh openapi/v1.json and src/v1.d.ts from the public contract
npm run check:pack     # pack, install in an empty folder, run the stdio handshake

When the API ships a new release, npm run sync:openapi and npm test show which new operations need a tool or a line in EXCLUDED (src/tools/index.ts).

License

MIT

Available Tools

24 tools
add_directoriesAdd directories to a launched projectAInspect

Submits a launched project to more directories from its free allowance (no launch is spent). Call preview_launch with the same arguments first and get the user to agree. An include longer than the free allowance answers allowance_exhausted; a directory already listed answers invalid_directories.

NameRequiredDescriptionDefault
project_idYesProject id (prj_...)
directoriesYes"auto" (best matches, highest DR first), {include: [ids]} exactly these, or {exclude: [ids]} auto without these
confirm_selectedYesThe directory count from preview_launch that the user agreed to
excluded_directoriesNoReplaces the project's whole exclusion list for this request; [] clears it. To leave some out once, use directories: {exclude}

TDQS

A4.6/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the cost model ('no launch is spent', 'free allowance') and two concrete error outcomes, which is exactly the kind of consequence info an agent needs before mutating. It stops short of describing the success result or whether the change can be undone, leaving a small gap given there is no output schema.

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

Conciseness5/5

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

Three sentences, front-loaded with the operation and its cost implication, then the required prerequisite, then the error semantics. No sentence restates the name or the schema.

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

Completeness4/5

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

For a 4-parameter mutation with full schema coverage and non-destructive annotations, the description supplies the prerequisite flow, cost behavior and error paths, which is nearly everything an agent needs. The only omission is what a successful call returns or changes, which matters slightly more here because there is no output schema.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3; the description adds meaning by tying the include path to the free-allowance limit and to the allowance_exhausted error, and by anchoring confirm_selected to preview_launch's reported count. The exclude / excluded_directories distinction is left entirely to the schema.

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

Purpose5/5

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

States a specific verb and resource ('submits a launched project to more directories') plus the crucial scope qualifier 'from its free allowance (no launch is spent)', which separates it from launch_project and preview_launch. An agent can tell exactly which operation this is without opening the schema.

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

Usage Guidelines5/5

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

Explicitly prescribes the workflow: 'Call preview_launch with the same arguments first and get the user to agree', naming the sibling to use as a prerequisite and the human-confirmation gate. It also names the failure conditions (allowance_exhausted, invalid_directories) that tell the agent when to stop and re-plan.

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

add_screenshotAdd a screenshotAInspect

Adds one screenshot to a project (5 at most), from a public URL or, with the npx package, a local file. Each call adds another one, so do not repeat a call that succeeded.

NameRequiredDescriptionDefault
urlNoPublic image URL: PNG, JPEG, GIF or WebP, 5 MB at most
file_pathNoA local image inside SUBMITATOR_FILES_DIR (or the starting folder), instead of url
project_idYesProject id (prj_...)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare non-idempotent, non-destructive, open-world writing, but the description adds the meaningful quota constraint ('5 at most') and warns that repeated calls accumulate screenshots. That accumulation behavior is exactly the consequence an agent needs beyond the idempotentHint flag.

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

Conciseness5/5

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

Two sentences, no filler, with the quota limit and the non-idempotency warning front-loaded. Every clause carries actionable information.

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

Completeness4/5

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

For a simple single-item add tool with full schema coverage and safety annotations, the description covers sources, quota, and repeat-call risk. It does not describe the return value, a minor gap given there is no output schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics: url and file_path are alternative sources, and local file use requires the npx package. That packaging constraint is not conveyed by the schema alone.

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

Purpose5/5

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

Specific verb and resource ('Adds one screenshot to a project'), with scope limits (5 at most) and supported sources (public URL or local file via npx). Clearly distinguishable from siblings like set_logo and remove_image.

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

Usage Guidelines4/5

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

Gives a concrete usage rule: 'Each call adds another one, so do not repeat a call that succeeded' — a practical when-not-to-repeat instruction. It does not explicitly name alternative tools or state prerequisites (e.g., needing an existing project), but the context for calling it is clear.

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

create_projectCreate a client projectAInspect

Creates a project for a client's product from its URL. Name, tagline and description are filled from the site in the background when left out. Costs nothing: a launch is spent only by launch_project.

NameRequiredDescriptionDefault
urlYesThe client product's public URL
nameNoProduct name; filled from the site when left out
tagsNoUp to 10. Replaces the whole list
taglineNoOne-line pitch
audienceNoWhich audience-restricted directories fit the product
categoryNo
logo_urlNoPublic image URL for the logo (PNG, JPEG, GIF or WebP, 5 MB at most)
metadataNoUp to 20 string pairs for the agency. Replaces all of it; {} clears it
maker_nameNoFounder or maker name
promo_codeNoDiscount code some directories ask for
competitorsNoUp to 20, some directories need them. Replaces the whole list: send the current one plus changes
external_idNoThe agency's own id for this client
launch_dateNoYYYY-MM-DD
twitter_urlNohttps://x.com/... profile
price_periodNo
contact_emailNoEmail the directories write to; required before launch
pricing_modelNo
screenshot_urlsNo1 to 5 public image URLs
long_descriptionNoLong description
promo_descriptionNoWhat the promo code gives
short_descriptionNoShort description
price_amount_centsNoPrice in cents
excluded_directoriesNoDirectories never to use for this project. Replaces the whole list (read get_project first); [] clears it

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true), the description adds two non-obvious behaviors: name, tagline and description are asynchronously backfilled from the site when omitted, and the call consumes no credits. It does not cover idempotency/duplicate handling or what state the new project starts in (draft vs. live), which matters given idempotentHint=false.

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

Conciseness5/5

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

Two short sentences, both front-loaded with the highest-value facts (what it creates, what it costs). No repetition of schema or annotation content.

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

Completeness4/5

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

For a 23-parameter creation tool with no output schema, the description gives a solid mental model: minimal input is a URL, everything else backfills or is optional, and no credits are spent. It omits what the call returns (e.g. the new project id needed for a subsequent launch_project), which is the one real gap.

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

Parameters4/5

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

Schema coverage is 87%, so the schema already carries most parameter meaning and the baseline would be 3. The description adds value by generalizing the auto-fill behavior beyond the schema's note on 'name' to also cover tagline and description, which the schema does not state for those fields.

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

Purpose5/5

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

States a specific verb and resource ('Creates a project') and scopes it to a client's product via its URL, so the sole required parameter is visible in the first clause. It also explicitly names the boundary against the sibling launch_project, letting an agent separate creation from launching without opening either schema.

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

Usage Guidelines4/5

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

The closing sentence gives a clear conditional rule — creating is free, credits are only consumed by launch_project — which effectively tells the agent when to pick this tool over that alternative. It stops short of naming other siblings (update_project, preview_launch) or stating preconditions/preferred ordering explicitly.

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

create_reportBuild a client reportAInspect

Builds a PDF or XLSX report of a project, branded for the agency. Building takes a moment: then call get_report.

NameRequiredDescriptionDefault
formatYes
project_idYesProject id (prj_...)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-idempotent, non-destructive, closed-world, so the mutation profile is known. The description adds genuinely new behavioral context: the build is asynchronous ('takes a moment') and results must be fetched via get_report. It does not say what create_report itself returns (job handle?) or what happens if a report already exists, which is why it is not a 5.

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

Conciseness5/5

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

Two short sentences with zero waste; the core action and formats are front-loaded, and the sequencing constraint follows immediately. Every clause carries information.

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

Completeness4/5

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

No output schema exists, and the description implies the result is retrieved later via get_report rather than returned inline, which is the key thing an agent needs. The one remaining ambiguity is what create_report itself returns (a job/status object?), but the essential calling pattern is complete for a 2-parameter tool.

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

Parameters3/5

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

Schema coverage is 50%: project_id is documented in the schema, and the format enum has no schema description. The description compensates partially by spelling out 'PDF or XLSX', mapping directly to the enum values, but adds nothing about project_id or format defaults. Baseline 3 fits given the partial gap.

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

Purpose5/5

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

States a specific verb (builds) and resource (PDF/XLSX report of a project) with the branding qualifier, and names the follow-up sibling get_report, so the agent can distinguish it from retrieval tools without opening any schema.

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

Usage Guidelines4/5

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

Explicitly prescribes the workflow: build first, then call get_report, which tells the agent this is not a synchronous 'get the report' call. It stops short of naming when to prefer create_report over alternatives like preview_launch or save_report_file, so no exclusions are given.

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

delete_draftDelete a draft projectA
DestructiveIdempotent
Inspect

Deletes a project that was never launched. A launched project cannot be deleted.

NameRequiredDescriptionDefault
project_idYesProject id (prj_...)

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already declare destructiveHint=true and idempotentHint=true, so the description is not the sole source of safety information. The description adds valuable context by defining exactly which projects are eligible for deletion and ruling out launched projects, though it does not explicitly say whether deletion is irreversible or what happens to associated resources.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and then the critical restriction. There is no redundant or filler text.

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

Completeness4/5

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

For a simple one-parameter delete operation with rich annotations, the description covers the essential precondition and exclusion. It could optionally mention irreversibility or post-deletion effects, but the annotations already signal destructiveness.

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

Parameters3/5

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

Schema description coverage is 100%, and the single project_id parameter is documented with its required pattern in the schema. The description does not add any parameter-level details beyond what is already structured, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description gives a specific verb and resource ("Deletes a project") and immediately narrows the scope to drafts that were never launched. This distinguishes it from the launch-related siblings and makes the tool's purpose unambiguous.

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

Usage Guidelines4/5

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

It explicitly states the key eligibility condition: the project must never have been launched, and a launched project cannot be deleted. It does not name an alternative action for launched projects, but the exclusion criterion is clear enough for an agent to choose correctly.

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

find_directoriesSearch the directory catalogA
Read-only
Inspect

Searches the directories Submitator submits to, highest Domain Rating first, or reads one by id. Before the agency first buys launches, only the top 20 are shown.

NameRequiredDescriptionDefault
qNoPart of the name
kindNoarticle = article platforms, open only through include
limitNoRows to return, 25 by default, 50 at most
topicNo
cursorNonext_cursor from the previous page
min_drNoLowest Domain Rating
audienceNo
requiresNoWhat the directory asks for
directory_idNoRead this one directory; other filters are ignored

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already mark it read-only and closed-world; the description adds useful behavior: results are ordered by Domain Rating and the catalog is capped at 20 before first launch purchases. It does not cover auth or rate limits, but with annotations carrying the safety profile this is solid added context.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose and mode, then the visibility caveat. No wasted wording.

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

Completeness4/5

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

For a 9-parameter search tool with rich schema docs and read-only annotations, the description covers purpose, ordering, id read, and the top-20 business rule. It remains thin on pagination and return shape, but cursor and limit are in the schema and no output schema is present.

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

Parameters3/5

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

Schema coverage is 78%, so the schema documents most filters and modes, including directory_id and min_dr. The description reinforces ordering and id lookup but does not add syntax or meaning for q, kind, limit, topic, cursor, audience, or requires.

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

Purpose4/5

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

The description names a specific verb and resource ('Searches the directories') and adds ordering plus an id-read mode, making the catalog scope clear. It does not explicitly contrast with sibling directory tools such as project_directories or add_directories, so it stops short of full sibling differentiation.

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

Usage Guidelines3/5

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

It implies two modes (query search or directory_id read) and notes the pre-purchase top-20 limit, but gives no explicit when-to-use guidance or alternatives. An agent must infer that this is for catalog discovery rather than project directory management.

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

get_badgeGet the badge install kitA
Read-only
Inspect

The agency-branded badge some directories require on the client's site: its status, a message to forward to the client, and install code for one platform. Call without platform to see the platforms.

NameRequiredDescriptionDefault
platformNoPlatform name from the list, for its install code
project_idYesProject id (prj_...)

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already establish readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds that one of the outputs is a message intended for forwarding to the client, which is useful framing, but says nothing about failure modes, whether a badge is guaranteed, or response shape beyond the field list.

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

Conciseness5/5

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

A single dense sentence with the resource identified first, outputs second, and the platform behavior last. No redundant restatement of the title or filler.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and does so by naming the three payload pieces. Slightly incomplete in that it does not say what 'status' values look like or what happens when no badge exists yet.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented, including the platform field's meaning. The description reinforces the optionality of platform and its narrowing effect on the result, but adds no format or valid-value detail beyond what the schema states.

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

Purpose4/5

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

Names the concrete resource (the agency-branded badge some directories require) and enumerates what comes back: status, a client-facing message, and install code. An agent can tell it apart from verify_badge or find_directories without opening a schema, though neither sibling is named.

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

Usage Guidelines4/5

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

"Call without platform to see the platforms" is a genuine operational instruction that tells the agent how to discover valid values before a targeted call. No explicit exclusions versus verify_badge or project_directories, so it stops short of a 5.

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

get_projectRead a projectB
Read-only
Inspect

One project in full: status, what it waits for, progress counts, allowance, readiness, texts, images and the image candidates found on its site.

NameRequiredDescriptionDefault
project_idYesProject id (prj_...)

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds value by enumerating the returned content (status, wait state, progress counts, allowance, readiness, texts, images, site image candidates), but gives no caveats about permissions, missing projects, or data shape.

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

Conciseness4/5

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

The single sentence is front-loaded with the core scope ('One project in full') and then lists returned fields. It is dense but efficient with no filler.

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

Completeness3/5

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

Given no output schema, the field enumeration is useful, but the list is somewhat vague ('what it waits for', 'texts', 'images') and omits behavior for unknown ids. It is minimally adequate for a simple get-by-id tool but leaves gaps.

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

Parameters3/5

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

Schema description coverage is 100%, with project_id fully documented including its pattern, so the schema carries the parameter burden. The description adds no parameter-level detail, which is acceptable at this coverage level.

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

Purpose4/5

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

The description makes clear this returns a single project 'in full', which distinguishes it from list_projects without naming it explicitly. The verb 'get' is implicit ('One project in full'), but the resource and detail-retrieval scope are unambiguous.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this versus list_projects or update_project, and no prerequisites or error conditions are mentioned. The only hint is 'One project in full', leaving usage to inference.

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

get_reportRead a reportC
Read-only
Inspect

Whether a report is ready, and how to get the file.

NameRequiredDescriptionDefault
report_idYesReport id (rep_...)

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds nothing about what is actually returned (a status flag? a download URL? an expiry?), whether the file is streamed inline, or whether readiness is polled repeatedly, leaving the most operationally important behavior undisclosed.

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

Conciseness2/5

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

It is short with no filler, but it is an unanchored fragment with no subject or verb and no front-loaded statement of what the tool does. Conciseness here comes at the cost of clarity rather than from efficiency.

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

Completeness2/5

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

There is no output schema, so the description carries the burden of explaining return values, yet it only gestures at them ('whether a report is ready, and how to get the file'). For a polling-or-fetch tool whose entire utility is the shape of its response, this is materially incomplete.

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

Parameters3/5

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

With a single parameter and 100% schema description coverage, the schema fully documents report_id including its pattern, so baseline 3 applies. The description contributes no additional meaning about the identifier or its format.

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

Purpose3/5

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

The description identifies the resource (a report) and two concerns: whether it is ready and how to obtain the file, which adds meaning beyond the bare name. However, it is a noun-phrase fragment with no verb, so it never states an action an agent can map to a call, and it does not distinguish itself from siblings like save_report_file or create_report.

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

Usage Guidelines2/5

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

There is no guidance on when to call this versus create_report, save_report_file, or get_share_link, all of which touch adjacent report/file concerns. The phrase 'how to get the file' hints at a post-readiness step but never states the condition or the alternative.

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

launch_projectLaunch a projectA
DestructiveIdempotent
Inspect

Starts submissions and spends one launch of the agency (a test launch with a sbm_test_ key). Call preview_launch with the same arguments first and get the user to agree; confirm_selected is the count they agreed to. With a live key, clients that can ask their user get a confirmation question too.

NameRequiredDescriptionDefault
project_idYesProject id (prj_...)
directoriesNo"auto" (best matches, highest DR first), {include: [ids]} exactly these, or {exclude: [ids]} auto without these
auto_replaceNotrue: within a day the free allowance fills up to 100 with fitting directories, replacing declined ones too. include turns it off unless you send true
confirm_selectedYesThe directory count from preview_launch that the user agreed to
excluded_directoriesNoReplaces the project's whole exclusion list for this request; [] clears it. To leave some out once, use directories: {exclude}

TDQS

A4/5.0
Behavior4/5

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

Annotations already flag destructiveHint/readOnly=false/openWorld, but the description adds genuinely new behavior: it consumes a launch credit, sbm_test_ keys produce a test launch, and live keys trigger a confirmation question to the client's own user. That last point is non-obvious third-party side-effect disclosure. It still doesn't say whether a launch is reversible or what a failed launch does to the credit.

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

Conciseness4/5

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

Three sentences, front-loaded with what the tool does, followed by the precondition and the live-key caveat. Dense but every clause carries information. The opening clause 'spends one launch of the agency' is slightly convoluted but still earns its place by conveying quota consumption.

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

Completeness5/5

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

For a destructive mutation with rich annotations, full schema coverage and no output schema, the description covers the essential unknowns: quota spend, test vs live key behavior, and the mandatory preview/confirm loop. Nothing an agent needs in order to invoke it safely is missing.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter including confirm_selected, directories, auto_replace and excluded_directories is already documented in the schema. The description's 'confirm_selected is the count they agreed to' essentially restates the schema's own wording. Baseline 3 for a fully documented schema with no material added semantics.

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

Purpose4/5

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

States a specific action (start submissions / spend one launch credit on a project) and ties it to the concrete resource. The 'agency' and 'one launch' phrasing is domain jargon, but the pairing with preview_launch and sbm_test_ keys makes the intent recoverable. It clearly is not a read tool like get_project or preview_launch.

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

Usage Guidelines4/5

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

Gives an explicit prerequisite workflow: call preview_launch with the same arguments, get user agreement, then pass that agreed count as confirm_selected. That routes the agent away from blind launching. It does not state explicit when-not-to-use conditions (e.g. insufficient credits, draft state), so it stops short of 5.

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

list_eventsWhat changedA
Read-only
Inspect

Changes to projects and listings. The feed keeps 90 days and reads oldest first, so one call scans up to 1,000 events from the cursor (or from the start) and returns the newest ones since since (7 days ago by default). Keep next_cursor and pass it next time to read only what came after. For the current state of a project, get_project and list_listings are cheaper.

NameRequiredDescriptionDefault
typeNoA type such as listing.live, or a group: listing.*, project.*, report.*
limitNoRows to return, 25 by default, 100 at most
sinceNoISO time; 7 days ago by default, none when a cursor is given
cursorNonext_cursor from an earlier call: continues from there
project_idNoOnly this project

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the tool read-only and closed-world, and the description adds substantial behavior beyond that: 90-day retention, oldest-first scanning, up to 1,000 events per call, default since window, and cursor continuation semantics. These details materially affect how an agent interprets and calls the tool.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then adds only operationally necessary details about retention, pagination, and alternatives. There is no filler, and each sentence contributes to correct invocation.

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

Completeness5/5

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

Given the absence of an output schema, the description supplies enough return-shape and pagination context: event scanning limits, ordering, cursor reuse, and default time window. It is complete for selecting and correctly invoking this tool.

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

Parameters3/5

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

Schema coverage is 100%, so all five parameters are already documented structurally. The description adds some useful context around cursor continuation and the default since window, but it does not explain the type filters, limit behavior, or project_id scoping beyond what the schema already provides.

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

Purpose5/5

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

The description clearly defines the tool as a change feed over projects and listings and explicitly says it returns events. It also distinguishes this from the current-state siblings get_project and list_listings, so an agent can tell when this tool applies.

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

Usage Guidelines5/5

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

It gives explicit usage guidance: use the feed for changes, and use get_project or list_listings instead for current state because they are cheaper. It also explains the cursor workflow for incremental reads, which directly affects how the tool should be called.

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

list_listingsList a project's listingsA
Read-only
Inspect

A project's listings, one per directory, highest DR first, with status and the live link once published. Or one listing in full by its id.

NameRequiredDescriptionDefault
limitNoRows to return, 25 by default, 50 at most
cursorNonext_cursor from the previous page
statusNo
directoryNoOnly the listing on this directory
listing_idNoRead this one listing instead
project_idNoProject id (prj_...)

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real value beyond that: ordering by highest DR first, one row per directory, and the presence of status plus the live link once published, which tells the agent what state each listing carries.

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

Conciseness5/5

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

Two short sentences with zero filler, and the primary list behavior is front-loaded before the single-item alternative.

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

Completeness4/5

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

With no output schema, the description does carry return-shape burden and partially meets it by stating fields (status, live link), ordering (highest DR first), and granularity (one per directory). It omits pagination/cursor semantics and the effect of the status filter, which the schema covers but the prose does not.

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

Parameters3/5

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

Schema description coverage is 83%, so the schema already documents limit, cursor, directory, listing_id, and project_id. The description only echoes listing_id ("by its id"), directory granularity, and status implicitly; it adds no new syntactic or behavioral detail on pagination or filtering. Baseline 3 applies.

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

Purpose4/5

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

The description names the resource (a project's listings) and its granularity (one per directory), plus the sort order and included fields, and notes a second mode (one listing in full by id). It's specific rather than tautological, but it's a noun phrase without a verb and doesn't explicitly distinguish itself from nearby siblings like project_directories or find_directories.

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

Usage Guidelines3/5

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

"Or one listing in full by its id" implies a second usage mode, and the parameters imply filtering by status/directory, but nothing states when to pick this tool over project_directories or find_directories, nor when to use the single-listing mode versus the list mode. Usage is inferable rather than stated.

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

list_projectsList client projectsA
Read-only
Inspect

Lists the agency projects, newest first. Find one by name or URL with q, or by your own external_id.

NameRequiredDescriptionDefault
qNoPart of the name or URL
limitNoRows to return, 20 by default, 50 at most
cursorNonext_cursor from the previous page
statusNo
external_idNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds the useful behavioral fact that results come newest first, but says nothing about paging behavior despite a cursor parameter, nor about what happens when no filters match.

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

Conciseness5/5

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

Two short sentences, the ordering trait front-loaded and the filtering guidance second. No filler.

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

Completeness4/5

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

For a read-only list tool with no output schema, the definition covers scope, ordering, and the two lookup paths. The only gap is the status enum and cursor paging, though the schema's own descriptions for limit and cursor partially carry that load.

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

Parameters4/5

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

Schema coverage is only 60% (status and external_id have no schema descriptions), so the description must compensate. It does clarify external_id as 'your own external_id' — a caller-owned identifier rather than an agency-assigned ID — and maps q to name-or-URL matching. It leaves status unexplained, but adds real meaning over the schema for two of five parameters.

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

Purpose4/5

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

States a specific verb and resource ('Lists the agency projects') plus the sort order ('newest first'), which is immediately distinguishable from get_project. It stops short of naming how it differs from sibling listing tools like list_events or list_listings, but the resource is unambiguous.

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

Usage Guidelines3/5

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

It tells the agent how to find a specific project ('by name or URL with q, or by your own external_id'), which implies the lookup use case, but gives no explicit when-to-use-this-vs-get_project guidance and no exclusions or prerequisites.

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

preview_launchPreview a launchA
Read-only
Inspect

Free dry run of launch_project (or of add_directories on a launched project) with the same arguments: how many directories it would submit to, top and median DR, what is missing, what would unlock more, and what it costs. Show the numbers to the user before launching.

NameRequiredDescriptionDefault
project_idYesProject id (prj_...)
directoriesNo"auto" (best matches, highest DR first), {include: [ids]} exactly these, or {exclude: [ids]} auto without these
auto_replaceNotrue: within a day the free allowance fills up to 100 with fitting directories, replacing declined ones too. include turns it off unless you send true
excluded_directoriesNoReplaces the project's whole exclusion list for this request; [] clears it. To leave some out once, use directories: {exclude}

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description is consistent with that by calling it a 'free dry run'. It goes beyond the annotations by disclosing that it is cost-free and by listing the full set of computed outputs an agent will get back.

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

Conciseness5/5

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

A single dense sentence describing the tool plus one short directive sentence, front-loaded with the dry-run nature and cost. No filler; every clause carries information.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating the return contents (counts, DR stats, missing items, unlock info, cost). Combined with the fully documented params and read-only annotations, an agent has everything needed to call and interpret it.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters (including the auto/include/exclude union and auto_replace) are already fully documented in the schema. The description only says it takes 'the same arguments' as the launch tools, adding little beyond the structured data. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('free dry run of launch_project / add_directories') with the same arguments, and enumerates exactly what it reports (submission count, top/median DR, gaps, unlock potential, cost). This clearly distinguishes it from the real launch_project and add_directories siblings.

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

Usage Guidelines4/5

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

Explicitly routes usage: names the two alternatives it mirrors and instructs 'Show the numbers to the user before launching', giving a clear sequencing context. It does not state any when-not-to-use condition, but the recommended flow is unambiguous.

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

project_directoriesA project's directory choicesA
Read-only
Inspect

Every catalog directory as seen by one project: suggested (the auto pick), open, locked (with what unlocks it), excluded or listed. Shows suggested, open and locked by default; the counts cover all.

NameRequiredDescriptionDefault
limitNoRows to return, 50 by default, 100 at most
offsetNoRows to skip, for the next page
statesNoWhich states to list; suggested, open and locked by default
project_idYesProject id (prj_...)

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish this as a read-only, closed-world operation, so the bar is lower. The description adds useful behavior: it lists the possible states, explains that suggested/open/locked are shown by default, and clarifies that counts cover all states.

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

Conciseness5/5

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

The description is two tightly written sentences with no waste. The core scope is front-loaded, and the second sentence clarifies default behavior and counts.

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

Completeness4/5

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

For a read-only list tool with no output schema, the description adequately explains what is returned: catalog directories grouped by state, with default filtering and count coverage. Pagination is left to the schema, which is acceptable given its 100% coverage, but the description could have mentioned it briefly.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents parameters, but the description adds meaning beyond the enum values by explaining that 'suggested' is the auto pick and 'locked' includes what unlocks it. It also restates the default state selection, which helps interpret the 'states' parameter.

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

Purpose4/5

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

The description clearly states the resource: every catalog directory as seen by one project, with the possible states enumerated. It is specific enough for an agent to understand the tool, but it does not explicitly distinguish itself from sibling tools like find_directories or add_directories.

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

Usage Guidelines3/5

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

Usage is implied by 'as seen by one project' and the default state filtering, but the description gives no explicit guidance on when to use this tool versus alternatives such as find_directories. An agent can infer the context but is not routed away from sibling tools.

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

remove_imageRemove the logo or a screenshotA
DestructiveIdempotent
Inspect

Removes the logo ("logo") or one screenshot (its img_ id). A launched project keeps at least its logo and one screenshot.

NameRequiredDescriptionDefault
imageYes"logo", or the img_ id of a screenshot
project_idYesProject id (prj_...)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the description doesn't need to re-establish the safety profile. It adds genuine context beyond them by disclosing the invariant that keeps a launched project from losing its last logo/screenshot. It stops short of saying what the response or error looks like when that invariant blocks the call.

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

Conciseness5/5

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

Two short sentences: the action and its accepted values come first, then the constraint. No filler, no repetition of annotation data.

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

Completeness4/5

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

For a 2-parameter, non-read-only tool with no output schema and fully documented parameters, the description covers purpose, accepted inputs, and the key invariant. The only real omission is failure behavior (error vs silent no-op) when the last-logo/screenshot rule is hit.

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

Parameters3/5

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

Schema description coverage is 100%, and the description's parameter content ("logo" or an img_ id) merely restates what the anyOf const and pattern already encode. Baseline 3 applies since the schema carries the parameter semantics.

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

Purpose4/5

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

States a specific verb (removes) and the exact resource set: the logo literal "logo" or one screenshot by img_ id. This clearly distinguishes it from the opposite-direction siblings set_logo and add_screenshot, though it never names those siblings explicitly.

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

Usage Guidelines4/5

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

The second sentence supplies the operative precondition: a launched project retains at least its logo and one screenshot, which tells the agent when this call will be refused. It gives no explicit alternative-routing guidance (e.g., use set_logo to replace rather than remove), keeping it below a 5.

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

save_report_fileSave a report fileAInspect

Downloads a ready report and saves it to a local folder (Downloads by default). Never overwrites a file. Returns the path.

NameRequiredDescriptionDefault
directoryNoFolder to save into; Downloads by default
report_idYesReport id (rep_...)

TDQS

A3.8/5.0
Behavior4/5

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

Adds real behavior beyond annotations: it never overwrites existing files, the default destination is the Downloads folder, and it returns the path. This meaningfully softens the non-idempotentHint by telling the agent repeated calls will produce new files rather than clobber data.

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

Conciseness5/5

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

Three short sentences with zero waste; the core action, the safety guarantee, and the return value are ordered front to back.

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

Completeness4/5

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

For a simple two-parameter tool with no output schema, the description covers action, destination, overwrite policy, and return value. It could note what happens if the report isn't ready or the directory is invalid, but nothing essential is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented, including the Downloads default. The description only restates the directory default and adds no new meaning about the report_id format or path constraints.

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

Purpose4/5

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

Uses a specific verb+resource pair ('Downloads a ready report and saves it to a local folder'), which clearly separates it from read-only siblings like get_report. It does not explicitly name the sibling it replaces, but the file-persistence framing makes the distinction inferable.

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

Usage Guidelines3/5

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

The description implies usage (you want the report as a local file rather than data returned inline), but never states when to choose this over get_report or get_share_link. No preconditions or exclusions are given.

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

update_projectUpdate a projectA
Idempotent
Inspect

Changes project fields. Send only what changes; null clears a field, and a list replaces the whole list. contact_email cannot change after launch, and after launch an edit reaches only the listings not yet sent to their directory.

NameRequiredDescriptionDefault
urlNo
nameNoProduct name; filled from the site when left out
tagsNoUp to 10. Replaces the whole list
taglineNoOne-line pitch
audienceNoWhich audience-restricted directories fit the product
categoryNo
metadataNoUp to 20 string pairs for the agency. Replaces all of it; {} clears it
maker_nameNoFounder or maker name
project_idYesProject id (prj_...)
promo_codeNoDiscount code some directories ask for
competitorsNoUp to 20, some directories need them. Replaces the whole list: send the current one plus changes
external_idNoThe agency's own id for this client
launch_dateNoYYYY-MM-DD
twitter_urlNohttps://x.com/... profile
price_periodNo
contact_emailNoEmail the directories write to; required before launch
pricing_modelNo
long_descriptionNoLong description
promo_descriptionNoWhat the promo code gives
short_descriptionNoShort description
price_amount_centsNoPrice in cents
excluded_directoriesNoDirectories never to use for this project. Replaces the whole list (read get_project first); [] clears it

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only declare readOnly=false, idempotent=true, destructive=false. The description adds behavior the agent could not otherwise know: null clears a field, a list replaces the entire list, contact_email is immutable post-launch, and after launch an edit only propagates to listings not yet sent to a directory. That last point is a genuinely non-obvious partial-propagation effect that directly affects how a caller reasons about the result.

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

Conciseness5/5

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

Two compact sentences, front-loaded with the update semantics and then the launch-state constraints. Every clause carries distinct information: partial send, null-clears, list-replaces, immutable field, and post-launch propagation scope.

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

Completeness4/5

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

For a 22-parameter mutation tool with an open-world annotation and no output schema, the description covers the semantics that matter most: how to send fields, what clears data, and what is forbidden after launch. It does not say what the response contains or how errors are surfaced, which leaves a small gap for a mutation with this many fields.

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

Parameters4/5

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

Schema coverage is already 82%, so most parameters are self-documenting. The description still adds cross-field semantics the schema only states piecemeal (replacement for tags, competitors, metadata, excluded_directories): a uniform rule that null clears and lists replace wholesale, plus the immutability of contact_email. Enum values for category, pricing_model, and price_period remain only in the schema.

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

Purpose4/5

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

States a specific verb and resource: 'Changes project fields.' Combined with the name update_project, an agent immediately understands this is a partial-update operation on a single project. It does not explicitly contrast with siblings like create_project or get_project, but the mutation/read distinction is unambiguous from the verb.

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

Usage Guidelines4/5

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

"Send only what changes" tells the agent to use this as a PATCH-style call rather than a full replacement, and the launch-state caveats ("contact_email cannot change after launch") tell it when an edit will fail. There is no explicit pointer to an alternative tool when the edit is rejected, but the preconditions are clear.

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

verify_badgeCheck the badge on the siteAInspect

Checks the client's site for the badge now. Up to 10 checks an hour per project, so check once after the client says it is installed.

NameRequiredDescriptionDefault
project_idYesProject id (prj_...)

TDQS

A4/5.0
Behavior4/5

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

The rate limit of 10 checks an hour per project is disclosed in the description and is not available from the annotations, which is exactly the kind of side-effect context that matters. This also implicitly explains why readOnlyHint=false and idempotentHint=false despite the read-like verb. It does not say what a check consumes or what happens when the quota is exhausted.

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

Conciseness5/5

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

Two short sentences, no filler, with the core action first and the operational constraint second. Every clause carries information the agent needs to call it correctly.

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

Completeness4/5

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

For a single-parameter, low-complexity verification tool the description covers when to call, how often, and the quota. The one gap is outcome semantics: there is no output schema and the description does not say whether a missing badge produces an error, a status field, or a failed result. That is a modest but real omission for a network-side check.

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

Parameters3/5

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

Schema description coverage is 100% and the single project_id includes a regex pattern, so the schema carries the parameter burden. The description only alludes to "per project", adding no format or scoping detail beyond what the schema already states. Baseline 3 applies.

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

Purpose4/5

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

The description uses a concrete verb and resource ("checks the client's site for the badge") and adds temporal scope ("now", i.e. a live check) that separates it conceptually from get_badge. It never names get_badge or any sibling explicitly, so an agent must still infer that this is the execution/verification counterpart to fetching badge markup.

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

Usage Guidelines4/5

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

Strong context: "check once after the client says it is installed" tells the agent the triggering condition and warns against repeated calls. The rate limit (10/hour per project) reinforces the when-to-use guidance. It stops short of naming alternatives or stating what to do when the check fails, so it is clear context rather than full routing guidance.

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

whoamiCheck the API keyA
Read-only
Inspect

Shows the agency and mode (live or test) behind the key, its permissions, launches left and the hourly request budget. Call it first.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description goes further by enumerating the returned facts, including quota state ('launches left and the hourly request budget'), which is exactly the rate-limit context the rubric rewards. With no output schema, this enumeration is the only source of return-value information and it delivers it.

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

Conciseness5/5

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

Two short sentences with zero waste: the payload is front-loaded in a single enumerating clause, and the usage directive follows. Nothing restates the name or title verbatim.

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

Completeness5/5

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

For a zero-parameter read-only diagnostic with no output schema, the description supplies everything needed: the full list of returned fields and the instruction to invoke it first. No auth, side-effect or pagination concerns exist for this tool, so nothing material is missing.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate — the baseline for a no-param tool applies. The description correctly adds no parameter talk, keeping it clean, though it also adds nothing beyond baseline.

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

Purpose5/5

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

Uses a specific verb ('Shows') against a precisely enumerated resource: the agency, mode, permissions, launches remaining and hourly request budget behind the API key. An agent knows exactly what this tool returns and needs no sibling comparison, since no other tool in the list inspects key state.

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

Usage Guidelines4/5

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

The closing imperative 'Call it first' gives a clear timing/sequencing directive that an agent can act on. It stops short of stating when not to call it or what to do with the results, so it is clear context rather than a full when/when-not rule set.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 24 tool updatesv0.1.0
    • First observedadd_directories
    • First observedadd_screenshot
    • First observedcreate_project
    • First observedcreate_report
    • First observedcreate_share_link
    • First observeddelete_draft
    • First observeddelete_share_link
    • First observedfind_directories
    • First observedget_badge
    • First observedget_project
    • First observedget_report
    • First observedget_share_link
    • First observedlaunch_project
    • First observedlist_events
    • First observedlist_listings
    • First observedlist_projects
    • First observedpreview_launch
    • First observedproject_directories
    • First observedremove_image
    • First observedsave_report_file
    • First observedset_logo
    • First observedupdate_project
    • First observedverify_badge
    • First observedwhoami

TDQS

B3.4/5.0

Scored across 24 tools

Disambiguation4/5

Most tools target clearly distinct resources and actions across projects, directories, listings, reports, badges, images, share links, and events. A few boundaries are softer, especially get_share_link versus create_share_link and find_directories versus project_directories, but the descriptions generally make the intended use clear.

Naming Consistency4/5

The set mostly follows a predictable snake_case verb_noun convention such as create_project, get_report, delete_share_link, and list_listings. Minor deviations include whoami, the noun-only project_directories, and delete_draft naming a draft while acting on a project.

Tool Count3/5

With 24 tools, the surface is heavy even for a complex submission workflow. Most tools earn their place, but the lifecycle is split into many granular operations, putting it at the upper edge of reasonable scoping.

Completeness4/5

The tool set covers the core domain well: project creation and editing, launch preview and execution, directory discovery, listings, reports, share links, badges, images, and event tracking. Minor gaps exist around managing generated reports or listings after submission, but no major workflow dead end is apparent.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides AI agents with unified marketing toolkits for SEO, GEO, paid media, and analytics, enabling audits, analysis, and approved changes across GA4, Search Console, Google Ads, Meta, X, LinkedIn, Reddit, TikTok, WordPress, and GoHighLevel.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables MCP-compatible agents to build and operate complete AI front offices for local businesses—branded websites, booking, intake, CRM, and AI agents in one workspace.
    64
    AGPL 3.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI coding agents to create client-editable photo and video galleries, upload and organize media in bulk, generate embed code for popular site builders, and manage client feedback — so non-technical clients can update their own content without a CMS.
    118 npm
    1
    MIT