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

# MCP tools

> Every tool the Wordsmith MCP server offers: what it does, the scope it needs, and its arguments.

> [!NOTE]
>
> **Live.** All 26 tools are live in the [MCP server preview](/mcp-server). This page records each tool's arguments as built. Where the build departs from the proposal, the tool's section says so.

The server offers 26 tools. An assistant sees only the tools its token's [scopes](/proposed/scopes) allow. Each tool calls the same code as the REST endpoints linked from it, so results match field for field.

**Hints** are the MCP annotations hosts use for approval prompts: *read-only* tools never change anything, *destructive* tools can overwrite data, take access away or delete, and *open world* tools reach outside Wordsmith.

**Retries.** A tool that starts long-running work returns the same operation when the same user repeats the same call within ten minutes of starting it, so a host that retries a timed-out call does not start the work twice. The same call made later starts the work again.

## Summary

| Tool | Status | Scope | Hints | REST equivalent |
| - | - | - | - | - |
| `ask_wordsmith` | Live | `sessions:write` | write | [Create Question](/api-reference/agents/create-question) |
| `get_operation` | Live | the operation's read scope | read-only | [Get Operation](/api-reference/operations/get-operation) |
| `cancel_operation` | Live | the operation's write scope, plus `files:read` where that is `files:write` | write | [Cancel Operation](/api-reference/operations/cancel-operation) |
| `find_resources` | Live | the read scope of `kind` | read-only | The list routes, such as [List Agents](/api-reference/agents/list-agents) and [List Reviews](/api-reference/reviews/list-reviews) |
| `get_resource` | Live | the read scope of `kind` | read-only | The detail routes, such as [Get Agent](/api-reference/agents/get-agent), [Get Playbook](/api-reference/playbooks/get-playbook), [Get Report](/api-reference/reports/get-report) and [Get Task](/api-reference/tasks/get-task) |
| `search_knowledge` | Live | `repositories:read` | read-only | [Search Knowledge](/api-reference/search/search-knowledge) |
| `legal_research` | Live | `research:read` | read-only, open world | [Search Research Sources](/api-reference/research/search), [Get Research Document](/api-reference/research/get-document) |
| `review_document` | Live | `reviews:write`, plus `files:read` for the files | write | [Create Review](/api-reference/reviews/create-review) |
| `get_review` | Live | `reviews:read` | read-only | [Get Review](/api-reference/reviews/get-review), [List Findings](/api-reference/reviews/list-findings) |
| `update_review` | Live | `reviews:write` | write | [Generate Redline](/api-reference/reviews/generate-redline) |
| `transform_document` | Live | `files:write`, plus `files:read` for the inputs | write | [Document actions](/api-reference/documents/compare) |
| `draft_document` | Live | `files:write` and `files:read`, plus `blueprints:read` with a blueprint and `sessions:read` with a session | write | [Create Draft](/api-reference/drafts/create-draft) |
| `manage_repository` | Live | `repositories:write`, plus `files:read` for `add_files` | write, destructive | [Repositories](/api-reference/repositories/create-repository) |
| `manage_report` | Live | `reports:write`, plus `files:read` for `file_ids` and `repositories:read` for `repository_id` | write, destructive | [Reports](/api-reference/reports/create-report) |
| `share_resource` | Live | the write scope of `kind` | write, destructive | [Update Sharing](/api-reference/sharing/update-sharing) |
| `manage_organisation` | Live | `directory:admin` | write, destructive | [Organisation](/api-reference/organisation/get-company-profile) |
| `get_usage` | Live | `usage:read` | read-only | [Usage and value](/api-reference/usage/get-usage-summary) |
| `find_tasks` | Live | `tasks:read` | read-only | [List Tasks](/api-reference/tasks/list-tasks) |
| `create_task` | Live | `tasks:write` | write | [Create Task](/api-reference/tasks/create-task) |
| `update_task` | Live | `tasks:write` | write, destructive | [Update Task](/api-reference/tasks/update-task) and related |
| `add_task_comment` | Live | `tasks:write` | write | [Add Comment](/api-reference/tasks/add-comment) |
| `reply_to_task_requester` | Live | `tasks:write` | write, open world | [Add Thread Reply](/api-reference/tasks/add-thread-reply) |
| `add_file` | Live | `files:write` | write, open world | [Import File](/api-reference/files/import-file), [Create File](/api-reference/files/create-file) |
| `create_file_upload` | Live | `files:write` | write | [Upload URL](/api-reference/files/upload-url) |
| `complete_file_upload` | Live | `files:write` | write | [Complete Upload](/api-reference/files/complete-upload) |
| `read_file` | Live | `files:read` | read-only | [Get File](/api-reference/files/get-file), [Get File Text](/api-reference/files/get-file-text), [Get File Download](/api-reference/files/get-file-download) |

## Asking and waiting

> **ask\_wordsmith**
>
> **Live.** Ask a Wordsmith agent a question, optionally with files. Agents can research the law in depth while answering, so this is also how an assistant commissions a research memo. Waits up to `wait_seconds` for the answer.
>
> | Argument | Type | Notes |
> | - | - | - |
> | `question` | string, required | Up to 8,000 characters. With `context`, at most 10,000 in all. |
> | `agent_id` | string | Defaults to the user's default agent. Find agents with `find_resources(kind="agent")`. |
> | `session_id` | string | Continue an earlier conversation. |
> | `context` | string | Background the agent should use. |
> | `file_ids` | string\[] | Wordsmith files. Up to 10 files with `files`. |
> | `files` | host files | Chat attachments, where the host passes them. |
> | `wait_seconds` | integer | Default 15, maximum 20. |
>
> Returns `status` (`completed`, `in_progress` or `filtered`), `answer` when complete, `session_id`, `session_url`, `operation_id` while running, and the produced files in `attachments`, each with a `file_id`. `filtered` means the agent declined the question.

> **get\_operation**
>
> **Live.** Wait for, or check on, any long-running work: an answer, a review or redline, a document action, a draft, a report run or export, or repository indexing.
>
> | Argument | Type | Notes |
> | - | - | - |
> | `operation_id` | string, required | From the tool that started the work. |
> | `wait_seconds` | integer | Default 20, maximum 20. Returns as soon as the work finishes. |
>
> Returns the [operation](/proposed/objects#operation). On success it also includes what the assistant needs next, such as the review's finding counts or the output `file_id`.

> **cancel\_operation**
>
> **Live.** Stop long-running work. Best-effort: completed units, such as computed cells, are kept.
>
> | Argument | Type | Notes |
> | - | - | - |
> | `operation_id` | string, required | |
>
> Reviews, redlines, document actions, drafts and report runs can be stopped. A question, a report export and repository indexing run to the end once started, so cancelling one returns a tool error. Stopping a review needs edit access to it.

## Finding things

> **find\_resources**
>
> **Live.** List tasks with `find_tasks`.
>
> List or find Wordsmith objects by kind. Replaces `list_agents`, `list_playbooks` and `list_blueprints`. Returns `kind`, `items` (summaries) and `cursor`, which is `null` on the last page.
>
> | Argument | Type | Notes |
> | - | - | - |
> | `kind` | string, required | `agent`, `playbook`, `blueprint`, `repository`, `report`, `session`, `review`, `member`, `team`, `role` or `company_profile`. `task` returns an error that says to call `find_tasks`. |
> | `query` | string | Up to 200 characters. Matches names and descriptions; names only for `repository`. For `session`, searches titles and message text, best match first. |
> | `status` | string | For `review`: `queued`, `running`, `completed`, `failed` or `cancelled`. |
> | `agent_id` | string | For `session`: only conversations with this agent. Sessions are the user's own. |
> | `limit` | integer | Default 20, maximum 100. |
> | `cursor` | string | From the previous result. |
>
> A `team` summary leaves out `member_ids`; `get_resource` returns them. Needs the read scope of `kind`, for example `playbooks:read` for `playbook`.

> **get\_resource**
>
> **Live.** Read one object in detail. What `include` adds depends on `kind`.
>
> | `kind` | Returns | `include` options |
> | - | - | - |
> | `agent` | The agent | — |
> | `playbook` | The playbook and its checks | `sharing` |
> | `blueprint` | The blueprint and its placeholders | `sharing` |
> | `repository` | The repository, with `indexing_status` | `documents` or `folders`, one per call, paged; `sharing` |
> | `report` | The report and its columns | `cells` or `rows`, one per call, paged; `sharing` |
> | `review` | The review | `findings`, a page of every status returned as `findings_page` |
> | `session` | The conversation | `messages`, paged; `sharing` |
> | `task` | The task | `subtasks`, `comments`, `thread`, `sharing` |
> | `member` | The person, their roles and teams. `id` also takes an email or name; one that matches several people is refused with the matches. | — |
> | `team` | The team and its members | — |
> | `role` | The role and how many members hold it | — |
> | `company_profile` | A company profile: jurisdictions, industry, regulation, signatories. | — |
>
> `sharing` returns what [Get Sharing](/api-reference/sharing/get-sharing) returns, or [Get Task Sharing](/api-reference/tasks/get-sharing) for a task. As built, the six shareable kinds take `sharing`; the proposal gave it to every kind. A review is shared through its session.
>
> Arguments: `kind` and `id` (both required), `include`, and `cursor` and `limit` (default 50, maximum 200) for the paged include. A repository's `documents` and `folders` come at most 100 a page. A task's includes return whole lists. Replaces `get_task`, `list_subtasks`, `list_task_comments`, `list_task_thread` and `get_task_sharing`.

> **search\_knowledge**
>
> **Live.** Search the organisation's repositories by meaning and return the best-matching passages.
>
> | Argument | Type | Notes |
> | - | - | - |
> | `query` | string, required | Up to 1,000 characters. |
> | `repository_ids` | string\[] | 1 to 20 repositories. Without it, the 20 most recently used repositories the user can read. |
> | `limit` | integer | Default 10, maximum 50. |
>
> Returns `items`, passages with their `file_id`, `file_name`, `repository_id`, `document_id`, `snippet` and `score`, and `searched_repository_ids`. `file_id` is null for a document synced from a connector or an older one with no file; `read_file` cannot open it, so work from the passage. As built, there is no `include_files`: files outside a repository are not indexed. Passages carry no page number.

> **legal\_research**
>
> **Live.** Search case law and legislation, or read one document. Read-only.
>
> | Argument | Type | Notes |
> | - | - | - |
> | `action` | string, required | `search` or `read`. |
> | `query` | string | Required for `search`. 1 to 1,000 characters. |
> | `sources` | string\[] | For `search`. Default every source the user's organisation can use: `moonlit`, `courtlistener`, `uk_case_law`, `uk_legislation`, `nz_legislation`, `eur_lex`, `federal_register`, `regulations_gov`, `sec_edgar`. |
> | `jurisdictions` | string\[] | For `search`. Lower-case ISO codes plus `eu`, for example `gb`, `us`, `eu`. |
> | `date_from`, `date_to` | string | For `search`. ISO dates. |
> | `limit` | integer | For `search`. Default 20, maximum 50, across all sources. |
> | `source`, `document_id` | string | Required for `read`, from a search result. |
> | `offset`, `max_chars` | integer | For `read`. Default 0 and 20,000; `max_chars` at most 100,000. |
>
> Returns `items` and `sources` for `search`, and `document` for `read`. Each source reports its `status`: `ok`, `partial`, `timeout`, `error` or `unavailable`, so a slow source never fails the search. `partial` means part of the source's search failed, so some of its matches may be missing. A EUR-Lex read whose title lookup does not answer in time returns the title `EUR-Lex <CELEX>` and a `null` date, with the full text. `sec_edgar` results cannot be read. For a research memo, use `ask_wordsmith`: there is no research-report tool.

## Reviewing and working on documents

Every tool in this section is live.

> **review\_document**
>
> Review contracts against a playbook or a set of instructions.
>
> | Argument | Type | Notes |
> | - | - | - |
> | `type` | string, required | `playbook` or `instructions`. |
> | `file_ids` | string\[], required | 1–10 DOCX or PDF files, reviewed together. |
> | `playbook_id` | string | Required for `playbook`. Find one with `find_resources(kind="playbook")`. |
> | `instructions` | string | Required for `instructions`. |
> | `party` | string | The side you act for. Inferred when omitted. |
> | `wait_seconds` | integer | Default 15, maximum 20. |
>
> Reviews usually take minutes, so expect an `operation_id` and finish with `get_operation`. On success the result holds `review_id`, the finding counts and `redline_file_id`. The review works on copies of the files, so its `file_ids` differ from the ones you passed. As built, the review always writes its own redline, so there is no `generate_redline` argument, and there is no `counterparty_edits` type.

> **get\_review**
>
> Read a review's status, finding counts and redline file, with a page of findings.
>
> | Argument | Type | Notes |
> | - | - | - |
> | `review_id` | string, required | |
> | `finding_status` | string | `issue` (default), `ok`, `not_applicable`, `error` or `all`. |
> | `severity` | string | `high`, `medium` or `low`. |
> | `limit` | integer | Default 20, maximum 200. |
> | `cursor` | string | Page through findings. |
>
> Returns `review` (status, finding counts and `redline_file_id`), `findings_page` (a page of findings, each with its explanation, cited text and proposed amendments, and a `cursor`), and a `next_step` hint.

> **update\_review**
>
> Act on a finished review.
>
> | Argument | Type | Notes |
> | - | - | - |
> | `review_id` | string, required | |
> | `action` | string, required | `generate_redline`. |
> | `finding_ids` | string\[] | Default: every issue with a proposed amendment. |
> | `wait_seconds` | integer | Default 15, maximum 20. |
>
> Returns the operation; on success its result holds the new `file_id`. As built, `submit_decisions` is not available: answering the other side's markup stays [proposed](/proposed/api/reviews/submit-decisions).

> **transform\_document**
>
> Produce a new document from one or more files. The inputs are not changed.
>
> | `action` | Arguments | Output |
> | - | - | - |
> | `compare` | `file_id` (original), `revised_file_id`, `output_format` (`docx` default, or `pdf`) | A redline of the differences |
> | `redline` | `file_id`, `instructions`, `author_name`, `acting_party` | A DOCX with the edits as tracked changes |
> | `translate` | `file_id`, `target_language` | The translated file, layout kept |
> | `redact` | `file_id`, `categories`, `terms` | A redacted PDF |
> | `convert` | `file_id`, `target_format` | The file as PDF or DOCX |
> | `accept_changes` | `file_id`, `remove_protection` | A clean DOCX |
> | `merge` | `file_ids` (2 to 20, in order), `file_name` | One combined PDF |
>
> All take `wait_seconds` (default 15, maximum 20). An argument of another action is refused. Returns the operation: on success `result.file_ids` holds the new files; while running, an `operation_id` to pass to `get_operation`. As built, `translate` has no `source_language` (it is always detected), `accept_changes` has no `remove_comments`, and a merge is always a PDF, so it has no `output_format`.

> **draft\_document**
>
> Draft a new document. Without `blueprint_id` it drafts from scratch. With one, it fills the blueprint: from `values` alone when they cover every required placeholder, otherwise drafting the missing values from your context.
>
> | Argument | Type | Notes |
> | - | - | - |
> | `instructions` | string | What to draft. Required without `blueprint_id`. |
> | `blueprint_id` | string | Optional. Find one with `find_resources(kind="blueprint")`. |
> | `values` | object | Placeholder values you know, keyed by placeholder key. Only with a blueprint. |
> | `context` | string | Facts to draft from. |
> | `file_ids` | string\[] | Up to 10 source documents, such as a term sheet. |
> | `session_id` | string | Use a past conversation as context. |
> | `output_format` | string | `docx` (default) or `pdf`. |
> | `file_name` | string | The new file's name, without the extension. Up to 255 characters. |
> | `wait_seconds` | integer | Default 15, maximum 20. |
>
> Needs `files:read` as well as `files:write`, because the tool reads back the file it drafts. Returns the operation. On success `result` holds the `file_id`, the `values` used for a blueprint so the user can check them, and `url`, which opens the chat session that holds the draft.

## Repositories, reports, sharing and usage

Every tool in this section is live.

> **manage\_repository**
>
> | `action` | Arguments |
> | - | - |
> | `create` | `name`, `description` |
> | `update` | `repository_id`, `name`, `description` (null clears it) |
> | `add_files` | `repository_id`, `file_ids` (up to 100), `folder_id`, `wait_seconds` |
> | `create_folder` | `repository_id`, `name`, `parent_id` |
> | `remove_document` | `repository_id`, `document_id` |
>
> `create` and `update` return `{action, repository}`; `create_folder` returns `{action, folder}`. `add_files` returns `{action, operation}`, a `repository_indexing` operation. Each file moves into the repository, and `remove_document` deletes the document and its file. An argument another action takes is refused. Deleting a whole repository is REST only. As built, the tool also renames repositories and removes documents, which the proposal kept REST only, so it is marked destructive.

> **manage\_report**
>
> Build and run a report: one row per document, one column per question.
>
> | `action` | Arguments |
> | - | - |
> | `create` | `name`, `description`, `repository_id` or `file_ids` (up to 10), `columns` (up to 20), `run` (needs `file_ids` and `columns`) |
> | `update` | `report_id`, `name`, `description` (null clears it) |
> | `add_columns` | `report_id`, `columns`: `{name, prompt, type, options}`, up to 20 |
> | `add_rows` | `report_id`, `file_ids`, up to 10 |
> | `run` | `report_id`, `row_ids`, `column_ids`, `wait_seconds` |
> | `export` | `report_id`, `format` (`xlsx`, `csv` or `json`), `wait_seconds` |
>
> An argument another action takes is refused. `run` and `export` return an operation; `create` with `run` returns the report and the run's operation without waiting for the run: poll `get_operation`. `run` fills only cells that are not done, and takes no `only_empty`: recomputing done cells is REST only ([Run Report](/api-reference/reports/run-report) with `only_empty: false`). Changing or deleting a column, and deleting rows or reports, are REST only too, so the tool never overwrites or deletes. `file_ids` need `files:read`, and `repository_id` needs `repositories:read`. Read the results with `get_resource(kind="report", include=["cells"])`, and which document each row is with `include=["rows"]`.

> **share\_resource**
>
> Share a resource with a person or team in the user's organisation, take their access away, or change who in the organisation can see it.
>
> | Argument | Type | Notes |
> | - | - | - |
> | `kind` | string, required | `repository`, `report`, `playbook`, `blueprint` or `task`. |
> | `id` | string, required | A task also takes its `#number`. |
> | `action` | string, required | `share`, `unshare` or `set_visibility`. |
> | `principal_type` | string | `user` or `team`, for `share` and `unshare`. |
> | `principal_id` | string | For `share` and `unshare`: a user id, email or name, or a team id or name. Find people with `find_resources(kind="member")`. |
> | `access_level` | string | `read` (default) or `write`, for `share`. |
> | `visibility` | string | `private` or `customer`, for `set_visibility`. |
>
> Returns the sharing state after the change: `visibility`, `users` and `teams`, as [Get Sharing](/api-reference/sharing/get-sharing) does. A task answers as [Get Task Sharing](/api-reference/tasks/get-sharing) does. The user must be allowed to manage the object's sharing. Nothing can be shared outside the organisation or made public. A task's creator, assignee and owning team keep their access. A change that changes nothing writes nothing. Marked destructive, because `unshare` takes access away.
>
> As built: `review` is not a kind, because a review is shared through its session; `role: viewer | admin` became `access_level: read | write`, and `organisation` visibility became `customer`, to match the REST sharing routes. Each kind needs its write scope, such as `blueprints:write` for a blueprint. `session` is not a kind yet: changing a session's sharing needs `sessions:share`, which no connected app can be granted yet. It becomes a kind when that scope ships.

> **get\_usage**
>
> Usage and value figures: sessions, active users, hours saved and cost saved.
>
> | Argument | Type | Notes |
> | - | - | - |
> | `view` | string, required | `summary`, `breakdown` or `timeseries`. |
> | `scope` | string | `me` (default) or `company`. `company` needs permission to view company analytics. A breakdown is always the organisation's. |
> | `period` | string | `this_month`, `last_month`, `last_7_days`, `last_30_days`, `last_quarter`, `lifetime` or `custom`, with `start` and `end`. The default is `this_month`, or `last_30_days` for `timeseries`. |
> | `dimension` | string | For `breakdown`: `agent`, `skill`, `surface`, `work_type`, `team`, `seniority`, `role`, `region` or `user`. |
> | `metric` | string | For `timeseries`: `sessions`, `interactions`, `active_users`, `hours_saved` or `cost_saved`. |
> | `grain` | string | For `timeseries`: `day`, `week`, `month` or `auto` (default). |
> | `cursor` | string | For `breakdown`: the cursor from the previous result. |

> **manage\_organisation**
>
> Administer the organisation, one change per call. Needs `directory:admin`, which an app gets only when it asks for it. The tool is listed only on a connection with that scope; without it, reconnect Wordsmith and grant admin access. The user's own admin rights still apply, as in Wordsmith's settings. Each action calls the same code as its REST route.
>
> | `action` | Arguments | REST equivalent |
> | - | - | - |
> | `update_member` | `user_id`, and `predefined_roles`, `custom_role_ids` and/or `is_suspended`; optional `confirm_source_disconnection` | Update Member |
> | `create_team` | `name`, optional `parent_team_id` and `hidden` | Create Team |
> | `update_team` | `team_id`, and `name`, `parent_team_id` (`null` moves it to the top level) and/or `hidden` | Update Team |
> | `add_team_member` | `team_id`, `user_id`, optional `role` (`member` or `admin`) | Add Team Member |
> | `update_team_member` | `team_id`, `user_id`, `role` | Update Team Member |
> | `remove_team_member` | `team_id`, `user_id` | Remove Team Member |
> | `create_invite` | `email`, optional `predefined_roles` and `custom_role_ids`. An address with a pending invite gets that invite back, `created: false`, and no second email. | Create Invite |
> | `resend_invite`, `revoke_invite` | `invite_id` | Resend Invite, Revoke Invite |
> | `update_company_profile` | `profile_id`, and `profile` with only the fields to change | Update Company Profile |
>
> Find ids with `find_resources`: kind `member`, `team`, `role` or `company_profile`. An argument of another action is refused. Team actions answer not found while teams are off for the organisation. Deleting a team has no action: it stays REST-only. Marked destructive, because it can suspend members, change roles, remove team members and revoke invites.
>
> As built: the proposal kept organisation administration REST-only. It became a tool so an administrator's assistant can do it, behind a scope that is never granted by default.

## Tasks

All five task tools are live. They replaced fourteen earlier tools. Reading one task in detail is `get_resource(kind="task")`.

> **find\_tasks**
>
> Arguments as [List Tasks](/api-reference/tasks/list-tasks): `query`, `status`, `priority`, `assigned_to`, `involving`, `team_id`, `tags`, `complete_by_from`, `complete_by_to`, `cursor`, `limit`.

> **create\_task**
>
> Arguments as [Create Task](/api-reference/tasks/create-task). Unchanged.

> **update\_task**
>
> Arguments as [Update Task](/api-reference/tasks/update-task), plus:
>
> | Argument | Replaces |
> | - | - |
> | `attach_file_ids` | `attach_task_files` |
> | `attach_attachments`: `{upload_job_id}` or `{url}` | `attach_task_files` |
> | `add_links` | `add_task_links` |
> | `following` | `set_task_follow` |
> | `comment_edits`: `{comment_id, content}` | `update_task_comment` |
>
> Send only the fields to change; `null` clears a field. A `null` or empty `attach_file_ids`, `attach_attachments`, `add_links` or `comment_edits` counts as not sent. Returns the task, plus `edited_comments`: the comments `comment_edits` changed, as they now read. Marked destructive, because it can clear or replace fields, and not idempotent, because a retry attaches files again.

> **add\_task\_comment**
>
> `task_id`, `content`, `file_ids`, `attachments`, `reply_to_comment_id` (a comment id, to reply in its thread). Unchanged.

> **reply\_to\_task\_requester**
>
> `task_id`, `content`, `file_ids`, `attachments`. Sends a reply to the person who requested the task, which can mean an email outside Wordsmith. Kept as its own tool so hosts always ask before sending.

## Files

All four file tools are live.

> **add\_file**
>
> Add a file from one source. Replaces `import_file` and `create_file_from_text`.
>
> | Argument | Notes |
> | - | - |
> | `url` | A public `https` URL, up to 100 MB. |
> | `file` | A chat attachment, where the host passes one. |
> | `text` and `format` | Text to save as `txt`, `md` (the default) or `docx`. An MCP call is capped at 256 KB, so send at most about 200,000 characters. |
> | `file_name` | Required with `text`; otherwise optional. |

> **create\_file\_upload and complete\_file\_upload**
>
> For hosts that can run commands. `create_file_upload` returns a URL to `PUT` the bytes to, then `complete_file_upload(upload_id)` returns the `file_id`. Unchanged.

> **read\_file**
>
> Read a file. Replaces `get_file`, `read_file_text` and `get_file_download_url`.
>
> | Argument | Notes |
> | - | - |
> | `file_id` | Required. |
> | `include` | Any of `metadata` (default), `text`, `download_url`. |
> | `offset`, `max_chars` | Page through the text. Default 20,000 characters. |

## Renamed tools

The new tools are live. The old names keep working but are no longer listed. An old name answers in its old output shape.

| Old tool | New tool |
| - | - |
| `list_agents`, `list_playbooks`, `list_blueprints` | `find_resources` |
| `get_wordsmith_answer` | `get_operation` |
| `list_tasks` | `find_tasks` |
| `get_task`, `list_subtasks`, `list_task_comments`, `list_task_thread`, `get_task_sharing` | `get_resource(kind="task")` |
| `attach_task_files`, `add_task_links`, `set_task_follow`, `update_task_comment` | `update_task` |
| `import_file`, `create_file_from_text` | `add_file` |
| `get_file`, `read_file_text`, `get_file_download_url` | `read_file` |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.