Skip to main content
Thirty tools: seventeen read, thirteen write. Read tools need the read:workspace scope, write tools need write:workspace. Setup is on Squad MCP server.
Every tool below is listed to every session regardless of scope. A read-scoped session sees the write tools and gets an error on invocation telling it to reconnect with write access. Seeing a write tool in the list does not mean you can call it.

Conventions

List tools take limit (default 25, maximum 100) and cursor. When more results exist, the response carries a nextCursor to pass back on the following call. Anywhere a tool takes an entity ID, both the display ID (AC-12) and the UUID work.

The catalogue

select_workspace takes orgId and workspaceId, both from list_workspaces.update_workspace takes any of name, description, missionStatement, logoUrl.
get_workspace_overview is the orientation call. Run it first in a new session.
list_members is how you resolve a person to the user ID that update_action wants for assignee.
search takes query (required), types (any of signal, insight, action, goal, document, cluster) and limit. Matching is on title and content, so it wants real keywords rather than a question.get_entity takes id and an optional include array. Insights accept include: ["evidence"], which returns the supporting signals with their source links, capped at ten. Documents come back as markdown. It is also the way to poll asynchronous work such as brief generation.
Signals, clusters and insights. See Signals and Signal clusters.list_signals takes source, signalType, sentiment (positive, neutral, negative, mixed), clusterId, since, until, includeDismissed. Dismissed signals are excluded by default. Rows are summaries, so follow up with get_entity for full content.find_similar_signals takes signalId and limit (default 5, maximum 20). Use it before ingesting something that might already be known.list_clusters takes signalType and includeUnlabeled. get_cluster takes clusterId and caps member signals at fifteen.list_insights takes goalId to scope to one goal, plus category (pain_point, feature_request, positive_signal, trend, risk), minScore and status (active, stale, archived, resolved).
See Actions.list_actions takes statuses (suggested, in_progress, completed, dismissed), assignee (a user ID or me), insightId, priority (P0, P1, P2) and includeSnoozed. It defaults to open work: suggested and in progress, snoozed excluded.
get_action_context takes id and returns everything needed to execute the action in one call, including the top eight customer quotes with source links. Call it before implementing or deciding.
update_action_status takes actionId, status (start, complete, dismiss, snooze) and an optional note that gets appended to the action’s notes. It is annotated destructive because the transition changes state others can see.update_action takes actionId plus any of priority, effort (low, medium, high), category (comms, operational, product, strategic, workspace), notes, assignee (a user ID, me, or null to unassign), linkInsightId, linkOnePagerId. Its notes replaces the whole field. To append, use update_action_status.
See Goals and Activity.list_goals takes minImportance. create_goal takes title, description and importance (1 to 5, default 3). update_goal takes goalId plus the fields to change and keeps a version snapshot.get_activity takes entityTypes, actorType (human or agent) and agentId, so you can separate what Squad’s agents did from what people did.update_insight takes insightId plus category, status, linkGoalId, unlinkGoalId. Insight titles and descriptions come from the pipeline and cannot be edited.
dismiss_signal deletes the signal. It cannot be recovered. It takes signalId and an optional reason, which is echoed back in the response rather than stored on the record.
See Knowledge documents.list_documents takes tag and paginates. The tag filter applies to the current page, so paginate for full coverage.create_document takes title, markdown, and optional directoryId and tags. A near-identical title returns the existing document instead of creating a duplicate. Do not open the markdown with the title as a heading, since the title renders separately.update_document takes documentId plus markdown (replaces the whole body), title, addTags, removeTags. A version snapshot keeps the previous content recoverable in the app.
See One-pagers.list_one_pagers takes status (building, draft, in_review, finalised, failed), type (decision or prd) and sourceInsightId.generate_one_pager takes exactly one of actionId, insightId or retryOnePagerId, plus an optional type. Generation runs asynchronously, so poll the returned OP- ID with get_entity until its status moves past building.update_one_pager_status takes onePagerId and status (draft, in_review, finalised). The building and failed states belong to generation and cannot be set here.
ingest_signal takes a signals array of 1 to 50 items. Each item takes content (required), plus source, title, sourceUrl, author, occurredAt and strength (0 to 1, default 0.5). Content is deduplicated semantically on the server, then clustered and distilled asynchronously, so check back with get_activity or list_signals shortly after.For one-off items, run find_similar_signals or search first to see whether the theme is already known.
Returns each source’s provider, status, most recent sync time and total signals pulled. Use it to explain a coverage gap before blaming the pipeline. Connect sources in the app. See Integrations.