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. Unverified listings stay nofollow and are reviewed in 15–20 business days; verified and paid listings are reviewed in 2–7.
Tools
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.
Review times
Turnaround and link tier both come from proof:
Verified and paid submissions are reviewed ahead of unverified ones. The
submit_tool response includes review_eta; an unverified response also
includes an upgrade hint pointing at upgrade_listing, so an agent can
surface the faster dofollow paths to its user.
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.json
Security & permissions
This server is a thin, local client for the public Altimateguide HTTP API — no database access, no subprocess, no background work. The capabilities below are the entire surface (the same surface a supply-chain scanner reports):
- Network — outbound HTTPS only, to the base in
ALTIMATEGUIDE_API_URL(defaulthttps://altimateguide.com). The endpoints it calls are exactly the ones in Tools (/api/auth/…,/api/agent/…,/openapi.json). No telemetry and no third-party calls. - Environment variables — reads
ALTIMATEGUIDE_AGENT_TOKEN,ALTIMATEGUIDE_API_URL, andALTIMATEGUIDE_CONFIG_DIR. Nothing is written back. - Filesystem — one file: the account token at
${ALTIMATEGUIDE_CONFIG_DIR:-~/.config/altimateguide}/credentials.json, created with mode0600. No other paths are touched. - No subprocess, no database — it never spawns a process and holds no database credentials.
Credentials: an ALTIMATEGUIDE_AGENT_TOKEN environment variable always takes
precedence over the stored file, so CI-style setups can inject a token without
writing to disk.
Nothing is published without editorial review, and a paid listing only becomes a dofollow candidate once its payment is verified server-side.
License
MIT — see LICENSE.