# The Connect MCP server

Connect runs a remote MCP server at `POST https://connectbyjbrh.com/mcp`. It implements protocol revision 2026-07-28 over Streamable HTTP, accepts POST only, mints no session, and needs no credential. It offers ten read-only documentation tools, four resources and two prompts. Nothing authenticated exists behind it.

- **Status:** Available
- **Audience:** developer
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/developers/mcp-server/

## The endpoint

| Property | Value |
|---|---|
| Endpoint | `https://connectbyjbrh.com/mcp` |
| Methods | `POST` only. `GET` and `DELETE` answer `405` with `Allow: POST` |
| Protocol revision | `2026-07-28` |
| Also accepted | `2025-11-25`, `2025-06-18`, `2025-03-26` |
| Transport | Streamable HTTP |
| Server name | `connect-by-jbrh`, title `Connect by JBRH` |
| Authentication | None |
| Discovery | `GET /.well-known/mcp.json` |

The discovery document is deliberately small and says only what is true: the endpoint, the transport, the current revision, the list of supported revisions, the tool names, and an `authentication` field whose value is the plain sentence *none for the public documentation tools*. A client that reads it before connecting learns the shape of the server without a round trip.

## What revision 2026-07-28 changed

This revision altered the transport materially, and a client written against an older example gets surprises rather than errors if it assumes otherwise.

- **POST only.** The standalone GET stream is gone. Opening one here returns `405` with a JSON-RPC error explaining why, rather than leaving the client waiting on a stream that will never carry anything.
- **No protocol-level sessions.** `Mcp-Session-Id` is ignored and never minted. There is no session to resume, so `Last-Event-ID` is ignored too.
- **Per-request metadata.** Each request carries its protocol version and client info in `params._meta` under the `io.modelcontextprotocol/protocolVersion` and `io.modelcontextprotocol/clientInfo` keys, mirrored into the `MCP-Protocol-Version`, `Mcp-Method` and `Mcp-Name` headers.
- **Headers must agree with the body.** A header that disagrees is rejected with code `-32020`, so a load balancer routing on the header and a server executing on the body can never act on two different requests.

> **Note** Clients that still speak an initialization-based revision are answered normally: `initialize` returns a result, the agreed version is echoed back, and later requests are accepted without per-request metadata. Refusing them would mean the connector directories of the day could not reach Connect at all.

## A first exchange

```http
POST /mcp HTTP/1.1
Host: connectbyjbrh.com
Content-Type: application/json
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/list

{"jsonrpc": "2.0", "id": 1, "method": "tools/list",
 "params": {"_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28"}}}
```

```json
{"jsonrpc": "2.0", "id": 1, "result": {"tools": [
  {"name": "search_public_docs",
   "title": "Search Connect documentation",
   "inputSchema": {"type": "object",
                   "properties": {"query": {"type": "string"}},
                   "required": ["query"]},
   "annotations": {"readOnlyHint": true, "destructiveHint": false,
                   "idempotentHint": true, "openWorldHint": false}}
]}}
```

A request with no `id` is a notification: it is answered with `202` and an empty body, never with a JSON-RPC result. Batches are refused — send one message per request. The body limit is 256 KiB, above which the server answers `413`.

## Public, and nothing else

Every tool on this server reads the generated documentation corpus. There is no tool that runs SQL, no tool that proxies an internal route, no tool that writes, and no authenticated tool of any kind — the registry holds ten entries and they are all read-only. A workspace's mail, calls, relationships and files are not reachable through MCP.

The server's own capability declaration matches that: tools, resources and prompts are advertised with `listChanged: false`, and resources with `subscribe: false`. Nothing changes underneath a connected client except on a deploy, so a client that polls `tools/list` on a timer is spending its budget for nothing.

Origin handling follows the specification rather than a convention. A request with no `Origin` header — a desktop MCP client — is allowed. A request with a present but unrecognised `Origin` is refused with `403`, which is what stops a page on some other website from driving this server through a visitor's browser.

## Questions

### Do I need to call `initialize` first?

Under revision 2026-07-28 you do not: send `tools/list` or `tools/call` with the metadata in `params._meta` and it is answered. `initialize` is still accepted, and is the right first call if your client speaks an older revision — the response tells you which version was agreed.

### Why did my `GET /mcp` return 405?

Because this revision removed the standalone GET stream. The error body says so explicitly rather than failing silently. Send a POST instead: there is no stream to open and no session to establish.

### Is there a rate limit?

Yes — 120 calls per minute per client address, answered with HTTP `429` and JSON-RPC code `-32603` when exceeded. No `Retry-After` or `X-RateLimit-*` header is sent; see [API rate limits](/developers/api-rate-limits/).

## Related

- [Public MCP tools](https://connectbyjbrh.com/developers/mcp-public-tools/)
- [MCP error shapes](https://connectbyjbrh.com/developers/mcp-errors/)
- [Using Connect from any MCP client](https://connectbyjbrh.com/developers/mcp-client-generic/)
- [Authenticating to the MCP server](https://connectbyjbrh.com/developers/mcp-authentication/)
- [Model Context Protocol](https://connectbyjbrh.com/docs/protocols/mcp/)
- [Streamable HTTP](https://connectbyjbrh.com/docs/protocols/streamable-http/)

## What this page is based on

- `backend/app/mcp_server.py`
- MCP specification 2026-07-28 — https://modelcontextprotocol.io/specification/2026-07-28
- Connect capability registry (docs-source/facts.py)
