> ## 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.

# tools/call

> Call one tool; the answer streams as SSE.


Runs one tool. Support: **supported**. The answer is a server-sent-event stream: each frame is `event: message` plus one `data:` line, progress notifications come first, and the last frame is the JSON-RPC response.

## Params

| Param | Type | Required | Description |
|---|---|---|---|
| `name` | string | yes | The tool name, for example `plungeai_whoami` |
| `arguments` | object | yes | The tool's arguments; always include `user_request`, the user's own words |
| `_meta.progressToken` | string or number | no | When set, progress arrives as `notifications/progress`; without it, as `notifications/message` at level `info` |

## Result

| Field | Value |
|---|---|
| `content[]` | `[{ "type": "text", "text": "…" }]`: Markdown by default, JSON text with `format: "json"` |
| `structuredContent` | The same answer as an object on tools with an output schema, or with `format: "json"` |
| `isError` | `true` only for an `error` outcome |

## 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":3,"method":"tools/call","params":{"name":"plungeai_whoami","arguments":{"user_request":"who am I"}}}'
```

```text Response
event: message
data: {"result":{"content":[{"type":"text","text":"# Who am I\n…"}]},"jsonrpc":"2.0","id":3}
```

The response above is abridged: the tool's Markdown text is shortened to `…`.

Four tools accept `mode: "async"` and answer at once with an execution id; poll `plungeai_get_workflow_status`, then read the output with `plungeai_get_result`. A pre-screen answer (unknown or fenced tool, bad arguments) and every edge error come back as plain JSON, so check `Content-Type` before parsing.

## 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` | `Tool not found: <name>`, or `Tool not permitted for this key: <name>` for a fenced key |
| 401 | `-32001` | No key, or a wrong, revoked or expired key, or a bearer that does not start with `ozk_` |
| 429 | `-32000` | Rate limit reached (counted on `tools/call` only); `Retry-After` and `error.data.retryAfter` give the seconds |

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