---
lang: en
---

# MCP server

The MCP server lets an AI client such as Claude Code, Cursor or VS Code read your team's help pages and ask Cactus questions. A client connects to the team address, `https://mcp.heycactus.ai/mcp`, or to one product's address, `https://mcp.heycactus.ai/p/<name>/mcp`. Anyone can use a product's address to read its published help and ask Cactus questions; the team address needs a signed-in person or a personal token.

> Verified against the product on 2026-11-15

> **Also on the website:** The page explains how an AI client reads a help site, and what it finds there when it connects. [How an AI client reads your help site](<https://heycactus.ai/mcp>)

## Connect with a personal token

A personal token lets your client connect without a browser window, because the install line carries the token and the first call is already signed in.

1. Press the button for Claude Code, Cursor or VS Code. Each press makes one token for you and that client
2. Copy the install line and run it, or paste it into the client's settings. For Claude Code, the command adds Cactus for every project on the machine
3. Restart the client, and Cactus is there

> **Note:** Its value is shown once. Pressing again makes a new token and replaces the old one, so the client needs the new install line.

A token reaches every product on your team, and it stops working as soon as you leave the team.

## Sign in with a browser

A client with no token opens a browser window the first time it connects. You sign in there and approve the client.

1. Sign in when the window asks you to
2. Read the request. The screen [Allow … to use Cactus as you?](https://app.heycactus.ai/oauth/consent) names the client by its address and says it will act with your access on your team

> **Note:** A client that gave no address is shown as an application on this computer. Its own name is shown only as what it says about itself, and nothing checks it.

3. Select **Allow** or **Deny**

The screen lists what the client may do, in these words:

- Read your team's pages, code map and past conversations
- Ask Cactus questions and start investigations; each creates a conversation

## Give an agent your team with a code

An agent with no browser, such as a command-line job, shows you a six-digit code and gives you a link to [Give this agent your team?](https://app.heycactus.ai/oauth/claim).

1. Type the code the agent showed you into **The code the agent showed you**
2. Select **Give it my team**. The screen then says the agent has your team.

> **Note:** The code lasts 10 minutes, and five wrong codes end the link. Type a code only from an agent you started yourself.

## Which address to use

| Address | Without an account | With your sign-in or token |
| --- | --- | --- |
| `https://mcp.heycactus.ai/mcp`, the team address | Nothing: every tool needs a sign-in | Every product on your team: help pages, past conversations, questions and investigations |
| `https://mcp.heycactus.ai/p/<name>/mcp`, one product's address | Published help pages, search, what's new, questions, and a message to your team where the product takes [handoffs](https://cactus.heycactus.ai/handoffs) | The same, plus your team's past conversations, questions and investigations |

The team address covers every product on your team. When the team has more than one, the client names one by its number, which it gets from the list of products; the number is optional when the team has only one.

## Limits

| Who | Limit |
| --- | --- |
| Anyone calling a product's address without an account | 60 calls every 5 minutes |
| Anyone sending a message to your team through a client | 3 an hour for each visitor, and 30 a day for each product |
| A signed-in person | 600 calls every 5 minutes |
| A question | 4,000 characters |

## Disconnect a client

| What you do | What stops | What stays |
| --- | --- | --- |
| Revoke a personal token | The token is refused from the next call | The client keeps the old token in its settings; run the install line again to replace it |
| Disconnect a signed-in client | Its access is revoked, so its token is refused on the next call and it must sign in again | An agent that is disconnected has to be claimed again |
| Forget a client | It is removed from the list | The client keeps what it was given, and it returns to the list when it next connects |

## If a connection fails

| What you see | What it means | What to do |
| --- | --- | --- |
| "Sign in to read this team's products." | Your client is not signed in to Cactus | Sign in again through the client, which opens a browser window |
| This team has more than one product, followed by the list | Your client did not say which product it means | Ask it for the product's number, or use that product's own address |
| "This team has no product yet. Create one in Cactus first." | No product is set up on the team | Set up a product in [Getting started](https://cactus.heycactus.ai/getting-started) first |
| "No product _the number you asked for_ on this team" | The number is not a product on your team | Ask the client to list the products and use a number from that list |
| "No page at _the address you asked for_ on this Help Center" | The client asked for a help page that does not exist | Ask the client to list the topics, then read one of them |
| "Cactus could not reach the service that answers this. Try again in a moment." | The service is briefly unavailable | Try again in a moment |
| "This connection request cannot be verified" | The request could not be checked, or the page was opened directly | Start the connection again from your client; nothing was shared |
| "Join a teamspace before connecting an AI client." | Your account is not on a team | Join a [teamspace](https://cactus.heycactus.ai/teamspace) first |
| "Sign in again to approve this connection." | Your sign-in ended before you pressed Allow | Sign in again, then select Allow |
| "This claim could not be completed" | The claim failed, for example with a wrong code | Ask the agent to start again |
| The client reports a rate limit and a wait time | You passed one of the limits above | Wait the time the client gives, then try again |
