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

# Connect AI clients through the Trassets MCP server

> Connect Claude Code, Cursor, VS Code, Copilot Studio and other MCP clients to your Data API v1 data with an API key, and learn what the MCP server can do, where its limits are, and which risks to manage.

The Trassets MCP server lets AI clients read your Data API v1 data through the [Model Context Protocol](https://modelcontextprotocol.io). Every call runs with your API key and is subject to the same restrictions, grants, and rate limit as a direct API request.

## What the MCP server can do

The server offers five tools. All of them only read data; each one calls a Data API endpoint with your key.

| Tool | What it does | API endpoint |
| - | - | - |
| `list_catalog` | Lists the categories and tables your key may read. | `GET /v1/catalog` |
| `get_table_data` | Reads one page of a table, filtered by exact values such as `property_id`. Some tables require a filter (see [Filtering](https://docs.trassets.ai/v1/concepts/filtering.md)). | `GET /v1/{category}/{table}` |
| `get_changes` | Lists the tables whose data changed since a point in time, at most 120 days back. | `GET /v1/changes` |
| `list_raw_tables` | Lists the raw tables synced from your source systems. Empty for keys without raw access. | `GET /v1/raw/tables` |
| `get_raw_table` | Reads one page of a raw table. Needs a key of type `raw` with both personal data grants (see [Key types](https://docs.trassets.ai/v1/authentication.md#key-types)). | `GET /v1/raw/{table_name}` |

## Endpoint and key

| Setting | Value |
| - | - |
| URL | `https://mcp.trassets.ai/mcp` |
| Transport | Streamable HTTP |
| Authentication | `X-API-Key: <key>` or `Authorization: Bearer <key>` on every request |

You need a key with channel **MCP**. An administrator creates it in the [portal](https://portal.api.trassets.ai) like any other key (see [Authentication](https://docs.trassets.ai/v1/authentication.md#channel)) and selects **MCP** under **Channel**. A key works for exactly one channel: the MCP server rejects keys created for the API, and the REST API rejects MCP keys.

> [!WARNING]
>
> Data that a tool returns is processed by the model provider of your AI client. Only connect clients whose provider your organization has approved for this data, and don't combine the MCP server with tools that can send data to third parties. See [Risks](#risks).

## Supported AI clients

MCP is model-independent: the client brings the model, so the model that answers depends on your client. What matters is whether the client can send a fixed API key header to a remote MCP server. The MCP server does not support OAuth sign-in yet, so clients that only offer OAuth can't connect.

As of November 2026. Vendors change their MCP support often; if a step doesn't match, check the client's documentation.

| Client | Supported | Where the key goes |
| - | - | - |
| Claude Code | Yes | `--header` in `claude mcp add` (see below) |
| Cursor | Yes | `headers` in `.cursor/mcp.json` |
| VS Code (GitHub Copilot agent mode) | Yes | `headers` in `.vscode/mcp.json` |
| OpenAI Codex CLI | Yes | `bearer_token_env_var` in `~/.codex/config.toml` |
| Gemini CLI | Yes | `headers` in `~/.gemini/settings.json` |
| Microsoft Copilot Studio | Yes | Authentication **API key**, type **Header**, header name `X-API-Key` (see below) |
| Claude (claude.ai, Claude Desktop) as custom connector | Limited | Only if your organization sees the **Request headers** option (beta); otherwise use Claude Code |
| ChatGPT | Not yet | Custom connectors require OAuth |
| Microsoft 365 Copilot (declarative agents) | Not yet | MCP plugins require OAuth |

## Example: Claude Code

```bash theme={null}
claude mcp add --transport http trassets https://mcp.trassets.ai/mcp \
  --header "X-API-Key: $TRASSETS_MCP_KEY"
```

Then ask Claude Code which Trassets tables it can read. Other clients need the same two values: the URL and the key, sent as `X-API-Key` header or as `Authorization: Bearer <key>`. Don't put the plaintext key into a config file you commit: Cursor resolves `${env:TRASSETS_MCP_KEY}` in `headers`, and VS Code prompts for it through `${input:...}`.

## Example: Microsoft Copilot Studio

1. Open your agent, go to **Tools**, select **Add a tool**, and add a new Model Context Protocol server.
2. Enter a name, a description, and `https://mcp.trassets.ai/mcp` as server URL.
3. Under authentication, choose **API key**, type **Header**, and enter `X-API-Key` as header name.
4. Create a connection, enter your MCP key, and select **Add to agent**. All five tools are enabled by default.
5. Before you publish the agent, check which credentials the tool uses. With maker-provided credentials, everyone who uses the agent reads with your key and sees everything your key may see. Instead, have an administrator create one MCP key per user and let each user connect with their own key.

Then ask the agent, for example, "Which Trassets tables can you read?" or "How many properties are in the data?"

## Limits

* **Read only.** The server can't create or change data.
* **No calculations.** Tools return rows, not sums, averages, or KPIs. If you ask for a total, the model in your client computes it from the rows it has read, and it can miscount or stop after one page. For row counts, the tools return `total`. Pre-computed figures are only those in the [KPI tables](https://docs.trassets.ai/v1/data-model/kpi.md).
* **Small pages.** A tool call returns at most 200 rows (default 50). Reading a large table takes many calls, and each call counts against your key's budget of 2,500 requests per hour (see [Rate limits](https://docs.trassets.ai/concepts/rate-limits.md)). For full exports, use the REST API with a separate key for channel API (see [Pagination](https://docs.trassets.ai/v1/concepts/pagination.md)).
* **Exact filters only.** `get_table_data` filters by exact value on a table's filter columns. Ranges and text search are not available.
* **Data freshness.** The data is as current as the last sync of each table; there is no fixed interval. `get_changes` shows `last_sync_at` per table (see [Sync cycle](https://docs.trassets.ai/concepts/sync-cycle.md)).
* **API key only.** There is no OAuth sign-in yet (see [Supported AI clients](#supported-ai-clients)).

## Risks

* **Data leaves Trassets.** Everything a tool returns goes to the model provider of your client and is processed under the provider's terms. Your organization decides which provider may process which data. Use keys without the [personal data grants](https://docs.trassets.ai/v1/authentication.md#personal-data-grants) unless the use case needs them.
* **Instructions hidden in data.** Free-text fields such as comments or booking texts can contain text that reads like an instruction. The tools tell the model to ignore such text, but no model follows that reliably.
* **Outbound tools.** An agent that reads your data, processes such text, and can also send data out (email, web requests, file uploads, MCP servers that write elsewhere) can be tricked into sending your data to third parties. Use the Trassets MCP server only in agents and sessions without such tools.
* **Unverified answers.** The model can misread fields, mix up tables, or extrapolate from one page. Check figures against the API or your reports before you rely on them.
* **One key per person.** Create one MCP key per person, name it after them in the portal, and don't share it, not even through an agent that others use. When someone leaves, delete their key; that ends their MCP access.

## Error messages

Tools report errors as text. The most common ones:

| Message | Meaning |
| - | - |
| Missing API key. Send it in the X-API-Key header or as Authorization: Bearer \<key>. | The client sends no key. Check the header configuration. |
| API key is missing or expired. | The key has expired. Create a new one in the portal. |
| API key is invalid, disabled, or not permitted to access this resource. | The key is unknown or disabled, was created for channel API instead of MCP, or may not read this table. |
| Table is unknown or not released in v1 for this customer. | The table doesn't exist for your organization. Call `list_catalog` for the available tables. |
| Invalid request: … | The Data API rejected the request, for example because of an unknown or missing required filter or a `since` more than 120 days back. The rest of the message says why. |
| Rate limit reached. Retry after N seconds. | Your key's hourly budget is used up. |
| Data API error. Try again later. Request ID: … | Temporary server error. If it persists, contact support and quote the Request ID (see [Errors](https://docs.trassets.ai/concepts/errors.md#contacting-support)). |
| Data API did not respond in time. / Data API is not reachable. | Temporary problem. Try again later. |
| Data was re-synced during pagination. Restart without cursor. | The table was refreshed while paging. Read it again from the first page. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.