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

# Connect an agent

> Setup for Claude Code, Cursor, Codex, Claude Desktop, Gemini CLI and VS Code.

Vistazo's MCP server is at:

```
https://mcp.vistazo.ai/mcp
```

It is a streamable-HTTP endpoint behind OAuth 2.1, so any client supporting remote MCP servers works. The
first call opens a browser to sign you in.

<Tip>
  **Settings → Developer** in the app carries these same snippets, filled in and ready to copy, for
  Vistazo's server and the curated sources. A Vistazo-hosted connection's **Add to an agent** menu item is
  a shortcut to it.
</Tip>

## Setup by client

<Tabs>
  <Tab title="Claude Code">
    Run in any terminal with the `claude` CLI; add `--scope user` to register it for all projects.

    ```bash theme={null}
    claude mcp add --transport http vistazo https://mcp.vistazo.ai/mcp
    ```
  </Tab>

  <Tab title="Cursor">
    Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` in a project. Cursor prompts you to sign in.

    ```json theme={null}
    {
      "mcpServers": {
        "vistazo": { "url": "https://mcp.vistazo.ai/mcp" }
      }
    }
    ```
  </Tab>

  <Tab title="Codex">
    Run in any terminal with the `codex` CLI. Codex does not prompt lazily — the login is an explicit
    step, and it opens a browser.

    ```bash theme={null}
    codex mcp add vistazo --url https://mcp.vistazo.ai/mcp
    codex mcp login vistazo
    ```
  </Tab>

  <Tab title="Claude Desktop">
    Add to `claude_desktop_config.json` (under **Settings → Developer**), then restart Claude Desktop.

    ```json theme={null}
    {
      "mcpServers": {
        "vistazo": {
          "command": "npx",
          "args": ["-y", "mcp-remote", "https://mcp.vistazo.ai/mcp"]
        }
      }
    }
    ```
  </Tab>

  <Tab title="VS Code">
    Add to `.vscode/mcp.json`, or your user `mcp.json`. VS Code prompts you to sign in.

    ```json theme={null}
    {
      "servers": {
        "vistazo": { "type": "http", "url": "https://mcp.vistazo.ai/mcp" }
      }
    }
    ```
  </Tab>

  <Tab title="Gemini CLI">
    Run in any terminal with the `gemini` CLI; it prompts a browser sign-in on first use.

    ```bash theme={null}
    gemini mcp add --transport http vistazo https://mcp.vistazo.ai/mcp
    ```
  </Tab>

  <Tab title="Anything else">
    Point your client at the URL below. It needs to support remote MCP over streamable HTTP with
    OAuth 2.1.

    ```
    https://mcp.vistazo.ai/mcp
    ```

    Clients are registered dynamically, so there is no key to create and nothing to pre-register.
  </Tab>
</Tabs>

## Consent and scope

Signing in shows a consent screen. It asks for one thing that matters: **which workspaces this client may
reach.**

* Tick the workspaces you want this client to work in. A call naming any other workspace is refused, and
  the restriction is enforced server-side rather than by the client behaving well. With a single
  workspace there is nothing to choose and the screen just tells you which one.
* **The first workspace you tick is the billing default.** Calls to the public curated sources (weather,
  World Bank, Treasury, exchange rates, SEC EDGAR) have no workspace argument to give them, so their usage
  is booked to that one.

Pick deliberately if you are in several workspaces. You can re-authorize later to change the set.

## Managing what you have connected

**Settings → Security → Authorized apps** lists every client you have authorized and when it was last
used, with a Revoke button.

Access tokens last an hour and refresh in the background, and refresh tokens last 30 days and extend each
time they are used, so a client you use regularly stays connected. **Revoking takes effect within about a
minute**: an access token already issued cannot be recalled, so the server re-checks the grant behind a
short cache instead of waiting for the token to expire.

<Note>
  One client can hold separate authorizations for Vistazo's core server and for each curated source —
  they are distinct endpoints, and connecting a second does not disturb the first.
</Note>

## First calls

A good opening sequence:

```
list_workspaces          → pick a reachable workspaceId
list_dashboards          → see what exists
get_dashboard            → read one, including its written summary
```

From there, [Widgets](/mcp-tools/widgets) is where building starts. If the workspace has
[skills](/mcp-tools/skills), reading the relevant one first is usually cheaper than inferring the
conventions it already records.
