Skip to main content
Glama

create_rfi

Raise a numbered Request For Information when drawing sheets contradict each other or leave a question unanswered, filing it in the estimator's RFI register for human review.

Instructions

Raise an RFI — a Request For Information — when the drawing set contradicts itself or cannot answer a question you need answered to take the work off: a room-finish schedule row that names a tag the plan never draws, a room label the schedule has no row for, a finish called out two ways, a scale that disagrees with a stated dimension. It lands in the estimator's RFI register (the canvas's RFI panel) with the next number in that register's own sequence (RFI-001, RFI-002, …), status open, dated today, on the sheet you name. You raise it as the agent: the record carries origin {actor: "agent", reviewed: false} and is PENDING — pencil — until the estimator accepts it in the register, because an RFI goes to the architect and nothing sends without a human. It still prints in the marked set's RFI schedule like any other RFI, so the question is on the deliverable. Pass markup_ids to pin it to annotations already on the sheet (annotate a cloud or callout at the conflict first, then link it here) — a linked markup carries the RFI number on the canvas and in the marked set, and list_rfis reports which finish tags the question touches through those links. Prefer this to describing the conflict in prose: a question in the register is tracked, numbered, and answered; a sentence in a reply is lost. Journaled; undo_last takes it back.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "title": "<title>",
      "question": "<question>",
      "sheet": "<sheet>"
    },
    "name": "create_rfi"
  }
}

Input Schema

NameRequiredDescriptionDefault
sheetYesSheet name or number the question is about, as sheet_info reports it
titleYesThe one-line subject the register and the RFI schedule print — what the question is about
questionYesWhat you are asking the architect to answer, stated so a reply can settle it
markup_idsNoAnnotation ids (annotate / list_annotations) to link — they carry this RFI's number on the sheet

Output Schema

NameRequiredDescriptionDefault
idYesThe record id ("rfi-…")
dateYesYYYY-MM-DD opened
noteYes
actorYesWho raised it — "agent" for every RFI minted over MCP, "estimator" for a panel-raised one
sheetYesThe sheet the question is about
numberYesThe register number, "RFI-001" — next in the panel's own sequence, never reissued
statusYesThe panel's lifecycle: open → answered → closed; void = withdrawn
pendingYestrue = agent-raised and not yet accepted by an estimator in the register (origin.reviewed false) — pencil, not sent
subjectYes
questionYes
responseYes
conditionsYesFinish tags the linked markups are attached to — the scopes this question touches
response_dateYesYYYY-MM-DD answered, '' while open
linked_markupsYesAnnotation ids carrying this RFI's number on the sheet (markup.rfi_id) — derived, never stored twice

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.1.31
    • removedInput schema / additionalProperties
      Removed value: -false
  2. Addedv0.1.21

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full behavioral burden and does: it discloses numbering (next in the register's own sequence, RFI-001, RFI-002), initial status (open, dated today), origin and review state ({actor: "agent", reviewed: false}, PENDING/pencil), the human-acceptance gate before anything is sent to the architect, downstream printing in the marked set's RFI schedule, and reversibility via journaling and undo_last. These are exactly the traits an agent needs before writing to a register.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical scoping — what an RFI is and when to raise one — is front-loaded in the first sentence, with lifecycle details trailing. The single dense paragraph runs long and contains a few flourishes ("nothing sends without a human"), though each sentence still conveys distinct operational information rather than restating the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be explained, yet the description still makes the resulting record's state explicit (number, status, date, origin, pending review). Given a three-required-parameter write tool with downstream delivery to an architect, nothing an agent needs to invoke it correctly or anticipate side effects is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters are already documented and the baseline would be 3. The description still adds meaning beyond the schema: markup_ids links propagate the RFI number onto the canvas and marked set, and list_rfis reports touched finish tags through those links, while title and sheet are tied to what actually prints in the register and schedule.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Raise an RFI — a Request For Information") and immediately defines the triggering condition with four concrete construction examples (tag never drawn, missing schedule row, conflicting finish callouts, scale disagreement). It is clearly separable from siblings like list_rfis, resolve_rfi, delete_rfi, and annotate, since it describes creating a numbered pending record rather than reading, resolving, or drawing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use criteria (drawing set contradicts itself or cannot answer a question needed to take work off) plus a stated anti-pattern: "Prefer this to describing the conflict in prose." It also prescribes sequencing with a sibling — annotate a cloud or callout first, then pass markup_ids to link — which is the kind of routing guidance that prevents misselection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.