# Zyte MCP

Zyte MCP is a remote [MCP](https://modelcontextprotocol.io/) server that
lets an agent use Zyte on your behalf: to get web pages, to extract data from
them, to search the web, and to work with your Scrapy Cloud projects.

[Agentic Web Data](index.md#agentic-web-data) comes with Zyte MCP, so
[installing it](install.md#agentic-web-data-install) is all the setup your coding
agent needs. You can also [connect any other MCP client](#mcp-clients).

Zyte MCP requires a Zyte API subscription. [Sign up on the Zyte dashboard](https://app.zyte.com/account/signup/zyteapi) to get [$5 free for a
month](../zyte-api/pricing.md#zapi-trial).

## Capabilities

### Web requests

Your agent can get any web page, [avoiding bans](../zyte-api/usage/errors.md#zapi-bans), either with
a plain HTTP request or [rendered in a browser](../zyte-api/usage/browser.md#zapi-browser).

Plain HTTP requests can use any HTTP method, request headers and a request
body, which covers APIs and forms as well as static pages.

In a browser, your agent can get the page after its JavaScript runs, take a
[screenshot](../zyte-api/usage/browser.md#zapi-screenshot) of it, and [interact with it](../zyte-api/usage/browser.md#zapi-actions) first: click, type, scroll, wait for an element, run
JavaScript, and so on. It can, for example, log into a website and continue
from there.

Either way, your agent can also choose the [location](../zyte-api/usage/features.md#zapi-geolocation)
and the [type of IP address](../zyte-api/usage/features.md#zapi-ip-type) of the request, emulate a
mobile device, send and receive [cookies](../zyte-api/usage/features.md#zapi-cookies), keep a
[session](../zyte-api/usage/features.md#zapi-sessions) across requests, and tag requests so that you
can find them later in your [stats](../zyte-api/usage/stats/index.md#stats-api).

### Data extraction

Instead of the raw page, your agent can ask for structured data, extracted by
[AI](../zyte-api/usage/extract/index.md#zapi-extract): the fields of a product, an article, a job posting
and [other page types](../zyte-api/usage/extract/index.md#zapi-extract-fields), the items listed on a
listing page, or the links to follow to keep crawling a website.

It can also describe the fields it wants in plain words, and get those on any
page, which is how it handles data that no standard page type covers.

### Web search

Your agent can also [search the web](../zyte-api/usage/search/index.md#zapi-search) and get structured
search results, optionally [as seen from a given country, city or
language](../zyte-api/usage/search/geo.md#zapi-search-geo).

### Scrapy Cloud

Your agent can work with your [Scrapy Cloud](../scrapy-cloud/get-started.md#scrapy-cloud)
[projects](../scrapy-cloud/usage/projects.md#sc-projects): start a [spider](../scrapy-cloud/usage/spiders.md#sc-spiders) or a
[script](../scrapy-cloud/usage/scripts.md#sc-scripts), or [schedule](../scrapy-cloud/usage/reference/http/periodicjobs.md#api-periodicjobs) either to run
regularly, and then follow the resulting [jobs](../scrapy-cloud/usage/jobs/index.md#jobs) through their
counters, [logs](../scrapy-cloud/usage/jobs/logs.md#logs), requests and [items](../scrapy-cloud/usage/items/index.md#sc-items), down to how
many items have each field.

It can also cancel a job, tag one, read and change [project settings](../scrapy-cloud/usage/projects.md#sc-projects), read and write [collections](../scrapy-cloud/usage/reference/http/collections.md#api-collections), and read
the activity log of a project to find out who did what and when.

### Usage and pricing

Your agent can tell you whether Zyte API supports a website and what a request
to it [costs](../zyte-api/pricing.md#tiers), and report your recorded [Zyte API usage](../zyte-api/usage/stats/index.md#stats-api): requests, cost, response times and status codes over a time
window, as a summary or broken down by date, domain, [feature](../zyte-api/pricing.md#zapi-paid-responses-types) or extraction type.

## Working with your agent

Agents have their own tools to get web pages and search the web, and often use
those instead of Zyte. Naming Zyte in your request, e.g.  *“fetch <URL> with
Zyte”*, is usually enough to get Zyte used. For pages that need a browser or a
screenshot, or for data extraction, agents tend to choose Zyte on their own.

Your agent drives the whole task, and Zyte handles one request at a time. How
many requests a task takes, and what your agent does with what comes back, is
up to your agent.

Before anything that changes your account, such as starting a job, changing
project settings or deleting a collection, your agent is told to confirm with
you first.

## Billing

Using Zyte MCP is free, but what your agent does through it is billed to your
Zyte account at [Zyte API prices](../zyte-api/pricing.md#zapi-pricing) and counts towards your
[rate limits](../zyte-api/usage/rate-limit.md#zapi-rate-limit). A single request to your agent can
result in many Zyte API requests, for example one per page of a paginated
listing. Jobs that your agent starts on Scrapy Cloud are billed at
[Scrapy Cloud prices](../scrapy-cloud/pricing.md#sc-pricing).

When you sign in, your agent makes Zyte API requests with a dedicated API key
of your organization, `mcp_access_key`. Filter your [Zyte API stats](../zyte-api/usage/stats/index.md#stats-api) by that key to see what your agent spent, and set a
[spending limit](../zyte-api/pricing.md#zapi-spending-alerts) on it to cap that spending. Jobs
that your agent starts on Scrapy Cloud are not covered by either.

### Organizations

If your Zyte account gives you access to more than one organization, your
agent asks you which one to use, and everything it does through Zyte MCP is
billed to that organization. Your agent keeps using it for the rest of the
session, unless you ask for a different one.

To avoid being asked in every session, name the organization in the
instructions that your agent reads at startup, e.g. in `AGENTS.md` or
`CLAUDE.md`:

```markdown
Use the Zyte organization with ID 123456.
```

Put that line in the instructions of each project to use a different
organization per project, or in your global instructions to use the same one
everywhere. Agents with memory, like Claude Code, may also remember it if you
tell them, e.g.  *“always use Zyte organization 123456”*.

To find the ID of an organization, ask your agent to list your Zyte
organizations, or open the organization on the [Zyte dashboard](https://app.zyte.com/): its ID is the number in the URL,
`https://app.zyte.com/o/<ID>`.

## Other MCP clients

Zyte MCP is a remote MCP server at `https://mcp.zyte.com/mcp`, which you can
use from any MCP client, on its own:

### Claude Code

Run the following in a terminal:

```shell
claude mcp add --transport http zyte https://mcp.zyte.com/mcp
```

Then, in Claude Code, run `/mcp` and sign in to Zyte.

### Codex CLI

Run the following in a terminal:

```shell
codex mcp add zyte --url https://mcp.zyte.com/mcp
```

### GitHub Copilot CLI

Run the following in a terminal:

```shell
copilot mcp add --transport http zyte https://mcp.zyte.com/mcp
```

### VS Code

Run the following in a terminal:

```shell
code --add-mcp '{"name":"zyte","type":"http","url":"https://mcp.zyte.com/mcp"}'
```

### Other

Most MCP clients are configured through a JSON file with a section
like the following:

```json
{
  "mcpServers": {
    "zyte": {
      "type": "http",
      "url": "https://mcp.zyte.com/mcp"
    }
  }
}
```

The first time your agent uses Zyte MCP, your client opens the Zyte sign-in
page in your web browser, where you grant it access to your Zyte account.

If your MCP client does not support signing in, send your [Zyte API key](https://app.zyte.com/o/zyte-api/api-access) as a bearer token instead. For
example, in Claude Code:

```shell
claude mcp add --transport http zyte https://mcp.zyte.com/mcp \
    --header "Authorization: Bearer YOUR_API_KEY"
```

An API key belongs to a single organization, which is the one everything gets
billed to. Signing in is required for anything beyond web requests, data
extraction and web search, so with an API key your agent cannot work with your
Scrapy Cloud projects or read your usage stats.
