# Docs MCP server

Search and read these docs from inside an AI tool, over the Model Context Protocol. It is read-only, needs no key and only ever returns what is already public on this site.

## Connect

The server speaks MCP over plain HTTP: send JSON-RPC messages with `POST` to `https://bynefit.com/docs?format=mcp`. Any client that accepts a remote HTTP MCP server can use that address.

**Claude Code**

```
claude mcp add --transport http bynefit-docs "https://bynefit.com/docs?format=mcp"
```

**Cursor, and a `.mcp.json` file**

```
{
  "mcpServers": {
    "bynefit-docs": {
      "type": "http",
      "url": "https://bynefit.com/docs?format=mcp"
    }
  }
}
```

**VS Code** (`mcp.json`)

```
{
  "servers": {
    "bynefit-docs": {
      "type": "http",
      "url": "https://bynefit.com/docs?format=mcp"
    }
  }
}
```

**Claude Desktop**: add a custom connector in Settings and paste `https://bynefit.com/docs?format=mcp` as its address.

For any other tool, the address and the transport (plain HTTP, not stdio) are what matter.

## What it offers

| Tool | What it does |
| --- | --- |
| `search_docs` | Search the public Bynefit developer docs. Returns matching pages with a heading and a snippet. |
| `get_page` | Return one docs page as Markdown, by its slug from list_pages or search_docs. |
| `list_pages` | List every public docs page with its slug, title, group and one-line summary. |
| `list_capabilities` | List each capability with its honest state (available, by approval or planned). Check this before relying on a feature. |

Ask `list_capabilities` before relying on a feature: it reports each one as available, by approval or planned, the same as the state chips on these pages.

## Try it by hand

**cURL**

```bash
curl "https://bynefit.com/docs?format=mcp" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_docs","arguments":{"query":"webhook signature"}}}'
```

**JavaScript**

```javascript
const res = await fetch('https://bynefit.com/docs?format=mcp', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'tools/call',
    params: { name: 'search_docs', arguments: { query: 'webhook signature' } },
  }),
});
const { result } = await res.json();
console.log(result.content[0].text);
```

**Python**

```python
import requests

reply = requests.post('https://bynefit.com/docs?format=mcp', json={
    'jsonrpc': '2.0',
    'id': 1,
    'method': 'tools/call',
    'params': {'name': 'search_docs', 'arguments': {'query': 'webhook signature'}},
}).json()
print(reply['result']['content'][0]['text'])
```

A search reply looks like this (shortened). The text of each tool result is JSON, so an agent reads it with one more parse:

```
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [{ "type": "text", "text": "{ \"results\": [{ \"slug\": \"webhooks\", \"title\": \"Webhooks\", \"url\": \"...\", \"snippet\": \"...\" }] }" }],
    "isError": false
  }
}
```

## Limits

- Read-only. No tool changes anything, and there is nothing to sign in to.
- About 120 requests a minute from one address (IPv6 addresses count by their /64), a batch of up to 5 messages counts as that many, and a request body is up to 64 KB. Over the limit you get HTTP 429 with `Retry-After`.
- Tools only. There are no MCP resources or prompts yet, and no streaming: every answer is one JSON reply.

> **This is the docs, not the API.** It cannot read a Space or call an endpoint. To let an agent do that, give it an [agent key](https://bynefit.com/docs/agent-keys).

---

Source: https://bynefit.com/docs/docs-mcp
Checked against the live API on October 17, 2026.
