One URL for MCP apps. Start with no key: the free tools work right away, and a paid tool returns a payment link instead of charging anything.
Pick how to connect
Start with no key
In Claude.ai, Claude Desktop, Claude Code, ChatGPT or Codex, add a custom connector with this URL. No API key or Authorization header is needed.
MCP URL, no key needed
https://unstuckapi.com/mcp
Try a few free calls a day with read_page, domain_check, domain_info, pdf_to_text, vulnerability_lookup, or paper_search. Each free result says how many are left and when they reset (midnight UTC).
A paid tool called without a key returns a new API key and a payment link instead of a result, and nothing is charged. In Claude, a Connect button opens the same payment page. Once credit is added, the agent can continue in the same chat with that key.
Already have a key?
If your connector cannot send headers, use this URL instead. Replace YOUR_API_KEY with your key.
Connector URL with key
https://unstuckapi.com/mcp?key=YOUR_API_KEY
Keep the completed URL private: it contains your API key.
Developer options
MCP with a header
For clients that support headers, connect using Streamable HTTP and these values:
MCP URL
https://unstuckapi.com/mcp
Authorization header
Authorization: Bearer YOUR_API_KEY
get_balance and get_top_up_link are free account utilities. They are listed only on connections with a valid key.
REST for developers
Send JSON to POST /v1/tools/{name} with your key in the Authorization header. REST always needs a key; free tries are MCP only. Set your key locally, then copy an example from a tool page.
Successful responses include result, charged_usd, and balance_usd.
Out of credit? REST returns HTTP 402 and MCP returns error insufficient_balance, both with a top_up_url. Credit added there lands on the same key.
Tested apps
Unstuck has been used from these clients. Other MCP apps that support remote (HTTP) connectors should work, but have not been tested.
Claude.ai and Claude Desktop (custom connector; the Connect button opens the payment page)
Claude Code
ChatGPT (custom connector)
Codex CLI
Raw HTTP (curl), see the keyless example
Keys
Preferred: the header Authorization: Bearer <key>, on REST and MCP.
Also accepted: x-api-key: <key>; the api_key argument on keyless MCP connections; ?key=<key> on the MCP URL, only for apps that cannot send headers. URLs end up in logs and history, so keep that URL private.
A key comes from paying at /top-up, from the Connect button in Claude, or from a keyless call to a paid tool (a new key with no credit, plus its payment link). Each keyless paid call creates a different key, so reuse the one you got. Keys that never get credit stop working after 14 days.
Keyless call over plain HTTP
The MCP endpoint is stateless, so one request is enough. initialize is optional. The Accept header is required.
"Is mycoolstartup.com available to register?" (domain_check, free to try)
Limits
Free tries: 10 calls a day per caller on the six free tools over MCP, with no key, plus a shared pool of 200 a day across everyone. Callers are grouped by network, and by key when one is sent. Limits reset at midnight UTC. A failed free call does not use up a try. When they run out, calls return free_limit_reached with the reset time; with a key that has credit, the same tools cost their listed price.
leads_by_tech returns up to 50 companies per call. Other tools list their limits on their own pages.
Every call ends within 45 seconds. Slow data lookups can return still_working (not charged); the same call about 30 seconds later returns the result.
Paid calls are limited to 60 a minute per key.
Results come from public sources and data providers. Check anything important before you rely on it.
Billing in one minute
Credit is prepaid by card through Stripe in $10, $20, $50 amounts. One-time payments; no subscription and no automatic charges.
Each call costs the tool's listed price, taken from the balance when it succeeds. Failed calls (errors, timeouts, blocked or broken pages) are never charged.
leads_by_tech is priced per company returned: the most it could cost is held first, and the unused part is refunded at once.
email_find is charged only when it returns a confirmed address. email_verify is charged per address checked, including unknown results.
Other tools: a call that runs and returns a result is charged even if the result list is empty.
Credit never expires. Unused credit is refundable within 30 days of purchase.
structuredContent holds the tool's fields plus charged_usd and balance_usd. The same JSON is repeated as text for clients that ignore structured content. Free results add one text line with the free calls left and the next reset.
MCP structuredContent (free domain_check)
{
"domain": "example.com",
"available": false,
"note": "The domain is registered.",
"source": "rdap",
"charged_usd": 0,
"balance_usd": 0
}
MCP errors
Errors come back as a tool result with isError: true and structuredContent.error. Nothing is charged on an error.
MCP structuredContent.error
{
"error": {
"code": "insufficient_balance",
"message": "This call costs $0.1 but the balance is $0.02. Credit can be added by a person at https://unstuckapi.com/top-up/…",
"charged": false,
"amount_charged_usd": 0,
"retryable": false,
"retry_after_seconds": null,
"needs_user": true,
"user_action": "Adding credit is the user's decision: …",
"suggested_fix": null,
"partial_results": null,
"balance_usd": 0.02,
"daily_cap_remaining_usd": null,
"request_id": "req_…",
"docs_url": "https://unstuckapi.com/docs",
"price_usd": 0.1,
"top_up_url": "https://unstuckapi.com/top-up/…"
}
}
Error codes
free_limit_reached: Free tries for this tool are used up for today. resets_at gives the next reset (midnight UTC). No key is created.
payment_required: A paid tool was called with no key. A new API key with no credit (api_key) and its top_up_url are returned. Nothing is charged.
api_key_required: A paid tool was called with no key and no more keys can be created for this caller today. top_up_url sells a key with credit.
invalid_api_key: The key sent is unknown or disabled.
insufficient_balance: The balance is below the price of the call. balance_usd, price_usd and top_up_url are included.
invalid_input: An argument failed validation. invalid_fields lists the fields.
rate_limited: Too many calls on one key; retry_after_seconds says when to retry.
fetch_failed / timeout / upstream_error: The target site or a data provider failed. Usually worth one retry.
still_working: A slow data lookup is still running. Nothing was charged; the same call about 30 seconds later returns the result.
page_error: read_page got an error page, a bot check or an empty render instead of content.
blocked_by_site: The site refuses requests from Unstuck's server network. Retrying will not help.
REST errors
HTTP 400 invalid input or JSON, 401 missing or invalid key, 402 balance too low (balance_usd, price_usd, top_up_url), 404 unknown tool, 422 the tool failed (charged_usd: 0), 429 rate limited (Retry-After).
REST 401 response
HTTP/1.1 401
{
"error": "unauthorized",
"message": "Missing or invalid API key. Send 'Authorization: Bearer <key>'. A key with credit can be bought by a person at get_key_url.",
"get_key_url": "https://unstuckapi.com/top-up"
}
Tool reference
Every tool has its own page with inputs, limits and copy-paste examples.