@axonity-ai/mcp 0.6.0 → 0.8.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 +251 -14
- package/dist/client.d.ts +15 -2
- package/dist/client.js +8 -1
- package/dist/client.js.map +1 -1
- package/dist/contract.d.ts +109 -0
- package/dist/contract.js +272 -0
- package/dist/contract.js.map +1 -0
- package/dist/errors.d.ts +15 -3
- package/dist/errors.js +27 -3
- package/dist/errors.js.map +1 -1
- package/dist/generated/listFilters.d.ts +19 -0
- package/dist/generated/listFilters.js +78 -0
- package/dist/generated/listFilters.js.map +1 -0
- package/dist/index.js +29 -2
- package/dist/index.js.map +1 -1
- package/dist/tools/authoringSpec.d.ts +76 -0
- package/dist/tools/authoringSpec.js +169 -0
- package/dist/tools/authoringSpec.js.map +1 -0
- package/dist/tools/company.d.ts +5 -2
- package/dist/tools/company.js +79 -2
- package/dist/tools/company.js.map +1 -1
- package/dist/tools/conventions.d.ts +16 -0
- package/dist/tools/conventions.js +299 -19
- package/dist/tools/conventions.js.map +1 -1
- package/dist/tools/credentials.d.ts +20 -0
- package/dist/tools/credentials.js +41 -0
- package/dist/tools/credentials.js.map +1 -1
- package/dist/tools/extras.d.ts +17 -0
- package/dist/tools/extras.js +151 -9
- package/dist/tools/extras.js.map +1 -1
- package/dist/tools/operations.d.ts +28 -0
- package/dist/tools/operations.js +160 -0
- package/dist/tools/operations.js.map +1 -0
- package/dist/tools/register.d.ts +27 -0
- package/dist/tools/register.js +19 -1
- package/dist/tools/register.js.map +1 -1
- package/dist/tools/runs.d.ts +24 -0
- package/dist/tools/runs.js +304 -26
- package/dist/tools/runs.js.map +1 -1
- package/dist/tools/secrets.d.ts +33 -0
- package/dist/tools/secrets.js +69 -0
- package/dist/tools/secrets.js.map +1 -0
- package/dist/tools/subworkflows.d.ts +20 -0
- package/dist/tools/subworkflows.js +42 -0
- package/dist/tools/subworkflows.js.map +1 -0
- package/dist/tools/toolboxes.d.ts +32 -0
- package/dist/tools/toolboxes.js +165 -0
- package/dist/tools/toolboxes.js.map +1 -0
- package/dist/tools/triggers.d.ts +8 -0
- package/dist/tools/triggers.js +65 -7
- package/dist/tools/triggers.js.map +1 -1
- package/dist/tools/validation.js +74 -4
- package/dist/tools/validation.js.map +1 -1
- package/dist/tools/versions.d.ts +9 -0
- package/dist/tools/versions.js +36 -0
- package/dist/tools/versions.js.map +1 -1
- package/dist/tools/workflowMutations.js +53 -12
- package/dist/tools/workflowMutations.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The building blocks of this deploy, read from the server instead of restated
|
|
3
|
+
* here.
|
|
4
|
+
*
|
|
5
|
+
* `apply_workflow_mutations` used to name all 22 command types in its own
|
|
6
|
+
* description. That list was correct only by maintenance, and it had already
|
|
7
|
+
* been wrong in the dangerous direction once: it advertised three operations
|
|
8
|
+
* the API rejected with a 422 (#32, axonity-flow#802). A conformance test then
|
|
9
|
+
* pinned the prose to the schema — the right fix for a list you keep, and still
|
|
10
|
+
* a list you keep.
|
|
11
|
+
*
|
|
12
|
+
* `GET /workflows/operations` (axonity-flow#802 B4) removes the list instead of
|
|
13
|
+
* guarding it. It is generated from the engine's mutation registry — the same
|
|
14
|
+
* source the mutations route validates against — so a command this tool reports
|
|
15
|
+
* is a command the API accepts, by construction rather than by agreement. A new
|
|
16
|
+
* server operation becomes discoverable with no change in this repository,
|
|
17
|
+
* which is the acceptance criterion #8 was filed for.
|
|
18
|
+
*
|
|
19
|
+
* axonity-flow#961 S1 extends that property to three more lists that had no
|
|
20
|
+
* route at all, and it is the same story each time: `conventions.ts` named nine
|
|
21
|
+
* step types where seven validate — `loop` and `for_each` both answer
|
|
22
|
+
* `step_invalid_type` — because a list nobody could read is a list that drifts.
|
|
23
|
+
* So the response now carries four generated lists, and this connector names
|
|
24
|
+
* none of them:
|
|
25
|
+
* - `operations` — the mutation commands, as before.
|
|
26
|
+
* - `triggerTypes` — every value a trigger's `typeId` may hold.
|
|
27
|
+
* - `stepTypes` — every value a step's `type` may hold, INCLUDING the
|
|
28
|
+
* ones an author may not write, each with the reason and what to write
|
|
29
|
+
* instead. Omitting those would read as "does not exist".
|
|
30
|
+
* - `scheduleRuleKinds` — the shapes a schedule rule takes, each with a
|
|
31
|
+
* working example the backend round-trips through its own parser on every
|
|
32
|
+
* read, so a published example cannot rot.
|
|
33
|
+
*
|
|
34
|
+
* axonity-flow#964 adds three more, and they are the ones that bite quietly.
|
|
35
|
+
* A value's type is not carried by the same KEY everywhere, and the three
|
|
36
|
+
* vocabularies behind those keys are not interchangeable:
|
|
37
|
+
* - `parameterTypes` — a trigger parameter's / workflow constant's `type`.
|
|
38
|
+
* Knows `boolean` and `constant`.
|
|
39
|
+
* - `outputKinds` — a step output's / input's `kind`. Narrower, and a
|
|
40
|
+
* DIFFERENT KEY. Spells the same idea `yes-no`, not `boolean`.
|
|
41
|
+
* - `schemaFieldKinds` — the canonical builder's vocabulary, inside a field's
|
|
42
|
+
* `schema`. Widest and newest; where a `schema` is present it wins.
|
|
43
|
+
* Writing `kind` on a trigger parameter is not a 422 — it is a key nothing
|
|
44
|
+
* reads, so the value falls back to text and the run binds the wrong shape.
|
|
45
|
+
* That is the failure this connector shipped once (axonity-mcp#47) by reading
|
|
46
|
+
* the field off the model that DECLARES it rather than the code that READS it.
|
|
47
|
+
*
|
|
48
|
+
* `rulesVersion` is a content hash over all four: same hash, nothing to
|
|
49
|
+
* re-fetch. It is what makes "read the spec at the start of each authoring
|
|
50
|
+
* task" cheap enough to actually do.
|
|
51
|
+
*
|
|
52
|
+
* **Cost.** The full catalog is ~20 KB — the payload schemas are the bulk of it,
|
|
53
|
+
* and `add_step` alone is 3 KB. Handing that to an agent that wanted to know
|
|
54
|
+
* which commands exist is the mistake #33 was filed about: a default that is
|
|
55
|
+
* correct but unaffordable produces the shortcut, not the careful read. So the
|
|
56
|
+
* payload SCHEMAS are what the index drops, per command, on request. The three
|
|
57
|
+
* vocabulary lists are small and are the answer to "what may I write at all",
|
|
58
|
+
* so they always ride along — trimming them would recreate the gap this closed.
|
|
59
|
+
*/
|
|
60
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
61
|
+
import type { AxonityClient } from "../client.js";
|
|
62
|
+
/**
|
|
63
|
+
* Project the catalog to what was asked for, keeping the envelope.
|
|
64
|
+
*
|
|
65
|
+
* Exported for testing. `types` is matched against the server's own `type`
|
|
66
|
+
* values with NO local list to check them against — an unknown name comes back
|
|
67
|
+
* in `unknownTypes` rather than being rejected here, because the connector is
|
|
68
|
+
* not the authority on what exists. That is the whole point of reading the
|
|
69
|
+
* catalogue.
|
|
70
|
+
*
|
|
71
|
+
* Only `operations` is ever projected. The envelope is spread through on both
|
|
72
|
+
* paths, so `triggerTypes` / `stepTypes` / `scheduleRuleKinds` — and anything
|
|
73
|
+
* the backend adds next to them — survive unread and unnamed here.
|
|
74
|
+
*/
|
|
75
|
+
export declare function projectCatalog(response: unknown, types?: string[]): unknown;
|
|
76
|
+
export declare function registerAuthoringSpecTools(server: McpServer, client: AxonityClient): void;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The building blocks of this deploy, read from the server instead of restated
|
|
3
|
+
* here.
|
|
4
|
+
*
|
|
5
|
+
* `apply_workflow_mutations` used to name all 22 command types in its own
|
|
6
|
+
* description. That list was correct only by maintenance, and it had already
|
|
7
|
+
* been wrong in the dangerous direction once: it advertised three operations
|
|
8
|
+
* the API rejected with a 422 (#32, axonity-flow#802). A conformance test then
|
|
9
|
+
* pinned the prose to the schema — the right fix for a list you keep, and still
|
|
10
|
+
* a list you keep.
|
|
11
|
+
*
|
|
12
|
+
* `GET /workflows/operations` (axonity-flow#802 B4) removes the list instead of
|
|
13
|
+
* guarding it. It is generated from the engine's mutation registry — the same
|
|
14
|
+
* source the mutations route validates against — so a command this tool reports
|
|
15
|
+
* is a command the API accepts, by construction rather than by agreement. A new
|
|
16
|
+
* server operation becomes discoverable with no change in this repository,
|
|
17
|
+
* which is the acceptance criterion #8 was filed for.
|
|
18
|
+
*
|
|
19
|
+
* axonity-flow#961 S1 extends that property to three more lists that had no
|
|
20
|
+
* route at all, and it is the same story each time: `conventions.ts` named nine
|
|
21
|
+
* step types where seven validate — `loop` and `for_each` both answer
|
|
22
|
+
* `step_invalid_type` — because a list nobody could read is a list that drifts.
|
|
23
|
+
* So the response now carries four generated lists, and this connector names
|
|
24
|
+
* none of them:
|
|
25
|
+
* - `operations` — the mutation commands, as before.
|
|
26
|
+
* - `triggerTypes` — every value a trigger's `typeId` may hold.
|
|
27
|
+
* - `stepTypes` — every value a step's `type` may hold, INCLUDING the
|
|
28
|
+
* ones an author may not write, each with the reason and what to write
|
|
29
|
+
* instead. Omitting those would read as "does not exist".
|
|
30
|
+
* - `scheduleRuleKinds` — the shapes a schedule rule takes, each with a
|
|
31
|
+
* working example the backend round-trips through its own parser on every
|
|
32
|
+
* read, so a published example cannot rot.
|
|
33
|
+
*
|
|
34
|
+
* axonity-flow#964 adds three more, and they are the ones that bite quietly.
|
|
35
|
+
* A value's type is not carried by the same KEY everywhere, and the three
|
|
36
|
+
* vocabularies behind those keys are not interchangeable:
|
|
37
|
+
* - `parameterTypes` — a trigger parameter's / workflow constant's `type`.
|
|
38
|
+
* Knows `boolean` and `constant`.
|
|
39
|
+
* - `outputKinds` — a step output's / input's `kind`. Narrower, and a
|
|
40
|
+
* DIFFERENT KEY. Spells the same idea `yes-no`, not `boolean`.
|
|
41
|
+
* - `schemaFieldKinds` — the canonical builder's vocabulary, inside a field's
|
|
42
|
+
* `schema`. Widest and newest; where a `schema` is present it wins.
|
|
43
|
+
* Writing `kind` on a trigger parameter is not a 422 — it is a key nothing
|
|
44
|
+
* reads, so the value falls back to text and the run binds the wrong shape.
|
|
45
|
+
* That is the failure this connector shipped once (axonity-mcp#47) by reading
|
|
46
|
+
* the field off the model that DECLARES it rather than the code that READS it.
|
|
47
|
+
*
|
|
48
|
+
* `rulesVersion` is a content hash over all four: same hash, nothing to
|
|
49
|
+
* re-fetch. It is what makes "read the spec at the start of each authoring
|
|
50
|
+
* task" cheap enough to actually do.
|
|
51
|
+
*
|
|
52
|
+
* **Cost.** The full catalog is ~20 KB — the payload schemas are the bulk of it,
|
|
53
|
+
* and `add_step` alone is 3 KB. Handing that to an agent that wanted to know
|
|
54
|
+
* which commands exist is the mistake #33 was filed about: a default that is
|
|
55
|
+
* correct but unaffordable produces the shortcut, not the careful read. So the
|
|
56
|
+
* payload SCHEMAS are what the index drops, per command, on request. The three
|
|
57
|
+
* vocabulary lists are small and are the answer to "what may I write at all",
|
|
58
|
+
* so they always ride along — trimming them would recreate the gap this closed.
|
|
59
|
+
*/
|
|
60
|
+
import { z } from "zod";
|
|
61
|
+
import { guard, jsonResult } from "./result.js";
|
|
62
|
+
/**
|
|
63
|
+
* Project the catalog to what was asked for, keeping the envelope.
|
|
64
|
+
*
|
|
65
|
+
* Exported for testing. `types` is matched against the server's own `type`
|
|
66
|
+
* values with NO local list to check them against — an unknown name comes back
|
|
67
|
+
* in `unknownTypes` rather than being rejected here, because the connector is
|
|
68
|
+
* not the authority on what exists. That is the whole point of reading the
|
|
69
|
+
* catalogue.
|
|
70
|
+
*
|
|
71
|
+
* Only `operations` is ever projected. The envelope is spread through on both
|
|
72
|
+
* paths, so `triggerTypes` / `stepTypes` / `scheduleRuleKinds` — and anything
|
|
73
|
+
* the backend adds next to them — survive unread and unnamed here.
|
|
74
|
+
*/
|
|
75
|
+
export function projectCatalog(response, types) {
|
|
76
|
+
if (typeof response !== "object" || response === null || Array.isArray(response)) {
|
|
77
|
+
return response;
|
|
78
|
+
}
|
|
79
|
+
const source = response;
|
|
80
|
+
if (!Array.isArray(source.operations))
|
|
81
|
+
return response;
|
|
82
|
+
const rows = source.operations;
|
|
83
|
+
const wanted = types && types.length > 0 ? new Set(types) : undefined;
|
|
84
|
+
if (wanted) {
|
|
85
|
+
const present = new Set(rows.map((row) => (typeof row.type === "string" ? row.type : "")));
|
|
86
|
+
const unknownTypes = [...wanted].filter((t) => !present.has(t));
|
|
87
|
+
return {
|
|
88
|
+
...source,
|
|
89
|
+
operations: rows.filter((row) => typeof row.type === "string" && wanted.has(row.type)),
|
|
90
|
+
...(unknownTypes.length > 0
|
|
91
|
+
? {
|
|
92
|
+
unknownTypes,
|
|
93
|
+
// Not an error: this deploy's catalogue is the authority, and a
|
|
94
|
+
// name it does not carry is simply not a command here.
|
|
95
|
+
unknownTypesNote: "This backend's catalogue has no such operation. Call again " +
|
|
96
|
+
"without `types` to see what it does have.",
|
|
97
|
+
}
|
|
98
|
+
: {}),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
...source,
|
|
103
|
+
operations: rows.map((row) => ({ type: row.type, description: row.description })),
|
|
104
|
+
// Say what was dropped and how to get it — the omission a reader cannot see
|
|
105
|
+
// is the same trap as the cost it avoids. Note this names `operations`
|
|
106
|
+
// only: the vocabulary lists beside it are returned in full.
|
|
107
|
+
schemasOmitted: "`operations` is an index (type + description) — its payload schemas are " +
|
|
108
|
+
'omitted. Pass `types: ["add_step", …]` for the live payload schema of ' +
|
|
109
|
+
"the commands you are about to write; the full catalogue is ~20 KB and " +
|
|
110
|
+
"is rarely what you need. Everything else in this response is complete.",
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export function registerAuthoringSpecTools(server, client) {
|
|
114
|
+
server.tool("get_workflow_authoring_spec", "Everything THIS Axonity deploy can be built from, read live from the " +
|
|
115
|
+
"server — not a list this connector keeps. Read it at the start of an " +
|
|
116
|
+
"authoring task, before `apply_workflow_mutations`. Seven lists come back:" +
|
|
117
|
+
"\n- `operations` — the mutation commands, with their payload schemas." +
|
|
118
|
+
"\n- `triggerTypes` — every value a trigger's `typeId` may hold. " +
|
|
119
|
+
"`category: true` marks a broad category id rather than a concrete type; " +
|
|
120
|
+
"both validate, but reach for the concrete one." +
|
|
121
|
+
"\n- `stepTypes` — every value a step's `type` may hold. Types you may " +
|
|
122
|
+
"NOT author are listed too, with `authorable: false` and a `reason` " +
|
|
123
|
+
"saying how to express that intention instead — so reaching for one gets " +
|
|
124
|
+
"you an answer rather than a `step_invalid_type`." +
|
|
125
|
+
"\n- `scheduleRuleKinds` — the shapes a schedule rule takes, each with a " +
|
|
126
|
+
"working `example` to copy and the sentence it `describes`. Every example " +
|
|
127
|
+
"is round-tripped through the platform's own parser as it is served, so " +
|
|
128
|
+
"it is one this deploy demonstrably accepts." +
|
|
129
|
+
"\n\nAND THREE VOCABULARIES FOR A VALUE'S TYPE, which are NOT " +
|
|
130
|
+
"interchangeable and are not even read from the same key. Check which one " +
|
|
131
|
+
"applies before you write it:" +
|
|
132
|
+
"\n- `parameterTypes` — what a TRIGGER PARAMETER or a WORKFLOW CONSTANT " +
|
|
133
|
+
"may hold, in its `type` field. This is the key the platform reads on " +
|
|
134
|
+
"those two shapes; `kind` is not. It is also the only one of the three " +
|
|
135
|
+
"that knows `constant`." +
|
|
136
|
+
"\n- `outputKinds` — what a step OUTPUT or INPUT may hold, in its `kind` " +
|
|
137
|
+
"field. Narrower, a different key, and it spells the yes/no idea " +
|
|
138
|
+
"differently from `parameterTypes`." +
|
|
139
|
+
"\n- `schemaFieldKinds` — the canonical builder's vocabulary, used inside " +
|
|
140
|
+
"a field's `schema`. Widest and newest; where a `schema` object is " +
|
|
141
|
+
"present it WINS over the `type` or `kind` beside it." +
|
|
142
|
+
"\n\nGetting this wrong is silent. A `kind` written on a trigger " +
|
|
143
|
+
"parameter is not a 422 — it is a key nothing reads, so the value falls " +
|
|
144
|
+
"back to text and everything downstream binds the wrong shape. Read the " +
|
|
145
|
+
"list that matches the shape you are writing." +
|
|
146
|
+
"\n\nBy default `operations` is an INDEX: each command's `type` and " +
|
|
147
|
+
"one-line `description`. Pass `types` to get the live `payloadSchema` for " +
|
|
148
|
+
"the commands you are about to write — the full catalogue with every " +
|
|
149
|
+
"schema is ~20 KB, which is rarely what you need. The other six lists " +
|
|
150
|
+
"are always returned complete. " +
|
|
151
|
+
"\n\n`rulesVersion` is a content hash over all of them: while it is " +
|
|
152
|
+
"unchanged there is nothing to re-fetch. Re-read the spec when it changes, " +
|
|
153
|
+
"or when a mutation fails with a 422 that suggests your idea of a command " +
|
|
154
|
+
"is out of date. " +
|
|
155
|
+
"\n\nAnything missing here is something this backend will reject. Each " +
|
|
156
|
+
"list is generated from the same registry that ENFORCES it — the handler " +
|
|
157
|
+
"table, the trigger-type constants, the validator's own step-type set, " +
|
|
158
|
+
"the schedule-rule specs — so the answer and the enforcement cannot " +
|
|
159
|
+
"disagree. That is why neither this connector's guide nor its tool " +
|
|
160
|
+
"descriptions name any of these values.", {
|
|
161
|
+
types: z
|
|
162
|
+
.array(z.string())
|
|
163
|
+
.optional()
|
|
164
|
+
.describe('Command types to return in full, e.g. ["add_step", "add_edge"]. ' +
|
|
165
|
+
"Omit for the index. A name this deploy does not have comes back " +
|
|
166
|
+
"under `unknownTypes` rather than as an error."),
|
|
167
|
+
}, async ({ types }) => guard(async () => jsonResult(projectCatalog(await client.get("/api/v1/workflows/operations"), types))));
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=authoringSpec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authoringSpec.js","sourceRoot":"","sources":["../../src/tools/authoringSpec.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/company.d.ts
CHANGED
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
* streams, org structure). Unlike the other authored entities it is a
|
|
4
4
|
* SINGLETON: one per tenant, addressed at `/api/v1/company` with no id, so it
|
|
5
5
|
* has no list / create / delete / restore / discard routes. It is
|
|
6
|
-
* version-controlled like the memory entities, and
|
|
7
|
-
* (
|
|
6
|
+
* version-controlled like the memory entities, and editable two ways: command
|
|
7
|
+
* mutations (`apply_company_mutation`, preferred — the backend validates each
|
|
8
|
+
* and threads the version) or a whole-document PUT (`update_company`). Workflow
|
|
9
|
+
* has had both for a long time; company was whole-document-only here even
|
|
10
|
+
* though `POST /api/v1/company/mutations` existed.
|
|
8
11
|
*
|
|
9
12
|
* Publishing: company is currently NOT a publish-approval entity type on the
|
|
10
13
|
* backend, so there is no request_publish_company — a company change is
|
package/dist/tools/company.js
CHANGED
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
* streams, org structure). Unlike the other authored entities it is a
|
|
4
4
|
* SINGLETON: one per tenant, addressed at `/api/v1/company` with no id, so it
|
|
5
5
|
* has no list / create / delete / restore / discard routes. It is
|
|
6
|
-
* version-controlled like the memory entities, and
|
|
7
|
-
* (
|
|
6
|
+
* version-controlled like the memory entities, and editable two ways: command
|
|
7
|
+
* mutations (`apply_company_mutation`, preferred — the backend validates each
|
|
8
|
+
* and threads the version) or a whole-document PUT (`update_company`). Workflow
|
|
9
|
+
* has had both for a long time; company was whole-document-only here even
|
|
10
|
+
* though `POST /api/v1/company/mutations` existed.
|
|
8
11
|
*
|
|
9
12
|
* Publishing: company is currently NOT a publish-approval entity type on the
|
|
10
13
|
* backend, so there is no request_publish_company — a company change is
|
|
@@ -17,6 +20,29 @@ export function registerCompanyTools(server, client) {
|
|
|
17
20
|
server.tool("read_company", "Read this tenant's company document (its current draft and version). There " +
|
|
18
21
|
"is one company per tenant — no id. Read it before you update, to get the " +
|
|
19
22
|
"version for optimistic locking.", {}, async () => guard(async () => jsonResult(await client.get("/api/v1/company"))));
|
|
23
|
+
server.tool("create_company_from_template", "Create this tenant's company document from a template — how a tenant that " +
|
|
24
|
+
"has none gets one. Pick the template with list_templates({ kind: " +
|
|
25
|
+
"\"all\" }) and read it with read_template first: the template decides the " +
|
|
26
|
+
"value stream, the stages and the capabilities that everything else in " +
|
|
27
|
+
"the tenant will hang off. " +
|
|
28
|
+
"\n\nThis is a WRITE on the singleton every workflow refers to. Run " +
|
|
29
|
+
"read_company first — if one already exists, instantiating over it is " +
|
|
30
|
+
"almost never what you meant, and update_company or " +
|
|
31
|
+
"apply_company_mutation is. Like every other write here it produces a " +
|
|
32
|
+
"DRAFT; a human publishes it.", {
|
|
33
|
+
templateId: z.string().describe("The template's id, from list_templates."),
|
|
34
|
+
companyName: z
|
|
35
|
+
.string()
|
|
36
|
+
.optional()
|
|
37
|
+
.describe("Name for the new company. Omit to take the template's own."),
|
|
38
|
+
confirm: z
|
|
39
|
+
.literal(true)
|
|
40
|
+
.describe("Must be true. Acknowledges this creates the tenant's company " +
|
|
41
|
+
"document from a template — check read_company first."),
|
|
42
|
+
}, async ({ templateId, companyName }) => guard(async () => jsonResult(await client.post("/api/v1/company/from-template", {
|
|
43
|
+
templateId,
|
|
44
|
+
...(companyName ? { companyName } : {}),
|
|
45
|
+
}))));
|
|
20
46
|
server.tool("read_company_published", "Read the LIVE published company document — what the runtime uses, as opposed " +
|
|
21
47
|
"to the draft read_company returns. Diff the two to see what a publish would change.", {}, async () => guard(async () => jsonResult(await client.get("/api/v1/company/published"))));
|
|
22
48
|
server.tool("update_company", "Save the company draft as a WHOLE document (full-document PUT, not a field " +
|
|
@@ -52,6 +78,57 @@ export function registerCompanyTools(server, client) {
|
|
|
52
78
|
}, async ({ versionId, expectedVersion }) => guard(async () => jsonResult(await client.post(`/api/v1/company/versions/${versionId}/restore`, {
|
|
53
79
|
expectedVersion,
|
|
54
80
|
}))));
|
|
81
|
+
server.tool("create_company_major_version", "Cut a new NAMED major version of the company document — \"Save As\" for " +
|
|
82
|
+
"the current draft, so a milestone is findable by name instead of by " +
|
|
83
|
+
"hunting through checkpoints. Takes no id (singleton). This does NOT " +
|
|
84
|
+
"publish: what is live stays live until a human approves a " +
|
|
85
|
+
"request_publish_company.", {
|
|
86
|
+
name: z
|
|
87
|
+
.string()
|
|
88
|
+
.min(1)
|
|
89
|
+
.max(255)
|
|
90
|
+
.describe('What to call this release, e.g. "Q3 operating model".'),
|
|
91
|
+
description: z
|
|
92
|
+
.string()
|
|
93
|
+
.optional()
|
|
94
|
+
.describe("A longer note on what this version represents."),
|
|
95
|
+
}, async ({ name, description }) => guard(async () => jsonResult(await client.post("/api/v1/company/versions", {
|
|
96
|
+
name,
|
|
97
|
+
...(description ? { description } : {}),
|
|
98
|
+
}))));
|
|
99
|
+
server.tool("ensure_company_major_version", "Make sure the company document has a working draft major version, " +
|
|
100
|
+
"creating an unnamed one if it has none. IDEMPOTENT — safe to call before " +
|
|
101
|
+
"a run of edits; when one already exists nothing changes. Returns the " +
|
|
102
|
+
"draft's major version number and name.", {}, async () => guard(async () => jsonResult(await client.post("/api/v1/company/versions/ensure"))));
|
|
103
|
+
server.tool("apply_company_mutation", "Apply ONE structural command to the company document — the validated, " +
|
|
104
|
+
"version-safe way to change its layers, value streams, stages and " +
|
|
105
|
+
"capabilities, and to link workflows to them. Prefer this over " +
|
|
106
|
+
"update_company: that route is a whole-document PUT, which is the same " +
|
|
107
|
+
"reason apply_workflow_mutations is preferred for a workflow. Read the " +
|
|
108
|
+
"company first for its version. " +
|
|
109
|
+
"\n\nOne command per call — this route has no batch form, unlike the " +
|
|
110
|
+
"workflow one. Apply a sequence yourself, using the version each response " +
|
|
111
|
+
"returns as the next call's expectedVersion. " +
|
|
112
|
+
"\n\nWHICH COMMANDS EXIST is not listed here and this connector keeps no " +
|
|
113
|
+
"copy: unlike workflows, company has no catalogue route to read, so a " +
|
|
114
|
+
"wrong `type` is a 422 that names every value the route accepts. Read " +
|
|
115
|
+
"that error rather than guessing twice.", {
|
|
116
|
+
type: z
|
|
117
|
+
.string()
|
|
118
|
+
.describe("The command name. A value this deploy does not accept comes back as " +
|
|
119
|
+
"a 422 listing the ones it does."),
|
|
120
|
+
payload: z
|
|
121
|
+
.record(z.unknown())
|
|
122
|
+
.describe("The command's arguments (camelCase keys)."),
|
|
123
|
+
expectedVersion: z
|
|
124
|
+
.number()
|
|
125
|
+
.int()
|
|
126
|
+
.describe("The version you last read — rejected with 409 if stale."),
|
|
127
|
+
}, async ({ type, payload, expectedVersion }) => guard(async () => jsonResult(await client.post("/api/v1/company/mutations", {
|
|
128
|
+
type,
|
|
129
|
+
payload,
|
|
130
|
+
expectedVersion,
|
|
131
|
+
}))));
|
|
55
132
|
server.tool("name_company_major_version", "Give one of the company document's major versions a name — label a release " +
|
|
56
133
|
"so it is easy to find in history. Targets a MAJOR version by its integer " +
|
|
57
134
|
"number (from list_company_versions), not a checkpoint or a versionId. Like " +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"company.js","sourceRoot":"","sources":["../../src/tools/company.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"company.js","sourceRoot":"","sources":["../../src/tools/company.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,22 @@
|
|
|
12
12
|
* and the enums quoted below to a vendored snapshot of that schema, so a drift
|
|
13
13
|
* between this prose and the backend fails CI rather than misleading an agent.
|
|
14
14
|
* Keep enum lists in this doc in step with what that test asserts.
|
|
15
|
+
*
|
|
16
|
+
* BETTER STILL, DO NOT QUOTE A LIST AT ALL. Four vocabularies used to live here
|
|
17
|
+
* and every one of them drifted: the mutation commands (#32/#44), and then the
|
|
18
|
+
* step types, trigger types and schedule-rule shapes — this guide named nine
|
|
19
|
+
* step types where seven validate. All four are now read from
|
|
20
|
+
* `get_workflow_authoring_spec`, generated by the backend from the registries
|
|
21
|
+
* that ENFORCE them, and this document states none of those LISTS. A pinned
|
|
22
|
+
* list fails CI when it drifts; a list you never wrote cannot. When you are
|
|
23
|
+
* about to write out a set of accepted values here, point at the spec instead —
|
|
24
|
+
* `test/conformance.test.ts` asserts the absence.
|
|
25
|
+
*
|
|
26
|
+
* Naming ONE value to state behaviour is a different thing and stays: that
|
|
27
|
+
* `typeId: "subprocess-invocation"` is what makes a workflow callable is not
|
|
28
|
+
* something the catalogue can say — it can only say the id exists. The line is
|
|
29
|
+
* the one #44 drew: a mention is guidance, an enumeration is a claim about what
|
|
30
|
+
* exists, and it is the claim that goes stale.
|
|
15
31
|
*/
|
|
16
32
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
17
33
|
export declare function registerConventions(server: McpServer): void;
|