# Connect an AI assistant (MCP)

Every public Dewstack docs site serves an **MCP** endpoint at `/mcp`. Point Claude, ChatGPT or Cursor at it and the assistant can search and read your documentation directly, instead of guessing from whatever it saw during training.

MCP – the Model Context Protocol – is the standard way an AI assistant connects to an outside source of information. Dewstack implements the server half; the assistant is the client.

https://docs.acme.com/mcp

Use your custom domain if you have one, otherwise your `*.dewstack.com` subdomain. The exact URL for each workspace is on the **API & Agents** page, under **AI Endpoints**, with a copy button.

Public workspaces only

The MCP endpoint is served for workspaces whose visibility is **Public**. Private and password-protected workspaces return 404. Change this under [Hosting & Visibility](/docs/hosting/access-and-content-sharing).

## Connect Claude

1.  In Claude, open **Settings → Connectors → Add custom connector**.
2.  Paste your `/mcp` URL.
3.  Save. No authentication is required.

Claude will list four tools once connected. Ask it something your docs answer and it will call them rather than improvising.

## Connect ChatGPT

In ChatGPT, go to **Settings → Connectors → Add custom connector** – or add it to a custom GPT – paste the same URL, and choose **No authentication**.

ChatGPT's connector and Deep Research features expect a server to expose tools named exactly `search` and `fetch`. Dewstack does, so it works without any adapter.

## Connect Cursor

Add the server to `.cursor/mcp.json` in your project:

{
  "mcpServers": {
    "acme-docs": {
      "url": "https://docs.acme.com/mcp"
    }
  }
}

The **API & Agents** page renders this snippet for you with the server name and URL already filled in – copy it straight out.

## What the assistant can do

| Tool | What it does |
| --- | --- |
| search | Finds pages matching a query; returns titles and URLs |
| fetch | Returns one page's full markdown by id |
| list_articles | Lists every published page with its collection |
| get_article | Returns one page's markdown by collection and page slug |

All four are **read-only** and cover **published pages only** – drafts stay private. Reading through MCP does not consume SmartDocs message credits, so an assistant can browse your whole corpus at no cost.

## Technical details

If you are wiring up a client by hand rather than using one of the three above:

*   **Transport is streamable HTTP.** `POST` your JSON-RPC 2.0 request, get one JSON response back. There is **no SSE** – a client configured for `sse` transport will not connect. A `GET` to `/mcp` returns `405` with a JSON hint, which is correct for a server that never initiates a stream.
*   **No authentication, no OAuth**, and no `.well-known` discovery. The workspace is identified by the hostname you connect to.
*   **Supported methods:** `initialize`, `ping`, `tools/list`, `tools/call`. There are no MCP resources or prompts.
*   **Batched requests are rejected.** Send one request per POST. Clients that batch `initialize` with `notifications/initialized` will fail on connect.
*   **Protocol versions** `2024-11-05`, `2025-03-26` and `2025-06-18` are echoed back; anything else negotiates down to `2025-03-26`.
*   Tool failures come back as tool results carrying an error, not as JSON-RPC protocol errors, so the assistant can read and recover from them.

## Limits and plan requirements

*   Up to **500 published pages** are exposed.
*   `search` is a plain substring match with no relevance ranking. An empty query returns everything.
*   The **API & Agents** page – where the URLs and the Cursor snippet live – is hidden if you have no subscription and no active trial, and for members without the _Manage SmartDocs_ permission. The `/mcp` endpoint itself stays available on any public workspace.

## Related

[Markdown alternates and Copy page The .md URL on every page, and the button that hands it to an assistant.](/docs/ai-ready-docs/markdown-alternates) [API keys Create, rotate and revoke.](/docs/api-and-agents/api-keys)
