Submitator MCP Server
OfficialSubmitator MCP server lets agencies manage client directory-submission projects, launches, listings, badges, reports and share links through an assistant.
Check the API key’s agency, live/test mode, permissions, launches left and request budget.
Create, read, update and delete draft client projects, including copy, audience, pricing, competitors, metadata and exclusions.
Set/replace logos, add screenshots, and remove images.
Search the directory catalog and inspect a project’s suggested, open, locked, excluded or listed directories.
Preview launches, then launch projects or add directories with a user-agreed directory-count confirmation.
Track listings and changes/events, including live links and statuses.
Get badge install code and verify the badge on the client’s site.
Build/read/save branded PDF or XLSX reports, with local saving only through the npx package.
Get, create, replace or delete client progress share links.
Click on "Deploy 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., "@Submitator MCP ServerCreate a client project from acme.com and preview its launch"
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.
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. Eachlaunch_projectspends 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-mcpCursor (~/.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
In claude.ai, open Customize > Connectors, press + Add, then Add custom connector.
Enter the name
Submitatorand the URLhttps://mcp.submitator.com/mcp, then press Continue. Check the settings it found and press Continue again.Under Authentication pick Sign in now, keep Use Claude's published identity (Recommended) as the OAuth client, leave Request headers empty and press Add.
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.
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
In ChatGPT on the web, open Plugins (chatgpt.com/plugins), press the plus button, then Add custom MCP server.
Enter the name
Submitatorand, under Connection, the Server URLhttps://mcp.submitator.com/mcp.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.
Review the risk warning, select I understand and want to continue, then Create as a plugin.
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 |
| The agency and mode behind the key, its permissions, launches left and the hourly budget |
| Find client projects; read one in full |
| Create a project from a URL, change its fields, delete a draft |
| Images from a public URL, or a local file with the |
| 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 |
| Search the catalog; see one project's directory choices |
| Start submissions. Spends one launch; refuses unless |
| Reach more directories from a launched project's free allowance, with the same check |
| Follow listings and what changed since a given time |
| The badge install code for the client's site, and a check that it is there |
| Build a PDF or XLSX report; save it to disk with the |
| The client's progress page (live keys) |
| 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_directoriesandupdate_projectinstead of allowing them always: a launch spends money. These three, like every tool that overwrites or deletes data or submits to directories, carrydestructiveHint: true, so clients that read the hint ask before each call. Tools that only add or check, such ascreate_project,add_screenshotandverify_badge, carryfalse. 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
npxpackage reads the key from its environment and sends it only tohttps://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 handshakeWhen 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 toolsadd_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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project id (prj_...) | |
| directories | Yes | "auto" (best matches, highest DR first), {include: [ids]} exactly these, or {exclude: [ids]} auto without these | |
| confirm_selected | Yes | The directory count from preview_launch that the user agreed to | |
| excluded_directories | No | Replaces the project's whole exclusion list for this request; [] clears it. To leave some out once, use directories: {exclude} |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public image URL: PNG, JPEG, GIF or WebP, 5 MB at most | |
| file_path | No | A local image inside SUBMITATOR_FILES_DIR (or the starting folder), instead of url | |
| project_id | Yes | Project id (prj_...) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The client product's public URL | |
| name | No | Product name; filled from the site when left out | |
| tags | No | Up to 10. Replaces the whole list | |
| tagline | No | One-line pitch | |
| audience | No | Which audience-restricted directories fit the product | |
| category | No | ||
| logo_url | No | Public image URL for the logo (PNG, JPEG, GIF or WebP, 5 MB at most) | |
| metadata | No | Up to 20 string pairs for the agency. Replaces all of it; {} clears it | |
| maker_name | No | Founder or maker name | |
| promo_code | No | Discount code some directories ask for | |
| competitors | No | Up to 20, some directories need them. Replaces the whole list: send the current one plus changes | |
| external_id | No | The agency's own id for this client | |
| launch_date | No | YYYY-MM-DD | |
| twitter_url | No | https://x.com/... profile | |
| price_period | No | ||
| contact_email | No | Email the directories write to; required before launch | |
| pricing_model | No | ||
| screenshot_urls | No | 1 to 5 public image URLs | |
| long_description | No | Long description | |
| promo_description | No | What the promo code gives | |
| short_description | No | Short description | |
| price_amount_cents | No | Price in cents | |
| excluded_directories | No | Directories never to use for this project. Replaces the whole list (read get_project first); [] clears it |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | ||
| project_id | Yes | Project id (prj_...) |
TDQS
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.
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.
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.
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.
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.
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 projectADestructiveIdempotentInspect
Deletes a project that was never launched. A launched project cannot be deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project id (prj_...) |
TDQS
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.
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.
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.
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.
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.
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 catalogARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Part of the name | |
| kind | No | article = article platforms, open only through include | |
| limit | No | Rows to return, 25 by default, 50 at most | |
| topic | No | ||
| cursor | No | next_cursor from the previous page | |
| min_dr | No | Lowest Domain Rating | |
| audience | No | ||
| requires | No | What the directory asks for | |
| directory_id | No | Read this one directory; other filters are ignored |
TDQS
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.
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.
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.
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.
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.
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 kitARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Platform name from the list, for its install code | |
| project_id | Yes | Project id (prj_...) |
TDQS
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.
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.
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.
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.
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.
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 projectBRead-onlyInspect
One project in full: status, what it waits for, progress counts, allowance, readiness, texts, images and the image candidates found on its site.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project id (prj_...) |
TDQS
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.
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.
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.
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.
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.
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 reportCRead-onlyInspect
Whether a report is ready, and how to get the file.
| Name | Required | Description | Default |
|---|---|---|---|
| report_id | Yes | Report id (rep_...) |
TDQS
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.
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.
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.
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.
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.
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 projectADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project id (prj_...) | |
| directories | No | "auto" (best matches, highest DR first), {include: [ids]} exactly these, or {exclude: [ids]} auto without these | |
| auto_replace | No | true: 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_selected | Yes | The directory count from preview_launch that the user agreed to | |
| excluded_directories | No | Replaces the project's whole exclusion list for this request; [] clears it. To leave some out once, use directories: {exclude} |
TDQS
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.
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.
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.
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.
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.
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 changedARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | A type such as listing.live, or a group: listing.*, project.*, report.* | |
| limit | No | Rows to return, 25 by default, 100 at most | |
| since | No | ISO time; 7 days ago by default, none when a cursor is given | |
| cursor | No | next_cursor from an earlier call: continues from there | |
| project_id | No | Only this project |
TDQS
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.
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.
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.
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.
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.
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 listingsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows to return, 25 by default, 50 at most | |
| cursor | No | next_cursor from the previous page | |
| status | No | ||
| directory | No | Only the listing on this directory | |
| listing_id | No | Read this one listing instead | |
| project_id | No | Project id (prj_...) |
TDQS
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.
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.
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.
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.
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.
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 projectsARead-onlyInspect
Lists the agency projects, newest first. Find one by name or URL with q, or by your own external_id.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Part of the name or URL | |
| limit | No | Rows to return, 20 by default, 50 at most | |
| cursor | No | next_cursor from the previous page | |
| status | No | ||
| external_id | No |
TDQS
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.
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.
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.
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.
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.
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 launchARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project id (prj_...) | |
| directories | No | "auto" (best matches, highest DR first), {include: [ids]} exactly these, or {exclude: [ids]} auto without these | |
| auto_replace | No | true: 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_directories | No | Replaces the project's whole exclusion list for this request; [] clears it. To leave some out once, use directories: {exclude} |
TDQS
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.
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.
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.
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.
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.
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 choicesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows to return, 50 by default, 100 at most | |
| offset | No | Rows to skip, for the next page | |
| states | No | Which states to list; suggested, open and locked by default | |
| project_id | Yes | Project id (prj_...) |
TDQS
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.
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.
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.
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.
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.
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 screenshotADestructiveIdempotentInspect
Removes the logo ("logo") or one screenshot (its img_ id). A launched project keeps at least its logo and one screenshot.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | "logo", or the img_ id of a screenshot | |
| project_id | Yes | Project id (prj_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Folder to save into; Downloads by default | |
| report_id | Yes | Report id (rep_...) |
TDQS
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.
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.
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.
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.
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.
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.
set_logoSet the logoADestructiveIdempotentInspect
Sets or replaces a project's logo. A URL is fetched right away (a failed fetch answers image_unreachable); with the npx package a local file inside SUBMITATOR_FILES_DIR (or the folder the server started in) works too.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public image URL: PNG, JPEG, GIF or WebP, 5 MB at most | |
| file_path | No | A local image inside SUBMITATOR_FILES_DIR (or the starting folder), instead of url | |
| project_id | Yes | Project id (prj_...) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, but the description adds real context: the URL is fetched immediately and a failed fetch surfaces as the image_unreachable error, plus the SUBMITATOR_FILES_DIR constraint on local paths. That timing and error behavior is not derivable from annotations or 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?
Two tight sentences, front-loaded with the action, then the failure mode, then the alternative input path. No filler and nothing repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers the meaningful failure signal and both input routes. It omits what happens to an existing logo beyond 'replaces' and any project-state prerequisite, but for a 3-param tool with full schema coverage and annotations this is close to 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%, so baseline is 3, but the description goes beyond it by tying url and file_path to an either/or choice and by explaining what 'the starting folder' means in the file_path definition. Format and size limits remain schema-only, which is fine.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Sets or replaces a project's logo') so the agent knows exactly what changes. It does not, however, distinguish itself from adjacent image tools like add_screenshot or remove_image, which a reader must infer.
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 clearly explains the two input modes — supply a URL, or with the npx package supply a local file — which is the main decision an agent faces here. It stops short of saying when to prefer this over add_screenshot or how it interacts with remove_image.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_projectUpdate a projectAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| name | No | Product name; filled from the site when left out | |
| tags | No | Up to 10. Replaces the whole list | |
| tagline | No | One-line pitch | |
| audience | No | Which audience-restricted directories fit the product | |
| category | No | ||
| metadata | No | Up to 20 string pairs for the agency. Replaces all of it; {} clears it | |
| maker_name | No | Founder or maker name | |
| project_id | Yes | Project id (prj_...) | |
| promo_code | No | Discount code some directories ask for | |
| competitors | No | Up to 20, some directories need them. Replaces the whole list: send the current one plus changes | |
| external_id | No | The agency's own id for this client | |
| launch_date | No | YYYY-MM-DD | |
| twitter_url | No | https://x.com/... profile | |
| price_period | No | ||
| contact_email | No | Email the directories write to; required before launch | |
| pricing_model | No | ||
| long_description | No | Long description | |
| promo_description | No | What the promo code gives | |
| short_description | No | Short description | |
| price_amount_cents | No | Price in cents | |
| excluded_directories | No | Directories never to use for this project. Replaces the whole list (read get_project first); [] clears it |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project id (prj_...) |
TDQS
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.
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.
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.
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.
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.
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 keyARead-onlyInspect
Shows the agency and mode (live or test) behind the key, its permissions, launches left and the hourly request budget. Call it first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
24 tool updates
v0.1.0- First observed
add_directories - First observed
add_screenshot - First observed
create_project - First observed
create_report - First observed
create_share_link - First observed
delete_draft - First observed
delete_share_link - First observed
find_directories - First observed
get_badge - First observed
get_project - First observed
get_report - First observed
get_share_link - First observed
launch_project - First observed
list_events - First observed
list_listings - First observed
list_projects - First observed
preview_launch - First observed
project_directories - First observed
remove_image - First observed
save_report_file - First observed
set_logo - First observed
update_project - First observed
verify_badge - First observed
whoami
TDQS
Scored across 24 tools
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.
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.
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.
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
Related MCP Connectors
Build and run directory websites from your own AI: listings, imports, claims, SEO and content.
Create, brand, publish and track client-ready pages from your AI tools.
Create, schedule, and publish social media posts from AI assistants. Built for agencies.
Submit your SaaS, AI tool, or dev project to 500+ high-authority directories, launch platforms, and AI registries. Plan startup directory submissions and verify the links went live, with your own AI agent.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to automate social media content generation, approval, and publishing, along with blog management, SEO/GEO audits, and ad operations through natural language.3AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceProvides 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

@seldonframe/mcpofficial
AlicenseNot gradedqualityAmaintenanceEnables 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.64AGPL 3.0- AlicenseNot gradedqualityBmaintenanceEnables 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 npm1MIT