Agent server tools

Embed
Preview of the card
<a href="https://forumulate.com/reference/tools"><img src="https://forumulate.com/reference/_api/public/orgs/046a9bc0-d530-43ae-9bae-af7945008cda/spaces/8042f004-e3d9-445f-b7a4-b6c1f86836e6/pages/09c0ee66-2f92-4b46-92d0-e0c7ec518deb/social-card.svg?v=3e7ae33eec8b" alt="Agent server tools" width="600" height="315"></a>
The same endpoints the MCP tools call, documented in the API reference.

Every tool on the agent server (POST /orgs/{orgId}/mcp). List them at runtime with tools/list; call one with tools/call ({ "name": …, "arguments": { … } }). Inputs below come from each tool's real inputSchema. Almost every write tool takes a spaceId (from list_spaces).

Capability and token-scope are checked per tool: read tools need docs.read, write tools need docs.write and the write token scope. Tools that end in a call_api-style loopback (the studio writes, list_entities, call_api) re-enter the API carrying your own credentials, so the controller's own RBAC and validation decide them.

Discovery & read

Tool

What it does

list_spaces

The spaces in this organization: what each one is, and what one piece of it is called.

get_space_shape

What one piece of this space is made of: its named sections, which are required, what each is for, and its parameters. Returns JSON Schema, usable directly as the schema of a structured response.

get_item

One piece, section by section as markdown, with what is still missing.

list_items

What is in a space, newest or in reading order, with whether each is published.

search

Find things by their words. With a spaceId it searches that space; without one it searches everything the caller can read — documentation, discussions and posts alike, which is how a question gets answered when the docs do not cover it yet.

Authoring

Tool

What it does

create_item

Write one piece of a space — a page, a post, a release, an incident, whatever this space holds. Send markdown per named section; anything belonging to no section goes in `body`. The reply says which required sections are still empty.

update_section

Replace one named section. Idempotent — sending it twice writes it once.

create_space

Make a new space. The kind decides what a piece of it is and how it reads; a CUSTOM space takes its own architecture in `shape`.

publish_item

Make a piece readable by the people it is for. Some kinds are live as soon as they are written; the reply says so rather than pretending it did something.

create_item note: send markdown per named section in sections; anything belonging to no section goes in body. Section keys and preset names come from get_space_shape.

Studio writes

Tool

What it does

set_roadmap_status

Move a roadmap item into a status lane — the board is organised by these lanes, so this is how you say a request is planned, in progress, shipped or declined. The status must be one the roadmap declares; read the space shape or the board first if unsure.

set_topic_category

File a forum topic under a category, or clear it. Categories are how a forum is organised and filtered, so this is the tool for triaging where a discussion belongs. Pass null to remove the category. The category must be one that exists in this space.

moderate_topic

The everyday forum-moderation actions on one topic: pin or unpin it to the top of the list, close it to new replies or reopen it, accept a reply as the answer (or clear the accepted answer with a null postId), and reclassify it between a discussion and a question. Pick the action; supply postId only when accepting an answer and kind only when reclassifying.

edit_status_component

Update one piece of a status page — a monitor (the thing whose health is shown) or an incident (an ongoing or past disruption). Pass the changed fields in `patch`; only what you send is changed. Use it to rename or reconfigure a monitor, or to post an update to an incident or change its state.

set_page_fields

Set a documentation page's declared metadata fields — the structured values a page carries (its declared params), as distinct from its prose. This is the metadata gap update_section does not cover: that tool writes a section's markdown, this writes the fields. Send only the fields you mean to change; they are validated against the page's shape.

set_item_fields

Set an item's declared fields — the canonical write for the structured values a piece carries beyond its sections (status, owner, tags and the like, whatever this space declares). Send only the fields you mean to change; they are validated against the space shape.

list_entities

List a space's structural pieces so you have their ids before a studio write: 'categories' (forum) for set_topic_category, 'monitors' and 'incidents' (status) for edit_status_component, and 'lanes' (roadmap). Returns the raw API response for that kind. For topics/pages themselves use list_items.

These route through the same loopback path call_api uses, so the controller's RBAC and validation decide them and there is no way to reach another org's space.

moderate_topic behaviour: close/reopen toggle replies (close moves out of PUBLISHED, reopen returns to it — archiving is a separate verb); accept_answer needs a postId (or a null one to clear the accepted answer); set_kind to DISCUSSION drops any accepted answer.

Retrieval (support-shaped)

Tool

What it does

find_resolution

What fixes a described symptom. Answers with the slots that resolve it, not with whole pages — and suppresses examples, which share vocabulary with a symptom and otherwise outrank the answer.

check_prerequisites

What must already be true before a task will work. Answers only from slots declared as prerequisites, so a reader who would have failed at step four learns why first.

propose_correction

Propose a correction to a slot you found to be wrong. It lands as a change request for a person to approve — never as an edit — and is capped per day. The workspace must have suggestions turned on.

Narrow, typed retrieval verbs that answer with the resolving slots, not whole pages.

Escape hatch

Tool

What it does

call_api

Anything else the REST API can do — members, moderation, categories, roadmap lanes, status incidents, theme, settings, webhooks, billing, plus your own tokens (/pats), invites, profile (/users, /identity) and creating an org (POST /orgs). Read forumulate://openapi for the routes. Paths must be under /orgs/<this org>, /public/, /space-types, /docs-json, /pats, /invites, /users or /identity; your own permissions still decide the answer.

call_api allowlist

The path must match one of these prefixes (defence in depth on top of the normal guards), and must not contain ..:

/orgs/…        (only /orgs/{this org}/… — another org's path is rejected 403)
/public/…
/space-types
/search
/docs-json
/pats          your own tokens
/invites       accept an invite
/users         your profile
/identity      your identity

Anything else — the internal, platform-admin and webhook-receiver surfaces — is unreachable, exactly as it is from the internet. Response bodies over 100 KB are truncated (with a …truncated marker) rather than dropped.

The Forumulate teamUpdated