Read tools
The 10 tools your agent uses to navigate and read norms in your workspace.
These tools let your agent query the norms in your workspace. You don't call them by hand. Your agent
does, in response to your questions. Knowing them helps you understand and verify answers.
Each returns JSON (except get_figure, which also returns an inline image).
get_methodology is the mandatory first call. The others follow the
navigation flow: list_norms → get_toc → get_subtree → get_section. Use
search_corpus, search_in_norm, get_cross_refs, and get_figure as
needed.
When your workspace holds several editions of one code (say SIA 261:2014 and
SIA 261:2020), every read tool accepts an optional edition and serves the
most recent published one by default; list_norms lists the editions of each
code, and get_section prints the edition read in its header so the agent
files it as normEdition on the entry.
get_methodology
Mandatory first call when answering any technical question. Returns the working method as one Markdown document, built for your workspace: the role, the table of the norms you can read (code, edition, title, scope, coverage) with the dependencies that exist among them, the navigation method, the answer contract (citations, calculations, what to check before answering), the budget rules, the demonstration-document rule when it applies, and the dossier policy. Your agent adopts it for the rest of the conversation. No parameter.
versionnumberThe contract version (2). Recorded on every dossier entry written under it.
textstringThe document, ending with methodology: v2.
list_norms
Lists all norms currently available in your workspace.
normsarrayEach entry has code, year, title, and language.
What norms are available in Stratta?get_toc
Returns the table of contents for a norm. By default only top-level chapters (depth = 1) are
returned to keep the response light; use get_subtree to drill into a chapter.
codestringrequiredNorm code, e.g. "SIA 261", "SIA 263", "EN 1992-1-1".
maxDepthnumberdefault: 1Maximum nesting depth. 1 = chapters only, 2 = sections X.Y, 3 =
sub-subsections X.Y.Z. Higher depths grow the response quickly on large
norms.
treearrayHierarchical nodes, each with path, title, summary, pageStart,
pageEnd, depth, and children (empty at the depth boundary). path is
the address every other read tool takes. summary is the node's own summary:
it is written for chapters and X.Y sections, and left empty below rather
than repeating the parent's.
get_subtree
Drills into a specific chapter or section. Returns the subtree rooted at path, so your agent can
explore one chapter in detail without fetching the whole table of contents.
codestringrequiredNorm code, e.g. "SIA 261-1".
pathstringrequiredSection path to root the subtree at, e.g. "14" or "14.2".
maxDepthnumberdefault: unlimitedMax nesting depth relative to the root. 1 returns the root plus its direct
children only.
maxNodesnumberdefault: 400Cap on the nodes returned (20 to 2000). A larger subtree loses its deepest
levels first and carries truncated: true on its root.
treearrayThe subtree rooted at path, with the same node shape as get_toc. A clause
number below the last heading (9.5.2.1) resolves to that heading.
get_section
Returns one section as a Markdown document: its text with the LaTeX formulas and tables where the norm prints them, its figures, the cross-references it carries and the sections below it, with the exact path and page range. The JSON fields travel alongside as structured content.
codestringrequiredNorm code, e.g. "SIA 261".
pathstringrequiredSection path as it appears in the document, e.g. "4.2.1" or "Annexe A". A
clause number that is not a node of the tree resolves to its nearest heading,
and the response says so in requestedPath.
maxCharsnumberdefault: 12000Characters of text per call (500 to 40000). A longer section comes in windows cut at a paragraph boundary.
offsetnumberdefault: 0Where to resume in the text, from the nextOffset of a truncated call.
sectionobjectmarkdown (the document), content (the text window), pageStart/pageEnd,
parentPath, children (the sections below), truncated with nextOffset
and totalChars, a figures array (use the id with get_figure), the
attached tables and formulas, crossRefs, and licence: the copy's
watermark and copyright, which the Markdown also prints under the heading
(Licence: …).
Every technical claim your agent makes must cite a section it fetched via
get_section (e.g. [SIA 261, 4.2.1, p. 22]), never from memory.
search_in_norm
Searches sections within a norm by keyword, matching both titles and content. Use it when the
section path isn't known yet. Case, accents and stop words (« de », « la », « und »…) are
ignored: "classe de sol" looks for « classe » and « sol ». Sections carrying every term rank
ahead of partial matches, and kind: "title" means every term is in the heading.
codestringrequiredNorm code, e.g. "SIA 261".
keywordstringrequiredSearch term, e.g. "charges variables" or "béton armé".
limitnumberdefault: 20Maximum number of results to return.
hitsarrayUp to limit matches, each with path, title, a snippet of the matching
content, kind (title, text or path) and licence when the norm
carries its licence marks.
search_corpus
Runs the same search across every norm your workspace can read, ranked across the whole corpus, then grouped by norm in the order of each norm's best hit. Use it first when a question does not name its norm: it tells which norms speak of the subject before any table of contents is opened. Accents and case are ignored, and a clause number as keyword resolves to that clause in each norm.
keywordstringrequiredSearch terms in the language of the norms, e.g. "charge de neige".
limitnumberdefault: 20Maximum number of hits across all norms (1 to 40).
normsarrayOne entry per norm with hits: code, title, licence (once for its
excerpts) and hits[] in the same shape as search_in_norm, each with kind
(title, text or path).
get_figure
Retrieves a figure (image) referenced in a section. Returns the image inline (base64) so your agent can reason about the diagram, with its caption and the norm's licence. No storage URL is returned: the bytes are fetched server-side and the image never leaves the conversation as a link anyone could follow.
codestringrequiredNorm code, e.g. "SIA 261".
figureIdstringrequiredFigure id from a get_section response (figures[].id).
imageImageContentThe inline image (base64 + mimeType).
captionstringThe figure caption.
figureNumberstringThe figure's number/label.
Some clients (e.g. Claude Desktop) don't render remote images inline. See Troubleshooting.
get_cross_refs
Lists the references a section makes: to other clauses, annexes, figures and tables of the
same norm, and to other norms (e.g. SIA 261 §4.2 to SIA 263). For compound questions, your
agent must follow these and read each target with get_section.
codestringrequiredNorm code, e.g. "SIA 261".
pathstringrequiredSection path, e.g. "4.2.1".
crossRefsarrayOutgoing references, resolvable ones first. Each carries the target norm, the
section path when one is known, targetKind (clause, annex, figure,
table or norm), internal, resolvable (the target exists in your
workspace) and targetTitle when it does.
Shown to you, not read by the agent
Three tools exist on the remote connector only, for agents that draw an interface (ChatGPT, and any client that supports MCP Apps) or tell several connected accounts apart. The local server does not list them.
show_citations
Called once, after an answer, with the clauses the answer rests on. Each clause becomes a card: norm, clause, pages, and the quoted sentence, checked word for word against the clause before it is shown. Opening a card reads the full clause; a link opens it in the Stratta reader. The agent itself only reads what it must correct: a clause that does not exist in your workspace, or a quote that is not in the clause it names.
citationsarrayrequiredOne to eight clauses: code and path as get_section took them, edition
when the norm has several, and optionally quote, the exact sentence quoted.
citationsarrayOne card per clause: found, title, pageStart, pageEnd, edition,
excerpt (the quote as the norm prints it, or the opening of the clause),
quoteFound (null when no quote was given), href and licence, printed
under the excerpt.
open_norm_reader
The norm reader, opened by you from the side panel of a conversation or from the sidebar, never by the agent. It lists your norms, then a norm's table of contents, then a clause with its references and subsections. Every read goes through the same tools as the agent's, so it counts the same way. "Ask the agent" sends a question about the clause you are reading.
get_profile
Returns a stable opaque id and the organization the connection reads from, nothing personal.
ChatGPT uses it to tell two connected accounts apart, for example your organization and a client's
workspace. Free, like whoami.