# Connect an AI assistant

import { Card } from "zudoku/ui/Card";
import { KeyRound, RotateCcw, BookOpen } from "zudoku/icons";

Connect an assistant with an API key or by signing in to your [account](/definitions), the record that owns your keys and the money you add.

Model Context Protocol (MCP) lets an assistant discover tools and call the API on your behalf.
Use this server address:

```text title="Server address"
https://api.investorliftdata.com/mcp
```

There are two ways to connect:

- **With an API key:** send it as an `Authorization: Bearer` header, as your own code does.
- **By signing in:** use [Connecting with your account instead of a key](#connecting-with-your-account-instead-of-a-key) when your client offers that choice.

## Set up your client

The key examples use `YOUR_API_KEY` as a placeholder.
Replace it with your own key before connecting.

Keep settings containing your key out of source control and shared files.
Clients with sign-in can use the server address without pasting a key.

### Claude

In Claude Code, add **Investorlift Data Services** using the local name `investorliftDataServices`:

```bash title="Investorlift Data Services · Claude Code"
claude mcp add --transport http investorliftDataServices 'https://api.investorliftdata.com/mcp' --header 'Authorization: Bearer YOUR_API_KEY'
```

For Claude's account connection, add a custom connector named **Investorlift Data Services**, paste the server address, and follow the sign-in steps below.

### Cursor

Add this to your MCP settings:

```json title="Cursor"
{
  "mcpServers": {
    "Investorlift Data Services": {
      "url": "https://api.investorliftdata.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
```

### VS Code

Add **Investorlift Data Services** with the local name `investorliftDataServices` in your MCP settings:

```json title="Investorlift Data Services · VS Code"
{
  "servers": {
    "investorliftDataServices": {
      "type": "http",
      "url": "https://api.investorliftdata.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
```

### Another client

For a client that accepts `mcpServers` settings, use:

```json title="Generic client"
{
  "mcpServers": {
    "Investorlift Data Services": {
      "url": "https://api.investorliftdata.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
```

Other clients may ask for the name, URL and header separately.
The [MCP reference](/api/mcp) also provides setup options.

## Use the four tools

**Four tools are available.**

- `score_property` scores a property by address or identifier, like `POST /v1/predict`.
- `score_property_batch` scores a list, like `POST /v1/predict/batch`, with an answer for each property.
- `property_history` reads recorded transactions, flips, listings and permits, like `POST /v1/history`.
- `validate_request` checks a request without underwriting it, like `POST /v1/validate`; it is free.

Each tool costs what its corresponding call costs.
Charged tools are paid from the same account's [balance](/balance).
There is no separate MCP price or separate balance.

The same validation, [errors](/errors), [refund rules](/production/handle-errors) and [safe retries](/production/retry-safely) apply.

`score_property`, `validate_request` and `property_history` each take **exactly one** of `address` or `property_id`.
Both or neither is rejected before charging.
A property identifier from an underwriting answer can be sent back to read that record's history.

`score_property` and `validate_request` also take the optional `partial_answer` flag, on the same terms and at the same cost as the HTTP call ([Accuracy and limits](/scoring/accuracy-and-limits)).

A tool is not a versioned path.
Tools re-enter the **current** version's operations and always return the current answer shape.

There is no older-shaped tool.
The [version-path notice window](/api#versioning) does not apply to tools.

## Connecting with your account instead of a key

Some clients, including Claude, can connect by signing you in, so you never handle a key.
If your client offers a **Connect** button, use it to sign in and approve access on the Investorlift Data Services screen.
The client never sees your API key or password.

A connected app can act as your account and read account details, including your [balance](/balance), the money available to spend.
Each underwrite is paid from that same balance at your account's price.
The approval screen explains that access before you agree.

Find approved connections under **Settings → Security** in the app, with their connection dates.
Disconnecting an app cuts off its access: its next call fails authentication and spends nothing.
Server-to-server integrations can keep using a key when nobody is present to sign in.

## Allow the connection through your firewall

Allow `/v1` and `/mcp`, plus `/.well-known/oauth-protected-resource` and `/.well-known/oauth-protected-resource/mcp`.
The discovery document at those last two paths is read before assistant sign-in.
Blocking it stops sign-in before the assistant can connect.

## Next steps

<div className="docs-next-steps">

<Card className="docs-next-card"><a href="/api-keys"><KeyRound className="docs-next-icon" size={18} strokeWidth={1.5} aria-hidden="true" focusable="false" /><strong>Manage API keys</strong><span className="docs-next-description">Create, rotate or revoke a key.</span><span className="docs-next-arrow" aria-hidden="true">→</span></a></Card>

<Card className="docs-next-card"><a href="/production/retry-safely"><RotateCcw className="docs-next-icon" size={18} strokeWidth={1.5} aria-hidden="true" focusable="false" /><strong>Retry safely</strong><span className="docs-next-description">Repeat a call without paying twice.</span><span className="docs-next-arrow" aria-hidden="true">→</span></a></Card>

<Card className="docs-next-card"><a href="/api/mcp"><BookOpen className="docs-next-icon" size={18} strokeWidth={1.5} aria-hidden="true" focusable="false" /><strong>Read the MCP reference</strong><span className="docs-next-description">Review the connection and tools.</span><span className="docs-next-arrow" aria-hidden="true">→</span></a></Card>

</div>
