Connect by JBRH Open Connect

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 What this means
Audience
developer
Last verified
Product version
6.3.2

The endpoint#

PropertyValue
Endpointhttps://connectbyjbrh.com/mcp
MethodsPOST only. GET and DELETE answer 405 with Allow: POST
Protocol revision2026-07-28
Also accepted2025-11-25, 2025-06-18, 2025-03-26
TransportStreamable HTTP
Server nameconnect-by-jbrh, title Connect by JBRH
AuthenticationNone
DiscoveryGET /.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.

A first exchange#

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"}}}
{"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.