Herald

MCP tools

Every tool the server offers, what it takes and what it returns.

Updated

Agents normally pick these up on their own from the tool descriptions. This page is for people building with them directly, or trying to understand what an agent did.

Every tool returns Markdown text. Any tool that takes a page accepts either the page's id or its exact title (not case-sensitive), so agents can follow a [[Page Title]] link by passing the title straight in. Folder paths are written like Market/Battlecards.

On the sign-in URL, every tool also takes an optional workspace (a name or id). Leave it out to use the person's default workspace.

Reading

These are available to every connection.

get_context

Gets the rules and the relevant reference material for a task, within a token budget. This is the one agents should call before writing anything. How get_context chooses explains what comes back and why.

Argument Type
task string, required What the agent is about to do, in plain words. Include the audience, channel and any product or competitor.
max_tokens integer Budget from 1,000 to 30,000. Default 12,000.
pack string A pack name to apply, instead of matching packs to the task. See list_packs.
tags string[] Only search sections with these tags. Rules, pinned and pack pages still come back.
folder string Only take material from this folder and its subfolders, like Market/Battlecards. Rules from anywhere still come back; pinned and pack pages outside it don't.

Your team's agent instructions are added at the top of every result.

Searches published sections by words and meaning, and returns the best excerpts with their page ids, scores and tags. Better than get_context for looking something specific up; worse for gathering everything a writing task needs.

Argument Type
query string, required What to look for.
tags string[] Only sections with these tags.
limit integer How many results, up to 30. Default 8.
folder string Only search this folder and its subfolders, like Market/Battlecards.

get_structure

Shows how the published context is organized: the folder tree, and each page's id, type, tags, attached file and size in tokens. Rules, pinned pages and private notes are marked. Empty folders are included.

Argument Type
folder string Show only this folder, like Market/Battlecards.
include_headings boolean Also list the headings inside each page.

list_pages

Lists every published page as a flat list, with its folder path, id, type, role, tags and attached file.

read_page

Returns one published page in full, with its usage note and a note about any attached file. A table comes back as its description and as many rows as fit in about 6,000 tokens, with a pointer to query_table for the rest.

Argument Type
page string, required Page id or exact title.

get_file

Returns a download link for the file attached to a page, or for a table page's rows as a CSV. The link expires after two minutes, so fetch it straight away; call get_file again if it's expired. The result also includes the file's name, type and size, the page's usage note and its description.

Argument Type
page string, required Page id or exact title.

query_table

Filters, sorts and pages through the rows of a published table. Filters combine with AND. Column names match ignoring case. Returns a Markdown table of the matching rows and how many matched in total.

Argument Type
page string, required Page id or exact title of a table page.
filters array { "column", "op", "value" } objects. op is one of eq, neq, contains, starts_with, gt, gte, lt, lte, in (value is a list), empty, not_empty.
sort object { "column", "direction" }, direction asc (default) or desc.
columns string[] Only these columns, in this order.
limit integer Rows to return. Default 50, up to 500.
offset integer For paging.

list_packs

Lists the workspace's packs, with their descriptions. get_context applies the packs a task matches on its own; this is for an agent that wants to name one.

list_tags

Lists the workspace's tag vocabulary, grouped by category.

list_workspaces

Only on the sign-in URL. Lists the workspaces the person can read, marking their default. Pass a name or id from here as workspace to any other tool.

Editing

These tools appear for connections that can edit: every sign-in connection, and API keys created with Can edit. What each call may actually change is checked against the person's or key's access every time, and a refusal comes back as a readable error. See When agents write back.

Changes to page text are saved as drafts. Agents keep getting the published version until someone publishes: in the app, or with publish_page, a separate tool that only works where the connection has publish access.

list_all_pages

Every page and folder the connection can see, including drafts, with id, folder path, type, role, tags and publish status (draft, published, or published with unpublished changes). Use this rather than list_pages before editing, since list_pages only shows published pages.

read_draft

Returns a page's current draft and properties. For a table, its columns and draft rows with their row_ids. The draft can differ from what read_page returns, so read this before edit_page, add_rows or update_rows.

Argument Type
page string, required Page id or exact title.

edit_page

Targeted find-and-replace edits to a page's draft. Each old_text must match the draft exactly, whitespace included, and appear exactly once. If any edit doesn't match, none are applied.

Argument Type
page string, required Page id or exact title.
edits array, required One or more { "old_text": "...", "new_text": "..." }.

rewrite_page

Replaces a page's whole draft. Meant for restructures; edit_page is better for everything else.

Argument Type
page string, required Page id or exact title.
markdown string, required The new body, without the title as a # heading.

create_page

Creates a new draft page.

Argument Type
title string, required
markdown string, required The body, without the title as a # heading. Use ## and ### headings to split topics into sections.
folder string Folder path. Created if it doesn't exist.
page_type string One of the workspace's page types. An unknown type is refused with the list; agents can't add types.
role string reference (default) or rule. Rules need whole-workspace edit access.
tags string[]
usage_note string One line that travels with the page's content.
private boolean true makes a private note. Not available to workspace keys.

create_table

Creates a new draft table: columns plus rows. Agents are told to use it instead of create_page for lists of records that share the same fields.

Argument Type
title string, required
columns array, required Column names, or { "name", "type" } with type text (default), number, date, url or select.
rows array One object per row keyed by column name, or arrays of values in column order.
description string Markdown saying what the table holds and when to use it.
title_column string The column that names each row. Default: the first.
folder string Folder path. Created if it doesn't exist.
page_type string One of the workspace's page types.
tags string[]
usage_note string
private boolean true makes a private table only the user can see.

add_rows

Adds rows to a table's draft. An unknown column name is refused with the list, unless it's passed in new_columns.

Argument Type
page string, required Page id or exact title.
rows array, required As for create_table.
new_columns array Columns to add to the table first.

update_rows

Changes cells in a table's draft rows. Rows are named by the row_id that read_draft shows; only the cells in set change.

Argument Type
page string, required Page id or exact title.
rows array, required { "row_id", "set": { "Column": "value" } } objects.
new_columns array Columns to add first.

delete_rows

Removes rows from a table's draft. Agents keep getting the published rows until the page is published again.

Argument Type
page string, required Page id or exact title.
row_ids string[], required From read_draft.

publish_page

Makes a page's draft the version every agent gets, as Publish in the app does. A separate step from editing: agents are told to call it only when the person asks for a page to be published. Needs publish access to the page: sign-in connections have it wherever the person could publish in the app, and API keys need Can edit and publish. A page that is already published as it stands is left alone. The publish is listed under Activity → Agent edits.

Argument Type
page string, required Page id or exact title.

update_page_properties

Changes a page's properties. Only the fields you pass change. Unlike body edits, these apply to the live page straight away.

Argument Type
page string, required Page id or exact title.
title string Renaming also updates [[links]] to the page.
folder string Folder path. An empty string moves the page to the top level.
page_type string or null null clears it.
role string reference or rule. Needs whole-workspace edit access.
tags string[] Replaces the page's tags.
usage_note string or null
pinned boolean Always include. Needs whole-workspace edit access.
expires_at string or null YYYY-MM-DD.

move

Moves a page, or a folder with everything in it, into another folder. Applies straight away. The destination must already exist. The connection can only move what it can edit, into folders it can edit (a person's own private notes can go in any folder they can see).

Argument Type
page string Page id or exact title. Pass this or folder.
folder string Folder path or id. Pass this or page.
to string, required Destination folder path or id. An empty string is the top level.

delete

Deletes a page or table, or a folder with everything in it, to Recently deleted, where it can be restored in the app for 90 days. Applies straight away; it isn't a draft. The connection can only delete what it can edit, and deleting anything published (a published page, or a folder with one inside) takes publish access. Other people's private notes in a deleted folder stay, moved up a level. Agents are told to delete only when the user asks.

Argument Type
page string Page id or exact title. Pass this or folder.
folder string Folder path or id. Pass this or page.

list_owners

Shows who has been given access to a page or folder, directly or through a folder above it, and whether they can read or edit. People with access to the whole workspace aren't listed, since they always have it.

Argument Type
page string Pass this or folder.
folder string Pass this or page.

update_owners

Gives people in the organization access to a page or folder, or removes it. Applies straight away. Needs the owners permission: sign-in connections have it wherever the person could make the change in the app, and API keys need Can change who has access to pages and folders.

Argument Type
page string Pass this or folder.
folder string Pass this or page.
add string[] Emails to give access to. They must already be in the organization.
access string write (default; edit, changes stay drafts), publish (edit and publish) or read, for the people being added. Publish access can only be given by a connection that can publish the page or folder itself.
remove string[] Emails to remove. Only removes access given on this page or folder; access through a folder above it, or to the whole workspace, stays.

Errors

Problems with a request come back as tool errors with a sentence saying what went wrong and usually what to do instead: a page that doesn't exist, an old_text that matched twice, an edit the connection isn't allowed to make. If the workspace has gone over its rate limit, tools say so and ask the agent to wait a minute.