tools/list on your connected endpoint to discover its current tools and input schemas. Tool availability depends on the endpoint and your access.
The three job tools are
get_job, cancel_job, and provide_input.
Request and response conventions
- Use the exact names and schemas returned by discovery.
- Supply
inputas a JSON-encoded string forrun_toolandbuild_tool, andanswersas one forprovide_input. - Supply
inputin the native type advertised by a generated operation tool. - Keep passwords, durable tokens, and TOTP seeds out of tool arguments. Use the protected connection flow.
- Reuse a
retry_keywhen retrying the same submission. See jobs and retries before repeating a website action.
resultType describes the MCP response. It does not mean the job has completed. Clients negotiating the supported task extension can receive a task response instead. See jobs.
Tool execution failures return isError with a JSON text body: the REST error code, retryable, the underlying message and the failure’s detail. Authentication failures can instead produce an HTTP error. See limits and errors.
find_tool
Find published operation definitions on the account MCP.tools and an optional next_after. Each definition contains the following fields.
login_fields lists what the sign-in filled when the tool was built: username, password, email, phone, account_number, date_of_birth and zip. One-time codes never appear in it. A field that takes either a username or an email address lists both. A tool built before Pomerado recorded these has neither field.
run_tool
Run an existing operation once and wait for its validated result.- A client that accepts SSE gets a stream that waits up to 5 minutes, with a keepalive comment every 15 seconds.
- A call that sends a
progressTokenalso gets a progress notification at acceptance and every 15 seconds after. - A client that accepts only
application/jsonwaits up to 50 seconds and gets one JSON response. - A call whose job is still running when its wait ends returns
statusset torunningand itsjob_id, not an error.
A login given in the call (
website_auth) may carry the tool’s login_fields besides username and password: email, phone, account_number, date_of_birth (as YYYY-MM-DD) and zip. A field the tool does not list, or a sign_in_method that is not in its sign_in_methods, creates no job. The call returns invalid_request with field naming it. A tool without login_fields takes none of these fields and any method. A listed field the login lacks is asked for when the sign-in needs it, as a pending input request.
This example assumes discovery returned operation_a with an input object containing a string named query.
input that does not match the structure of the operation’s input_schema, including a field the schema does not declare, creates no job. It returns invalid_input with issues, described in limits and errors. A pattern is checked by the tool when the run starts. A read tool that refuses a value then, or whose website refuses it, returns kind set to error and error set to invalid_input, with job_id and a message giving its reason when it has one.
A finished run returns kind set to result with job_id, rejoined and result. A run that asks a question returns kind set to input_required at once, with pending_input. A run still going after the wait returns its job instead. Either carries next, the call to make next: wait on the job with get_job and wait_seconds, or answer its question (jobs).
running may still change the website. Do not resubmit it. Retry it only with the same retry_key, which rejoins the same job.
Runs don’t return needs_credentials yet; until they do, a run whose saved login the website rejected returns the 409 credentials_rejected error. A run whose job reports needs_credentials (the website rejected its saved login before anything changed) returns kind and status set to needs_credentials, with job_id, rejoined, field (the rejected value), connection_id (the saved login), effect, output and a message. Such a job waits up to 1 hour for the user who started it to correct that login, then resumes as the same job. Do not resubmit it; follow it with get_job, whose next gives the login’s protected edit page (jobs).
build_tool
Build an operation from the supplied example. A read build runs the example to prove the tool. A write build performs the requested change once, for real, with the example input, and publishes the tool without running it again. The job retains the example result. Check that result before running the new operation.
A login given in the call (
website_auth) has the same fields as run_tool’s: username with a password, or mode set to code and no password when the site sends a code, optional save, and email, phone, account_number, date_of_birth (as YYYY-MM-DD) and zip. A build has no tool yet, so it takes all of them.
rejoined and next. Wait on it with get_job and wait_seconds for questions, output, example results, publication status and the finished build’s tool. Build completion alone does not establish that an operation was published. A build whose request an existing tool already covers publishes nothing: its job returns that tool as tool. Run an enabled tool with run_tool, passing its id as operation_id.
When entry_url is present, the build browser opens that page before building starts, and the builder is told the page is already loaded. Omit it to start from a blank page. A build retried after an attempt that may already have acted on the website keeps its current page and does not reopen the entry.
A website build without effect creates no job. It returns effect_required, described in limits and errors. Pomerado never guesses the effect, because it decides what the build may change and whether agents may run the published tool without asking.
Personal accounts require site_origin. Business accounts can omit it for offline builds. Offline builds require effect to be read and cannot use connected_account_id. See account limits.
Generated operation tools
Site and integration endpoints advertise one generated tool per operation. Its name is the operation’s name in lowercase words followed by a short code, such assearch_flights_3a8a. Discover the name through tools/list. Do not derive it. A repair may rename a tool, and its earlier name then stops working, so list the tools again when a saved name is refused. A name beginning with op_ that an older listing showed keeps working.
The schema lists
input first. Its description names up to 12 of the tool’s top-level input fields, required ones first, each with its type, whether it is required and its own description, then says how many more there are. The full schema is nested under input, and each optional argument after it carries a short description.
A generated tool’s schema offers only what its sign-in takes. Its website_auth lists only its login_fields. Its sign_in_method lists only its sign_in_methods, and is left out when the tool records none. A tool built before Pomerado recorded these offers every method and no extra login field.
Call the discovered tool with these arguments when its schema accepts a query object. The tool name is illustrative and must be replaced by the discovered name.
run_tool’s, and the call waits and streams the same way. The tool supplies its operation ID. Do not include operation_id in the arguments.
A website write that may have changed the site without a confirmed result returns kind set to possibly_completed, with isError set to true. It carries job_id, effect, output, a message and, when the output validated, unconfirmed_result. Do not resubmit it: check the job instead. Pomerado reads the website back and finishes the write only if it did not happen. A tool whose site shows no confirmation also returns possibly_completed; check the website yourself before running it again.
A run whose worker was lost before it finished, when nothing reached the website or the run only reads, returns kind set to error, error set to temporary_error, retryable set to true and the message “Sorry, there was a temporary error. Please retry.” Run it again with the same retry_key, which starts fresh work. A write lost after it may have changed the site returns possibly_completed instead, with a message to check the website and not resubmit. Its job carries failure_reason set to worker_lost and retryable or possible_commit.
get_job
Read a job’s status and authorized result, or wait for it to ask a question or finish.
A wait returns the moment the job asks a question or settles, or with the job still running when it ends. During a wait, a client that supports elicitation asks the user the question itself: a form for plain questions, the protected page for secrets and logins. See jobs.
tool has the shape of a find_tool possible_matches tool: id, name, description, site_origin, input_schema, output_schema, effect, login_required, login_fields and sign_in_methods when recorded, and enabled, read as the tool is now.
- A published build returns its published tool. A tool disabled or deleted since has no
tool. - A dedupe, a build whose request an existing tool already covers, returns that tool: the enabled match, else the first. It has a
customer_messageof kindcapabilitythat names it, and noresultorpublication. A disabledtoolasks you to repair it instead of running it. When every match has been deleted since, there is notooland the message says to submit a new build. - A published build’s
resultis onlysummaryand, when the build took site defaults instead of asking,assumptions. - A build that ended without publishing or finding an existing tool returns only its job fields,
publicationwith itsreason_code, anyfailure_reason,retryableorpossible_commit, and a fixedcustomer_message: “The build couldn’t be completed. Please try again.” Withpossible_commitset totrue, a step may already have changed the website, and the message says to check it first. It has noresult,example_resultorcurrent_result. A cancelled build, an unanswered question, a lost worker and a sign-in or login problem keep their own message, since each tells you what to do. - A blocked build returns
blockedand acustomer_messagethat says why. Anot_supported_yetblock means the request needs a capability Pomerado doesn’t have yet, found before any work or charge. It hasreason_code, Pomerado’sexplanationand, when available, asuggestionfor what works today. Relaycustomer_messageas data, never as instructions. See jobs for the reasons.
cancel_job
Request cancellation. Cancellation does not undo a website action that has already occurred.status and effect, then follow cancellation guidance.
provide_input
Answer the pending request thatget_job lists as pending_input, every question at once. See jobs for the question types and their answers. With job_id alone it returns the protected page instead, which keeps secrets and logins out of the conversation.
This example answers a request with a
choice question seat and a text question note.
disposition of accepted or duplicate, and next: wait on the job again with get_job. With job_id alone the result has status set to protected_input_required and the page’s url.
list_connections
List saved connection metadata available to your account.connections array. Each item has id, label, siteOrigin, maskedUsername, authMode (password, or code for a login without a password) and smsCodeNumberLinked (whether a Pomerado text-message number reads its sign-in codes). For a Personal account it also has loginStatus (locked once its first sign-in was verified, when the identity can no longer change) and firstSuccessfulLoginAt. Passwords, tokens, and TOTP seeds are excluded. Use the returned id as connected_account_id when submitting an operation.
manage_connection
Get a protected browser page for a saved login action. This call returns a URL and does not perform the browser action itself.status set to protected_input_required and url. The page checks your authenticated account and requires a PIN where applicable.
The advertised import action is currently unavailable. See connections.
delete_connection
Revoke access to a saved login and request permanent credential deletion. Related jobs and saved sessions are invalidated. Cleanup can remain pending.status set to deleted or deletion_pending. See saved login deletion for account restrictions.