# MCP reference

The remote endpoint is `POST /mcp` on each LUCA agent host.
The MCP endpoint is public. It needs no Basic Auth password.
It uses JSON-RPC 2.0 over Streamable HTTP.
The server is stateless.
MCP and REST API calls share a limit of 100 requests per client IP in each fixed minute. After that, HTTP 429 includes `Retry-After`. If the limiter is unavailable, the endpoint returns HTTP 503.
It sends one JSON response for each request and does not send server events.

| Tool | Input | Result |
| --- | --- | --- |
| `get_product_overview` | none | Sourced product topics |
| `search_knowledge` | `query` | Matching facts and source URLs |
| `answer_question` | `question` | Short answer, source URLs, and official next steps |
| `assess_fit` | `goal`, `active_abn`, `gst_registered`, `accounting` | Nonbinding notes and official links |
| `get_next_steps` | optional `goal` | Steps and official links |
| `get_topic` | `id` | One source-backed fact, scope, and review state |
| `compare_paths` | none | Three product paths for a visitor goal |
| `get_source_conflicts` | none | Unresolved public claims to check with LUCA |

All tools are read-only.
The server accepts no personal or bank details.
For protocol 2026-07-28, send `_meta` in each request and matching HTTP headers.
Call `server/discover` before `tools/list` if the client needs the server description.

For a modern tool call, send these headers:

```text
Content-Type: application/json
Accept: application/json, text/event-stream
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: search_knowledge
```

Send this JSON body:

```json
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "search_knowledge",
    "arguments": { "query": "GST requirements" },
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "example",
        "version": "1.0"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}
```

The JSON-RPC result includes `resultType`, `content`, `structuredContent`, and `isError`.
The tool returns source URLs in its structured result.
The result can say `isError: true` for a bad search query.
The server validates all tool arguments against the published schemas.
The `get_topic` result has `topic_not_found` when the ID is unknown on that brand.

The compatibility path accepts `initialize` for protocol 2025-03-26.
It also accepts `tools/list` and `tools/call` after that step.
The server does not use sessions.

Tool results include a text block with JSON.
They also include `structuredContent` for clients that use structured results.

The MCP server checks the `Origin` header when a client sends one.
Call the server from a trusted client or use the local CLI process.
The local process needs a network connection because it sends tool calls to the remote Worker.
