@grackle-ai/mcp 0.115.1 → 0.116.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 +2 -12
- package/dist/tool-registry.d.ts +1 -1
- package/dist/tool-registry.d.ts.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +0 -2
- package/dist/tools/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/tools/finding.d.ts +0 -4
- package/dist/tools/finding.d.ts.map +0 -1
- package/dist/tools/finding.js +0 -109
- package/dist/tools/finding.js.map +0 -1
package/README.md
CHANGED
|
@@ -163,15 +163,6 @@ Create, manage, and run tasks within workspaces. Supports hierarchical task tree
|
|
|
163
163
|
| `task_complete` | Mark a task as complete (sticky status). | `taskId` (string) |
|
|
164
164
|
| `task_resume` | Resume the latest session for a task. | `taskId` (string) |
|
|
165
165
|
|
|
166
|
-
### Finding Tools
|
|
167
|
-
|
|
168
|
-
Post and query categorized discoveries shared across agents.
|
|
169
|
-
|
|
170
|
-
| Tool | Description | Parameters |
|
|
171
|
-
|------|-------------|------------|
|
|
172
|
-
| `finding_list` | Query findings for a workspace with optional filters. | `workspaceId?` (string, auto-injected for scoped sessions; required for API key/OAuth), `category?` (string), `tag?` (string), `limit?` (int) |
|
|
173
|
-
| `finding_post` | Post a new finding with title, category, content, and tags. | `workspaceId?` (string, auto-injected for scoped sessions; required for API key/OAuth), `title` (string), `category?` (string), `content?` (string), `tags?` (string[]) |
|
|
174
|
-
|
|
175
166
|
### Persona Tools
|
|
176
167
|
|
|
177
168
|
Manage agent personas — reusable templates defining system prompt, runtime, and model.
|
|
@@ -186,7 +177,7 @@ Manage agent personas — reusable templates defining system prompt, runtime, an
|
|
|
186
177
|
|
|
187
178
|
### Knowledge Graph Tools
|
|
188
179
|
|
|
189
|
-
Search
|
|
180
|
+
Search a semantic knowledge graph across sessions and task context.
|
|
190
181
|
|
|
191
182
|
| Tool | Description | Parameters |
|
|
192
183
|
|------|-------------|------------|
|
|
@@ -303,7 +294,6 @@ Each persona can define an `allowed_mcp_tools` list that restricts which MCP too
|
|
|
303
294
|
1. The server looks up the persona's `allowed_mcp_tools` from the token's `personaId` claim.
|
|
304
295
|
2. If the persona defines a non-empty tool list, only those tools are exposed via `tools/list`.
|
|
305
296
|
3. If the persona has no explicit tool list (empty `allowed_mcp_tools`), the **default scoped set** is used:
|
|
306
|
-
- `finding_post`, `finding_list`
|
|
307
297
|
- `task_create`, `task_list`, `task_show`, `task_start`, `task_complete`
|
|
308
298
|
- `session_attach`, `session_send_input`
|
|
309
299
|
- `persona_list`, `persona_show`
|
|
@@ -324,7 +314,7 @@ Predefined presets are available for convenience (via CLI `--mcp-tools-preset` o
|
|
|
324
314
|
| `orchestrator` | Default + task management, session spawning, persona creation, scheduling |
|
|
325
315
|
| `admin` | Full access to all available tools |
|
|
326
316
|
|
|
327
|
-
Scoped tokens also enforce workspace isolation — agents can only see tasks
|
|
317
|
+
Scoped tokens also enforce workspace isolation — agents can only see tasks within their own workspace. Subtasks created by a scoped agent are automatically parented to the agent's own task. Tool calls to non-permitted tools return an error with a descriptive message listing the available tools.
|
|
328
318
|
|
|
329
319
|
## Requirements
|
|
330
320
|
|
package/dist/tool-registry.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { AuthContext } from "@grackle-ai/auth";
|
|
|
6
6
|
export interface GrackleClients {
|
|
7
7
|
/** Core RPCs: environments, sessions, workspaces, tokens, settings, etc. */
|
|
8
8
|
core: Client<typeof grackle.GrackleCore>;
|
|
9
|
-
/** Orchestration RPCs: tasks, personas,
|
|
9
|
+
/** Orchestration RPCs: tasks, personas, escalations. */
|
|
10
10
|
orchestration: Client<typeof grackle.GrackleOrchestration>;
|
|
11
11
|
/** Scheduling RPCs: schedules. */
|
|
12
12
|
scheduling: Client<typeof grackle.GrackleScheduling>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;IACzC,
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;IACzC,wDAAwD;IACxD,aAAa,EAAE,MAAM,CAAC,OAAO,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC3D,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrD,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC,OAAO,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACpD;AAED,oDAAoD;AACpD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mEAAmE;AACnE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;CACpC;AAED,iEAAiE;AACjE,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,yEAAyE;AACzE,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,WAAW,EAAE,OAAO,CAAC;IACrB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACrH;AAED,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC;AAE9D,0EAA0E;AAC1E,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0C;IAEhE,sFAAsF;IAC/E,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAO3C,6CAA6C;IACtC,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAMjD,uEAAuE;IAChE,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,cAAc,EAAE;IAQxD,8DAA8D;IACvD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;CAGrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAwCxE;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,oBAAoB,CAAC,EAAE,cAAc,EAAE,EAAE,GAAG,YAAY,CAW1F"}
|
package/dist/tools/index.js
CHANGED
|
@@ -3,7 +3,6 @@ import { envTools } from "./env.js";
|
|
|
3
3
|
import { sessionTools } from "./session.js";
|
|
4
4
|
import { workspaceTools } from "./workspace.js";
|
|
5
5
|
import { taskTools } from "./task.js";
|
|
6
|
-
import { findingTools } from "./finding.js";
|
|
7
6
|
import { personaTools } from "./persona.js";
|
|
8
7
|
import { logsTools } from "./logs.js";
|
|
9
8
|
import { credentialTools } from "./credential.js";
|
|
@@ -23,7 +22,6 @@ const builtinToolGroups = [
|
|
|
23
22
|
sessionTools,
|
|
24
23
|
workspaceTools,
|
|
25
24
|
taskTools,
|
|
26
|
-
findingTools,
|
|
27
25
|
personaTools,
|
|
28
26
|
logsTools,
|
|
29
27
|
credentialTools,
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,yDAAyD;AACzD,MAAM,iBAAiB,GAAuB;IAC5C,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,SAAS;IACT,YAAY;IACZ,SAAS;IACT,eAAe;IACf,UAAU;IACV,WAAW;IACX,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,eAAe;IACf,WAAW;IACX,WAAW;CACZ,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,oBAAyC;IAC1E,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;QACtC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,oBAAoB,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,oBAAoB,EAAE,CAAC;YACzC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grackle-ai/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.116.0",
|
|
4
4
|
"description": "MCP (Model Context Protocol) server for Grackle — translates MCP tool calls to ConnectRPC",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
39
39
|
"pino": "^10.3.1",
|
|
40
40
|
"zod": "^4.0.0",
|
|
41
|
-
"@grackle-ai/
|
|
42
|
-
"@grackle-ai/
|
|
41
|
+
"@grackle-ai/common": "0.116.0",
|
|
42
|
+
"@grackle-ai/auth": "0.116.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@rushstack/heft": "1.2.7",
|
package/dist/tools/finding.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"finding.d.ts","sourceRoot":"","sources":["../../src/tools/finding.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1E,gDAAgD;AAChD,eAAO,MAAM,YAAY,EAAE,cAAc,EAuGxC,CAAC"}
|
package/dist/tools/finding.js
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { jsonResult } from "../result-helpers.js";
|
|
3
|
-
import { grpcErrorToToolResult } from "../error-handler.js";
|
|
4
|
-
/** MCP tools for Grackle finding management. */
|
|
5
|
-
export const findingTools = [
|
|
6
|
-
{
|
|
7
|
-
name: "finding_list",
|
|
8
|
-
group: "finding",
|
|
9
|
-
description: "Query findings for a workspace, optionally filtering by category and tags.",
|
|
10
|
-
inputSchema: z.object({
|
|
11
|
-
workspaceId: z.string().optional().describe("Workspace ID (auto-injected from session context when omitted)"),
|
|
12
|
-
category: z.string().optional().describe("Filter by finding category"),
|
|
13
|
-
tag: z.string().optional().describe("Filter by tag"),
|
|
14
|
-
limit: z.number().int().positive().optional().describe("Maximum number of findings to return"),
|
|
15
|
-
}),
|
|
16
|
-
rpcMethod: "queryFindings",
|
|
17
|
-
mutating: false,
|
|
18
|
-
annotations: {
|
|
19
|
-
readOnlyHint: true,
|
|
20
|
-
destructiveHint: false,
|
|
21
|
-
idempotentHint: true,
|
|
22
|
-
openWorldHint: false,
|
|
23
|
-
},
|
|
24
|
-
async handler(args, { orchestration: client }) {
|
|
25
|
-
const workspaceId = args.workspaceId;
|
|
26
|
-
if (!workspaceId) {
|
|
27
|
-
return {
|
|
28
|
-
content: [{ type: "text", text: JSON.stringify({ error: "workspaceId is required but was not provided or auto-injected. This session may not be associated with a workspace.", code: "INVALID_ARGUMENT" }, null, 2) }],
|
|
29
|
-
isError: true,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
try {
|
|
33
|
-
const response = await client.queryFindings({
|
|
34
|
-
workspaceId,
|
|
35
|
-
categories: args.category ? [args.category] : [],
|
|
36
|
-
tags: args.tag ? [args.tag] : [],
|
|
37
|
-
limit: args.limit ?? 0,
|
|
38
|
-
});
|
|
39
|
-
return jsonResult(response.findings.map((f) => ({
|
|
40
|
-
id: f.id,
|
|
41
|
-
workspaceId: f.workspaceId,
|
|
42
|
-
taskId: f.taskId,
|
|
43
|
-
sessionId: f.sessionId,
|
|
44
|
-
category: f.category,
|
|
45
|
-
title: f.title,
|
|
46
|
-
content: f.content,
|
|
47
|
-
tags: [...f.tags],
|
|
48
|
-
createdAt: f.createdAt,
|
|
49
|
-
})));
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
return grpcErrorToToolResult(error);
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
name: "finding_post",
|
|
58
|
-
group: "finding",
|
|
59
|
-
description: "Post a new finding to a workspace with a title, category, content, and tags.",
|
|
60
|
-
inputSchema: z.object({
|
|
61
|
-
workspaceId: z.string().optional().describe("Workspace ID (auto-injected from session context when omitted)"),
|
|
62
|
-
title: z.string().describe("Finding title"),
|
|
63
|
-
category: z.string().optional().describe("Finding category (e.g. 'bug', 'insight', 'risk')"),
|
|
64
|
-
content: z.string().optional().describe("Detailed finding content"),
|
|
65
|
-
tags: z.array(z.string()).optional().describe("Tags for the finding"),
|
|
66
|
-
}),
|
|
67
|
-
rpcMethod: "postFinding",
|
|
68
|
-
mutating: true,
|
|
69
|
-
annotations: {
|
|
70
|
-
readOnlyHint: false,
|
|
71
|
-
destructiveHint: false,
|
|
72
|
-
idempotentHint: false,
|
|
73
|
-
openWorldHint: false,
|
|
74
|
-
},
|
|
75
|
-
async handler(args, { orchestration: client }, authContext) {
|
|
76
|
-
const workspaceId = args.workspaceId;
|
|
77
|
-
if (!workspaceId) {
|
|
78
|
-
return {
|
|
79
|
-
content: [{ type: "text", text: JSON.stringify({ error: "workspaceId is required but was not provided or auto-injected. This session may not be associated with a workspace.", code: "INVALID_ARGUMENT" }, null, 2) }],
|
|
80
|
-
isError: true,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
try {
|
|
84
|
-
const finding = await client.postFinding({
|
|
85
|
-
workspaceId,
|
|
86
|
-
title: args.title,
|
|
87
|
-
category: args.category ?? "",
|
|
88
|
-
content: args.content ?? "",
|
|
89
|
-
tags: args.tags ?? [],
|
|
90
|
-
taskId: authContext?.type === "scoped" ? authContext.taskId : (args.taskId ?? ""),
|
|
91
|
-
sessionId: authContext?.type === "scoped" ? authContext.taskSessionId : (args.sessionId ?? ""),
|
|
92
|
-
});
|
|
93
|
-
return jsonResult({
|
|
94
|
-
id: finding.id,
|
|
95
|
-
workspaceId: finding.workspaceId,
|
|
96
|
-
category: finding.category,
|
|
97
|
-
title: finding.title,
|
|
98
|
-
content: finding.content,
|
|
99
|
-
tags: [...finding.tags],
|
|
100
|
-
createdAt: finding.createdAt,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
return grpcErrorToToolResult(error);
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
},
|
|
108
|
-
];
|
|
109
|
-
//# sourceMappingURL=finding.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"finding.js","sourceRoot":"","sources":["../../src/tools/finding.ts"],"names":[],"mappings":"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"}
|