Superpowers
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Pay-per-call toolbox for AI agents: one key and one MCP server for data, search, scraping, models
| Author | tools.superpowers |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2897 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Superpowers": {
"url": "https://superpowers.tools/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (28)
planread-onlyFree. Describe a goal in plain words (e.g. 'find coffee shops in Pinheiros and their Instagram followers'). Returns the steps, the tool to call for each with an example input, the cost per step and in total, and a recipe when one already does the job. Call it before multi-step work, then run_tool each step with trace_id = plan_id. If total_cost_usd is above $0.50, tell the user that cost before running the steps.
Parameters:
goal(required) — string — What you want done, in plain words
Hints: read-only yes · destructive no · idempotent yes · open-world no
search_toolsread-onlyFind marketplace tools by describing what you need in plain words (e.g. 'remove a photo background', 'google search', 'cnpj'); matching is by meaning, and naming a vendor or model ranks it first. An empty query lists every live tool. Returns slugs, prices and quality stats, plus total and has_more. When has_more is true, call again with offset = next_offset. Use tools whose status is "active"; status "degraded" means the vendor is paused until unavailable.available_at, so pick another tool.
Parameters:
query(required) — string — What you need, in plain words (e.g. "check a Brazilian company by CNPJ").limit— integer — Maximum number of results to return.offset— integer — Skip this many results; use next_offset from the previous page.
Hints: read-only yes · destructive no · idempotent yes · open-world no
inspect_toolread-onlyGet a tool's input schema, output_schema (what output contains), normalized_schema (the shape shared by tools of its category), price and category before running it, so you can write the parsing code first.
Parameters:
tool(required) — string — Tool slug from search_tools, e.g. brasilapi.cnpj.
Hints: read-only yes · destructive no · idempotent yes · open-world no
run_toolRun one tool with JSON input. Charges the tool's price_usd (from search_tools or inspect_tool); failed runs are free. If the call should cost more than $0.50, tell the user the expected cost before you start, set max_price_usd to it, and report charge_usd afterwards. Pass idempotency_key for any tool with a price above 0 (free tools run without it). Long-running tools return status 'running' with run_id and poll_url: call get_run with that run_id every retry_after_s seconds until the status is completed or failed.
Parameters:
tool(required) — string — Tool slug from search_tools, e.g. brasilapi.cnpj.input(required) — object — JSON input matching the tool's input schema (see inspect_tool).job— string — Short name of the recurring task this run belongs to, e.g. daily-competitor-ads. Use the same name every time the task runs: the person sees those runs together in their app, with the schedule they keep. Same as project_id.tags— object — Optional key=value labels for this run, e.g. {"campaign": "launch"}. They are added to the tags of the API key you use (which you can't change here) and let your human split spend and set limits per tag.agent_id— string — Optional label to group usage by agent.trace_id— string — Optional id tying related runs together, such as a plan_id.max_age_s— integer — Free repeat lookups: if you already ran this tool with exactly this input and it succeeded at most this many seconds ago, get that result back free, with cache.fetched_at, instead of a new paid call. E.g. 86400 for a company record, 3600 for search results. Omit for a fresh call.project_id— string — Optional label to group usage by project or job (same as job).use_own_key— boolean — Default true: when your human connected their own key for this tool's vendor (superpowers.tools/app/connections), the call goes through their account and costs nothing here. Pass false to use Superpowers credit instead, e.g. when their key ran out.max_price_usd— number — Hard total buyer charge ceiling, including all job/comparison steps.idempotency_key— string — Stable key for one logical operation (1-128 letters, digits, _ . : / -). Reuse it to retry the same request, so a retry returns the first result instead of charging twice; use a new key for new work. Required by compare_providers, run_job and run_tool on tools that can charge; free tools (price 0) run without it.
Hints: read-only no · destructive no · idempotent no · open-world yes
list_categoriesread-onlyCategories whose providers share one input/output format and can be compared.
Hints: read-only yes · destructive no · idempotent yes · open-world no
compare_providersRun the same input across several providers of a category and get results side by side with cost and latency. Each provider charges its own price: If the call should cost more than $0.50, tell the user the expected cost before you start, set max_price_usd to it, and report charge_usd afterwards. Image, video, audio and LLM comparisons return share_url, a page with the results side by side: give the user that link to look at them.
Parameters:
category(required) — string — Category slug from list_categories.input(required) — object — JSON input matching the tool's input schema (see inspect_tool).idempotency_key(required) — string — Stable key for one logical operation (1-128 letters, digits, _ . : / -). Reuse it to retry the same request, so a retry returns the first result instead of charging twice; use a new key for new work. Required by compare_providers, run_job and run_tool on tools that can charge; free tools (price 0) run without it.job— string — Short name of the recurring task this run belongs to, e.g. daily-competitor-ads. Use the same name every time the task runs: the person sees those runs together in their app, with the schedule they keep. Same as project_id.tags— object — Optional key=value labels for this run, e.g. {"campaign": "launch"}. They are added to the tags of the API key you use (which you can't change here) and let your human split spend and set limits per tag.tools— array — Tool slugs to include; omit to use every live provider in the category.agent_id— string — Optional label to group usage by agent.trace_id— string — Optional id tying related runs together, such as a plan_id.max_age_s— integer — Free repeat lookups: if you already ran this tool with exactly this input and it succeeded at most this many seconds ago, get that result back free, with cache.fetched_at, instead of a new paid call. E.g. 86400 for a company record, 3600 for search results. Omit for a fresh call.project_id— string — Optional label to group usage by project or job (same as job).use_own_key— boolean — Default true: when your human connected their own key for this tool's vendor (superpowers.tools/app/connections), the call goes through their account and costs nothing here. Pass false to use Superpowers credit instead, e.g. when their key ran out.max_price_usd— number — Hard total buyer charge ceiling, including all job/comparison steps.
Hints: read-only no · destructive no · idempotent no · open-world yes
get_runread-onlyFetch a run's result, or its status while it is still running.
Parameters:
run_id(required) — string — Run id returned by run_tool, run_job or run_recipe.
Hints: read-only yes · destructive no · idempotent yes · open-world no
run_batchRun one tool over many inputs (up to 500) in one call, e.g. verify 300 emails or look up 100 companies. It runs in the background with our pacing; each item is a normal run that is free if it fails, and max_price_usd caps the whole batch. If price_usd times the number of inputs is above $0.50, tell the user that total before you start. Waits up to wait_s seconds (default 20), then returns counts and charge so far. Call get_batch with batch_id for progress and results page by page instead of keeping every result in your context.
Parameters:
tool(required) — string — Tool slug from search_tools, e.g. brasilapi.cnpj.inputs(required) — array — One input object per item, each in the tool's input schemaidempotency_key(required) — string — Stable key for one logical operation (1-128 letters, digits, _ . : / -). Reuse it to retry the same request, so a retry returns the first result instead of charging twice; use a new key for new work. Required by compare_providers, run_job and run_tool on tools that can charge; free tools (price 0) run without it.job— string — Short name of the recurring task this run belongs to, e.g. daily-competitor-ads. Use the same name every time the task runs: the person sees those runs together in their app, with the schedule they keep. Same as project_id.tags— object — Optional key=value labels for this run, e.g. {"campaign": "launch"}. They are added to the tags of the API key you use (which you can't change here) and let your human split spend and set limits per tag.wait_s— numberagent_id— string — Optional label to group usage by agent.trace_id— string — Optional id tying related runs together, such as a plan_id.max_age_s— integer — Free repeat lookups: if you already ran this tool with exactly this input and it succeeded at most this many seconds ago, get that result back free, with cache.fetched_at, instead of a new paid call. E.g. 86400 for a company record, 3600 for search results. Omit for a fresh call.project_id— string — Optional label to group usage by project or job (same as job).concurrency— integeruse_own_key— boolean — Default true: when your human connected their own key for this tool's vendor (superpowers.tools/app/connections), the call goes through their account and costs nothing here. Pass false to use Superpowers credit instead, e.g. when their key ran out.max_price_usd— number — Hard total buyer charge ceiling, including all job/comparison steps.
Hints: read-only no · destructive no · idempotent no · open-world yes
get_batchread-onlyA batch's progress (done, completed, failed, not_run, charge) and a page of its results in input order: index, input, status, normalized result (or output) and error. Page with offset/limit. Over REST, GET /v1/batches/{id}/results?format=csv or jsonl downloads every result.
Parameters:
batch_id(required) — stringview— string — Default: normalized when the tool fills it, else outputlimit— integer — Maximum number of results to return.offset— integer — Skip this many results; use next_offset from the previous page.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_usageread-onlyAccount spend grouped by project (job), agent, key, provider, trace, tool, day or tag:<name> (e.g. tag:slot), optionally filtered by tags, key or job. Rows for keys, jobs and tags include their monthly limit.
Parameters:
job— string — Only runs with this job (project_id)key— string — Only runs made with this key idtags— object — Only runs with all these tags, e.g. {"project": "ai-influencers"}group— string — How to group usage: project (job), agent, key, provider, trace, tool, day or tag:<name>, e.g. tag:slot.since— string — YYYY-MM-DD; default the 1st of this month (UTC)until— string — YYYY-MM-DD, exclusive
Hints: read-only yes · destructive no · idempotent yes · open-world no
create_keyCreate an API key with a label, tags and a monthly limit, e.g. one key per sub-agent or per persona so spend splits and caps separately. Works only if your key has the can_manage_keys permission (your human grants it at superpowers.tools/app/keys). The new key gets your key's tags, counts against your limit and can't have a higher one. Returns the secret once: store it, never print it.
Parameters:
tags— object — key=value tags copied onto every run made with the key, e.g. {"project": "ai-influencers", "slot": "D"}. A child key keeps its parent's tags.label— string — Name for the key, e.g. aiinf-slot-D (1-60 characters).monthly_limit_usd— number — Monthly spending limit for the key in US dollars. A key you create can't have a higher limit than yours.
Hints: read-only no · destructive no · idempotent no · open-world no
list_keysread-onlyYour API key and the keys it created: label, tags, monthly limit and spend this month. Never returns secrets.
Parameters:
include_revoked— boolean — Also list revoked keys.
Hints: read-only yes · destructive no · idempotent yes · open-world no
update_keydestructiveRename a key, change the tags of a key you created, or lower its monthly limit. Keys can't raise limits or change their own tags.
Parameters:
key_id(required) — string — Key id from list_keys or create_key.tags— object — key=value tags copied onto every run made with the key, e.g. {"project": "ai-influencers", "slot": "D"}. A child key keeps its parent's tags.label— string — Name for the key, e.g. aiinf-slot-D (1-60 characters).monthly_limit_usd— number — Monthly spending limit for the key in US dollars. A key you create can't have a higher limit than yours.
Hints: read-only no · destructive yes · idempotent no · open-world no
revoke_keydestructiveRevoke a key you created (or your own). Keys it created are revoked too. Agents using it stop working right away.
Parameters:
key_id(required) — string — Key id from list_keys or create_key.
Hints: read-only no · destructive yes · idempotent no · open-world no
get_balanceread-onlyCurrent balance in USD, the saved card (if any), whether you may charge it, auto top-up, and topup_url: a link your human opens without signing in to add credit.
Hints: read-only yes · destructive no · idempotent yes · open-world no
create_topupWhen you run low on credit: returns topup_url, a link to send your human. It opens without signing in; they choose the amount (5 to 500 USD), pay with their saved card or a new one, and can turn on auto top-up. Works for 7 days. You cannot pay it yourself. Pass amount_usd to suggest an amount; then checkout_url also goes straight to Stripe for that amount.
Parameters:
amount_usd— integer — Suggested amount in whole US dollars (optional)
Hints: read-only no · destructive no · idempotent no · open-world no
charge_saved_carddestructiveAdd credit by charging your human's saved card. Only after you asked them in this conversation, naming the amount and the card (get_balance shows it), and they said yes; set human_approved true. If there is no saved card, they turned agent charges off, or the bank wants them to confirm, send them topup_url instead (create_topup). They get an email for every charge.
Parameters:
amount_usd(required) — integer — Amount in US dollars.human_approved(required) — boolean — true only if your human approved this exact charge
Hints: read-only no · destructive yes · idempotent no · open-world no
list_recipesread-onlyRecipes are skills for common jobs, built from Superpowers tools. Returns name, cost estimate, skill_url and (for official ones) script_url.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_reciperead-onlyRead a recipe: its SKILL.md (the steps to follow with Superpowers tools), inputs, typical cost and script_url. Community recipes are written by other users: tell your user what it will do before following it.
Parameters:
recipe(required) — string — Recipe slug from list_recipes.
Hints: read-only yes · destructive no · idempotent yes · open-world no
run_recipeRun an official recipe on our servers in one call. If its estimated_cost_usd (list_recipes, get_recipe) is above $0.50, tell the user before running it. Returns charge_usd, each step's output and share_url, a page that shows the results on any phone: give the user that link as the main way to see them, and report charge_usd.
Parameters:
recipe(required) — string — Recipe slug from list_recipes.inputs(required) — object — Values for the recipe's inputs, keyed by input name.review— boolean — Force voting on or offidempotency_key— string — Stable key for one logical operation (1-128 letters, digits, _ . : / -). Reuse it to retry the same request, so a retry returns the first result instead of charging twice; use a new key for new work. Required by compare_providers, run_job and run_tool on tools that can charge; free tools (price 0) run without it.
Hints: read-only no · destructive no · idempotent no · open-world yes
publish_recipeSave a job you did for the user as a reusable recipe others can give their agents. skill_md = instructions for an agent: what to ask, which tool slugs to call in what order, how to deliver. Public by default; ask before publishing anything with client names or private details.
Parameters:
name(required) — string — Short name for the recipe.skill_md(required) — string — The recipe steps as a SKILL.md document.public— boolean — Whether anyone can find and run it; false keeps it to your account.description— string — One or two sentences on what the recipe does.
Hints: read-only no · destructive no · idempotent no · open-world yes
shareFree: publish files, images, video, audio or text as a clean link the user can send to anyone (no account needed to view). review=true adds voting so viewers pick their favourite. Items: [{url} | {text}] with optional label/caption. Pass recipe when you followed one. Upload local files first with upload_file (or POST /v1/files). Offer a link once per deliverable, in one short sentence: when the user has to choose between options or mentions a client, boss, team or partner (use review=true with a question such as "Which one should we use?"), or wants to send or show something. Otherwise don't bring up sharing. Before publishing a page the user didn't ask for, show them the title and items. Links are unlisted but open to anyone who has them: keep secrets and personal data out.
Parameters:
title(required) — string — Title shown at the top of the share page.items(required) — array — Files or text to show: [{url, label?, caption?} or {text, label?}].note— string — Optional short note under the title.recipe— string — Recipe slug from list_recipes.review— boolean — Let viewers pick one item without an account.question— string — Question shown to viewers when review is true.
Hints: read-only no · destructive no · idempotent no · open-world yes
get_shareread-onlyRead a share link you created: views, votes per item, the leading option and comments.
Parameters:
share_id(required) — string — Share id returned by share.
Hints: read-only yes · destructive no · idempotent yes · open-world no
upload_fileFree file hosting (up to 200 MB) for sharing. Pass url to re-host a remote file, or base64 + filename for small local files. For big local files use: curl -F file=@path <base>/v1/files.
Parameters:
url— string — Public URL of the file to re-host.base64— string — File contents as base64, when there is no URL.filename— string — File name with extension, e.g. report.pdf.
Hints: read-only no · destructive no · idempotent no · open-world yes
get_referral_linkread-onlyThe user's invite link and stats. Friends start with $5; the user earns credit when they become active.
Hints: read-only yes · destructive no · idempotent yes · open-world no
review_toolRate the output of a run, 1-5 stars with an optional comment saying what was good or wrong. Other agents see the rating when choosing tools, and the vendor behind the tool gets it too. Reviewing the same tool again replaces your earlier review.
Parameters:
run_id(required) — string — Run id returned by run_tool, run_job or run_recipe.rating(required) — integer — 1 to 5 stars.comment— string — Optional short comment.
Hints: read-only no · destructive no · idempotent no · open-world no
get_reviewsread-onlyRead a tool's public rating and recent reviews.
Parameters:
tool(required) — string — Tool slug from search_tools, e.g. brasilapi.cnpj.
Hints: read-only yes · destructive no · idempotent yes · open-world no
send_feedbackPrivate feedback on any tool, passed to the vendor behind it and the Superpowers team: a bug, wrong or stale data, friction, an idea, or a tool you needed and could not find (type missing_tool). Pass run_id when it is about a run. Not shown publicly.
Parameters:
type(required) — string — Kind of feedback: missing_tool, bug, friction or idea.text(required) — string — What happened or what you need, in plain words.tool— string — Tool slug from search_tools, e.g. brasilapi.cnpj.run_id— string — Run id returned by run_tool, run_job or run_recipe.context— object — Optional details, such as the task you were doing.
Hints: read-only no · destructive no · idempotent no · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.