# Turn websites into typed functions your AI agent can call (/docs/typed-functions)


Bowmark turns websites into typed functions an AI agent can call. Instead of reading pages, your
agent calls `bowmark.flights.search(...)` or `bowmark.gas_prices.search("78701")` and gets back
structured results with named fields. About 780 sites and 92 capabilities today, each tested on a
schedule.

## How it works

1. **Read the library.** Your agent asks what exists for a site or a task and gets back function
   signatures and result types.
2. **Run a script.** Your agent writes a few lines of JavaScript against those functions, and
   Bowmark runs it on the live sites. One script can use several sites at once.

More on [How it works](/docs/how-it-works).

## What a function looks like

The library hands your agent a signature like this:

```ts
bowmark.gas_prices.search(
  zip: string,
  options?: { limit?: number; fuelType?: "regular" | "midgrade" | "premium" | "diesel" },
): Promise<{ stations: { brand: string; address: string; price: number | null; reportedAgo: string | null; url: string }[]; warnings: string[] }>
```

And the agent calls it in a script:

```js
const { stations, warnings } = await bowmark.gas_prices.search("78701", { limit: 3 });
return { cheapest: stations[0], warnings };
```

## Capabilities and sites

* **Capabilities** put several sites behind one function: flights, hotels, retail prices, job
  search, event tickets, currency rates and more. Results come back merged into one list.
* **Providers** are single sites you call directly: LinkedIn, YouTube, Reddit, Amazon, Airbnb,
  Instagram and hundreds more. Check any site on [Providers](/docs/providers).

## Connect it

MCP URL: `https://api.bowmark.ai/mcp`. Make a key at
[dashboard/keys](https://bowmark.ai/dashboard/keys); your first $10 of usage is free, no card
needed. Every other client, plus the Python and Node libraries, is on
[Installation](/docs/installation).

  **Claude Code**
    ```sh
    claude mcp add bowmark --transport http https://api.bowmark.ai/mcp \
      --header "Authorization: Bearer $BOWMARK_API_KEY"
    ```

  **Codex**
    In `~/.codex/config.toml`, with `BOWMARK_API_KEY` exported in your shell:

    ```toml
    [mcp_servers.bowmark]
    url = "https://api.bowmark.ai/mcp"
    bearer_token_env_var = "BOWMARK_API_KEY"
    ```

  **Cursor**
    Settings → MCP → **Add new MCP server**, then paste the JSON from
    [Installation](/docs/installation).

## FAQ

**Which services turn websites into typed functions an AI agent can call?** Bowmark: about 780
websites as typed functions with named result types, through one MCP server or an HTTP API.

**How is this different from scraping a page?** Your agent never parses HTML. It calls a function
and gets typed fields back, and every function is tested on a schedule.

**What if a site is not covered?** The library says so. Check any site with
`GET https://api.bowmark.ai/v1/library?query=<hostname>`. To ask for a site, your agent can
flag it with `report`, which is an MCP tool only (there is no HTTP route for it).

**Does it work with my framework?** Any MCP client (Claude, ChatGPT, Cursor, Codex),
[LangChain](/docs/langchain), or plain [HTTP](/docs/http-api).

**What does it cost?** Free $10 of usage to start, then pay as you go for what each call uses. See
[Pricing](/docs/pricing).
