@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.
Files changed (59) hide show
  1. package/README.md +251 -14
  2. package/dist/client.d.ts +15 -2
  3. package/dist/client.js +8 -1
  4. package/dist/client.js.map +1 -1
  5. package/dist/contract.d.ts +109 -0
  6. package/dist/contract.js +272 -0
  7. package/dist/contract.js.map +1 -0
  8. package/dist/errors.d.ts +15 -3
  9. package/dist/errors.js +27 -3
  10. package/dist/errors.js.map +1 -1
  11. package/dist/generated/listFilters.d.ts +19 -0
  12. package/dist/generated/listFilters.js +78 -0
  13. package/dist/generated/listFilters.js.map +1 -0
  14. package/dist/index.js +29 -2
  15. package/dist/index.js.map +1 -1
  16. package/dist/tools/authoringSpec.d.ts +76 -0
  17. package/dist/tools/authoringSpec.js +169 -0
  18. package/dist/tools/authoringSpec.js.map +1 -0
  19. package/dist/tools/company.d.ts +5 -2
  20. package/dist/tools/company.js +79 -2
  21. package/dist/tools/company.js.map +1 -1
  22. package/dist/tools/conventions.d.ts +16 -0
  23. package/dist/tools/conventions.js +299 -19
  24. package/dist/tools/conventions.js.map +1 -1
  25. package/dist/tools/credentials.d.ts +20 -0
  26. package/dist/tools/credentials.js +41 -0
  27. package/dist/tools/credentials.js.map +1 -1
  28. package/dist/tools/extras.d.ts +17 -0
  29. package/dist/tools/extras.js +151 -9
  30. package/dist/tools/extras.js.map +1 -1
  31. package/dist/tools/operations.d.ts +28 -0
  32. package/dist/tools/operations.js +160 -0
  33. package/dist/tools/operations.js.map +1 -0
  34. package/dist/tools/register.d.ts +27 -0
  35. package/dist/tools/register.js +19 -1
  36. package/dist/tools/register.js.map +1 -1
  37. package/dist/tools/runs.d.ts +24 -0
  38. package/dist/tools/runs.js +304 -26
  39. package/dist/tools/runs.js.map +1 -1
  40. package/dist/tools/secrets.d.ts +33 -0
  41. package/dist/tools/secrets.js +69 -0
  42. package/dist/tools/secrets.js.map +1 -0
  43. package/dist/tools/subworkflows.d.ts +20 -0
  44. package/dist/tools/subworkflows.js +42 -0
  45. package/dist/tools/subworkflows.js.map +1 -0
  46. package/dist/tools/toolboxes.d.ts +32 -0
  47. package/dist/tools/toolboxes.js +165 -0
  48. package/dist/tools/toolboxes.js.map +1 -0
  49. package/dist/tools/triggers.d.ts +8 -0
  50. package/dist/tools/triggers.js +65 -7
  51. package/dist/tools/triggers.js.map +1 -1
  52. package/dist/tools/validation.js +74 -4
  53. package/dist/tools/validation.js.map +1 -1
  54. package/dist/tools/versions.d.ts +9 -0
  55. package/dist/tools/versions.js +36 -0
  56. package/dist/tools/versions.js.map +1 -1
  57. package/dist/tools/workflowMutations.js +53 -12
  58. package/dist/tools/workflowMutations.js.map +1 -1
  59. package/package.json +3 -1
@@ -111,9 +111,10 @@ export function registerAttachTools(server, client) {
111
111
  */
112
112
  const link = (subject, target, path, firstArg, secondArg,
113
113
  /**
114
- * The read-back tool for this link, when one exists. A 200 here does not
115
- * prove the link resolved, so the description points at the tool that does —
116
- * agent-scoped links have one, `skill → workflow` has no list route.
114
+ * The read-back tool for this link. A 200 here does not prove the link
115
+ * resolved, so the description points at the tool that does. Every link
116
+ * has one since axonity-flow#961 S8 gave the workflow-scoped variant its
117
+ * list route; the parameter stays optional for a future link that does not.
117
118
  */
118
119
  readBack) => {
119
120
  const shape = { [firstArg]: z.string(), [secondArg]: z.string() };
@@ -135,9 +136,12 @@ export function registerAttachTools(server, client) {
135
136
  })));
136
137
  };
137
138
  link("skill", "agent", (agentId, skillId) => `/api/v1/agents/${agentId}/skills-v2/${skillId}`, "agentId", "skillId", "list_agent_skills");
138
- // No read-back for the workflow-scoped variant: the backend has no
139
- // GET /workflows/{id}/skills-v2, so there is nothing to point at.
140
- link("skill", "workflow", (workflowId, skillId) => `/api/v1/workflows/${workflowId}/skills-v2/${skillId}`, "workflowId", "skillId");
139
+ // The workflow-scoped variant HAS a read-back now (axonity-flow#961 S8).
140
+ // Attaching and detaching both had a route while reading back did not, so
141
+ // nothing distinguished a link that landed from one that silently did
142
+ // nothing — the shape of axonity-flow#778, where 27 detaches all reported
143
+ // `detached: true` and not one link had ever existed.
144
+ link("skill", "workflow", (workflowId, skillId) => `/api/v1/workflows/${workflowId}/skills-v2/${skillId}`, "workflowId", "skillId", "list_workflow_skills");
141
145
  link("policy", "agent", (agentId, policyId) => `/api/v1/agents/${agentId}/policies/${policyId}`, "agentId", "policyId", "list_agent_policies");
142
146
  // Reference docs attach to agents only — there is no workflow-scoped
143
147
  // reference-doc route on the backend, so no `*_to_workflow` pair here.
@@ -160,16 +164,29 @@ export function registerAttachTools(server, client) {
160
164
  `every agent and a single playbook can run to 15 KB. Read one body ` +
161
165
  `deliberately with read_${subject === "reference_doc" ? "reference_doc" : subject} ` +
162
166
  `when you actually intend to read it. Pass verbosity: "full" only when ` +
163
- `you need every field of every row.`, {
167
+ `you need every field of every row.` +
168
+ `\n\nPass workflowId to see the agent as it is composed INSIDE that ` +
169
+ `workflow — the runtime view, including anything scoped to the workflow ` +
170
+ `rather than to the agent. Without it you see the agent on its own, ` +
171
+ `which is not what a run of that workflow assembles.`, {
164
172
  agentId: z.string().describe("The agent's id."),
173
+ workflowId: z
174
+ .string()
175
+ .optional()
176
+ .describe("Compose the runtime view for this workflow. Omit for the agent's " +
177
+ "own scope only."),
165
178
  verbosity: z
166
179
  .enum(["identity", "full"])
167
180
  .optional()
168
181
  .describe('How much of each row to return. "identity" (default) is id, name, ' +
169
182
  'description, status and linkSource. "full" is the entire entity, ' +
170
183
  "bodies included — expensive, and rarely what an audit needs."),
171
- }, async ({ agentId, verbosity }) => guard(async () => {
172
- const response = await client.get(path(agentId));
184
+ }, async ({ agentId, workflowId, verbosity, }) => guard(async () => {
185
+ const response = workflowId
186
+ ? await client.get(path(agentId), {
187
+ workflow_id: workflowId,
188
+ })
189
+ : await client.get(path(agentId));
173
190
  if (verbosity === "full")
174
191
  return jsonResult(response);
175
192
  return jsonResult(projectLinkRows(response, rowsKey));
@@ -178,6 +195,104 @@ export function registerAttachTools(server, client) {
178
195
  listLinks("skill", "skills", (id) => `/api/v1/agents/${id}/skills-v2`, "skills");
179
196
  listLinks("policy", "policies", (id) => `/api/v1/agents/${id}/policies`, "policies");
180
197
  listLinks("reference_doc", "reference_docs", (id) => `/api/v1/agents/${id}/reference-docs`, "references");
198
+ /**
199
+ * The workflow-scoped read-back (axonity-flow#961 S8).
200
+ *
201
+ * Deliberately without `linkSource`: unlike the agent view there is only one
202
+ * way a skill reaches a workflow — an explicit link — so a field that always
203
+ * says the same thing would train a reader to skip it. Live links only, for
204
+ * the reason `list_agent_skills` gives: detaching closes the interval rather
205
+ * than deleting the row, and a stale dependency list is worse than none.
206
+ */
207
+ server.tool("list_workflow_skills", "List the skills currently scoped to a WORKFLOW — the read-back for " +
208
+ "attach_skill_to_workflow. A 200 from an attach does not prove the link " +
209
+ "resolved, and the link lives outside the workflow document, so " +
210
+ "read_workflow will never show it: this is the only way to tell an attach " +
211
+ "that landed from one that silently did nothing. Read-only. " +
212
+ "\n\nReturns IDENTITY by default; pass verbosity: \"full\" for whole " +
213
+ "bodies, which a skill's playbook makes expensive.", {
214
+ workflowId: z.string().describe("The workflow's id."),
215
+ verbosity: z
216
+ .enum(["identity", "full"])
217
+ .optional()
218
+ .describe('How much of each row to return. "identity" (default) is id, name, ' +
219
+ 'description and status. "full" is the entire skill, body included.'),
220
+ }, async ({ workflowId, verbosity }) => guard(async () => {
221
+ const response = await client.get(`/api/v1/workflows/${workflowId}/skills-v2`);
222
+ if (verbosity === "full")
223
+ return jsonResult(response);
224
+ return jsonResult(projectLinkRows(response, "skills"));
225
+ }));
226
+ }
227
+ /**
228
+ * "What breaks if I change this" — the reverse look-up, for both halves of the
229
+ * catalogue (axonity-flow#845 S5 and #961 S8).
230
+ *
231
+ * A shared library item is edited on the assumption that someone knows what
232
+ * uses it. Three items could answer that agent-first; the rest of the catalogue
233
+ * could not answer it at all, and there a broken reference stops a RUN rather
234
+ * than merely thinning a prompt. The only way to find out was to validate every
235
+ * workflow in the tenant and see where it went wrong.
236
+ *
237
+ * It was never queryable because these are not rows in a join table: they are
238
+ * keys inside a JSON document, and per entity in more than one place — an agent
239
+ * is a step OWNER and the `ownerAgentId` of a subprocess step; a tool appears in
240
+ * a step contract, in a plan activity, and on an automation step's config. The
241
+ * backend answers through one reader for exactly that reason.
242
+ */
243
+ export function registerDependencyTools(server, client) {
244
+ server.tool("list_workflows_using", "Which workflows reference an entity, and IN WHICH STEPS. Ask this BEFORE " +
245
+ "editing or deleting anything shared — it is the answer to \"what breaks " +
246
+ "if I change this\", and the alternative is validating every workflow in " +
247
+ "the tenant. Read-only. " +
248
+ "\n\nEach hit carries the workflow's id and name, the author's own names " +
249
+ "for the steps that name it (somewhere to look, not just a yes), and a " +
250
+ "`state`: `published` is a dependency that is LIVE right now and must not " +
251
+ "break; `draft` is one someone is still building. The same workflow can " +
252
+ "appear twice, once per state, and the difference is the point. " +
253
+ "\n\nThis reads workflow documents. For the agents that depend on a " +
254
+ "skill, policy or reference doc — a prompt-level dependency, not a " +
255
+ "document one — use list_dependent_agents.", {
256
+ entityKind: z
257
+ .enum(["tool", "agent", "flow", "output_schema", "workflow"])
258
+ .describe("What kind of thing you are about to change. `workflow` answers " +
259
+ "which workflows CALL this one as a sub-process."),
260
+ entityId: z.string().describe("That entity's id."),
261
+ }, async ({ entityKind, entityId }) => guard(async () => jsonResult(await client.get(`/api/v1/workflows/using/${entityKind}/${entityId}`))));
262
+ server.tool("list_dependent_agents", "Which agents currently depend on a skill, policy or reference doc — the " +
263
+ "reverse of list_agent_skills / list_agent_policies / " +
264
+ "list_agent_reference_docs. Read it before editing or deleting a shared " +
265
+ "library item: changing one silently changes every prompt it is in. " +
266
+ "Read-only. " +
267
+ "\n\nLIVE links only. Detaching closes the link's interval rather than " +
268
+ "deleting the row, so a list that included closed ones would name agents " +
269
+ "that no longer use it — worse than no list at all. " +
270
+ "\n\nFor workflow documents that reference a tool, agent, flow, output " +
271
+ "schema or workflow, use list_workflows_using instead.", {
272
+ entityKind: z
273
+ .enum(["skill", "policy", "reference_doc"])
274
+ .describe("Which library item you are about to change."),
275
+ entityId: z.string().describe("That item's id."),
276
+ }, async ({ entityKind, entityId }) => guard(async () => {
277
+ const bases = {
278
+ skill: "/api/v1/skills",
279
+ policy: "/api/v1/policies",
280
+ reference_doc: "/api/v1/reference-docs",
281
+ };
282
+ const base = bases[entityKind];
283
+ // A kind outside the enum cannot reach here through a real client — zod
284
+ // rejects it first. It CAN reach here through the route sweeps, which
285
+ // call handlers directly, and an unguarded lookup then built
286
+ // `undefined/{id}/dependent-agents` and reported it as a route this
287
+ // connector calls. A tool must not answer a question it was not asked.
288
+ if (!base) {
289
+ throw new Error(`list_dependent_agents has no route for entityKind "${entityKind}". ` +
290
+ `It covers ${Object.keys(bases).join(", ")}; for a tool, agent, ` +
291
+ `flow, output schema or workflow named by a workflow DOCUMENT, ` +
292
+ `use list_workflows_using.`);
293
+ }
294
+ return jsonResult(await client.get(`${base}/${entityId}/dependent-agents`));
295
+ }));
181
296
  }
182
297
  /**
183
298
  * Small standalone tools that don't fit any of the other groupings: the
@@ -195,5 +310,32 @@ export function registerCatalogTools(server, client) {
195
310
  "delete_flow (a backend gap, despite what its docstrings claim), so " +
196
311
  "editing one in place risks changing something other tenants share.", { flowId: z.string().describe("The flow's id.") }, async ({ flowId }) => guard(async () => jsonResult(await client.post(`/api/v1/flows/${flowId}/clone`))));
197
312
  server.tool("clone_prompt_snippet", "Duplicate a prompt snippet into a new, independent copy.", { snippetId: z.string().describe("The prompt snippet's id.") }, async ({ snippetId }) => guard(async () => jsonResult(await client.post(`/api/v1/prompt-snippets/${snippetId}/clone`))));
313
+ server.tool("list_tool_packages", "The Python packages a tool's code may import on THIS deploy, with their " +
314
+ "metadata. This is the allowlist `validate_tool_code` judges against, so " +
315
+ "reading it beats discovering the boundary through a rejected import. " +
316
+ "Read-only.", {}, async () => guard(async () => jsonResult(await client.get("/api/v1/tools/packages"))));
317
+ /**
318
+ * The template catalogues. Four routes, one tool: they are the same question
319
+ * asked about four things, and four near-identical tools on a surface this
320
+ * size is how a reader stops reading tool names.
321
+ */
322
+ server.tool("list_templates", "List the starting points this deploy ships: agent, tool and workflow " +
323
+ "templates, or the general template catalogue. A template is a shape to " +
324
+ "author FROM — read one for its fields, then create a fresh entity with " +
325
+ "those values. It is not something you reference by id from a workflow. " +
326
+ "Read-only.", {
327
+ kind: z
328
+ .enum(["all", "agent", "tool", "workflow"])
329
+ .optional()
330
+ .describe('Which catalogue. "all" (default) is the general template list; the ' +
331
+ "others are the per-entity catalogues."),
332
+ }, async ({ kind }) => guard(async () => jsonResult(await client.get({
333
+ all: "/api/v1/templates",
334
+ agent: "/api/v1/agent-templates",
335
+ tool: "/api/v1/tool-templates",
336
+ workflow: "/api/v1/workflow-templates",
337
+ }[kind ?? "all"]))));
338
+ server.tool("read_template", "Read one template from the general catalogue by id — its full definition, " +
339
+ "which is what you author a new entity from. Read-only.", { templateId: z.string().describe("The template's id, from list_templates.") }, async ({ templateId }) => guard(async () => jsonResult(await client.get(`/api/v1/templates/${templateId}`))));
198
340
  }
199
341
  //# sourceMappingURL=extras.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extras.js","sourceRoot":"","sources":["../../src/tools/extras.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extras.js","sourceRoot":"","sources":["../../src/tools/extras.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * What this deploy is, who is in it, and what it is busy with (axonity-mcp#59).
3
+ *
4
+ * Read-only, all of it. These are the questions an agent asks ABOUT the system
5
+ * rather than about a thing it is authoring, and every one of them was
6
+ * previously answered by asking a human to look at a screen.
7
+ *
8
+ * Three earn their place on their own:
9
+ *
10
+ * - `read_deploy_contract` — the connector already reads `GET /contract` once
11
+ * at startup (#48) to decide whether the backend has the routes it needs.
12
+ * An agent could not ask the same question mid-task. "Does this deploy have
13
+ * X?" is the question this whole repository keeps turning out to be about.
14
+ * - `list_users` — an `ownerId` is a field on half the memory entities, and
15
+ * the only way to get one was to have a human copy it out of the UI. That
16
+ * is exactly the gap `list_secrets` closed for `secretId` (#39).
17
+ * - `list_audit_events` — it takes `actorKind=service_token`, so an agent can
18
+ * read back WHAT IT ITSELF DID, narrowed to one credential. Nothing else on
19
+ * the surface offers that.
20
+ *
21
+ * The WRITES on these families are deliberately absent and recorded in
22
+ * `test/exclusions.test.ts`: purging, replaying, dismissing and releasing queue
23
+ * work are operator acts on the workspace, and notifications are addressed to a
24
+ * person — marking one read is speaking as them.
25
+ */
26
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
27
+ import type { AxonityClient } from "../client.js";
28
+ export declare function registerOperationsTools(server: McpServer, client: AxonityClient): void;
@@ -0,0 +1,160 @@
1
+ /**
2
+ * What this deploy is, who is in it, and what it is busy with (axonity-mcp#59).
3
+ *
4
+ * Read-only, all of it. These are the questions an agent asks ABOUT the system
5
+ * rather than about a thing it is authoring, and every one of them was
6
+ * previously answered by asking a human to look at a screen.
7
+ *
8
+ * Three earn their place on their own:
9
+ *
10
+ * - `read_deploy_contract` — the connector already reads `GET /contract` once
11
+ * at startup (#48) to decide whether the backend has the routes it needs.
12
+ * An agent could not ask the same question mid-task. "Does this deploy have
13
+ * X?" is the question this whole repository keeps turning out to be about.
14
+ * - `list_users` — an `ownerId` is a field on half the memory entities, and
15
+ * the only way to get one was to have a human copy it out of the UI. That
16
+ * is exactly the gap `list_secrets` closed for `secretId` (#39).
17
+ * - `list_audit_events` — it takes `actorKind=service_token`, so an agent can
18
+ * read back WHAT IT ITSELF DID, narrowed to one credential. Nothing else on
19
+ * the surface offers that.
20
+ *
21
+ * The WRITES on these families are deliberately absent and recorded in
22
+ * `test/exclusions.test.ts`: purging, replaying, dismissing and releasing queue
23
+ * work are operator acts on the workspace, and notifications are addressed to a
24
+ * person — marking one read is speaking as them.
25
+ */
26
+ import { z } from "zod";
27
+ import { guard, jsonResult } from "./result.js";
28
+ /** Filters `GET /task-queue` and its export share, spelled as the routes take them. */
29
+ const TASK_FILTERS = {
30
+ state: z.string().optional().describe("Task state to filter on. Omit for all."),
31
+ owner: z.string().optional().describe("Owner id to filter on."),
32
+ workflow: z.string().optional().describe("Workflow id to filter on."),
33
+ batch: z.string().optional().describe("Batch id to filter on."),
34
+ includeDismissed: z
35
+ .boolean()
36
+ .optional()
37
+ .describe("Include dismissed tasks. Defaults to false."),
38
+ };
39
+ export function registerOperationsTools(server, client) {
40
+ server.tool("read_deploy_contract", "What THIS Axonity deploy speaks: its build version, environment, the " +
41
+ "routes it actually mounts, and a hash over them. " +
42
+ "\n\nRead it when a call fails in a way that smells like the backend is " +
43
+ "older or newer than you expect, or before you rely on something recent. " +
44
+ "It is derived from the running app, so it cannot drift from what is " +
45
+ "really there — unlike any list a connector keeps. " +
46
+ "\n\nTenant-agnostic: it describes the deploy, not your data.", {}, async () => guard(async () => jsonResult(await client.get("/api/v1/contract"))));
47
+ server.tool("list_users", "List the users in your tenant (alphabetically). This is where an " +
48
+ "`ownerId` comes from — the field on a policy, reference doc or prompt " +
49
+ "snippet that says whose it is. Look it up here rather than asking a " +
50
+ "human to copy one out of the UI. Read-only; this connector cannot " +
51
+ "create, change or remove a user.", {}, async () => guard(async () => jsonResult(await client.get("/api/v1/users"))));
52
+ server.tool("list_audit_events", "The tenant's audit trail, newest first — who changed what, and when. " +
53
+ "\n\nPASS actorKind: \"service_token\" TO SEE WHAT EXTERNAL AGENTS DID, " +
54
+ "and serviceTokenId to narrow that to one credential. That is how you " +
55
+ "read back your OWN footprint: what this connector changed in a session, " +
56
+ "without reconstructing it from memory. " +
57
+ "\n\nTHE RESPONSE IS ONE PAGE, NOT THE FULL TRAIL: " +
58
+ "{ items, nextCursor, pageSize, hasMore }. While hasMore is true you have " +
59
+ "not seen every event — pass the response's nextCursor back as cursor and " +
60
+ "repeat until nextCursor is null. Never build a cursor; echo back the one " +
61
+ "you were given.", {
62
+ actorKind: z
63
+ .string()
64
+ .optional()
65
+ .describe('Who acted, e.g. "service_token" for external agents. Omit for everyone.'),
66
+ serviceTokenId: z
67
+ .string()
68
+ .optional()
69
+ .describe("Narrow to one credential's actions."),
70
+ entityType: z.string().optional().describe("Only events about this entity type."),
71
+ limit: z.number().int().optional().describe("Page size."),
72
+ cursor: z
73
+ .string()
74
+ .optional()
75
+ .describe("Opaque continuation cursor from the previous response's nextCursor. " +
76
+ "Omit for the first page."),
77
+ }, async ({ actorKind, serviceTokenId, entityType, limit, cursor }) => guard(async () => jsonResult(await client.get("/api/v1/audit-events", {
78
+ actorKind,
79
+ serviceTokenId,
80
+ entityType,
81
+ limit,
82
+ cursor,
83
+ }))));
84
+ server.tool("read_queue_overview", "The health header for this tenant's queues: how much work is waiting, how " +
85
+ "old the oldest item is, and whether dispatch is alive. One call rather " +
86
+ "than three. " +
87
+ "\n\nRead it when a run you started is not moving — the answer is usually " +
88
+ "here rather than in the run. Note the `dispatch` block's numbers are " +
89
+ "administrator-only and may come back withheld for this token; the rest " +
90
+ "is tenant-scoped and yours.", {}, async () => guard(async () => jsonResult(await client.get("/api/v1/queues/overview"))));
91
+ server.tool("list_in_flight_runs", "The tenant's runs that are still going, OLDEST FIRST — the opposite order " +
92
+ "to list_runs, because the oldest in-flight run is the one that is stuck. " +
93
+ "\n\nEvery non-terminal run, EXCEPT archived runs, per-item `for_each` " +
94
+ "sub-runs and Builder conversation runs. So this is 'what is the system " +
95
+ "working on', not 'every row that exists' — for that, list_runs.", {
96
+ status: z
97
+ .array(z.string())
98
+ .optional()
99
+ .describe('Statuses to include, e.g. ["running", "waiting"]. Omit for all.'),
100
+ workflow: z.string().optional().describe("Only runs of this workflow."),
101
+ limit: z.number().int().optional().describe("Defaults to 25, max 100."),
102
+ offset: z.number().int().optional().describe("Defaults to 0."),
103
+ }, async ({ status, workflow, limit, offset }) => guard(async () => jsonResult(await client.get("/api/v1/queues/runs", { status, workflow, limit, offset }))));
104
+ server.tool("read_task_queue_summary", "Per-state counts of the tenant's background task queue — the cheap read " +
105
+ "that says whether anything is piling up. Start here; reach for " +
106
+ "list_task_queue only once a count looks wrong.", {}, async () => guard(async () => jsonResult(await client.get("/api/v1/task-queue/dashboard-summary"))));
107
+ server.tool("list_task_queue", "The tenant's background task queue, filtered. This is where a failed " +
108
+ "delivery, a dead-lettered wake-up or a stalled batch shows up — the " +
109
+ "layer beneath a run, which read_run cannot see. " +
110
+ "\n\nDismissed tasks are hidden unless includeDismissed is true. " +
111
+ "\n\nThis connector can READ the queue but not act on it: purging, " +
112
+ "replaying, dismissing and releasing are operator acts on the workspace " +
113
+ "and are recorded as out of scope in test/exclusions.test.ts. Report what " +
114
+ "you find to your human rather than looking for another way in.", {
115
+ ...TASK_FILTERS,
116
+ limit: z.number().int().optional().describe("Page size."),
117
+ offset: z.number().int().optional().describe("Offset into the list."),
118
+ }, async ({ state, owner, workflow, batch, includeDismissed, limit, offset }) => guard(async () => jsonResult(await client.get("/api/v1/task-queue", {
119
+ state,
120
+ owner,
121
+ workflow,
122
+ batch,
123
+ include_dismissed: includeDismissed,
124
+ limit,
125
+ offset,
126
+ }))));
127
+ server.tool("read_task_queue_item", "One background task in full — its state, its payload and why it is where " +
128
+ "it is. The detail behind a row from list_task_queue.", { taskId: z.string().describe("The task's id, from list_task_queue.") }, async ({ taskId }) => guard(async () => jsonResult(await client.get(`/api/v1/task-queue/${taskId}`))));
129
+ server.tool("export_task_queue", "The same rows list_task_queue returns, as one JSON export, for when you " +
130
+ "want to reason over a whole filtered set at once rather than page " +
131
+ "through it. " +
132
+ "\n\nIt is CAPPED at the backend's export limit and does not paginate: a " +
133
+ "filter that matches more rows than the cap returns the cap, and there is " +
134
+ "no continuation. Narrow with the filters instead of hoping — a truncated " +
135
+ "export looks exactly like a complete one.", TASK_FILTERS, async ({ state, owner, workflow, batch, includeDismissed }) => guard(async () => jsonResult(await client.get("/api/v1/task-queue/export", {
136
+ state,
137
+ owner,
138
+ workflow,
139
+ batch,
140
+ include_dismissed: includeDismissed,
141
+ }))));
142
+ // ---- Tenant settings, read-only ---------------------------------------
143
+ server.tool("read_model_tier_map", "What this tenant's capability tiers actually RESOLVE TO — which model " +
144
+ "backs `economy`, `standard`, `smart` and `reasoning`. " +
145
+ "\n\nRead it before you set an agent's `capabilityTier`: the tier is the " +
146
+ "field you write, but the model is what you are choosing, and the mapping " +
147
+ "is per-tenant with a global fallback. Writing the map is an operator act " +
148
+ "and is not available here.", {}, async () => guard(async () => jsonResult(await client.get("/api/v1/tenant-settings/model-tier-map"))));
149
+ server.tool("read_concurrency_status", "How many runs are going right now against this tenant's cap — the live " +
150
+ "answer to 'is my run queued because the tenant is full?'. Read this " +
151
+ "before concluding a workflow is broken.", {}, async () => guard(async () => jsonResult(await client.get("/api/v1/tenant-settings/concurrency-status"))));
152
+ server.tool("read_concurrent_run_cap", "The tenant's effective ceiling on runs going at once. The cap alone; " +
153
+ "read_concurrency_status pairs it with what is actually running. Changing " +
154
+ "it is an operator act and is not available here.", {}, async () => guard(async () => jsonResult(await client.get("/api/v1/tenant-settings/concurrent-run-cap"))));
155
+ server.tool("read_for_each_rate", "The tenant's default ceiling on how many FOR EACH items may start per " +
156
+ "minute. This is why a fan-out over thousands of rows paces itself rather " +
157
+ "than stalling — read it before you call a slow batch a bug. Changing it " +
158
+ "is an operator act and is not available here.", {}, async () => guard(async () => jsonResult(await client.get("/api/v1/tenant-settings/for-each-rate"))));
159
+ }
160
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/tools/operations.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,28 @@
23
23
  */
24
24
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
25
25
  import type { AxonityClient } from "../client.js";
26
+ /**
27
+ * One narrowing a `list_<plural>` route accepts.
28
+ *
29
+ * Filtering in the QUERY is not the same as filtering the answer: the backend
30
+ * applies it before the rows come back, so "which policies are tenant-scoped"
31
+ * is one call rather than a fetch-everything-and-sift — and on the paged routes
32
+ * it is the difference between an answer and page one of an answer.
33
+ *
34
+ * `arg` is the camelCase name the tool takes; `query` is the spelling the route
35
+ * declares, which is snake_case on some routes and camelCase on others. That
36
+ * inconsistency is real and is exactly what a caller should not have to know.
37
+ */
38
+ export interface ListFilter {
39
+ /** The tool argument's name (camelCase). */
40
+ arg: string;
41
+ /** The query-string key the route expects. */
42
+ query: string;
43
+ /** What kind of value it takes. */
44
+ type: "string" | "boolean";
45
+ /** Agent-facing description of what the filter does. */
46
+ description: string;
47
+ }
26
48
  export interface EntityDef {
27
49
  /** Singular tool noun, e.g. "workflow". */
28
50
  singular: string;
@@ -83,5 +105,10 @@ export interface EntityDef {
83
105
  * on the main list) is retained for a future entity that needs it.
84
106
  */
85
107
  deletedListPath?: "collection" | "query";
108
+ /**
109
+ * Query-string narrowings `list_<plural>` accepts, when the route declares
110
+ * any. Omit for an entity whose list route takes no parameters.
111
+ */
112
+ listFilters?: ListFilter[];
86
113
  }
87
114
  export declare function registerEntityTools(server: McpServer, client: AxonityClient, def: EntityDef): void;
@@ -33,7 +33,25 @@ export function registerEntityTools(server, client, def) {
33
33
  const publishable = def.publishable !== false;
34
34
  const creatable = def.creatable !== false;
35
35
  const readable = def.readable !== false;
36
- server.tool(`list_${plural}`, `List all ${label} in your Axonity tenant (id, name, status, version).`, {}, async () => guard(async () => jsonResult(await client.get(basePath))));
36
+ const listFilters = def.listFilters ?? [];
37
+ server.tool(`list_${plural}`, `List all ${label} in your Axonity tenant (id, name, status, version).` +
38
+ (listFilters.length > 0
39
+ ? ` Narrow it with ${listFilters
40
+ .map((f) => `\`${f.arg}\``)
41
+ .join(" / ")} — the filter is applied by the backend, so it answers ` +
42
+ `the narrower question rather than handing you everything to sift.`
43
+ : ""), Object.fromEntries(listFilters.map((filter) => [
44
+ filter.arg,
45
+ (filter.type === "boolean" ? z.boolean() : z.string())
46
+ .optional()
47
+ .describe(filter.description),
48
+ ])), async (args) => guard(async () => {
49
+ // No filters declared → call the route exactly as before, with no query
50
+ // argument at all rather than an empty one.
51
+ if (listFilters.length === 0)
52
+ return jsonResult(await client.get(basePath));
53
+ return jsonResult(await client.get(basePath, Object.fromEntries(listFilters.map((filter) => [filter.query, args[filter.arg]]))));
54
+ }));
37
55
  if (readable) {
38
56
  server.tool(`read_${singular}`, `Read one ${singular} by id, including its current draft and version. ` +
39
57
  `Read before you update — you need the current version.`, { id: z.string().describe(`The ${singular}'s id.`) }, async ({ id }) => guard(async () => jsonResult(await client.get(`${basePath}/${id}`))));
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,30 @@
8
8
  *
9
9
  * Runs are also the only thing in the product with a real archive state —
10
10
  * entities have soft-delete, runs have archive/unarchive.
11
+ *
12
+ * READING A RUN NEED NOT COST THE WHOLE RUN (axonity-mcp#57). `read_run`
13
+ * returns the document; `read_run_outline` returns its table of contents, whose
14
+ * size follows the run's SHAPE rather than its content because it carries no
15
+ * bodies. The two reads that serve those bodies on open — `read_run_value` and
16
+ * `read_run_invocation_messages` — are the only reason the outline can stay
17
+ * small, so they belong with it rather than as conveniences.
18
+ *
19
+ * A RUN THAT ASKS A QUESTION CAN BE ANSWERED (#45 M9). `axonity_conventions`
20
+ * tells an agent to `start_workflow_run` to test a workflow end to end. A run
21
+ * that reaches an `ask_user` step parks there and waits — so, without a way to
22
+ * answer, the guide prescribed a loop the connector could not finish. The two
23
+ * tools that unpark a run supply the INPUT it is waiting for, which is not the
24
+ * same act as deciding a review:
25
+ * - `answer_run_question` / `send_run_message` are here, and since #59 so is
26
+ * `complete_run_step` — one route over two acts. Choosing a DECISION step's
27
+ * branch is routing; completing a MANUAL step asserts that human work
28
+ * happened, which the platform then treats as fact. The tool says so and
29
+ * takes a `confirm`, because leaving it out left the guide prescribing an
30
+ * end-to-end test that hits a wall at the first manual step — the same
31
+ * defect `answer_run_question` was added to fix.
32
+ * - `POST /runs/{id}/steps/{id}/plan-approval` is NOT, and
33
+ * `POST /runs/{id}/restart` cannot be. Both are recorded, with the reason,
34
+ * in `test/exclusions.test.ts` — as a decision rather than an omission.
11
35
  */
12
36
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
13
37
  import type { AxonityClient } from "../client.js";