> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pomerado.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Build a tool

> Build a new tool when no existing tool does your task on a website.

Build a tool when [Find a tool](/guides/tools/find-tools) turns up nothing for your task. A build explores the website, writes the tool, runs your example once and publishes it, in about 10 minutes. After that the tool runs in seconds.

## Start a build

Describe the task, name the website and its effect, and give one example input.

```json theme={null}
{
  "name": "build_website_tool",
  "arguments": {
    "task": "Search Instacart for a product and return the top results with name, size and price.",
    "site_url": "https://www.instacart.com",
    "effect": "read",
    "example_input": "{\"query\":\"oat milk\"}",
    "idempotency_key": "build-oat-milk-search"
  }
}
```

| Field | What to send |
| - | - |
| `task` | What the tool should do, in plain words |
| `site_url` | The website's https address. Required; a path is ignored |
| `effect` | `read`, `write` or `ask`. See [Choose an effect](/guides/build/choose-an-effect) |
| `example_input` | The input for the one real example the build runs |
| `start_url` | Optional: the exact https page on the site to start from |

Over REST, send the same fields to `POST /v1/builds`. On an integration MCP, `build_tool` does the same for that integration's website and needs no `site_url`.

## Follow the build

The call answers its job at once. Tell the person the tool is building, then [wait for the job](/guides/jobs/wait-for-a-result). A build may stop to ask a question, such as which login to use; see [Answer a job's questions](/guides/jobs/answer-questions). While it runs, the job's `build` field shows its stage and an estimate.

## When it ends

* **Published:** the job succeeds with the new tool's `tool_id`. See [Check the example result](/guides/build/example-result).
* **Already covered:** an existing tool does the task. The job succeeds with it as `tool_id` and `build.existing_tool_id`, and publishes nothing.
* **Blocked:** the build found the task impossible on this site. It fails with `build_blocked`; show its `message` to the person.

<Accordion title="Details">
  - A build without a `site_url`, or with an address that isn't a plain https origin, creates no job and answers `invalid_request`.
  - Builds for ticket, bank or government websites are refused with `site_not_supported`.
  - A published build counts toward your plan. See [Plans and limits](/guides/plans-and-limits).
  - A new tool joins its website's integration, named in `build.integration_id`. See [Use integration MCPs](/guides/integration-mcps/overview).
</Accordion>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.