Personal plan allowances
These are the current Personal plan rules. Business accounts do not use these Personal quota limits.
- Count a tool run only when it ends with a confirmed result, on the day it was accepted. A run that fails, is cancelled, is lost, gets no answer to its question, or may have completed without confirmation is not counted. If Pomerado later confirms such a run and returns its result, it counts once.
- Count a new website when its first publication succeeds for the account. A build that ends without publishing is not counted.
- Count further operations for an already-created website without another first-website charge.
- Keep the website’s creation history after deletion.
site_origin is not supported for a Personal account.
Recover from quota denial
- Check the account’s plan against the allowances and UTC reset periods above.
- Wait for reset or resolve the plan limit before requesting new work.
- Keep an accepted job’s original key when recovering its response.
- Use a new key after a definite quota denial when intentionally submitting a fresh request.
Understand MCP failures
Definitive build and run quota denials setisError to true with a JSON object in the text content. A same-website build denial has this content.
- Check the pending build before starting another for that website.
- Wait for reset or resolve the plan limit when
errorisquota_exceeded. - Use a new retry key for a fresh request after either definite denial.
- Keep the original key when recovering an accepted request or an ambiguous failure.
effect also sets isError to true and creates no job.
read, write or ask. With ask, the build asks read or write before it touches the site, as a pending input request (see get_job and provide_input). REST POST /v1/builds returns HTTP 400 with the same effect_required code.
Pomerado does not build tools for ticket sites, banks and credit unions, or government sites. A build for one of these sites, or any of its subdomains, sets isError to true and creates no job. site names the site and message gives the reason.
category is ticket_site, bank or government. Calling again does not help. REST POST /v1/builds returns HTTP 403 with the same site_not_supported code, site, category and message. Only new builds are refused. Tools you already have for these sites keep running.
A run whose input does not match the structure of the tool’s input schema also sets isError to true and creates no job. Structure means types, required fields, allowed values and bounds. A field the schema does not list is a mismatch too, since the tool would ignore it and answer a different question. issues names each failing field’s path and what the schema expects, never the value sent. A pattern in the schema is not checked here. The tool checks it when the run starts.
POST /v1/runs returns HTTP 400 with the same invalid_input code and issues.
A run whose value the tool refuses when the run starts, by a pattern or because the website refused it, was already accepted as a job. Its result has kind set to error and error set to invalid_input, with its job_id, a message giving the tool’s reason when it has one, and no issues. REST POST /v1/runs returns HTTP 409. Nothing changed on the website, unless the message says a write’s step may have changed it, in which case check the website first. Send the corrected input with a new retry_key, since the same key with a changed input returns retry_conflict.
Other MCP tool failures return the same error code the REST API gives for that failure, with whether repeating the call can help, the underlying message and the failure’s detail.
erroris the REST code, such asstorage_unavailable,quota_exceededorretry_conflict.retryableistruewhen the same call can succeed later. Waitretry_after_seconds, then repeat it with the sameretry_keyif it has one. When it isfalse, change the request first. A write sent without aretry_keythat fails withwrite_possibly_accepted: truemay already have happened: check the job (get_job) or read the site’s state back before calling it again, because a repeat without the key is a new website action.messageis the underlying reason, andfailure_detailnames the step that failed. Credentials outside URLs are screened; recorded URLs remain exact and may contain credential-like values.
input_declined or input_cancelled, and the job’s request stays pending. An answer that does not fit the request returns invalid_request with the question and reason.
A site with more than 1,000 operations lists the first 1,000 tools. The tools/list result then carries _meta["io.pomerado/truncated"]; use the account MCP’s find_tool and run_tool to reach the rest.
A revoked grant, changed permissions or inactive account can prevent polling and answering input as well as new work. Signing into a browser does not restore a denied MCP grant.
Handle a detailed error when one is exposed
MCP tool results and REST responses carry the same codes. Use the returned code, message and account state.Keep retry behavior safe
- Keep the original request arguments and
retry_key. - Wait on the job with
get_jobwhen you have its ID. - Retry the same submission if its response was lost.
- Check the website if the job reports an uncertain effect.
- Start a new execution only when you intend another website action.
Keep identifiers and input valid
- Keep each MCP HTTP request body within 1,000,000 bytes.
- Use job and connection IDs exactly as returned.
- Use retry keys of 1 to 200 letters, digits, underscores or hyphens.
- Pass generic tool
inputvalues as JSON-encoded strings. - Match generated tools to their advertised schemas.
- Answer with the current pending request ID and version.