All Guides

Any MCP Client

Connect any client that speaks Model Context Protocol revision 2026-07-28 over HTTP.

These servers speak that one revision. There is no initialize handshake and no session id — every request carries its own protocol envelope in params._meta and declares its method in an Mcp-Method header. A 2025-era client will be answered with an unsupported-protocol-version error naming this revision.

Available Endpoints

Left Hook Public MCP

https://mcp.lefthook.com/mcp

23 tools, 8 resources, 3 prompts | No auth | Stateless

Left Hook Docs MCP

https://mcp.lefthook.com/docs/mcp

11 tools, 6 resources | No auth | Stateless

Protocol Details

Protocol Revision2026-07-28 (only)
TransportHTTP POST to a single endpoint
Content-Typeapplication/json
Acceptapplication/json, text/event-stream
Message FormatJSON-RPC 2.0
Required HeadersMcp-Protocol-Version, Mcp-Method (plus Mcp-Name on tools/call)
Discoveryserver/discover
AuthenticationNone required
CORSAll origins (*) allowed
SessionNone — the revision removed sessions

Example: Discover the Server

server/discover replaces the old handshake. It returns the revisions the server speaks, its capabilities, and a description of what it can reach.

curl -X POST https://mcp.lefthook.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Protocol-Version: 2026-07-28" \
  -H "Mcp-Method: server/discover" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "server/discover",
    "params": {
      "_meta": {
        "io.modelcontextprotocol/protocolVersion": "2026-07-28",
        "io.modelcontextprotocol/clientInfo": {
          "name": "my-client",
          "version": "1.0.0"
        },
        "io.modelcontextprotocol/clientCapabilities": {}
      }
    }
  }'

Example: List Tools

curl -X POST https://mcp.lefthook.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Protocol-Version: 2026-07-28" \
  -H "Mcp-Method: tools/list" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list",
    "params": {
      "_meta": {
        "io.modelcontextprotocol/protocolVersion": "2026-07-28",
        "io.modelcontextprotocol/clientInfo": {
          "name": "my-client",
          "version": "1.0.0"
        },
        "io.modelcontextprotocol/clientCapabilities": {}
      }
    }
  }'

Example: Call a Tool

A tool call additionally declares the tool name in an Mcp-Name header; the server rejects the request if it disagrees with the body.

curl -X POST https://mcp.lefthook.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Protocol-Version: 2026-07-28" \
  -H "Mcp-Method: tools/call" \
  -H "Mcp-Name: search_catalog" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "search_catalog",
      "arguments": {
        "query": "CRM integrations"
      },
      "_meta": {
        "io.modelcontextprotocol/protocolVersion": "2026-07-28",
        "io.modelcontextprotocol/clientInfo": {
          "name": "my-client",
          "version": "1.0.0"
        },
        "io.modelcontextprotocol/clientCapabilities": {}
      }
    }
  }'

MCP SDK Configuration

Use @modelcontextprotocol/client v2, which speaks 2026-07-28. The v1 @modelcontextprotocol/sdk client cannot connect to these endpoints.

import { Client } from "@modelcontextprotocol/client";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/client";

const transport = new StreamableHTTPClientTransport(
  new URL("https://mcp.lefthook.com/mcp")
);

const client = new Client({
  name: "my-app",
  version: "1.0.0",
});

// The client probes server/discover and pins the negotiated revision.
await client.connect(transport);

// List available tools
const tools = await client.listTools();
console.log(tools);

// Call a tool
const result = await client.callTool({
  name: "search_catalog",
  arguments: { query: "CRM integrations" },
});
console.log(result);

MCP Config File

For clients that read mcp.json or claude_desktop_config.json:

{
  "mcpServers": {
    "lefthook-catalog": {
      "url": "https://mcp.lefthook.com/mcp"
    },
    "lefthook-docs": {
      "url": "https://mcp.lefthook.com/docs/mcp"
    }
  }
}