Skip to main content
Fortress exposes a Model Context Protocol server per agent identity. Reads prefer fortress:// resources. Writes and parameterized reads use tools.

Resources

ResourceUse
fortress://workspace/overviewCompact starting snapshot for the authenticated agent.
fortress://workspace/overview/fullUncapped overview for large investigations. Use sparingly.
fortress://ordersActive orders for the authenticated agent.
fortress://guideFull agent operating guide.
fortress://view/{name}Named views: inbox, ready, working, waiting, stalled, deferred, review.
fortress://agent/{id}/queueAssigned-action queue for the authenticated agent. Agents can only read their own queue.
fortress://action/{id}Full action bundle: action, project context, linked documents, links, and parent-action context.
fortress://project/{id}Project with its actions.
fortress://order/{id}Order with instruction document and associated context.
fortress://document/{id}Document content and metadata.
fortress://question/{id}Single question.
fortress://proposal/{id}Single proposal with human response and resolution state.

Tools

ToolPurpose
get_work_queueList ready actions assigned to the authenticated agent, with a limit.
list_inboxList unclarified inbox captures.
searchSearch projects, actions, documents, agents, and orders. Each hit includes a body_snippet and matched_fields so agents can answer match-context questions without a follow-up read.
get_actionRead a slim action summary by id.
get_actionsBatch-read up to 100 action summaries by id in a single round-trip.
get_projectRead a slim project summary by id.
get_documentRead a slim document summary by id.
get_proposalRead a proposal by id, including human response and permitted payload.
list_proposalsList proposals visible to the authenticated agent, optionally filtered by scope and state.
heartbeatSignal ongoing work on an assigned ready action.
complete_actionFinish assigned work with a result summary.
drop_actionCancel assigned work with a reason.
ask_questionAsk the human for judgment.
close_questionClose one of the agent’s own open questions.
proposeAsk the human to permit, edit, reject, take over, or counter concrete supervised work.
resolve_proposalMark one of the agent’s proposals resolved after acting on the human response.
add_memoryAppend a durable order memory, usually after a rejected or countered proposal teaches a standing instruction.
add_noteAttach a freeform note to an action, agent request, order, or project.
create_linkAttach an external URL to an action, project, or agent request.
log_checkinRecord an order report or heartbeat.
create_actionCreate ready work or inbox captures. Project-manager access required.
update_actionEdit non-status task fields and assignment. Project-manager access required.
create_projectCreate a project. Project-manager access required.
update_projectUpdate a project. Project-manager access required.
duplicate_projectDuplicate a template project. Project-manager access required.
create_documentCreate a markdown document.
update_documentUpdate markdown or title with a human-facing reason.
link_documentAttach a document to a project or action.

Proposals

Proposal-gated create tools return code: "PROPOSAL_REQUIRED" when the agent or order policy requires human authorization. Agents should call propose with the exact fortress_action_kind and fortress_payload, wait for the human response, then retry the original create with permitted_proposal_id when the response is permit or permit_with_edit. Only humans respond to proposals through the REST/web/mobile review surfaces. Agent MCP clients can create proposals, inspect them with get_proposal / list_proposals, record order memories with add_memory, and call resolve_proposal after acting on the human response.

Batch action reads

Use get_actions when an agent needs slim summaries for several action ids at once — for example, when triaging a list of search hits, expanding a project’s action ids, or reconciling stored references after a queue refresh. Pass a deduped array of up to 100 ids; the server dedupes again and orders visible to match input order.
{
  "ids": ["act_01J...", "act_02K...", "act_03L..."]
}
The response splits readable rows from filtered ones so agents can branch without extra reads:
FieldDescription
visibleSlim action summaries the caller can read, ordered to match the deduped input.
hidden_idsIds the workspace, agent-visibility, or free-tier history filter dropped. Diagnostic — most absences are stale ids, not permission bugs.
Exceeding 100 ids fails fast with the structured error code: "TOO_MANY_IDS". For a single id, get_action is still the simpler call.

Search results

search returns hits with a snippet of the matching body text and a list of which fields contributed to the match. Read the snippet first — most match-context questions can be answered directly from the snippet without a follow-up get_action, get_project, or get_order read. Each result item includes:
FieldDescription
typeOne of action, project, document, agent, or order.
idIdentifier of the matched entity.
titleDisplay title for the hit.
subtitleOptional secondary label (for example, the parent project’s title for an action).
rankPostgreSQL ts_rank score; higher means a stronger match.
body_snippetExcerpt around the matched terms in the body column (actions.details, projects.description, orders.summary). Empty string when there is no body column or the match was title-only.
matched_fieldsArray of column names that contributed to the hit — for example ["title"], ["details"], or ["title", "details"].
Body columns by type:
TypeBody columnSnippet emitted
actiondetailsYes, when the body matched.
projectdescriptionYes, when the body matched.
ordersummaryYes, when the body matched.
documentTitle-only index todayAlways empty; matched_fields is ["title"].
agentNo bodyAlways empty; matched_fields is ["name"].
{
  "type": "action",
  "id": "act_01J...",
  "title": "Investigate failing deploy",
  "subtitle": "Platform reliability",
  "rank": 0.184,
  "body_snippet": "The latest deploy ... failed with a 500 from the auth ...",
  "matched_fields": ["title", "details"]
}
When matched_fields only contains the title (or the snippet is empty), the title is the match — skip the drill-down. When the snippet contains enough surrounding text to answer the question, prefer it over a follow-up read.

Prompts

PromptPurpose
process_inboxTriage inbox items according to the agent’s inbox clarifier order if installed.
daily_recapSummarize current review and workspace overview snapshots.
weekly_reviewGuide a GTD-style weekly review without making decisions without approval.

Subscriptions

Agents can subscribe to resource updates for:
  • fortress://action/<id>
  • fortress://question/<id>
  • fortress://proposal/<id>
  • fortress://project/<id>
  • fortress://order/<id>
  • fortress://agent/<id>/queue for their own agent id
Events fan out to the affected resource URIs and queue owners. Heartbeat events update action freshness without unnecessarily refreshing queue membership.
Tool responses include structured content for machines and text content for chat UIs. Some read tools support format: "toon" for more compact text while keeping structured content unchanged.

Creator attribution

Action, question, proposal, and document summaries returned through resources and tools include the actor that created the entity. Agents that read fortress://action/<id>, fortress://question/<id>, or fortress://proposal/<id> can use this to tailor follow-ups; for example, a reviewer agent can flag tasks created by an agent whose recent work has a high rejection rate.