# Tool reference

The MCP server exposes 21 tools. An assistant picks which to call from your
request — you never name a tool yourself — but knowing what exists tells you
what you can reasonably ask for, and what will not work.

Each tool is either **read** or **write**. Write tools need a connection with
write access *and* an account role that allows writing; see
[permissions and safety](/help/mcp/permissions-and-safety/).

## Identifiers

Records are addressed by prefixed ids, never database ids. Every list, search
and get result carries them, which is what lets an assistant chain calls
together — search, then fetch, then download — without you pasting an id out of
the web UI.

| Prefix | Record |
|---|---|
| `q_` | A question asked through ResponseHub |
| `kbi_` | A knowledge base item |
| `qu_` | A questionnaire |
| `rfp_` | An RFP |
| `s_` | A source |

## Questions

### `ask_question`

**Read.** Asks ResponseHub a question, running the full answer pipeline against
your knowledge base and sources. Returns the answer, a confidence rating and the
references used.

| Parameter | Type | Notes |
|---|---|---|
| `question` | string | Required. The question to answer. |
| `answer_detail_level` | string | `low`, `normal` or `high`. Defaults to `normal`. |
| `custom_prompt` | string | Extra instructions to steer the answer. |

If the pipeline is still running when the tool returns, the result says so and
carries the question's id — the assistant polls `get_question` with it.

### `get_question`

**Read.** Retrieves a question by id, with its answer, confidence and references
as they now stand.

| Parameter | Type | Notes |
|---|---|---|
| `id` | string | Required. For example `q_abc123`. |

## Knowledge base

### `search_knowledge_base`

**Read.** Semantic search across your **approved** knowledge base items, ranked
by relevance. This is vector search, not keyword matching, so a question phrased
differently from the stored item still finds it.

| Parameter | Type | Notes |
|---|---|---|
| `query` | string | Required. A natural-language query. |
| `limit` | integer | Defaults to 10. Values outside 1–25 are clamped, and the result says so. |

Only approved items are searchable. To read an item in any other state, fetch it
by id with `get_knowledge_base_item`.

### `get_knowledge_base_item`

**Read.** Fetches a knowledge base item by id, in any state — including one just
created and not yet approved.

| Parameter | Type | Notes |
|---|---|---|
| `id` | string | Required. For example `kbi_abc123`. |

### `create_knowledge_base_item`

**Write.** Creates a knowledge base item. The answer is optional: create the
item with just a question and ResponseHub can draft the answer, exactly as it
does in the web UI.

| Parameter | Type | Notes |
|---|---|---|
| `question` | string | Required. The question this item answers. |
| `answer` | string | The answer. Can be generated later instead. |
| `rationale` | string | Internal notes about the answer. |

New items are not approved, so they are not used for answering until someone
approves them.

### `update_knowledge_base_item`

**Write.** Updates an item. Only the fields supplied are changed — anything
omitted is left alone, so a partial update never blanks a field by accident.

| Parameter | Type | Notes |
|---|---|---|
| `id` | string | Required. |
| `question` | string | The question this item answers. |
| `answer` | string | The answer text. |
| `rationale` | string | Internal notes. |
| `applicable` | boolean | Whether the item applies to your organisation. |
| `auto_answer` | boolean | Whether it may be used to auto-answer questionnaire items. |
| `answer_detail_level` | string | `low`, `normal` or `high`, for regenerated answers. |
| `state` | string | The review state: `approved`, `needs_input` or `new`. |

Approving an item is an ordinary field update — `state: "approved"` — so "approve
this item" is a request an assistant can carry out.

**Changing the question re-runs the answer:** Editing an item's question re-runs the answer pipeline in the background, just as
editing it in the web UI does, and that can replace the stored answer. Read the
item back with `get_knowledge_base_item` once it has settled.

Categories cannot be set through MCP. There is no tool for listing an account's
categories, so there would be no way for an assistant to discover a valid one.

### `delete_knowledge_base_item`

**Write.** Deletes an item.

| Parameter | Type | Notes |
|---|---|---|
| `id` | string | Required. |

This is a soft delete — the item leaves the active knowledge base and can be
restored in the web UI, or by support.

## Questionnaires

### `list_questionnaires`

**Read.** Lists the account's questionnaires with their status and completion
stats, most recent first.

| Parameter | Type | Notes |
|---|---|---|
| `page` | integer | Defaults to 1. |
| `limit` | integer | Defaults to 20. Values outside 1–100 are clamped, and the result says so. |

### `get_questionnaire`

**Read.** Fetches one questionnaire, including its status and completion stats.

| Parameter | Type | Notes |
|---|---|---|
| `id` | string | Required. For example `qu_abc123`. |

### `create_questionnaire`

**Write.** Starts a questionnaire from an XLSX or DOCX file. Question extraction
runs in the background — poll `get_questionnaire` to watch it progress.

| Parameter | Type | Notes |
|---|---|---|
| `filename` | string | Required, with its extension. |
| `file_url` | string | Preferred. An http(s) URL ResponseHub fetches the file from. |
| `content_base64` | string | The file inline, base64-encoded. Only workable for tiny files. |
| `content_type` | string | Rarely needed — inferred from the extension. |
| `title` | string | Kept exactly as given. Omit it and one is generated from the document. |
| `description` | string | Optional. |
| `deadline` | string | An ISO 8601 date, `YYYY-MM-DD`. |

See [uploading documents](/help/mcp/uploading-documents/) for why `file_url` is
the one that works in practice.

### `download_questionnaire`

**Read.** Exports a questionnaire with its answers merged back in, returned
base64-encoded in the result.

| Parameter | Type | Notes |
|---|---|---|
| `id` | string | Required. |
| `format` | string | `original` (default) keeps the uploaded format; `csv` exports a CSV. |

Every download through MCP is written to the audit trail, the same as a download
from the web UI.

### `delete_questionnaire`

**Write.** Deletes a questionnaire and its items.

| Parameter | Type | Notes |
|---|---|---|
| `id` | string | Required. |

A soft delete, restorable in the web UI.

## RFPs

The RFP tools mirror the questionnaire tools exactly, with one addition.

### `list_rfps`

**Read.** Lists the account's RFPs with their status and completion stats, most
recent first. Takes `page` and `limit`, as `list_questionnaires` does.

### `get_rfp`

**Read.** Fetches one RFP by id, including its status, context and completion
stats.

| Parameter | Type | Notes |
|---|---|---|
| `id` | string | Required. For example `rfp_abc123`. |

### `create_rfp`

**Write.** Starts an RFP from an XLSX or DOCX file. Item extraction runs in the
background.

| Parameter | Type | Notes |
|---|---|---|
| `filename` | string | Required, with its extension. |
| `file_url` | string | Preferred. An http(s) URL ResponseHub fetches the file from. |
| `content_base64` | string | The file inline, base64-encoded. Tiny files only. |
| `content_type` | string | Rarely needed. |
| `title` | string | Kept exactly as given. |
| `description` | string | Optional. |
| `deadline` | string | An ISO 8601 date. |
| `background` | string | Background context used to steer the answers. |

### `download_rfp`

**Read.** Exports an RFP with its answers, base64-encoded, in the original
format or as CSV. Recorded in the audit trail.

| Parameter | Type | Notes |
|---|---|---|
| `id` | string | Required. |
| `format` | string | `original` (default) or `csv`. |

### `delete_rfp`

**Write.** Soft-deletes an RFP and its items.

| Parameter | Type | Notes |
|---|---|---|
| `id` | string | Required. |

## Sources

### `list_sources`

**Read.** Lists the account's sources with their processing state, most recent
first.

| Parameter | Type | Notes |
|---|---|---|
| `page` | integer | Defaults to 1. |
| `limit` | integer | Defaults to 20. Values outside 1–100 are clamped. |

### `get_source`

**Read.** Fetches one source, including how far through processing it is — which
is how an assistant knows when an upload is ready to answer from.

| Parameter | Type | Notes |
|---|---|---|
| `id` | string | Required. For example `s_abc123`. |

### `create_source`

**Write.** Uploads a policy or other document. ResponseHub reads it and prepares
its content so answers can be drawn from it.

| Parameter | Type | Notes |
|---|---|---|
| `filename` | string | Required, with its extension. PDF, DOCX, DOC, ODT, RTF, PPTX and PPT are accepted. |
| `file_url` | string | Preferred. An http(s) URL ResponseHub fetches the file from. |
| `content_base64` | string | The file inline, base64-encoded. Tiny files only. |
| `content_type` | string | Rarely needed. |
| `title` | string | Kept exactly as given. Omit it and one is generated from the document. |
| `description` | string | Optional. |

Processing runs in the background — poll `get_source` until it is ready to use.

### `delete_source`

**Write.** Deletes a source and takes its content out of use for answering.

| Parameter | Type | Notes |
|---|---|---|
| `id` | string | Required. |

A soft delete, restorable in the web UI.

## What is not here

There is no tool for questionnaire or RFP *items* — an assistant can start a
questionnaire, watch it progress and download the finished file, but the
question-by-question work of reviewing and approving answers stays in the web UI
and the Chrome extension. There is no tool for creating accounts, managing
members or reading billing either.

The [JSON API](/help/api/) covers considerably more ground. If an assistant
cannot do something through MCP, that is where to look.

## Next steps

- [Reading answers and evidence](/help/mcp/answers-and-evidence/)
- [Uploading documents](/help/mcp/uploading-documents/)