Altimateguide Agent MCP Server
Use this MCP server to authenticate with Altimateguide and submit or manage directory listings for editorial review.
Log in via emailed one-time code and store an account API token; check token/account status.
List valid category slugs and check whether a name/URL is already listed or pending.
Submit a tool listing with optional description, categories, features, pros/cons, pricing, and proof details.
Poll a submission’s status (pending/approved/rejected), link tier, and paid checkout verification.
Upgrade an owned listing through sayabout, badge, or paid paths; paid returns a Dodo checkout URL verified server-side.
Access category/editorial-policy resources, a submit_listing prompt, and category-slug completions.
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., "@Altimateguide Agent MCP ServerSubmit my tool Acme Analytics to Altimateguide for review."
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.
Altimateguide Agent MCP Server
A small MCP server that lets an AI agent submit a tool to the Altimateguide directory for editorial review — and, optionally, earn it a dofollow link.
Scope: this server only talks to the public Altimateguide HTTP API. It holds no database credentials and grants no access beyond submitting/owning listings. Nothing is published without an editor reviewing it, and no submission can self-grant a dofollow link — a paid listing only becomes a dofollow candidate once its payment is verified server-side.
Tools
Tool | What it does |
| Email a one-time login code ( |
| Exchange the code for an account API token and store it ( |
| Report whether a token is configured locally. |
| The valid category slugs ( |
| Preflight a name/URL against published tools + the pending queue ( |
| Submit a listing for editorial review ( |
| Poll a submission's status ( |
| Choose sayabout / badge / paid for a listing you own ( |
It also exposes the category list and the editorial policy as resources, a
submit_listing prompt, and category-slug completions. Server
instructions summarise the workflow for the model.
submit_tool parameters
name(string, required) — tool nameurl(string, required) — canonical http(s) URLdescription(string, optional) — neutral copy, min 20 charscategories(array, optional) — slugs fromlist_categoriescategorySuggestions(array, optional) — free-text hints when none fit (recorded for the reviewer)features(array, optional) —{ label, description? }itemspros/cons(array, optional),pricing/freePlan/freeTrial(optional)proof(string, optional) —none(default) |sayabout|badgeverificationUrl(string) — required forsayabout/badgeexternalId(string, optional) — your id for idempotent replays (derived from the URL when omitted)source(string, optional) — origin id (defaultagent:mcp)resubmit(boolean, optional) — settrueto send a fresh copy after a previous submission for this URL was rejected (mints a new idempotency key instead of replaying the rejected row)
Categories are optional. An unknown or missing category never fails the
submission — it is recorded for the reviewer, exactly like the site's feed
pipeline. Paid (dofollow) listings are not submitted here; use
upgrade_listing with path: "paid", which returns a Dodo checkout URL whose
payment is verified server-side.
Full request/response contract: https://altimateguide.com/openapi.json.
Related MCP server: stendium-mcp
Configuration
ALTIMATEGUIDE_AGENT_TOKEN— optional. An account API token (create at https://altimateguide.com/account, or mint one with thecomplete_logintool). When set, it takes precedence over the stored token.ALTIMATEGUIDE_API_URL— optional; overrides the API base (defaulthttps://altimateguide.com).ALTIMATEGUIDE_CONFIG_DIR— optional; wherecomplete_loginstores the token (default~/.config/altimateguide).
Install & use
npx -y altimateguide-agent-mcp # run directly (stdio)Or from a local checkout:
npm install
npm run build # tsc -> dist/
npm run dev # stdio server via tsx (for local testing)Claude Desktop / other MCP clients
{
"mcpServers": {
"altimateguide": {
"command": "npx",
"args": ["-y", "altimateguide-agent-mcp"]
}
}
}The token can be supplied via env.ALTIMATEGUIDE_AGENT_TOKEN, or obtained at
runtime by calling start_login + complete_login (the agent needs access to
the mailbox it registers).
(From a local checkout, use "command": "node" and
"args": ["/absolute/path/to/dist/index.js"].)
Development
npm run check # tsc --noEmit
npm run lint # eslint
npm test # vitest
npm run build # tsc -> dist/
npm run bundle # build a .mcpb (Smithery / Claude Desktop)Registries
Listed via server.json (the MCP Registry manifest). It is a standard stdio
server, so it also works with the community directories (Glama, PulseMCP,
mcp.so, mcp.directory).
Project structure
.
├── src/
│ ├── index.ts # stdio server: tool registry + resources/prompts/completions
│ ├── api.ts # shared fetch client (timeout, retry, error mapping)
│ ├── auth.ts # start_login / complete_login / whoami
│ ├── categories.ts # list_categories + matching
│ ├── submit.ts # submit_tool
│ ├── listing.ts # check_duplicate / get_submission / upgrade_listing
│ ├── credentials.ts # token storage (~/.config/altimateguide)
│ ├── schema.ts # zod -> JSON Schema helper
│ └── version.ts # package version
├── test/ # vitest
├── server.json # MCP Registry manifest
├── mcpb/manifest.json # .mcpb bundle manifest
├── package.json
└── tsconfig.jsonLicense
MIT — see LICENSE.
Available Tools
8 toolscheck_duplicateARead-only
Check whether a tool is already listed or already awaiting review (GET /api/agent/check) before submitting, so you don't burn a rate-limited write on a 409.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Tool URL to check | |
| name | No | Tool name to check |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful context beyond them: that the downstream write is rate-limited and that this check exists to avoid a 409, which tells the agent why the read is cheap.
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 sentence that front-loads the action and its outcome, then appends the motivating rationale. 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?
No output schema exists, and the description only loosely implies the return shape ('whether a tool is already listed or awaiting review'). It could say what the response conveys when both url and name are provided, but for a 2-param read tool with full annotation coverage it is largely sufficient.
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 both url/name are documented in the schema, so baseline is 3. The description adds no additional semantics about how url and name interact or whether either alone suffices, despite both being optional.
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 (check) and resource (tool already listed or awaiting review), and pins it to the endpoint GET /api/agent/check. An agent can immediately distinguish it from submit_tool or get_submission.
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 clear context: call this 'before submitting' to avoid a rate-limited write returning 409. It names the sibling action (submitting) and the failure it prevents, though it doesn't explicitly say when not to use it or name submit_tool by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_loginA
Exchange an email login code for an account API token and store it locally (POST /api/agent/token). The token is bound to that account; submissions are owned by it.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | 6-digit code from the email | |
| name | No | Token label (e.g. claude-desktop) | |
| Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and openWorldHint=true; the description adds genuinely useful behavior: the token is persisted locally (a side effect on the client), it is bound to the account, and subsequent submissions are owned by that account. It stops short of describing failure modes (invalid/expired code) or whether an existing stored token is overwritten.
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: the core action and its local-storage effect come first, the endpoint is parenthetically appended, and the ownership consequence follows. No filler, everything front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only sparse annotations, the description does cover the essential outcome (a stored account-bound token) and the mechanism (POST endpoint). Minor gaps remain around error handling and token replacement behavior, but nothing critical for invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (code and name are described, email is not), so the schema already does most of the work. The description ties 'email login code' to the email/code inputs but adds no format, constraint, or meaning beyond what the schema states. 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 precise verb+resource ('Exchange an email login code for an account API token and store it locally') and pins the concrete endpoint POST /api/agent/token. Combined with the sibling start_login, an agent can immediately see this is the second half of a login flow rather than a standalone operation.
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 the flow (an email code must exist, presumably from start_login) but never states when to call this versus alternatives, nor any prerequisites or failure conditions. Usage is inferable from the name and the phrase 'email login code', but nothing is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_submissionARead-only
Poll a submission's status (pending/approved/rejected), link tier, and whether a paid checkout has been verified (GET /api/agent/submissions/{id}).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The submission_id returned by submit_tool |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds value beyond that by enumerating the concrete status values and the fields surfaced (link tier, paid checkout verified), and by exposing the underlying endpoint shape. It doesn't discuss rate limits for polling or error/auth behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and payoff, with the endpoint parenthetical as compact supporting context. No filler or repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns and does so by listing the status enum and the two additional result fields. For a single-parameter read tool this is nearly complete; minor omissions are polling cadence and what happens for an unknown id.
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 id parameter is already documented with its provenance ("submission_id returned by submit_tool"). The description adds nothing further about the id's format or constraints, so 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?
States a specific verb (poll/get status) plus the resource (a submission) and enumerates what it reports: status pending/approved/rejected, link tier, and paid-checkout verification. An agent can tell it apart from siblings like submit_tool or list_categories. It doesn't explicitly name an alternative sibling the way a 5 would, but the operation 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?
"Poll a submission's status" implies the usage context of repeatedly checking an asynchronous submission after submit_tool, which is real guidance. However, it never states when to use this versus other lookups, no prerequisites, and no stopping condition for polling. Usage is implied 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_categoriesARead-only
List the valid category slugs (GET /api/agent/categories). Use these in submit_tool; anything that doesn't match goes in categorySuggestions.
| 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=true, so safety is covered. The description adds real behavioral value by disclosing where the values are consumed (submit_tool) and how mismatches are handled (categorySuggestions), which is not derivable from the annotations or the empty 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 compact sentences, front-loaded with the purpose and followed by the downstream usage instruction. Every clause carries information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns, and it does so ('valid category slugs'). Combined with the empty input schema and the usage routing, an agent has enough to call it correctly. It omits nothing critical, though a note on response shape or ordering would make it airtight.
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?
Zero parameters, so there is nothing to disambiguate; baseline is 4. The description correctly implies a no-argument call by not describing any inputs.
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 (list) and resource (valid category slugs), and even cites the underlying endpoint GET /api/agent/categories. It names the sibling tool (submit_tool) that consumes the output, so an agent can distinguish it from the auth and submission tools without opening a 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 routes usage: feed the slugs into submit_tool, and put anything that doesn't match into categorySuggestions. That is clear when-and-how guidance. It stops short of stating the ordering constraint (call this before submit_tool) or what to do if the list is empty.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_loginA
Email a one-time login code to begin browserless onboarding (POST /api/auth/request-code). Then read the code from the inbox and call complete_login.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email whose inbox can read the login code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as a non-read-only, open-world operation; the description corroborates by disclosing the concrete side effect (an email is sent) and the two-step handshake with the inbox. It adds real context beyond the annotations but omits rate limits, code expiry, and failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the action is front-loaded before the endpoint and the next-step instruction. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, full schema coverage, no output schema, and annotations covering the safety profile, the description supplies everything needed to invoke it and continue the flow. Missing only minor operational detail such as code validity window or error cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'email' property already has a descriptive string, so the schema carries the semantics. The description adds only implicit meaning (the email receives the code) and no format or constraint detail beyond what the schema 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?
States a specific verb+resource ('Email a one-time login code') plus the underlying endpoint (POST /api/auth/request-code), and the 'browserless onboarding' framing distinct from the sibling complete_login. An agent can tell exactly what this does and where it sits in the flow 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 names the follow-on sibling ('call complete_login') and the intermediate step (read the code from the inbox), so the when-to-use path is clear. It lacks any when-not guidance (e.g., already authenticated, code still valid), so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_toolAIdempotent
Submit a tool to the Altimateguide directory for editorial review (POST /api/agent/submit). The listing is queued as pending and is never published automatically — an editor reviews it. Categories are optional; unknown/empty categories are recorded for the reviewer. Requires a token (run complete_login, or set ALTIMATEGUIDE_AGENT_TOKEN).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Canonical http(s) URL of the tool | |
| cons | No | Short editorial cons | |
| name | Yes | Tool name | |
| pros | No | Short editorial pros | |
| proof | No | Inclusion path (default none). sayabout (Wall of Love URL, recommended) and badge need verificationUrl. For a paid (dofollow) listing use upgrade_listing. | |
| source | No | Origin id, e.g. agent:mcp | |
| pricing | No | Starting price (USD) | |
| features | No | Structured feature list (label + optional detail) | |
| freePlan | No | Offers a free plan | |
| resubmit | No | Set true to send a fresh copy after a previous submission for this URL was rejected. Mints a new idempotency key so the reviewer gets a new row instead of a replay of the rejected one. | |
| freeTrial | No | Offers a free trial | |
| categories | No | Category slugs — call list_categories to get valid ones | |
| externalId | No | Your stable id for idempotent replays; derived from the URL when omitted | |
| description | No | Neutral listing copy (min 20 chars; ranking language is rejected) | |
| verificationUrl | No | Required for sayabout/badge proof | |
| categorySuggestions | No | Free-text category hints when none of the real slugs fit; recorded for the reviewer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=true. The description adds genuinely new behavior beyond those: the listing is queued as pending, an editor must review it, it is never published automatically, and unknown categories are merely recorded for the reviewer. It still omits what the submission returns (e.g. an id or status) for a mutating 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?
Three tight sentences, front-loaded with purpose and endpoint, then review behavior, then category/auth prerequisites. 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?
Covers the key non-obvious facts for a 16-parameter mutating tool with no output schema: pending review, auth prerequisite, optional categories. It does not describe the shape of the response or mention duplicate-checking, which an agent would need to call this well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 16 parameters including the resubmit idempotency nuance and the proof/verificationUrl pairing. The description only restates that categories are optional and unknown ones are recorded, adding little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (submit) and resource (a tool listing to the Altimateguide directory) plus the concrete endpoint POST /api/agent/submit. The 'for editorial review' qualifier distinguishes it from upgrade_listing, the paid sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: submissions are queued as pending and never auto-published, categories are optional, and a token is required via complete_login or ALTIMATEGUIDE_AGENT_TOKEN. It does not, however, route the agent away from this tool when a duplicate exists (check_duplicate) or explicitly name upgrade_listing as the paid alternative in the description text itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upgrade_listingA
Choose how a listing you own earns a dofollow link (POST /api/agent/listing): sayabout, badge, or paid. paid returns a Dodo checkout URL whose metadata carries the submission id; the payment is verified server-side by the Dodo webhook. Nothing publishes or self-grants dofollow here.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Inclusion path. paid returns a Dodo checkout URL. | |
| slug | No | Target a published tool you own (opens/reuses an upgrade request) | |
| submissionId | No | Target a pending submission you own | |
| verificationUrl | No | Required for sayabout (Wall of Love URL) / badge |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true, idempotentHint=false); the description adds substantive behavior beyond that: the `paid` path returns a Dodo checkout URL carrying the submission id, payment is verified server-side by a webhook, and the tool does not publish or self-grant dofollow status. These are real operational facts an agent needs, not restatements of the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and enumerations, then the paid-path mechanics, then the single important exclusion. Every sentence carries information, though the internal jargon (Dodo webhook, dofollow) assumes domain familiarity.
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 and full schema coverage, the description responsibly discloses the return of the `paid` path (a checkout URL) and the external verification flow. It leaves the response shape for the sayabout/badge paths unspecified and does not state that an existing upgrade request may be reused, but the essentials for correct invocation are 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 description coverage is 100%, so the baseline is 3; the schema already explains path, slug, submissionId, and verificationUrl. The description mostly echoes the schema (paid returns a Dodo URL, sayabout/badge need a Wall of Love URL) rather than adding new syntax or constraint details, so it neither elevates nor diminishes parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Choose how a listing you own earns a dofollow link') and enumerates the three concrete paths (sayabout, badge, paid) that define the operation. The closing sentence 'Nothing publishes or self-grants dofollow here' distinguishes it from publish-oriented siblings like submit_tool without the agent needing to open 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?
It clearly states the context of use (a listing you own, choosing an earning path) and identifies when the `paid` variant applies versus the verification-based variants. It stops short of naming sibling tools as alternatives or stating explicit when-not-to-use conditions, 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.
whoamiARead-only
Confirm the configured token is live and report the account it belongs to (GET /api/agent/whoami). Distinguishes a missing token from a revoked/expired one.
| 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=true, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: it distinguishes a missing token from a revoked/expired one, telling the agent what failure modes to expect.
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 with zero filler. The core action and its diagnostic value are front-loaded, with the endpoint reference tucked at the end where it costs nothing.
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 parameterless read tool with no output schema, the description covers what the agent needs: what it confirms and what it reports. It stops short of describing the returned account fields or the error payload shape, which is a minor gap given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. Nothing about parameter meaning needs to be conveyed, and the description correctly implies the token comes from configuration rather than an argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (confirm token liveness, report owning account) and even names the underlying endpoint. It is clearly distinguishable from the login/session siblings, which deal with acquiring credentials rather than validating them.
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 clear context for when to reach for it: verifying a configured token is live and diagnosing whether a failure is a missing token versus a revoked/expired one. It does not name an alternative tool, but no sibling plausibly overlaps with this diagnostic role.
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.
8 tool updates
v1.0.3- Added
check_duplicate - Added
complete_login - Added
get_submission - Added
list_categories - Added
start_login - Changed
submit_tool26 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / categories / descriptionPrevious value: -"One or more category slugs"New value: +"Category slugs — call list_categories to get valid ones" - added
Input schema / properties / categories / items / minLengthAdded value: +1 - added
Input schema / properties / categorySuggestionsAdded value: +{ + "description": "Free-text category hints when none of the real slugs fit; recorded for the reviewer", + "items": { + "maxLength": 60, + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / consAdded value: +{ + "description": "Short editorial cons", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Input schema / properties / description / descriptionPrevious value: -"Neutral listing copy (min 20 chars; promotional/ranking language is rejected)"New value: +"Neutral listing copy (min 20 chars; ranking language is rejected)" - added
Input schema / properties / description / minLengthAdded value: +20 - changed
Input schema / properties / externalId / descriptionPrevious value: -"Your own id for idempotent replays"New value: +"Your stable id for idempotent replays; derived from the URL when omitted" - added
Input schema / properties / externalId / maxLengthAdded value: +200 - added
Input schema / properties / features / items / additionalPropertiesAdded value: +false - added
Input schema / properties / features / items / properties / description / maxLengthAdded value: +300 - added
Input schema / properties / features / items / properties / label / maxLengthAdded value: +80 - added
Input schema / properties / features / items / properties / label / minLengthAdded value: +1 - added
Input schema / properties / freePlanAdded value: +{ + "description": "Offers a free plan", + "type": "boolean" +} - added
Input schema / properties / freeTrialAdded value: +{ + "description": "Offers a free trial", + "type": "boolean" +} - added
Input schema / properties / name / minLengthAdded value: +1 - removed
Input schema / properties / paymentRefRemoved value: -{ - "description": "Required for paid proof", - "type": "string" -} - added
Input schema / properties / pricingAdded value: +{ + "additionalProperties": false, + "description": "Starting price (USD)", + "properties": { + "amount": { + "exclusiveMinimum": 0, + "type": "number" + }, + "currency": { + "const": "USD", + "type": "string" + }, + "period": { + "enum": [ + "month", + "year", + "one-time" + ], + "type": "string" + } + }, + "required": [ + "amount", + "currency", + "period" + ], + "type": "object" +} - changed
Input schema / properties / proof / descriptionPrevious value: -"Inclusion path (default none). sayabout/badge need verificationUrl; paid needs paymentRef."New value: +"Inclusion path (default none). sayabout (Wall of Love URL, recommended) and badge need verificationUrl. For a paid (dofollow) listing use upgrade_listing." - changed
Input schema / properties / proof / enumPrevious value: -[ - "none", - "sayabout", - "badge", - "paid" -]New value: +[ + "none", + "sayabout", + "badge" +] - added
Input schema / properties / prosAdded value: +{ + "description": "Short editorial pros", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / resubmitAdded value: +{ + "description": "Set true to send a fresh copy after a previous submission for this URL was rejected. Mints a new idempotency key so the reviewer gets a new row instead of a replay of the rejected one.", + "type": "boolean" +} - added
Input schema / properties / source / patternAdded value: +"^[a-z0-9][a-z0-9:_-]{1,63}$" - added
Input schema / properties / url / formatAdded value: +"uri" - added
Input schema / properties / verificationUrl / formatAdded value: +"uri" - changed
Input schema / requiredPrevious value: -[ - "name", - "url", - "categories" -]New value: +[ + "name", + "url" +]
- Added
upgrade_listing - Added
whoami
1 tool update
v1.0.1- First observed
submit_tool
TDQS
Scored across 8 tools
Each tool has a clearly distinct role: the two login steps are explicitly sequenced, whoami verifies the token, list_categories and check_duplicate are read-only preparations, and submit_tool/get_submission/upgrade_listing cover separate lifecycle stages. start_login vs complete_login could seem similar but the descriptions make the ordering and purpose unambiguous.
Most names follow a clean verb_noun snake_case pattern (start_login, complete_login, list_categories, check_duplicate, submit_tool, get_submission, upgrade_listing). The lone outlier is whoami, a conventional idiom but stylistically inconsistent with the rest.
Eight tools is well-scoped for a directory submission flow, with each tool earning its place across auth, lookup, submission, and monetization steps. No redundant or filler tools.
The surface covers the full agent workflow: authenticate, discover categories, avoid duplicates, submit, poll status, and choose link tier. Minor gaps exist (no way to edit or withdraw a pending submission), but the core lifecycle is fully served without dead ends.
Maintenance
Related MCP Connectors
Independent directory of agentic AI tools — search, compare & recommend via MCP. Read-only.
A registry of AI agent tools — MCP servers, APIs, CLIs, SDKs — kept current by automated ingestion.
- AxiomOAuthcom.axiomide
The marketplace where agents don't just use tools — they build, publish, and compose new ones.
Runtime permission, approval, and audit layer for AI agent tool execution.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI agents to manage App Store Connect apps, including registering bundle IDs, uploading metadata and screenshots, setting age ratings, managing TestFlight groups and testers, and submitting apps for review.MIT

stendium-mcpofficial
AlicenseNot gradedqualityBmaintenanceEnables any MCP-compatible agent to publish tool cards to Stendium, a portfolio showcase, after user confirmation.6 npmMIT- AlicenseAqualityDmaintenanceEnables AI agents to search, score, review, and submit tools from the SkillsIndex directory of 11,000+ AI agent tools.951 npmMIT
- AlicenseAqualityCmaintenanceEnables agents to call typed code-review and content-moderation decision tools, returning structured verdicts, probabilities, and confidence-gated actions.2MIT