> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plungeai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# initialize

> Negotiate the protocol version and read the server capabilities.


Opens a conversation: the server answers with the negotiated protocol version, its identity, its capabilities and the `instructions` text your client adds to the model's context. Support: **supported**. Each request stands alone, so `tools/list` and `tools/call` also work without a prior `initialize`.

## Params

| Param | Type | Required | Description |
|---|---|---|---|
| `protocolVersion` | string | yes | The revision your client speaks. `2025-11-25`, `2025-06-18`, `2025-03-26`, `2024-11-05` and `2024-10-07` are answered with that version; anything else gets `2025-11-25` |
| `capabilities` | object | yes | Your client capabilities; `{}` is fine |
| `clientInfo` | object | yes | `{ "name", "version" }` of your client |

## Result

| Field | Value |
|---|---|
| `protocolVersion` | The negotiated version |
| `serverInfo` | `{ "name": "plungeai.com", "version": "2.5.1" }`; the version moves with deploys |
| `capabilities` | `logging: {}`, `resources: {}`, `prompts: {}`, `tools: { listChanged: true }`; the stateless server never sends `list_changed` |
| `instructions` | The server-level usage guide for the model |

## Example

```bash Request
curl -s https://mcp.plungeai.com/v1 \
  -H "Authorization: Bearer $PLUNGE_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'
```

```json Response
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-11-25","capabilities":{"logging":{},"resources":{},"prompts":{},"tools":{"listChanged":true}},"serverInfo":{"name":"plungeai.com","version":"2.5.1"},"instructions":"…"}}
```

The response above is abridged: the long `instructions` string is shortened to `…`.

## Errors

Protocol errors mean the request never reached a tool; the body is `{"jsonrpc":"2.0","error":{"code":…,"message":"…"},"id":…}`.

| HTTP | Code | When |
|---|---|---|
| 200 | `-32602` | `Invalid params: <fields>` for malformed params, for example a numeric `protocolVersion` and no `clientInfo` |
| 400 | `-32600` | A batch that holds `initialize` together with other messages |
| 401 | `-32001` | No key, or a wrong, revoked or expired key, or a bearer that does not start with `ozk_` |

The full table is on the [MCP Reference overview](/mcp-reference/overview#errors).

## notifications/initialized

After `initialize` your client sends `notifications/initialized`. It has no `id`, so the server answers `202 Accepted` with an empty body.

```bash
curl -s -o /dev/null -w '%{http_code}\n' https://mcp.plungeai.com/v1 \
  -H "Authorization: Bearer $PLUNGE_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","method":"notifications/initialized"}'
```
