Stratta

ch.stratta由 stratta.ch 發布v1.20.1更新於 Oct 29, 2026

Your organization’s norms and reference documents (standards, laws), cited to the section and page.

已驗證STDIO僅桌面知識與記憶

概覽

AI 產生的概覽

Stratta 是本地 MCP 伺服器,讓助理存取組織的規範與參考文件,並標註到章節與頁碼的引用。

可以做什麼
檢索組織的規範與參考文件(例如標準、法律),供助理在回答時查閱。回傳指向來源文件特定章節與頁碼的引用。首次使用時可透過 API 金鑰或瀏覽器登入完成身分驗證。
適用情境
當回答需要以組織內部規範、標準或法律參考文本為依據,且應引用確切章節與頁碼而非依賴一般知識時適用。
執行需求
透過 npm 套件 @stratta/mcp 以 stdio 在使用者桌面本機執行。需要 Stratta 帳戶,並設定 STRATTA_API_KEY 環境變數,或首次使用時透過登入指令在瀏覽器中登入。
安裝前請注意
此伺服器處理組織內部的規範與參考文件,可能屬於機密資訊,請考量傳送給 Stratta 服務的內容。STRATTA_API_KEY 是金鑰,應在受管機器或 CI 中明確設定,不要共用。僅限桌面端,無法從網頁用戶端使用。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Stratta,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

該儲存庫沒有 README。

工具

59

get_methodology

Working method

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. Use this at the start of a conversation that will rely on the documents of the organization; its rules hold for the rest of that conversation.

無需輸入參數。

whoami

Connected account

Report which organization this connection reads from, the signed-in role, the plan name and how many norms are available. Use it to confirm the connection points at the intended workspace before starting, or when a norm the user expects is missing.

無需輸入參數。

list_norms

Available norms

List the norms and reference documents (standards, laws, regulations) published in the signed-in organization, with code, year, title, edition, language and coverage (how much of the norm was ingested). Use this to check whether a norm is held, which editions are readable, or what a norm covers: a norm absent from this organization cannot be read here. Pass `query` with a code or words of the title; a large corpus is listed in part, and `total` says how many norms there are. A demo entry is fictional and never a technical reference; a sparse entry carries a notice to relay.

輸入參數limitquery

get_toc

Table of contents

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.

輸入參數code必填editionmaxDepth

get_subtree

Section tree

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.

輸入參數code必填path必填editionmaxDepthmaxNodes

get_section

Section

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.

輸入參數code必填path必填offseteditionmaxChars

search_in_norm

Search a norm

Full-text search inside one norm, ranked, a hit in a heading outranking a hit in the body. Use it when the table of contents suggests no obvious section. Matching is per term, not per substring, in the language of the norm: search "charges" in a French document, not "loads"; accents and case do not matter. A clause number as keyword returns that clause. Returns paths, titles and snippets; read the promising ones with get_section.

輸入參數code必填limiteditionkeyword必填

search_corpus

Search all norms

Full-text search across every norm the organization can read, grouped by norm, heading hits from any norm ahead of body hits. Use this when the question does not name its norm: it tells which norms speak of the subject before any table of contents is opened. Same matching as search_in_norm. Returns, per norm, its code and title and a few hits; continue with get_section on the paths that look relevant.

輸入參數limitkeyword必填

get_cross_refs

Cross-references

Return the references one section makes: to other clauses, annexes, figures and tables of the same norm, and to other norms. Norms and regulations often spread the rule, the coefficient and the exception across separate clauses and documents, 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.

輸入參數code必填path必填edition

get_figure

Figure

Return one figure of a norm as an image: diagrams, 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.

輸入參數code必填editionfigureId必填

scan_site

Scan a site

Collect what public Swiss registers know about a building site: municipality, parcel, ground elevation, geology, nearby boreholes with their strata, polluted sites, groundwater protection, natural hazards, noise sensitivity. Give a Swiss address; it is geocoded server-side against swisstopo, so do not pass coordinates you inferred. Open the dossier first with open_dossier: one site per dossier. The scan runs in the background and takes a few seconds; read the result with get_site_context. It is a survey of public registers, never a geotechnical study.

輸入參數radiusaddress必填dossierId必填

get_site_context

Read a site scan

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.

輸入參數siteId必填

get_boreholes

Read the boreholes of a site

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.

輸入參數limitsiteId必填withStrataOnly

list_sites

Site sheets

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.

輸入參數limit

get_site

Read a site sheet

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.

輸入參數siteId必填

get_site_section

Read the section

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.

輸入參數siteId必填maxPoints

list_site_overlays

Map areas around a site

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.

輸入參數siteId必填includeGeometry

get_groundwater_contours

Piezometric contours

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.

輸入參數siteId必填includeGeometry

list_site_photos

Site photos

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.

輸入參數siteId必填

list_site_neighbours

Neighbouring projects

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.

輸入參數radiussiteId必填

list_dossiers

Project dossiers

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.

無需輸入參數。

open_dossier

Open a dossier

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.

輸入參數name必填reference

open_question

Open a question

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.

輸入參數bodytitle必填optionsdossierId必填

save_finding

Record evidence

Use this when a piece of evidence turns up during the work: records it in a dossier, one at a time 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 user 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.

輸入參數kind必填pagetitle必填valuedetailnormCodedossierId必填confidencequestionIdnormEditionsectionPathattachmentId另有 1 個

record_decision

Record a decision

Use this when the user has settled a point: records 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. Meant for decisions the user confirmed, not for conclusions of the agent alone. Returns entryId.

輸入參數pagetitle必填valuedetailnormCodequestionconfirmeddossierIdconfidencequestionIdnormEditionsectionPath另有 1 個

load_dossier

Load a dossier

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. Use this when the user returns to a project already named: the decisions already taken are there. The name is enough; the id is optional.

輸入參數namedossierId

resolve_question

Close a question

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.

輸入參數resolvedconfirmedquestionId必填

list_attachments

Project attachments

List the project attachments of one dossier: the site reports, borehole logs, meeting minutes and data sheets the user uploaded. Returns for each its id, name, type, page count and extraction status. Use this when a question on the project may rest on what the office uploaded; read_attachment opens one, and a piece is cited like a clause.

輸入參數dossierId必填

read_attachment

Read an attachment

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.

輸入參數tofrommaxCharsattachmentId必填

search_in_dossier

Search the attachments

Full-text search over the attachments of one dossier, accents and case ignored, matching per term. Returns the attachment, the page and a snippet for each hit; read the page with read_attachment before quoting it.

輸入參數limitkeyword必填dossierId必填

add_attachment

Add an attachment

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.

輸入參數filePath必填dossierId必填

list_templates

Dossier templates

List the checklists the organization wrote for its types of case: each is a set of questions with the clauses they rest on. Use this when a new project may match a type of case the office already wrote down; apply_template opens all its questions at once.

無需輸入參數。

apply_template

Apply a template

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.

輸入參數dossierId必填templateId必填

draft_deliverable

Open a deliverable

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.

輸入參數kind必填titledossierId必填

write_section

Write a section

Write one section of a deliverable: the text as it would be printed, and what it rests on. Every sentence of substance must come from a source the section lists: a decision or piece of evidence of the dossier (kind entry, ref the entry id), a fact of the site (kind fact, ref the fact key such as groundwater.level), a clause read in a norm (kind clause, ref the norm code and the section path as in "SIA 267 s. 9.5.2"), a page of an attachment (kind attachment, ref the id with #p12), or a reading recorded by the dossier (kind reading, ref the reading id). A section without a source is refused; when the dossier has nothing for it, pass gap true with a body that says what is missing, and the section is printed as something to establish. Replaces what the section held. Never invent a value: a section written from memory is worse than a gap.

輸入參數gapbody必填path必填sources必填deliverableId必填

list_questions

Questions of a dossier

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.

輸入參數limitcursorstatusdossierId必填

get_question

Read a question

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.

輸入參數limitcursorquestionId必填

get_dossier_activity

Dossier history

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.

輸入參數limitcursordossierId必填

list_exports

Dossier exports

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.

輸入參數dossierId必填

update_question

Edit a question

Reword a question, rewrite what is at stake, assign it to a member of the organization by e-mail address, or set its due date. Pass only the fields to change; pass null to clear the assignee or the due date. Status changes go through record_decision and resolve_question, not here. Only when the user asked for the change.

輸入參數bodydueAttitlequestionId必填assigneeEmail

add_option

Add an option

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.

輸入參數name必填questionId必填description

update_option

Edit an option

Rename or describe an option of a question, or mark it as the one retained. Retaining one option releases the others: a choice has one answer. Retaining here does not settle the question; call record_decision for that, which names the retained option itself. Pass only the fields to change. Only when the user asked for it.

輸入參數nameoptionId必填retaineddescription

delete_option

Remove an option

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.

輸入參數optionId必填confirmed

delete_question

Delete a question

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.

輸入參數confirmedquestionId必填

add_comment

Leave a comment

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.

輸入參數body必填entryIddossierId必填questionId

update_entry

Correct an entry

Correct a piece of evidence or a decision in place: its wording, its value, its confidence, or the citation (norm, section path, page, edition) when the wrong clause was cited. Pass only the fields to change; pass page null to clear it. The kind and the question do not change here (attach_entry moves an entry). Only when the user asked for the correction; never rewrite what a colleague wrote without saying so.

輸入參數pagetitlevaluedetailentryId必填normCodeconfidencenormEditionsectionPath

attach_entry

File an entry under a question

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.

輸入參數entryId必填optionIdquestionId必填

list_skills

Skills of this workspace

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.

無需輸入參數。

get_skill

Read a skill

Read one skill in full: Markdown with its front matter (name, description) and its steps, rules and output shape. Use this when a task matches a skill from list_skills; the skill describes how the office does it. 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.

輸入參數name必填

ingest_status

Check ingestion status

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). Use this before creating a document, so a norm is not ingested twice.

輸入參數code必填

ingest_create_document

Create norm document

Create a draft norm document in the workspace. Returns the documentId every later ingest_* call needs. The organization must hold the rights to the document it deposits.

輸入參數code必填year必填scopetitle必填editionlicencelanguage必填totalPages必填

ingest_create_sections

Create sections

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.

輸入參數sections必填documentId必填

ingest_attach_formula

Attach formula

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

輸入參數latex必填sectionId必填description必填formulaNumber必填

ingest_attach_table

Attach table

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

輸入參數data必填caption必填sectionId必填tableNumber必填

ingest_attach_cross_ref

Attach cross-reference

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

輸入參數refText必填refType必填sourceSectionId必填targetSectionPathtargetDocumentCode必填

ingest_upload_figure

Upload figure

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

輸入參數base64必填caption必填mimeType必填sectionId必填figureNumber必填

ingest_normalize_cross_refs

Normalize cross-references

Scan every section of a document and add the cross-references to other norms found in its text that are not recorded yet; existing ones are kept. Idempotent; run it after the sections are in.

輸入參數documentId必填

ingest_publish

Publish document

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.

輸入參數forcedocumentId必填

ingest_delete

Delete document

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.

輸入參數confirmeddocumentId必填

版本歷史

9
  1. v1.20.1最新Oct 26, 2026
  2. v1.20.0Oct 21, 2026
  3. v1.19.0Oct 8, 2026
  4. v1.18.1Oct 6, 2026
  5. v1.18.0Oct 3, 2026
  6. v1.17.0Oct 3, 2026
  7. v1.16.1Sep 30, 2026
  8. v1.16.0Sep 20, 2026
  9. v1.15.0Sep 16, 2026

評分

已滿足適用檢查項的 65%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分

    請宣告包含 README 的 GitHub 儲存庫,或在 OAuth 受保護資源後設資料中提供 resource_documentation。

  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。