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

# Connect your own AI agent

> Point Claude, ChatGPT, or Cursor at your workspace over MCP with an API key

# Connect your own AI agent

dronelist.io speaks the **Model Context Protocol** (MCP). Paste an API key into Claude Desktop, ChatGPT, or Cursor, and that agent can read your workspace directly — your clients, the people at them, your open opportunities, proposals, tasks, and your own prices.

This is the same set of tools the [in-app assistant](/docs/features/assistant) uses, mounted over a standard protocol.

## The endpoint

```
https://api.dronelist.io/mcp
```

It authenticates with your API key, the same one the REST API uses. There is no separate login and no OAuth flow.

## Setting it up

<Steps>
  <Step title="Create an API key">
    Under [Settings → API Keys](https://app.dronelist.io/settings/api-keys), create a key and give it the scopes you want the agent to have. See [Scopes](#scopes) below.
  </Step>

  <Step title="Add the server to your client">
    Point your MCP client at `https://api.dronelist.io/mcp` over streamable HTTP, with your key in the `Authorization` header.
  </Step>

  <Step title="Ask it something">
    "Which of my proposals are still waiting on a reply?" is a good first question — it exercises the brief tool, which is the one worth starting from.
  </Step>
</Steps>

A typical client configuration:

```json theme={"dark"}
{
  "mcpServers": {
    "dronelist": {
      "url": "https://api.dronelist.io/mcp",
      "headers": {
        "Authorization": "Bearer dl_live_your_key_here"
      }
    }
  }
}
```

The `X-API-Key` header works too, if your client prefers it.

## What the agent can do

<Warning>
  **Everything over MCP is read-only.** No tool that changes a record is mounted here. An MCP
  client has no way to show you an approval card, and every write in dronelist waits for your
  click — so writes stay in the app.
</Warning>

### Your records

| Tool                                   | What it returns                                                                                                                     |
| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `getWeeklyBrief`                       | The four follow-through signals for the week: proposals with no reply, follow-ups due, repeat work coming round, clients gone quiet |
| `findClients` · `getClient`            | Client companies, by name or in full                                                                                                |
| `findPeople` · `getPerson`             | The people at those companies                                                                                                       |
| `findOpportunities` · `getOpportunity` | Open work, by name or in full                                                                                                       |
| `listProposals` · `getProposal`        | Proposals, with open counts and the site pin                                                                                        |
| `listTasks`                            | Open and recently completed tasks                                                                                                   |
| `getServices`                          | Your own prices and typical effort per job                                                                                          |

Start with `getWeeklyBrief` for anything about who to contact or what needs attention.

### Public lookups

These read no data of yours and need no scope, so a key with none still reaches them:

| Tool                 | What it returns                                           |
| -------------------- | --------------------------------------------------------- |
| `getSiteWeather`     | Forecast for a site on a given date                       |
| `getSiteAirspace`    | Informational airspace class and nearest airport          |
| `getSiteNearby`      | Mapped features within 800 m, from OpenStreetMap          |
| `lookupLegalEntity`  | The client's registered entity, from the Global LEI Index |
| `lookupBuyerNotices` | EU public procurement notices for a buyer, from TED       |

<Warning>
  The site tools are a **planning aid only**. They are not an official aviation briefing and not
  permission to fly. Confirm airspace and authorisation with the official service before every
  flight.
</Warning>

## Scopes

The key's scopes decide which tools the agent can even see. A tool outside them is not listed, rather than listed and refused.

| Scope                        | Unlocks                                                                                      |
| ---------------------------- | -------------------------------------------------------------------------------------------- |
| `crm:read`                   | `findClients`, `getClient`, `findPeople`, `getPerson`, `findOpportunities`, `getOpportunity` |
| `proposal:read`              | `listProposals`, `getProposal`                                                               |
| `task:read`                  | `listTasks`                                                                                  |
| `service:read`               | `getServices`                                                                                |
| `crm:read` + `proposal:read` | `getWeeklyBrief`                                                                             |

Grant only what you need. A key meant to answer "who should I chase" needs `crm:read` and `proposal:read` and nothing else.

## Limits

* The endpoint is **stateless** — a fresh server per request, nothing kept between calls.
* The same [rate limits](/docs/rate-limiting) apply as to the REST API: 100 requests a minute on the standard tier.
* MCP calls do **not** spend dronelist credits. Your own AI client bills you for the model.

## Notes

* Revoking the key cuts the agent off immediately.
* The agent reads one workspace — yours. It cannot reach another account's records.
* If you want writes, use the [in-app assistant](/docs/features/assistant). It asks before every change and shows you exactly what it will do.
