Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Stratta

NPM · @STRATTA/MCP · SCANNED SEP 25

Read the SIA and Eurocode norms your bureau licensed, cited to the section and page.

Available components

+3 this week 76 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security99
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 31 of 125 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency6
Schema Quality & AI Usability84
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 9313 tokens (~152/item across 61 items; 59 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management85
  • Stability check failed: the tool surface changed between 0.9.2 and 1.16.0: 0 tool removals, 7 breaking changes, 36 additions. See how to fix → Fail
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 61 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Stratta MCP server?

Stratta runs locally as an npm package, launched with npx -y @stratta/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @stratta/mcp

# add to Claude Code
claude mcp add ch-stratta-mcp -- npx -y @stratta/mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "ch-stratta-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@stratta/mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ch-stratta-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@stratta/mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add ch-stratta-mcp -- npx -y @stratta/mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ch-stratta-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@stratta/mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ch-stratta-mcp --command npx --arg -y --arg @stratta/mcp
# ~/.hermes/config.yaml
mcp_servers:
  ch-stratta-mcp:
    command: "npx"
    args: ["-y", "@stratta/mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ch-stratta-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@stratta/mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add ch-stratta-mcp -t stdio -c npx -a -y @stratta/mcp
// mcp.json
{
  "mcpServers": {
    "ch-stratta-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@stratta/mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 25 Sept 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 22 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 71 to 75.

  • 20 Sept 26 +1
    • Stability: fail → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Schema quality: 8460 → 9313 ▼ functional
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
    • Package version: 1.15.0 → 1.16.0 functional
  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 58 to 61.

  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 51 to 55.

  • 15 Sept 26 +15
    • Stability: fail → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Malware scan: unverified → pass ▲ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
    • Package version: 0.14.0 → 1.15.0 functional
  • 14 Sept 26 −15
    • Malware scan: pass → unverified ▼ security
    • Stability: fail → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Schema quality: 5470 → 8396 ▼ functional
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
    • Package version: 0.13.1 → 0.14.0 functional
  • 13 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 41 to 45.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 25 Sept 2026 · Analysed npm/@stratta/mcp@1.16.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 125 packages
Packages resolved 125
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 59 exposed · ~9,196 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
add_attachment ~112

Upload a file from the user's machine to a dossier as a project attachment: PDF, DOCX, XLSX, PNG, JPEG, TXT, MD or CSV, 25 MB at most, 20 per dossier. Its text is extracted for read_attachment and search_in_dossier. Only upload a file the user named; never look for one.

NameTypeReqDescription
dossierIdstringyesThe dossier to attach the file to.
filePathstringyesAbsolute path of the file on the machine running this server.

No output schema declared.

No examples provided.

add_comment ~172

Leave a remark on a dossier, on one of its questions or on one entry: a doubt about a value, a note for a colleague, the reason a piece of evidence was set aside. A comment is signed by the connected user and is not evidence: what the norm says goes through save_finding. A signed-off dossier still takes comments. Write it in the user's own words, only when they asked to leave one.

NameTypeReqDescription
bodystringyesThe comment, one to a few sentences.
dossierIdstringyesDossier id from list_dossiers, open_dossier or load_dossier.
entryIdstring–The entry the comment is about, when it is about one.
questionIdstring–The question the comment is about, when it is about one.

No output schema declared.

No examples provided.

add_option ~151

Add one way of settling a question, when a new variant comes up after the question was opened: "keep the pile and test it", "redistribute on P37 and P39". Idempotent on the name: the same words return the option already listed. Ten options per question at most. Returns optionId and created; the option is retained later by record_decision or update_option.

NameTypeReqDescription
descriptionstring–What the option implies, in one or two sentences, when the name is not enough.
namestringyesThe option in a few words, as it will be listed.
questionIdstringyesQuestion id from list_questions, load_dossier or open_question.

No output schema declared.

No examples provided.

apply_template ~102

Open the questions of a template in a dossier, with their options, and file every clause that resolves in the corpus as a reference under its question. A clause the organization cannot read is written into the question as something to establish. Applying twice opens nothing twice. Tell the user which questions were opened and which clauses are missing.

NameTypeReqDescription
dossierIdstringyesThe dossier to apply the template to.
templateIdstringyesThe template, from list_templates.

No output schema declared.

No examples provided.

attach_entry ~139

File a piece of evidence under a question, and optionally under one of its options, or take it out with questionId null. This is how the unclassified evidence of load_dossier gets sorted: read it, find the question it answers, file it. A decision cannot be moved: it belongs to its question. Filing where it already is changes nothing.

NameTypeReqDescription
entryIdstringyesEntry id from get_question or load_dossier.
optionId––The option of that question the entry argues for, or null for none.
questionId–yesThe question to file the entry under, or null to leave it unfiled.

No output schema declared.

No examples provided.

delete_option ~118

Remove an option from a question. The evidence filed under it stays on the question, unfiled from the option. Irreversible: the user is asked to confirm through the client before anything is removed, unless confirmed is true because they already did in the conversation. Only when the user asked for it.

NameTypeReqDescription
confirmedboolean–true when the user already confirmed the removal in the conversation. Otherwise the user is asked through the client first.
optionIdstringyesOption id from get_question, list_questions or load_dossier.

No output schema declared.

No examples provided.

delete_question ~148

Delete a question from a dossier. Its evidence stays in the dossier, unfiled; its options, its comments and its decision entry go with it. Irreversible: the user is asked to confirm through the client before anything is deleted, unless confirmed is true because they already did in the conversation. A question that stopped mattering is closed with resolve_question, not deleted; delete only a question opened by mistake, and only when the user says so.

NameTypeReqDescription
confirmedboolean–true when the user already confirmed the deletion in the conversation. Otherwise the user is asked through the client first.
questionIdstringyesQuestion id from list_questions, load_dossier or open_question.

No output schema declared.

No examples provided.

draft_deliverable ~240

Open the document a dossier produces (project basis, use agreement, geotechnical report, verification note) and get its plan: one section per chapter, each with a path, a title, a hint of what belongs there, its state (gap, current, stale: a source moved, the reason says which) and an excerpt of what is already written. The plan is the office template of that kind when the organization validated one, otherwise the plan Stratta proposes. Also returns the decisions of the dossier with their ids, so write_section can cite them, and the site id when there is one. Calling it again on the same dossier and kind returns the same document, never a second one. Then read the skill of that kind (get_skill) and fill the sections with write_section.

NameTypeReqDescription
dossierIdstringyesThe dossier the document belongs to (open_dossier, load_dossier).
kindstringyesproject_basis, use_agreement, geotechnical_report, verification_note or other.
titlestring–The document title, when the user named it. Default: the kind and the dossier name.

No output schema declared.

No examples provided.

get_boreholes ~205

Read the boreholes a site scan found, nearest first, with their logged strata (depth interval, description, period), depth, year, SIA 261 ground class when logged, water table when logged, and links to the cantonal documents. Call it after get_site_context when the question turns on what the ground is actually made of. Each borehole is one observation at one point: quote it with its distance, never interpolate between two of them, and never derive a design value from a layer description.

NameTypeReqDescription
limitinteger–How many boreholes to return, nearest first (1 to 40, default 8). Ask for more only when the nearest ones did not answer.
siteIdstringyesSite id returned by scan_site.
withStrataOnlyboolean–Return only the boreholes whose strata were read. Use it when the layers are the point; the count of what was left out still travels in `total`.

No output schema declared.

No examples provided.

get_cross_refs ~210

Return the references one section makes: to other clauses, annexes, figures and tables of the same norm, and to other norms. SIA norms deliberately spread the rule, the coefficient and the action across separate clauses and norms, so following a reference is often what separates a correct answer from an incomplete one. Each reference says whether it is resolvable in this corpus (listed first) and names the target section; read each relevant target with get_section.

NameTypeReqDescription
codestringyesNorm code exactly as list_norms returns it, e.g. "SIA 261", "SIA 267", "EN 1997-1".
editionstring–Edition of the norm when the organization holds several ("2013", "2020"). Default: the most recent published edition; list_norms names them.
pathstringyesSection path as it appears in the table of contents, e.g. "4.2.1" or "Annexe A".

No output schema declared.

No examples provided.

get_dossier_activity ~159

Read the history of a dossier, most recent first: who did what and when, from the app or from an agent, each line with the question or the entry it concerns. Call it when the user asks what changed since they last looked, or who took a decision. One page at a time; when nextCursor is present, call again with it as cursor. Lines are written in French at the time of the act, as the app shows them.

NameTypeReqDescription
cursorstring–The nextCursor of the previous page.
dossierIdstringyesDossier id from list_dossiers, open_dossier or load_dossier.
limitinteger–Lines per page, 1 to 200. Default 50.

No output schema declared.

No examples provided.

get_figure ~153

Return one figure of a norm as an image: load diagrams, design charts, standard cross-sections. Call it when the figure carries the rule and describing it in words would lose the content. The figure identifier comes from the figures array of get_section.

NameTypeReqDescription
codestringyesNorm code exactly as list_norms returns it, e.g. "SIA 261", "SIA 267", "EN 1997-1".
editionstring–Edition of the norm when the organization holds several ("2013", "2020"). Default: the most recent published edition; list_norms names them.
figureIdstringyesFigure identifier from the figures array of get_section.

No output schema declared.

No examples provided.

get_groundwater_contours ~151

Read the cantonal piezometric contours the scan stored around a site: for each contour the aquifer name, the water table elevation in metres above sea level and the source layer. Cantons that publish none return an empty list and say whether the reading happened. A contour is the canton's interpretation of an aquifer, not a measurement at the site: prefer a water table logged in a nearby borehole (get_boreholes) when one exists, and quote a contour with its name.

NameTypeReqDescription
includeGeometryboolean–Return the contour vertices in LV95 as well. Default false.
siteIdstringyesSite id from scan_site, list_sites or a dossier row.

No output schema declared.

No examples provided.

get_methodology ~76

Read the working contract this server expects an agent to follow: how to walk a norm from its table of contents down to a clause, how to cite what it reads, and when to record something in a project dossier. Call it once, before the first technical answer of a conversation, and follow it for the rest of the conversation.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_question ~173

Read one question in full: its wording, status, assignee and due date, its options with their ids and descriptions, its decision, its evidence with every citation field (norm, section path, page, edition, attachment and page) and the option each piece argues for, and the comments left on the question and on those entries, each with its author. Evidence comes one page at a time; when nextCursor is present, call again with it as cursor. Call it before adding to a question, so nothing already filed is filed twice.

NameTypeReqDescription
cursorstring–The nextCursor of the previous page.
limitinteger–Evidence entries per page, 1 to 200. Default 50.
questionIdstringyesQuestion id from list_questions, load_dossier or open_question.

No output schema declared.

No examples provided.

get_section ~306

Return 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. This is what gets quoted: call it before stating any technical claim taken from a norm, and cite [CODE section path, p. N]. A clause number that is not a node (9.5.2.1) resolves to its nearest heading, whose text carries the clause. A long section comes in windows of maxChars; when truncated is true, call again with the offset given.

NameTypeReqDescription
codestringyesNorm code exactly as list_norms returns it, e.g. "SIA 261", "SIA 267", "EN 1997-1".
editionstring–Edition of the norm when the organization holds several ("2013", "2020"). Default: the most recent published edition; list_norms names them.
maxCharsinteger–Characters of text per call, 500 to 40000. Default 12000, which fits any client. Raise it only when one section is needed whole.
offsetinteger–Where to resume in the text, from the nextOffset of a truncated call.
pathstringyesSection path as it appears in the table of contents, e.g. "4.2.1" or "Annexe A".

No output schema declared.

No examples provided.

get_site ~139

Read a site sheet as the app shows it: every fact with its stable key, its status (established, indicative, absent, uncovered), its source with the date the data was current, the official notice and attribution when the source carries one, and the scan with each source and whether it answered. get_site_context is the summary shaped for an answer; call this when you need to quote a source line, cite a fact key in save_finding, or tell the user which source failed. Facts are registers, never a geotechnical study.

NameTypeReqDescription
siteIdstringyesSite id from scan_site, list_sites or a dossier row.

No output schema declared.

No examples provided.

get_site_context ~123

Read what a site scan found, grouped by topic, each value with its source and the date THE DATA was current. Returns two separate lists: what the registers settled, and what they could NOT settle, with the reason. Report the second list to the user in full: it is what a bid has to budget for. Never derive a design value (friction angle, bearing capacity, modulus) from a geological description returned here; state what the register says and that a local investigation is required.

NameTypeReqDescription
siteIdstringyesSite id returned by scan_site.

No output schema declared.

No examples provided.

get_site_section ~162

Read the geological section drawn on a site sheet: the axis from A to B, the corridor width, the measured terrain line, the modelled bedrock top, the geology bands sampled along the axis, and the boreholes inside the corridor with their logged strata, projected on the axis. Call it when the question is about what lies along a line rather than at a point. Without an axis drawn in the app, it says so and returns no lines. Nothing is interpolated between boreholes.

NameTypeReqDescription
maxPointsinteger–How many points of the terrain and bedrock lines to return, evenly spaced, 2 to 200. Default 60.
siteIdstringyesSite id from scan_site, list_sites or a dossier row.

No output schema declared.

No examples provided.

get_skill ~95

Read one skill in full: Markdown with its front matter (name, description) and its steps, rules and output shape. Follow it for the task at hand. The organization version wins over the Stratta version of the same name, because it carries the office plan and wording. Returns null when no skill has that name.

NameTypeReqDescription
namestringyesThe skill name from list_skills, e.g. "project-basis".

No output schema declared.

No examples provided.

get_subtree ~240

Return the section tree below one path, each node with its summary and page range. This is the step between the table of contents and reading: it shows what a chapter contains without loading its text. Use maxDepth to bound it; a tree larger than maxNodes loses its deepest levels and says so with truncated: true.

NameTypeReqDescription
codestringyesNorm code exactly as list_norms returns it, e.g. "SIA 261", "SIA 267", "EN 1997-1".
editionstring–Edition of the norm when the organization holds several ("2013", "2020"). Default: the most recent published edition; list_norms names them.
maxDepthinteger–Depth relative to the root. 1 returns the root and its direct children; omit for the whole subtree.
maxNodesinteger–Cap on the nodes returned, 20 to 2000. Default 400.
pathstringyesPath to root the subtree at, e.g. "9" or "9.5". A clause number below the last heading resolves to that heading.

No output schema declared.

No examples provided.

get_toc ~185

Return the table of contents of one norm as a tree of path, title, summary and page range. Pass maxDepth 1 for the chapter list, which is enough to choose where to descend; deeper levels return the whole outline and fill the context. Descend with get_subtree, read with get_section.

NameTypeReqDescription
codestringyesNorm code exactly as list_norms returns it, e.g. "SIA 261", "SIA 267", "EN 1997-1".
editionstring–Edition of the norm when the organization holds several ("2013", "2020"). Default: the most recent published edition; list_norms names them.
maxDepthinteger–Nesting depth to include. 1 (default) returns chapters only; 2 adds X.Y sections. Large norms grow fast beyond 2.

No output schema declared.

No examples provided.

ingest_attach_cross_ref ~128

Attach a cross-reference from a section to another norm or clause. Idempotent on the target and the reference text.

NameTypeReqDescription
refTextstringyesThe reference as written in the text.
refTypestringyesexplicit when the text names the norm, implicit otherwise.
sourceSectionIdstringyesSection id the reference is made from.
targetDocumentCodestringyesCode of the norm referred to, e.g. "SIA 263".
targetSectionPathstring–Section path in the target norm, when the text names one.

No output schema declared.

No examples provided.

ingest_attach_formula ~114

Attach a LaTeX formula to a section. Idempotent on the formula number: attaching the same number twice updates the formula instead of doubling it.

NameTypeReqDescription
descriptionstringyesWhat the formula computes, in one sentence.
formulaNumberstringyesThe number as printed, e.g. "(9.12)". Empty when the norm prints none.
latexstringyesThe formula in LaTeX, without dollar signs.
sectionIdstringyesSection id from ingest_create_sections.

No output schema declared.

No examples provided.

ingest_attach_table ~96

Attach a structured table to a section: headers plus rows of cells. Idempotent on the table number.

NameTypeReqDescription
captionstringyesThe caption as printed.
dataobjectyesAn object with headers (string[]) and rows (string[][]).
sectionIdstringyesSection id from ingest_create_sections.
tableNumberstringyesThe number as printed, e.g. "Tableau 3".

No output schema declared.

No examples provided.

ingest_create_document ~190

Create a draft norm document in the workspace. Returns the documentId every later ingest_* call needs. The organization must hold a licence for the norm it ingests.

NameTypeReqDescription
codestringyesNorm code as printed on the cover, e.g. "SIA 118/262".
editionstring–Edition label as printed on the cover ("2013", "2020+C1"). Default: the year. Lets several editions of one code coexist.
languagestringyesfr, de, it or en.
scopestring–One sentence on what the norm covers, shown in the served methodology, e.g. "Geotechnical design: foundations, piles, anchors, retaining structures".
titlestringyesFull title of the norm.
totalPagesintegeryesPage count of the source PDF.
yearintegeryesEdition year.

No output schema declared.

No examples provided.

ingest_create_sections ~96

Insert sections into a draft document, up to 200 per call. Parent links resolve through parentNodeId within the batch and the sections already inserted. Returns a map of nodeId to sectionId; use those ids to attach formulas, tables, figures and cross-references.

NameTypeReqDescription
documentIdstringyesDocument id from ingest_create_document.
sectionsarrayyesThe sections to insert, as the pre-pass produced them.

No output schema declared.

No examples provided.

ingest_delete ~117

Delete a document of your own organization with all its sections, figures, tables, formulas and cross-references. Irreversible; use it before re-ingesting a norm. The user is asked to confirm through the client before anything is deleted, unless confirmed is true because they already did in the conversation. Reserved to owners and administrators.

NameTypeReqDescription
confirmedboolean–true when the user already confirmed the deletion in the conversation. Otherwise the user is asked through the client first.
documentIdstringyesDocument id from ingest_create_document.

No output schema declared.

No examples provided.

ingest_normalize_cross_refs ~57

Scan every section of a document and rebuild the cross-references to other norms found in its text. Idempotent; run it after the sections are in.

NameTypeReqDescription
documentIdstringyesDocument id from ingest_create_document.

No output schema declared.

No examples provided.

ingest_publish ~131

Publish a draft document so the read tools can serve it. The server first scores how much of the norm was ingested (text per page, pages under a chapter, empty leaves, enrichment) and refuses below 30/100 with the reasons: fix the ingestion rather than retry. Pass force true only when the user confirms the document really is that short. Returns the score and its flags; show them to the user.

NameTypeReqDescription
documentIdstringyesDocument id from ingest_create_document.
forceboolean–Publish even below the coverage floor. Only after the user confirmed the document is legitimately thin.

No output schema declared.

No examples provided.

ingest_status ~71

Check whether a norm (by code) already exists in the workspace, how many sections it has and its coverage score (how much of the norm actually made it in). Call it before creating a document, to avoid duplicates.

NameTypeReqDescription
codestringyesNorm code, e.g. "SIA 261".

No output schema declared.

No examples provided.

ingest_upload_figure ~124

Upload a figure image (base64) and attach it to a section in one call. PNG, JPEG or WebP, 8 MB at most.

NameTypeReqDescription
base64stringyesBase64-encoded image bytes; a data: prefix is tolerated.
captionstringyesThe caption as printed.
figureNumberstringyesThe number as printed, e.g. "Figure 12".
mimeTypestringyesimage/png, image/jpeg or image/webp.
sectionIdstringyesSection id from ingest_create_sections.

No output schema declared.

No examples provided.

list_attachments ~94

List the project attachments of one dossier: the site reports, borehole logs, meeting minutes and data sheets the engineer uploaded. Returns for each its id, name, type, page count and extraction status. Read one with read_attachment before answering on the project; a piece is evidence like a clause and is cited the same way.

NameTypeReqDescription
dossierIdstringyesThe dossier, from list_dossiers or open_dossier.

No output schema declared.

No examples provided.

list_dossiers ~60

List the project dossiers of the organization, most recently touched first, with the count of entries and of open questions. Call it when the user names a project or asks what they were working on: a dossier that already exists is reloaded, never recreated.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_exports ~106

List the verification notes and journals exported from a dossier, most recent first, each with its kind, its SHA-256 hash, its size, the trusted timestamp when one was obtained, the methodology version in force and who exported it. The file itself is downloaded from the dossier page; this tells the user whether a note exists and lets them check a hash they were sent.

NameTypeReqDescription
dossierIdstringyesDossier id from list_dossiers, open_dossier or load_dossier.

No output schema declared.

No examples provided.

list_norms ~85

List the norms published in the signed-in organization, with code, year, title, language and coverage (how much of the norm was ingested). This is the first call of any search: a norm absent from this list cannot be read and must not be answered from memory. A demo entry is fictional and never a technical reference; a sparse entry carries a notice to relay.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_questions ~189

List the questions of one dossier, one page at a time, with what the dossier page shows and load_dossier leaves out: status, assignee, due date, author, dates, the options with their ids and the title of the decision when there is one. Filter by status to read only what is still open. Use load_dossier to resume a project; use this to work through the questions one by one, then get_question on the one that matters. When nextCursor is present, call again with it as cursor.

NameTypeReqDescription
cursorstring–The nextCursor of the previous page.
dossierIdstringyesDossier id from list_dossiers, open_dossier or load_dossier.
limitinteger–Questions per page, 1 to 200. Default 50.
statusstring–open, decided or closed. Omit for all.

No output schema declared.

No examples provided.

list_site_neighbours ~149

List the other site sheets of the organization within a radius of this one, nearest first, with the distance, the geological unit their own scan established and whether it is the same as here, and the dossier that carries them with its counts of open and decided questions. This is what the public registers cannot say: the office already worked three hundred metres away. Nothing is interpolated: these are links to dossiers to reload, not values.

NameTypeReqDescription
radiusinteger–How far to look, in metres, 50 to 5000. Default 500. At most twelve neighbours are returned.
siteIdstringyesSite id from scan_site, list_sites or a dossier row.

No output schema declared.

No examples provided.

list_site_overlays ~144

List the areas the site map draws around the point: polluted sites, natural hazard zones and water protection sectors read from the canton, each with whether it covers the site point or how many metres away it stops, its area and its layer. Coordinates are left out unless asked for. Call it after get_site_context when a constraint is near and the user asks how near; the sheet answers at the point, this answers in the radius.

NameTypeReqDescription
includeGeometryboolean–Return the polygon rings in LV95 as well. Default false: rings run to hundreds of points.
siteIdstringyesSite id from scan_site, list_sites or a dossier row.

No output schema declared.

No examples provided.

list_site_photos ~113

List the photos the engineer uploaded on a site sheet: name, position in LV95 when the photo carries one (from its EXIF data or placed by hand), shooting direction, the instant the camera recorded, and the note written on it. No image is returned and no link: the photo is looked at in the app. Call it to know what was observed on site and when, before writing an observation.

NameTypeReqDescription
siteIdstringyesSite id from scan_site, list_sites or a dossier row.

No output schema declared.

No examples provided.

list_sites ~116

List the site sheets of the organization, most recently touched first, each with the dossier it belongs to, the municipality and canton, the search radius and the status of its current scan. Call it when the user names a site or an address rather than a dossier, or to find the siteId of a sheet opened from the app; a dossier row from list_dossiers also carries its siteId.

NameTypeReqDescription
limitinteger–How many sites to return, 1 to 200. Default 50; truncated says when more exist.

No output schema declared.

No examples provided.

list_skills ~102

List the procedures an agent follows for a repeatable task: drafting the project basis or the use agreement, writing the terrain chapter of a report, instructing a type of structure, preparing a review, the verification note. Two sources: the skills Stratta ships and the ones this organization wrote; an organization skill with the same name replaces the Stratta one. Call it before drafting a document or starting such a task, then get_skill on the one that fits.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_templates ~55

List the checklists the organization wrote for its types of structure: each is a set of questions with the clauses they rest on. When a new project matches one, apply it with apply_template instead of opening the questions one by one.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

load_dossier ~121

Reload a dossier: its questions with their evidence, options and decisions, open questions first, then the evidence not yet filed under a question, then the comments a colleague left. Do this before answering whenever the user returns to a project already named, otherwise a decision already taken gets taken again. The name is enough; the id is optional.

NameTypeReqDescription
dossierIdstring–Dossier id, preferred when you have it.
namestring–The project name as the user says it. Matched exactly; call list_dossiers first if unsure.

No output schema declared.

No examples provided.

open_dossier ~128

Open a project dossier, or return the one that already carries that name: calling it twice with the same name never creates a duplicate. Open one when the user works on a named project and there is something worth keeping (a question to settle, a retained value, an assumption, a site observation); not for a passing lookup. Returns dossierId and created.

NameTypeReqDescription
namestringyesHow the user refers to the project, in their own words: this is the name they will search for.
referencestring–The office's own project number, if the user gave one.

No output schema declared.

No examples provided.

open_question ~200

Open one question to settle in a dossier, before gathering evidence for it: "can pile P38 be kept?", "which friction angle do we retain?". A question is the unit of work; the evidence saved with save_finding and the eventual record_decision hang off it. One question per thing to settle, never a list of eight in one body. Idempotent on the title: the same wording returns the question already open. Name the options on the table when there are several. Returns questionId and created.

NameTypeReqDescription
bodystring–What is at stake and why it is not settled, in two or three sentences. Not a list of sub-questions.
dossierIdstringyesDossier id returned by open_dossier or list_dossiers.
optionsarray–The ways this could be settled, one short name each.
titlestringyesThe question in one line, phrased as a question.

No output schema declared.

No examples provided.

read_attachment ~162

Read the text of a project attachment as a Markdown document, page by page. from and to bound the pages, maxChars the characters; when truncated is true, call again with from set to nextPage. A scan without a text layer says so. Cite what you read as [name, p. N] and file it with save_finding using attachmentId and attachmentPage.

NameTypeReqDescription
attachmentIdstringyesThe attachment, from list_attachments or search_in_dossier.
frominteger–First page to read. Default 1.
maxCharsinteger–Characters of text per call, 500 to 40000. Default 12000.
tointeger–Last page to read. Default: the last page.

No output schema declared.

No examples provided.

record_decision ~397

Record what the engineer retained: the decision in one line, why, and the clause it rests on. Pass questionId when the question already exists; otherwise pass dossierId and question (what is settled, in one line) and the question is opened on the spot, already decided. Name the retained option when the question listed some; put the number in value and set confidence when the decision is a value. Only after the user confirmed the decision, never on your own reasoning. Returns entryId.

NameTypeReqDescription
confidencestring–established, judgement or to_confirm.
confirmedboolean–true when the user has already confirmed this decision in the conversation. Otherwise the user is asked through the client before anything is written.
detailstring–Why, in one or two sentences, and what it rests on.
dossierIdstring–Without questionId: the dossier the decision belongs to (open_dossier, load_dossier).
normCodestring–Norm the decision rests on, e.g. "SIA 267".
normEditionstring–The edition cited, when known.
pageinteger–Page in the norm.
questionstring–Without questionId: what is settled, in one line ("Friction angle of the moraine"). The same words find the question already opened.
questionIdstring–Question id returned by open_question or load_dossier, when the question exists.
retainedOptionstring–The option that was retained, by the name it was given. An option not listed yet is created.
sectionPathstring–Exact section path, e.g. "9.5.2.1".
titlestringyesThe decision in one line, as it would be written in a report.
valuestring–The decided value with its unit, when the decision is a value.

No output schema declared.

No examples provided.

resolve_question ~133

Close a question that stopped mattering without a decision (the variant was abandoned, the request withdrawn), or reopen one with resolved false. The question stays in the dossier with its evidence. To settle a question with an answer, call record_decision instead. Only when the user says so.

NameTypeReqDescription
confirmedboolean–true when the user has already confirmed in the conversation that the question is settled. Otherwise the user is asked through the client first.
questionIdstringyesQuestion id returned by open_question or load_dossier.
resolvedboolean–Defaults to true (close). Pass false to reopen.

No output schema declared.

No examples provided.

save_finding ~493

Record one piece of evidence in a dossier, as you work rather than in a batch at the end. Kinds: reference (what a norm says; always give normCode, sectionPath and page, or it is not a reference), hypothesis (the value the engineer retains and why, value in value and reasoning in detail), observation (what the site, a borehole or a survey showed, with the date). One clause, one value or one fact per call, in one or two sentences. Pass questionId to file it under the question it serves; without it the entry waits unclassified. Set confidence whenever a value is at stake: established, judgement or to_confirm. Questions go through open_question and decisions through record_decision, not here.

NameTypeReqDescription
attachmentIdstring–The project attachment the evidence comes from, when it is not a norm.
attachmentPageinteger–The page of that attachment.
confidencestring–established (computed or read directly), judgement (the engineer chose it), to_confirm (provisional, pending a test).
detailstring–The reasoning in one or two sentences: why this value, what it rests on, what disagreed. Expected for a hypothesis.
dossierIdstringyesDossier id returned by open_dossier or list_dossiers.
kindstringyesreference, hypothesis or observation: pick by what the entry is.
normCodestring–Norm this comes from, e.g. "SIA 267".
normEditionstring–The edition cited, e.g. "2013" or "2020 + rect. 2022", when list_norms gives it.
pageinteger–Page in the norm, so a human can verify it in their PDF.
questionIdstring–The question this evidence serves, from open_question or load_dossier. Omit only when you do not know yet.
sectionPathstring–Exact section path, e.g. "9.5.2.1".
titlestringyesThe fact in one line, as an engineer would write it in a report. One clause, one value or one observation; not a theme.
valuestring–The retained value with its unit, e.g. "30 deg", "1.25 kN/m2".

No output schema declared.

No examples provided.

Common questions

What is the Stratta MCP server?

Stratta is an MCP server listed in the public MCP registry as ch.stratta/mcp. Read the SIA and Eurocode norms your bureau licensed, cited to the section and page. This page covers its npm package (@stratta/mcp).

Is the Stratta MCP server safe to use?

Stratta scores 76 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 25 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Stratta MCP server expose?

Stratta exposes 59 tools: get_methodology, whoami, list_norms, get_toc, get_subtree, and 54 more. Their descriptions and schemas cost roughly 9,196 tokens of context every time the server is loaded.

Is the Stratta MCP server still maintained?

Stratta is still listed as active in the MCP registry. We last reached this channel on 25 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Stratta MCP server under?

Stratta declares the UNLICENSED licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.