@stratta/mcp 1.17.0 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -34,7 +34,7 @@ https://stratta.ch/mcp
34
34
  That is the shorter path, the one the dashboard walks you through for Claude,
35
35
  ChatGPT, Claude Code, Codex, Cursor, VS Code, Gemini CLI and Windsurf, and the
36
36
  only one that works in an agent running in the cloud (claude.ai, ChatGPT). It
37
- serves 58 of the 59 tools below, **ingestion included**: the pre-pass script is
37
+ serves 61 of the 62 tools below, **ingestion included**: the pre-pass script is
38
38
  downloaded from https://stratta.ch/ingest-prepass.py when it is not on disk.
39
39
  See https://stratta.ch/docs/en/guides/connect-remote.
40
40
 
@@ -191,8 +191,9 @@ named `E2E dossier <timestamp>` and does not delete it.
191
191
 
192
192
  ## Tools exposed
193
193
 
194
- 59 tools, generated from one catalogue shared with the remote connector (which
195
- serves the same 58, everything minus `add_attachment`).
194
+ 62 tools, generated from one catalogue shared with the remote connector. This
195
+ package announces 59 of them; the remote connector serves 61: everything minus
196
+ `add_attachment`, plus the three tools a host calls for the person, listed last.
196
197
 
197
198
  **Read** (10 tools — query the norms of your workspace):
198
199
 
@@ -291,6 +292,14 @@ too, and its file is the layout the Word export is rendered into.
291
292
  | `ingest_publish` | Score the document and flip it to published; refuses below 30/100 unless forced. |
292
293
  | `ingest_delete` | Delete a document and all its children. |
293
294
 
295
+ **Remote only** (3 tools, served by `https://stratta.ch/mcp` and not by this package, which draws no interface):
296
+
297
+ | Tool | Purpose |
298
+ | ------------------ | ------------------------------------------------------------------------------------------------------------ |
299
+ | `show_citations` | Show the clauses an answer cites as cards (an MCP App), each quote checked word for word against the clause. |
300
+ | `open_norm_reader` | The norm reader, opened by the person from the host's side panel or sidebar; hidden from the model. |
301
+ | `get_profile` | An opaque id and the organization of the connection, so a host tells two connected accounts apart. |
302
+
294
303
  ## How agents should use it
295
304
 
296
305
  For querying:
@@ -194,6 +194,53 @@ export const CATALOG = [
194
194
  "figureId": "Figure identifier from the figures array of get_section."
195
195
  }
196
196
  },
197
+ {
198
+ "name": "show_citations",
199
+ "title": "Show cited clauses",
200
+ "description": "Show the person the clauses your answer rests on, as cards they can open and check against the norm. Call it once, after answering, with the sections you actually read with get_section and cited, in the order you cited them. It reads nothing new: it never replaces get_section, and a clause you did not read must not be listed.",
201
+ "annotations": {
202
+ "readOnlyHint": true,
203
+ "destructiveHint": false,
204
+ "idempotentHint": true,
205
+ "openWorldHint": false
206
+ },
207
+ "transports": [
208
+ "remote"
209
+ ],
210
+ "params": {
211
+ "citations": "The cited clauses, one to eight: code and path as get_section took them, the edition when the norm has several, and optionally the exact sentence quoted from the clause."
212
+ }
213
+ },
214
+ {
215
+ "name": "open_norm_reader",
216
+ "title": "Norm reader",
217
+ "description": "Open the norm reader: the norms of the signed-in organization, each with its table of contents and its clauses, browsed by the person. Opened by the person from the side panel or the sidebar, never by the model.",
218
+ "annotations": {
219
+ "readOnlyHint": true,
220
+ "destructiveHint": false,
221
+ "idempotentHint": true,
222
+ "openWorldHint": false
223
+ },
224
+ "transports": [
225
+ "remote"
226
+ ],
227
+ "params": {}
228
+ },
229
+ {
230
+ "name": "get_profile",
231
+ "title": "Connected profile",
232
+ "description": "Return the profile behind this connection: a stable opaque id and the organization the connection reads from. Used by the host to tell several connected accounts apart; to check the workspace, call whoami.",
233
+ "annotations": {
234
+ "readOnlyHint": true,
235
+ "destructiveHint": false,
236
+ "idempotentHint": true,
237
+ "openWorldHint": false
238
+ },
239
+ "transports": [
240
+ "remote"
241
+ ],
242
+ "params": {}
243
+ },
197
244
  {
198
245
  "name": "scan_site",
199
246
  "title": "Scan a site",
@@ -23,6 +23,10 @@ export const TOOLSET_OF = {
23
23
  search_corpus: 'norms',
24
24
  get_cross_refs: 'norms',
25
25
  get_figure: 'norms',
26
+ // Shown to the person rather than read by the model (ADR 59): remote only.
27
+ show_citations: 'norms',
28
+ open_norm_reader: 'norms',
29
+ get_profile: 'norms',
26
30
  list_dossiers: 'dossiers',
27
31
  open_dossier: 'dossiers',
28
32
  load_dossier: 'dossiers',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stratta/mcp",
3
3
  "mcpName": "ch.stratta/mcp",
4
- "version": "1.17.0",
4
+ "version": "1.18.0",
5
5
  "description": "MCP server exposing the engineering norms your firm is licensed for (SIA / Eurocodes) to any MCP client, via Stratta TreeRAG.",
6
6
  "license": "UNLICENSED",
7
7
  "author": "SmartFlow <hello@stratta.ch>",