Changelog
Notable changes to the Stratta MCP server.
Notable releases of the @stratta/mcp package. The package follows
Semantic Versioning.
The assistant on your key. The in-app assistant answers with the model of your choice, on your office's account: paste an API key from Infomaniak (processed in Switzerland), Mistral (European Union), OpenRouter, Anthropic, OpenAI or Google in Settings › Integrations. Stratta recognises the provider and offers only the key's models.
Your members. Resend an invitation, even an expired one, make someone an admin or a member, transfer the space to an admin, and find the history of the month's invitations.
The server instructions, tool descriptions, the methodology served to the agent and the
consult-stratta skill now speak of norms, laws, regulations and references, not only
construction norms. No tool changes.
Open to everyone. Creating an account is free. A short form opens your space: first name, last name, company, phone, and the company website, whose icon becomes the space's logo. The free plan reads the demo norm; Pro and Max can be bought online again.
All your norms. Technical standards, laws, regulations, references: Stratta serves what your organization has the right to use, with the same exact citation.
Adding a norm is included. A deposit takes one norm seat of the plan, with no requests charged: Pro has 15, Max 60, as many deposits per month, 600 pages at most. An extra norm costs 5 CHF, paid once. Each deposit asks you to declare your rights to the document. With your organization's first norm, the demo norm goes to sleep; it can be turned back on from the Norms page.
Stratta is for enterprises. A space is opened with Stratta, which invites its first administrator; that person becomes its owner on arrival. There is no free plan, trial, pricing page or online payment any more, and no setup reminder emails. An account without a space sees a contact form, also used to request a norm (account menu › Écrire à Stratta, or Norms › Demander une norme).
The licence with every excerpt. The licensed copy's watermark and copyright are kept once
with the norm and accompany every excerpt: get_section (licence field and Licence: line of
the Markdown), search_in_norm, search_corpus, get_figure, show_citations, the assistant,
deliverables and exports. ingest_create_document accepts licence.
Models. Every call to OpenRouter requires a zero-retention provider and refuses data collection.
Remote connector: 61 tools. The local package changes only its version.
Citation cards. An answer can end with the clauses it rests on, as cards: the norm, the clause, the pages and the sentence quoted, checked word for word against the clause before it is shown. A card opens the full clause, and a link opens it in the Stratta reader. When a quote is not in the clause, the card says so and shows the norm's own text.
The norm reader beside the conversation. In ChatGPT, open it from the side panel or the sidebar: your norms, a norm's table of contents, a clause with its references. "Ask the agent" asks about the clause you are reading.
Two accounts, two profiles. Connected to your office and to a client's workspace, ChatGPT now tells the two apart.
The ChatGPT plugin carries its skills. The drafting procedures (verification note, project basis, use agreement, terrain chapter, review of open questions) and a first-run walkthrough come with the plugin.
Package 1.17.0. Same tools, announced on demand.
Simple mode. npx -y @stratta/mcp --simple announces only the 10 norm-reading tools (about
11,000 characters of schemas instead of 67,000). --toolsets dossiers,sites, --full and the
STRATTA_TOOLSETS variable pick the families. On the AI Agents page, each agent's Tools menu
does the same for the remote connector. By default, every tool.
Shorter methodology. get_methodology is more than twice as short for a large corpus (one
line per norm, scope is read through list_norms) and only mentions dossiers when the dossier
tools are provided.
A leaner assistant. It starts with the norm tools and loads the other families according to the page and the question: about three times fewer requests consumed per step.
In the application, no new package version.
The Méthodes page replaces the Library: each method in plain
French, the sentence to say to your agent to run it, and how many times it followed it in the
last 30 days. A Word report dropped on a document's card replaces Stratta's plan, with no
technical name to invent. list_skills and get_skill do not change.
In the application, no new package version.
The site sheet (the ground under an address, in plan, cross-section and 3D)
leaves the plans: it is opened on request, office by office, while it matures
with the pilot offices. Write to hello@stratta.ch to try it. Sheets already
made stay readable on every plan, and the scan_site tool answers that it is
not enabled until it is, without charging anything.
In the application, no new package version.
On the Norms page, the Ajouter une norme (Add a norm) button takes a PDF
(200 MB at most, a scan is accepted), prefills the reference, year and title from
the file name, and asks you to confirm the licence. The cost is shown before you
send as an estimate: 500 requests per deposit plus 40 per page (twice for a scan). The actual price is settled on what the norm really cost once it is ready, twice the estimate at most, and everything is refunded if the norm is
refused, unreadable or withdrawn. The file is processed on Stratta's server in
Germany, its formulas and tables are checked against the image of their page,
then a person at Stratta reviews before it is added. A card follows the deposit
live, an email announces the end, and the PDF is deleted once the norm is
delivered. Ingestion by your agent with the ingest-norm skill remains
possible, PDF on your machine.
Same number of tools. A correction, on the server and in the package.
Search. search_in_norm and search_corpus ignore stop words
(« de », « la », « und »): "classe de sol" looks for « classe » and « sol ».
Sections carrying every term rank first, and kind: "title" means every term
is in the heading. The norm code is matched regardless of case and spacing.
Norm text. The licence watermark no longer appears in the served text, a table is no longer served twice, and a clause no longer borrows its parent's summary. The ingestion pre-pass shipped with the package removes the watermark at the source.
Site sheet. The four cantons were reviewed fact by fact: Fribourg is read in full again, hazard degrees are served as published, a source that did not answer is stated as not covered and never as « none ». The response spectrum follows table 24 of SIA 261:2020.
Local server. A failed call reports its error code to your workspace log, like the remote connector.
Four more tools: 59 on the local server, 58 on the remote connector.
The dossier fills itself. Every norm section the agent reads while working
on a dossier shows up in the Readings tab, with the clause, the pages, who
and when. Naming the project once is enough (load_dossier, open_dossier, or
any tool that touches the dossier, one of its questions or its site sheet); the
dossier stays active for six hours and every reading extends it.
record_decision takes dossierId and question (what is settled) instead of
questionId: the question is born decided. The served methodology moves to v3:
name the project, record what is fixed, open a question only when something is
left to settle.
The office library. list_skills and get_skill serve the procedures the
agent follows for a repeatable task: nine shipped with the package
(project-basis, use-agreement, site-chapter, instruct-structure,
review-open-questions, handoff-to-word, verification-note,
consult-stratta, ingest-norm) and the ones your office writes on the
Library page; an office procedure with the name of a Stratta one replaces it.
A Word report deposited on that page becomes a template: its plan, its
standing mentions and its wording, reviewed and validated, served as one more
procedure.
The document the project must produce. draft_deliverable opens the
document of a dossier (project basis, use agreement, geotechnical report,
verification note) on the office template's plan, otherwise on Stratta's;
write_section writes one section with what it rests on, and refuses a text
without a source. The dossier's Deliverables tab reads it, corrects it,
puts it in review, signs it and exports it to Word, in the layout of the report
the office deposited. When a source moves (a decision retaken, an entry
deleted, a new site survey, a new edition of a norm), the section goes stale
with the reason, and draft_deliverable tells the agent.
The terrain. The PDF profile of a Geneva borehole is read on request by a vision model: its layers replace the coarse cadastral units in the column, the cross-section and the block; an office archive borehole is read from a dossier attachment and placed on the site. A decision whose value is an elevation is drawn on the cross-section and in the block. A guest reading the dossier through a link can reply.
Each of the 54 tools the remote connector serves now declares the credential it requires, so a client can show its sign-in step on the tool that needs it rather than on the first call that fails. Deleting a document asks for your confirmation through the client before anything goes, as removing a question or an option already did: it is the widest deletion Stratta offers, and it was the only one that ran on the first word.
Nineteen tools, on the local server and the remote connector alike. On
questions, the agent reads what load_dossier summarised: list_questions
and get_question (options with their ids, decision, evidence field by
field, signed comments, one page at a time), get_dossier_activity,
list_exports. It does what only the page could: update_question (assignee
by e-mail address, due date), add_option, update_option, add_comment,
update_entry, attach_entry to empty the unclassified pile;
delete_question and delete_option ask for your confirmation through the
client before touching anything.
On the site side, the Site tab is read in full: list_sites, get_site (every
fact with its key, its official notice and which source answered),
get_site_section (axis, terrain, modelled bedrock, geology, corridor
boreholes with their logs), list_site_overlays, get_groundwater_contours,
list_site_photos, list_site_neighbours.
load_dossier now returns dossierId, siteId, the counts and the dates;
list_dossiers returns siteId; get_boreholes returns the borehole's
author, piezometer and strata reading state.
The scan_site radius now goes up to 1,000 m (previously 50 to 500).
Past a few hundred metres in a dense neighbourhood, the scan keeps the 400
nearest boreholes and the sheet says the list was cut rather than showing a
wrong count.
In the app, every area drawn on the map (polluted site, natural hazard, water protection sector) opens with a click and leads with the one thing you came to read: whether it covers the site point, or how many metres away it stops. The same areas now appear under the matching fact in the sheet, with their distance: "Outside protection sector" at the point and "Water protection (1)" on the map were both true, and read as a contradiction. The "Polluted sites" and "Building permits" sections now count within the chosen radius rather than a fixed 300 m square.
The cross-section now reads every borehole record of its corridor from the canton (Vaud and Valais only serve them one by one, and the scan read twelve), gains an adjustable depth window so the first twenty metres can be read without a three-hundred-metre well crushing them, and carries two observation marks per borehole: the measured water table and the rock top as the layer description names it. Joining those rock tops across boreholes is a switch, off by default, labelled as interpretation.
Later the same day: the map areas are now written by the scan, like the boreholes, instead of being re-read on every open under a rate limit that made them vanish silently after a few page reloads. The cross-section's controls now sit in a toolbar on top of the figure, the depth window clips columns at the frame edge rather than at their own depth, and a second button, Join layers, aligns layers of the same family (clay, silt, sand, gravel, moraine, fill, rock) between neighbouring boreholes less than 150 m apart. Off by default, drawn as a translucent fill with a dotted outline and labelled "interpretation": what an engineer would do in their head in front of the section, drawn with its label.
Three new tools, scan_site, get_site_context and get_boreholes, gather
around a Swiss address what the public registers know about the ground:
municipality, EGRID parcel, elevation, geology, cantonal borehole register
with strata, water table measured in a piezometer, polluted sites, groundwater
protection, natural hazards, seismic zone and SIA 261 ground class.
get_site_context returns two separate lists: what the registers settled,
and what they did not, with the reason for each point. The second is the one
that prices a bid. get_boreholes goes down to the detail: the boreholes
nearest first, their layers, the SIA 261 class logged in the hole, the measured
water table, and links to the cantonal documents.
In the app, a dossier gains a Site tab: you pick a radius, a step screen shows the sources answering, then the fiche appears whole. It reads top to bottom like the project basis SIA 260 clause 2.5.2 asks for. A map carries the polluted-site and hazard footprints, and two clicks draw a section where boreholes are projected under the ground, with no layer interpolated between them. Every value copies with its provenance, and a situation report leaves in Markdown, HTML or print. The original documents are linked at the canton, never copied.
The ten ingest_* tools are now served to the remote connector as well: an
agent with a machine (Claude Code, Codex, Cursor, Gemini CLI) ingests a norm
through https://stratta.ch/mcp, with no package and no key. The
ingest-norm skill is served as the resource stratta://skills/ingest-norm
and the pre-pass script at https://stratta.ch/ingest-prepass.py, which the
skill downloads when it is not on disk. The connector exposes 32 tools; only
add_attachment, which reads a file from your disk, stays local. On the site,
the guide names your agent (eight clients, a button or a command each), the
dashboard shows which agents are connected, and the norms of the workspace get
their own page.
The local server and the remote connector described the same tools with
different texts. A single catalogue now carries the names, descriptions and
annotations of both, and the package is generated from it. The norm
parameter of the read tools is code everywhere (your agent reads the schema
on every session, nothing to change on your side). whoami arrives on the
local server, results are returned as compact JSON, and the server sends the
same initialisation instructions as the connector.
ingest_publish now measures how much of the norm actually made it in (text
per page, pages under a chapter, empty leaves, formulas and tables) and
refuses below 30/100 with the reasons; force: true publishes anyway,
once confirmed. ingest_status and list_norms report the score (coverage:
full, partial, sparse), and a hollow norm carries a notice the agent has
to relay. Every tool call also carries a session id and the address of what
was asked for (norm code, path, search terms), never the content of free-form
fields: the dashboard reads a conversation as a path through the corpus.
A dossier now holds questions ("can pile P38 be kept?"), each with its
evidence, its options and its decision. Two tools added: open_question
(idempotent on the title, named options[]) and record_decision (a decision
the engineer confirmed, the retained option). save_finding now only takes
reference, hypothesis or observation, files under a question via
questionId, and carries the cited edition (normEdition).
resolve_question closes or reopens a question rather than an entry. 7
dossier tools instead of 5: 25 tools total on the local server, 16 on the
remote connector.
npm install -g @stratta/mcp installs a stratta binary: stratta doctor,
stratta whoami. npx -y @stratta/mcp keeps working unchanged: it is the
form your agent uses.
The server can finally answer questions about itself. doctor checks Node,
your key, backend reachability, how many norms are visible and your version,
and every failure carries the command that fixes it. whoami asks the backend
rather than your disk: a key revoked from the dashboard still looks valid
there. logout removes the key and flags a lingering STRATTA_API_KEY.
--help lists everything.
npx -y @stratta/mcp update compares your version against the published one
and fetches the new one. npx caches what it resolved, so a server could keep
launching a replaced version for weeks with nothing to say so. The server also
mentions it at startup when it notices it is behind.
login opened the browser on a truncated address: & separates commands in
cmd.exe, and the authorisation URL contains two of them. The page reported
an invalid link, while the address printed in the terminal worked fine. The
URL is now passed through untouched.
npx -y @stratta/mcp login opens an ephemeral port on 127.0.0.1, sends you
to Stratta, and collects the key over a local redirect. You see which machine
is asking and for which organisation, and there is no key to copy. --paste
keeps the old flow for machines without a browser.
The eight read tools declare themselves side-effect free, and deleting a norm declares itself destructive, so a client asks for confirmation at the right moment and only then. Arguments for all eighteen tools are validated at the server boundary.
- Server-enforced quotas per organization. A
QUOTA_EXCEEDEDerror now names the dimension, your current count and the plan limit, in plain language. - The agent is told not to retry a quota rejection, so it stops looping against a limit that will not move on its own. Monthly quota errors say when the window resets. - Theingest-normskill checks the budget before writing a large norm, rather than failing halfway and leaving a partial document behind. - See Plans and quotas.
- The pre-pass falls back to a regex scan of the document body when a PDF ships no embedded bookmarks, so norms that were previously unusable now ingest correctly.
- Ingestion runs in two phases: a deterministic Python pre-pass (PyMuPDF)
extracts the tree, the page text and the figures, then the agent enriches it
with summaries, LaTeX formulas and tables. - Roughly 10× fewer tokens and 5×
faster than the fully agentic pipeline it replaces. -
scripts/ingest-prepass.pyships inside the package.
get_figurenow also returns a public URL for the image, so Claude can offer a full-size view in addition to the inline (base64) image. - The tool result includes a Markdown embed hint so clients that support inline images can show the figure directly.
- Install without a key:
claude mcp add stratta -- npx -y @stratta/mcp. You're prompted for your API key on first use. - Newnpx -y @stratta/mcp logincommand to save your key ahead of time. - The key is stored in~/.stratta/config.json(owner-only, mode0600). Resolution order:STRATTA_API_KEYenv var → config file → first-use prompt.
- Initial publish of
@stratta/mcpto npm. - 18 tools: 8 for reading norms (methodology, list, table of contents, subtree, section, search, figure, cross-references) and 10 for ingesting norms (ingest_*). - Theingest-normskill ships with the package.
This log tracks @stratta/mcp releases. Platform changes (billing, corpus,
translation) live on stratta.ch/changelog;
quotas and payment are covered in Plans.