fetchsandbox-mcp 0.2.0 → 0.3.1
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/dist/client.js +4 -2
- package/dist/client.js.map +1 -1
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/dist/session.d.ts +10 -0
- package/dist/session.js +60 -0
- package/dist/session.js.map +1 -1
- package/dist/tools/import_spec.js +13 -12
- package/dist/tools/import_spec.js.map +1 -1
- package/dist/tools/list_runs.d.ts +39 -0
- package/dist/tools/list_runs.js +51 -0
- package/dist/tools/list_runs.js.map +1 -0
- package/dist/tools/list_specs.d.ts +30 -0
- package/dist/tools/list_specs.js +58 -0
- package/dist/tools/list_specs.js.map +1 -0
- package/dist/tools/list_workflows.js +8 -6
- package/dist/tools/list_workflows.js.map +1 -1
- package/dist/tools/run_all_workflows.js +13 -8
- package/dist/tools/run_all_workflows.js.map +1 -1
- package/dist/tools/run_workflow.js +9 -7
- package/dist/tools/run_workflow.js.map +1 -1
- package/package.json +1 -1
package/dist/client.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Errors are normalized into ToolError so tools can surface them to the
|
|
8
8
|
* agent as readable text instead of a stack trace.
|
|
9
9
|
*/
|
|
10
|
-
import { getSessionId } from "./session.js";
|
|
10
|
+
import { detectIde, getSessionId } from "./session.js";
|
|
11
11
|
const DEFAULT_BASE_URL = "https://fetchsandbox.com";
|
|
12
12
|
const REQUEST_TIMEOUT_MS = 30_000;
|
|
13
13
|
// Retry only on transient failures: nginx 502/503/504 + network errors.
|
|
@@ -27,14 +27,16 @@ export function getBaseUrl() {
|
|
|
27
27
|
return (process.env.FETCHSANDBOX_BASE_URL || DEFAULT_BASE_URL).replace(/\/+$/, "");
|
|
28
28
|
}
|
|
29
29
|
function buildHeaders(extra) {
|
|
30
|
+
const ide = detectIde();
|
|
30
31
|
const headers = {
|
|
31
|
-
"user-agent": `fetchsandbox-mcp/0.1
|
|
32
|
+
"user-agent": `fetchsandbox-mcp/0.3.1 (node ${process.version}; ide=${ide})`,
|
|
32
33
|
accept: "application/json",
|
|
33
34
|
...(extra ?? {}),
|
|
34
35
|
};
|
|
35
36
|
const sid = getSessionId();
|
|
36
37
|
if (sid)
|
|
37
38
|
headers["x-mcp-session-id"] = sid;
|
|
39
|
+
headers["x-mcp-client"] = ide;
|
|
38
40
|
return headers;
|
|
39
41
|
}
|
|
40
42
|
async function readErrorMessage(res) {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -16,14 +16,24 @@ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
|
16
16
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
17
17
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
18
18
|
import { ToolError, getBaseUrl } from "./client.js";
|
|
19
|
+
import { detectIde } from "./session.js";
|
|
19
20
|
import { importSpecTool, runImportSpec } from "./tools/import_spec.js";
|
|
21
|
+
import { listSpecsTool, runListSpecs } from "./tools/list_specs.js";
|
|
20
22
|
import { listWorkflowsTool, runListWorkflows } from "./tools/list_workflows.js";
|
|
23
|
+
import { listRunsTool, runListRuns } from "./tools/list_runs.js";
|
|
21
24
|
import { runRunWorkflow, runWorkflowTool } from "./tools/run_workflow.js";
|
|
22
25
|
import { runRunAllWorkflows, runAllWorkflowsTool } from "./tools/run_all_workflows.js";
|
|
23
|
-
const VERSION = "0.
|
|
26
|
+
const VERSION = "0.3.1";
|
|
24
27
|
const server = new Server({ name: "fetchsandbox", version: VERSION }, { capabilities: { tools: {} } });
|
|
25
28
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
26
|
-
tools: [
|
|
29
|
+
tools: [
|
|
30
|
+
listSpecsTool,
|
|
31
|
+
importSpecTool,
|
|
32
|
+
listWorkflowsTool,
|
|
33
|
+
runAllWorkflowsTool,
|
|
34
|
+
runWorkflowTool,
|
|
35
|
+
listRunsTool,
|
|
36
|
+
],
|
|
27
37
|
}));
|
|
28
38
|
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
29
39
|
const { name, arguments: args } = req.params;
|
|
@@ -31,6 +41,11 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
31
41
|
let result;
|
|
32
42
|
const a = (args ?? {});
|
|
33
43
|
switch (name) {
|
|
44
|
+
case listSpecsTool.name:
|
|
45
|
+
result = await runListSpecs({
|
|
46
|
+
filter: typeof a.filter === "string" ? a.filter : undefined,
|
|
47
|
+
});
|
|
48
|
+
break;
|
|
34
49
|
case importSpecTool.name:
|
|
35
50
|
result = await runImportSpec({
|
|
36
51
|
url: typeof a.url === "string" ? a.url : undefined,
|
|
@@ -43,6 +58,12 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
43
58
|
spec_id: typeof a.spec_id === "string" ? a.spec_id : "",
|
|
44
59
|
});
|
|
45
60
|
break;
|
|
61
|
+
case listRunsTool.name:
|
|
62
|
+
result = await runListRuns({
|
|
63
|
+
sandbox_id: typeof a.sandbox_id === "string" ? a.sandbox_id : "",
|
|
64
|
+
limit: typeof a.limit === "number" ? a.limit : undefined,
|
|
65
|
+
});
|
|
66
|
+
break;
|
|
46
67
|
case runWorkflowTool.name:
|
|
47
68
|
result = await runRunWorkflow({
|
|
48
69
|
sandbox_id: typeof a.sandbox_id === "string" ? a.sandbox_id : "",
|
|
@@ -116,7 +137,7 @@ function friendlyError(toolName, msg, err) {
|
|
|
116
137
|
}
|
|
117
138
|
async function main() {
|
|
118
139
|
// Print to stderr only — stdout is reserved for the MCP protocol.
|
|
119
|
-
process.stderr.write(`[fetchsandbox-mcp ${VERSION}] connected to ${getBaseUrl()}\n`);
|
|
140
|
+
process.stderr.write(`[fetchsandbox-mcp ${VERSION}] connected to ${getBaseUrl()} (ide=${detectIde()})\n`);
|
|
120
141
|
const transport = new StdioServerTransport();
|
|
121
142
|
await server.connect(transport);
|
|
122
143
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEvF,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,EAC1C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;AAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
1
|
export declare function telemetryEnabled(): boolean;
|
|
2
2
|
export declare function getSessionId(): string | undefined;
|
|
3
|
+
/**
|
|
4
|
+
* Best-effort host-IDE detection. Returns a short lowercase token:
|
|
5
|
+
* "cursor" | "claude-code" | "cline" | "vscode" | "windsurf" | "chatgpt" |
|
|
6
|
+
* "zed" | "unknown".
|
|
7
|
+
*
|
|
8
|
+
* Detection order matters — env vars are stronger signals than parent
|
|
9
|
+
* process name (which can be misleading on macOS where IDEs spawn
|
|
10
|
+
* launchers). Falls back to "unknown" rather than guessing.
|
|
11
|
+
*/
|
|
12
|
+
export declare function detectIde(): string;
|
package/dist/session.js
CHANGED
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Disabled entirely when FETCHSANDBOX_TELEMETRY=0 — in that case sessionId
|
|
8
8
|
* returns undefined and the client omits the header.
|
|
9
|
+
*
|
|
10
|
+
* Also detects the host IDE (Cursor / Claude Code / Cline / etc.) by
|
|
11
|
+
* sniffing env vars + parent process. Returned as a stable token usable
|
|
12
|
+
* in the user-agent string for backend cohort splits in PostHog.
|
|
9
13
|
*/
|
|
10
14
|
import { randomUUID } from "node:crypto";
|
|
11
15
|
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
@@ -44,4 +48,60 @@ export function getSessionId() {
|
|
|
44
48
|
cached = id;
|
|
45
49
|
return cached;
|
|
46
50
|
}
|
|
51
|
+
let cachedIde = null;
|
|
52
|
+
/**
|
|
53
|
+
* Best-effort host-IDE detection. Returns a short lowercase token:
|
|
54
|
+
* "cursor" | "claude-code" | "cline" | "vscode" | "windsurf" | "chatgpt" |
|
|
55
|
+
* "zed" | "unknown".
|
|
56
|
+
*
|
|
57
|
+
* Detection order matters — env vars are stronger signals than parent
|
|
58
|
+
* process name (which can be misleading on macOS where IDEs spawn
|
|
59
|
+
* launchers). Falls back to "unknown" rather than guessing.
|
|
60
|
+
*/
|
|
61
|
+
export function detectIde() {
|
|
62
|
+
if (cachedIde !== null)
|
|
63
|
+
return cachedIde;
|
|
64
|
+
const env = process.env;
|
|
65
|
+
// Cursor sets these in the MCP server's env.
|
|
66
|
+
if (env.CURSOR_TRACE_ID || env.CURSOR_AGENT || env.CURSOR_SESSION_ID) {
|
|
67
|
+
cachedIde = "cursor";
|
|
68
|
+
return cachedIde;
|
|
69
|
+
}
|
|
70
|
+
// Claude Code (Anthropic CLI / IDE extension).
|
|
71
|
+
if (env.CLAUDE_CODE_SESSION_ID ||
|
|
72
|
+
env.CLAUDE_CODE_PROJECT_DIR ||
|
|
73
|
+
env.CLAUDECODE === "1" ||
|
|
74
|
+
env.ANTHROPIC_CLI === "1") {
|
|
75
|
+
cachedIde = "claude-code";
|
|
76
|
+
return cachedIde;
|
|
77
|
+
}
|
|
78
|
+
// Windsurf (Codeium).
|
|
79
|
+
if (env.WINDSURF_SESSION_ID || env.CODEIUM_WINDSURF) {
|
|
80
|
+
cachedIde = "windsurf";
|
|
81
|
+
return cachedIde;
|
|
82
|
+
}
|
|
83
|
+
// Zed.
|
|
84
|
+
if (env.ZED_TERM || env.ZED_SESSION_ID) {
|
|
85
|
+
cachedIde = "zed";
|
|
86
|
+
return cachedIde;
|
|
87
|
+
}
|
|
88
|
+
// Cline runs inside VSCode; fingerprint = CLINE_* env var or
|
|
89
|
+
// VSCode + a known Cline marker.
|
|
90
|
+
if (env.CLINE_VERSION || env.CLINE_SESSION_ID) {
|
|
91
|
+
cachedIde = "cline";
|
|
92
|
+
return cachedIde;
|
|
93
|
+
}
|
|
94
|
+
// Generic VSCode-hosted MCP (no Cline-specific markers).
|
|
95
|
+
if (env.VSCODE_PID || env.VSCODE_IPC_HOOK || env.VSCODE_INJECTION) {
|
|
96
|
+
cachedIde = "vscode";
|
|
97
|
+
return cachedIde;
|
|
98
|
+
}
|
|
99
|
+
// ChatGPT desktop.
|
|
100
|
+
if (env.CHATGPT_DESKTOP || env.OPENAI_DESKTOP) {
|
|
101
|
+
cachedIde = "chatgpt";
|
|
102
|
+
return cachedIde;
|
|
103
|
+
}
|
|
104
|
+
cachedIde = "unknown";
|
|
105
|
+
return cachedIde;
|
|
106
|
+
}
|
|
47
107
|
//# sourceMappingURL=session.js.map
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,16 +2,16 @@ import { postJson, ToolError } from "../client.js";
|
|
|
2
2
|
export const importSpecTool = {
|
|
3
3
|
name: "import_spec",
|
|
4
4
|
description: "Ingest an OpenAPI spec and get a working sandbox you can call immediately. " +
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
5
|
+
"REQUIRED: pass EITHER `url` OR `content` — never just `name` alone (name is " +
|
|
6
|
+
"a display label, not a lookup). If the user mentions a popular API by name " +
|
|
7
|
+
"(Stripe, GitHub, Twilio, Notion, OpenAI, etc.), FIRST call `list_specs` " +
|
|
8
|
+
"with a filter to confirm it's in the catalog, then call import_spec with " +
|
|
9
|
+
"that vendor's public OpenAPI URL (e.g. Stripe: " +
|
|
10
|
+
"https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json). " +
|
|
11
|
+
"The backend content-hashes the spec and auto-matches to the bundled sandbox " +
|
|
12
|
+
"when applicable. Returns sandbox_id, workflows_preview, and a base_url that " +
|
|
13
|
+
"proxies schema-validated responses. Private URLs (localhost, 10.x, 192.168.x) " +
|
|
14
|
+
"are rejected by the backend — use `content` to paste those inline.",
|
|
15
15
|
inputSchema: {
|
|
16
16
|
type: "object",
|
|
17
17
|
properties: {
|
|
@@ -27,8 +27,9 @@ export const importSpecTool = {
|
|
|
27
27
|
},
|
|
28
28
|
name: {
|
|
29
29
|
type: "string",
|
|
30
|
-
description: "Optional
|
|
31
|
-
"
|
|
30
|
+
description: "Optional DISPLAY label only — NOT a lookup key. Defaults to " +
|
|
31
|
+
"info.title from the spec. To resolve a known API by name " +
|
|
32
|
+
"(\"Stripe\", \"GitHub\"), call list_specs first.",
|
|
32
33
|
},
|
|
33
34
|
},
|
|
34
35
|
additionalProperties: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import_spec.js","sourceRoot":"","sources":["../../src/tools/import_spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA8BnD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,6EAA6E;QAC7E
|
|
1
|
+
{"version":3,"file":"import_spec.js","sourceRoot":"","sources":["../../src/tools/import_spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA8BnD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,6EAA6E;QAC7E,8EAA8E;QAC9E,6EAA6E;QAC7E,0EAA0E;QAC1E,2EAA2E;QAC3E,iDAAiD;QACjD,+EAA+E;QAC/E,8EAA8E;QAC9E,8EAA8E;QAC9E,gFAAgF;QAChF,oEAAoE;IACtE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,qEAAqE;oBACrE,wEAAwE;aAC3E;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,qEAAqE;oBACrE,yEAAyE;aAC5E;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,8DAA8D;oBAC9D,2DAA2D;oBAC3D,kDAAkD;aACrD;SACF;QACD,oBAAoB,EAAE,KAAK;KAC5B;CACO,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAsB;IACxD,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,QAAQ,CAAqB,sBAAsB,EAAE,KAAK,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface ListRunsInput {
|
|
2
|
+
sandbox_id: string;
|
|
3
|
+
limit?: number;
|
|
4
|
+
}
|
|
5
|
+
export interface RunSummary {
|
|
6
|
+
flow_run_id: string;
|
|
7
|
+
workflow_name: string;
|
|
8
|
+
status: string;
|
|
9
|
+
started_at: string;
|
|
10
|
+
last_activity_at: string;
|
|
11
|
+
request_count: number;
|
|
12
|
+
webhook_count: number;
|
|
13
|
+
share_url: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ListRunsResponse {
|
|
16
|
+
sandbox_id: string;
|
|
17
|
+
total: number;
|
|
18
|
+
runs: RunSummary[];
|
|
19
|
+
}
|
|
20
|
+
export declare const listRunsTool: {
|
|
21
|
+
readonly name: "list_runs";
|
|
22
|
+
readonly description: string;
|
|
23
|
+
readonly inputSchema: {
|
|
24
|
+
readonly type: "object";
|
|
25
|
+
readonly properties: {
|
|
26
|
+
readonly sandbox_id: {
|
|
27
|
+
readonly type: "string";
|
|
28
|
+
readonly description: "The sandbox_id returned by import_spec.";
|
|
29
|
+
};
|
|
30
|
+
readonly limit: {
|
|
31
|
+
readonly type: "number";
|
|
32
|
+
readonly description: "Max number of runs to return (default 20, server may cap).";
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
readonly required: readonly ["sandbox_id"];
|
|
36
|
+
readonly additionalProperties: false;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export declare function runListRuns(input: ListRunsInput): Promise<ListRunsResponse>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { getJson, ToolError } from "../client.js";
|
|
2
|
+
export const listRunsTool = {
|
|
3
|
+
name: "list_runs",
|
|
4
|
+
description: "List recent workflow runs (and ad-hoc traffic) for a sandbox, newest " +
|
|
5
|
+
"first. Use when the user asks 'what did I run', 'show me recent " +
|
|
6
|
+
"validation runs', 'did the stripe test pass earlier', or wants to " +
|
|
7
|
+
"find a previous run to share or re-inspect. Each run includes its " +
|
|
8
|
+
"shareable timeline URL (fetchsandbox.com/runs/<sandbox_id>) so the " +
|
|
9
|
+
"user can open the visual trace in a browser or drop it in Slack / a " +
|
|
10
|
+
"PR comment. Requires sandbox_id (from import_spec).",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
type: "object",
|
|
13
|
+
properties: {
|
|
14
|
+
sandbox_id: {
|
|
15
|
+
type: "string",
|
|
16
|
+
description: "The sandbox_id returned by import_spec.",
|
|
17
|
+
},
|
|
18
|
+
limit: {
|
|
19
|
+
type: "number",
|
|
20
|
+
description: "Max number of runs to return (default 20, server may cap).",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
required: ["sandbox_id"],
|
|
24
|
+
additionalProperties: false,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
export async function runListRuns(input) {
|
|
28
|
+
if (!input.sandbox_id)
|
|
29
|
+
throw new ToolError("sandbox_id is required.");
|
|
30
|
+
const limit = Math.min(Math.max(input.limit ?? 20, 1), 100);
|
|
31
|
+
const path = `/api/sandboxes/${encodeURIComponent(input.sandbox_id)}/flows?limit=${limit}`;
|
|
32
|
+
const raw = await getJson(path);
|
|
33
|
+
const flows = Array.isArray(raw.flows) ? raw.flows : [];
|
|
34
|
+
const shareBase = `https://fetchsandbox.com/runs/${encodeURIComponent(input.sandbox_id)}`;
|
|
35
|
+
const runs = flows.map((f) => ({
|
|
36
|
+
flow_run_id: f.flow_run_id,
|
|
37
|
+
workflow_name: f.workflow?.name || f.workflow?.id || "(ad-hoc)",
|
|
38
|
+
status: f.status || "unknown",
|
|
39
|
+
started_at: f.started_at || "",
|
|
40
|
+
last_activity_at: f.last_activity_at || "",
|
|
41
|
+
request_count: f.event_counts?.request ?? 0,
|
|
42
|
+
webhook_count: f.event_counts?.webhook ?? 0,
|
|
43
|
+
share_url: `${shareBase}#${encodeURIComponent(f.flow_run_id)}`,
|
|
44
|
+
}));
|
|
45
|
+
return {
|
|
46
|
+
sandbox_id: input.sandbox_id,
|
|
47
|
+
total: raw.total_count ?? runs.length,
|
|
48
|
+
runs,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=list_runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_runs.js","sourceRoot":"","sources":["../../src/tools/list_runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAsClD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,WAAW;IACjB,WAAW,EACT,uEAAuE;QACvE,kEAAkE;QAClE,oEAAoE;QACpE,oEAAoE;QACpE,qEAAqE;QACrE,sEAAsE;QACtE,qDAAqD;IACvD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yCAAyC;aACvD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,4DAA4D;aAC/D;SACF;QACD,QAAQ,EAAE,CAAC,YAAY,CAAC;QACxB,oBAAoB,EAAE,KAAK;KAC5B;CACO,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAoB;IAEpB,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,MAAM,IAAI,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,kBAAkB,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,KAAK,EAAE,CAAC;IAC3F,MAAM,GAAG,GAAG,MAAM,OAAO,CAAuB,IAAI,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,MAAM,SAAS,GAAG,iCAAiC,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;IAC1F,MAAM,IAAI,GAAiB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,aAAa,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,UAAU;QAC/D,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,SAAS;QAC7B,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;QAC9B,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,IAAI,EAAE;QAC1C,aAAa,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,IAAI,CAAC;QAC3C,aAAa,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,IAAI,CAAC;QAC3C,SAAS,EAAE,GAAG,SAAS,IAAI,kBAAkB,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE;KAC/D,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK,EAAE,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM;QACrC,IAAI;KACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface ListSpecsInput {
|
|
2
|
+
filter?: string;
|
|
3
|
+
}
|
|
4
|
+
export interface SpecSummary {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
slug: string;
|
|
8
|
+
description: string;
|
|
9
|
+
endpoints_count: number;
|
|
10
|
+
tags: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface ListSpecsResponse {
|
|
13
|
+
total: number;
|
|
14
|
+
specs: SpecSummary[];
|
|
15
|
+
}
|
|
16
|
+
export declare const listSpecsTool: {
|
|
17
|
+
readonly name: "list_specs";
|
|
18
|
+
readonly description: string;
|
|
19
|
+
readonly inputSchema: {
|
|
20
|
+
readonly type: "object";
|
|
21
|
+
readonly properties: {
|
|
22
|
+
readonly filter: {
|
|
23
|
+
readonly type: "string";
|
|
24
|
+
readonly description: string;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
readonly additionalProperties: false;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export declare function runListSpecs(input: ListSpecsInput): Promise<ListSpecsResponse>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { getJson, ToolError } from "../client.js";
|
|
2
|
+
export const listSpecsTool = {
|
|
3
|
+
name: "list_specs",
|
|
4
|
+
description: "Browse the FetchSandbox spec catalog — every API (Stripe, GitHub, " +
|
|
5
|
+
"Twilio, Notion, OpenAI, Polar, GitLab, and 40+ more) that has a " +
|
|
6
|
+
"ready-to-use sandbox with curated workflows. Use when the user asks " +
|
|
7
|
+
"'what APIs do you support?', 'what specs are available?', 'show me " +
|
|
8
|
+
"the catalog', 'do you have <X>?', or wants to explore before " +
|
|
9
|
+
"committing to one. Returns each spec's slug (use as `name` arg to " +
|
|
10
|
+
"import_spec), description, endpoint count, and tags. Pass `filter` to " +
|
|
11
|
+
"narrow by substring (e.g., filter='pay' returns Stripe, Paddle, " +
|
|
12
|
+
"Polar).",
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: "object",
|
|
15
|
+
properties: {
|
|
16
|
+
filter: {
|
|
17
|
+
type: "string",
|
|
18
|
+
description: "Optional case-insensitive substring filter. Matches against " +
|
|
19
|
+
"spec name, slug, description, and tags. Omit to return the full " +
|
|
20
|
+
"catalog.",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
additionalProperties: false,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
export async function runListSpecs(input) {
|
|
27
|
+
const raw = await getJson("/api/specs");
|
|
28
|
+
if (!Array.isArray(raw)) {
|
|
29
|
+
throw new ToolError("Backend returned unexpected shape for /api/specs.");
|
|
30
|
+
}
|
|
31
|
+
const all = raw.map((s) => ({
|
|
32
|
+
id: s.id,
|
|
33
|
+
name: s.name || s.slug || s.id,
|
|
34
|
+
slug: s.slug || "",
|
|
35
|
+
description: s.description || "",
|
|
36
|
+
endpoints_count: s.endpoints_count ?? 0,
|
|
37
|
+
tags: Array.isArray(s.tags) ? s.tags.slice(0, 12) : [],
|
|
38
|
+
}));
|
|
39
|
+
const filter = (input.filter || "").trim().toLowerCase();
|
|
40
|
+
const specs = filter
|
|
41
|
+
? all.filter((s) => {
|
|
42
|
+
const hay = [
|
|
43
|
+
s.name,
|
|
44
|
+
s.slug,
|
|
45
|
+
s.description,
|
|
46
|
+
...s.tags,
|
|
47
|
+
]
|
|
48
|
+
.join(" ")
|
|
49
|
+
.toLowerCase();
|
|
50
|
+
return hay.includes(filter);
|
|
51
|
+
})
|
|
52
|
+
: all;
|
|
53
|
+
return {
|
|
54
|
+
total: specs.length,
|
|
55
|
+
specs,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=list_specs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_specs.js","sourceRoot":"","sources":["../../src/tools/list_specs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA+BlD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,oEAAoE;QACpE,kEAAkE;QAClE,sEAAsE;QACtE,qEAAqE;QACrE,+DAA+D;QAC/D,oEAAoE;QACpE,wEAAwE;QACxE,kEAAkE;QAClE,SAAS;IACX,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,8DAA8D;oBAC9D,kEAAkE;oBAClE,UAAU;aACb;SACF;QACD,oBAAoB,EAAE,KAAK;KAC5B;CACO,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAqB;IAErB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAgB,YAAY,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,GAAG,GAAkB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzC,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE;QAC9B,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;QAClB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;QAChC,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,CAAC;QACvC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;KACvD,CAAC,CAAC,CAAC;IACJ,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzD,MAAM,KAAK,GAAG,MAAM;QAClB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACf,MAAM,GAAG,GAAG;gBACV,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,WAAW;gBACb,GAAG,CAAC,CAAC,IAAI;aACV;iBACE,IAAI,CAAC,GAAG,CAAC;iBACT,WAAW,EAAE,CAAC;YACjB,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC;QACJ,CAAC,CAAC,GAAG,CAAC;IACR,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,KAAK;KACN,CAAC;AACJ,CAAC"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { getJson, ToolError } from "../client.js";
|
|
2
2
|
export const listWorkflowsTool = {
|
|
3
3
|
name: "list_workflows",
|
|
4
|
-
description: "List the named, runnable workflows
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
4
|
+
description: "List the named, runnable workflows for a previously-imported spec. " +
|
|
5
|
+
"Workflows are realistic multi-step API journeys (e.g. 'create customer " +
|
|
6
|
+
"→ attach payment method → create subscription'). Use this after " +
|
|
7
|
+
"import_spec for exploration (\"what can I do?\", \"show me the flows\") " +
|
|
8
|
+
"OR before run_all_workflows when the user wants a SCOPED validation: " +
|
|
9
|
+
"list, filter by user intent (\"checkout\", \"webhooks\"), then pass the " +
|
|
10
|
+
"matching ids as `workflow_names` to run_all_workflows. " +
|
|
11
|
+
"Returns: id, name, description, and step count per workflow.",
|
|
10
12
|
inputSchema: {
|
|
11
13
|
type: "object",
|
|
12
14
|
properties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list_workflows.js","sourceRoot":"","sources":["../../src/tools/list_workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA2BlD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,0EAA0E;QAC1E,
|
|
1
|
+
{"version":3,"file":"list_workflows.js","sourceRoot":"","sources":["../../src/tools/list_workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA2BlD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,qEAAqE;QACrE,yEAAyE;QACzE,kEAAkE;QAClE,0EAA0E;QAC1E,uEAAuE;QACvE,0EAA0E;QAC1E,yDAAyD;QACzD,8DAA8D;IAChE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sCAAsC;aACpD;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,oBAAoB,EAAE,KAAK;KAC5B;CACO,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAyB;IAC9D,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,MAAM,IAAI,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,cAAc,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAC5D,CAAC;IACF,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3C,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE;YACxB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE;YAC1B,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;YAChC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzD,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { postJson, ToolError } from "../client.js";
|
|
2
2
|
export const runAllWorkflowsTool = {
|
|
3
3
|
name: "run_all_workflows",
|
|
4
|
-
description: "Execute EVERY workflow (or a
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
4
|
+
description: "Execute EVERY workflow (or a scoped subset) for a sandbox in ONE call. " +
|
|
5
|
+
"Use this — NOT a loop of run_workflow — for any validation-style request: " +
|
|
6
|
+
"\"validate this integration\", \"run all workflows\", \"check coverage\", " +
|
|
7
|
+
"\"test stripe checkout\", \"fs validate\". IDEs (Cursor, Claude Code) " +
|
|
8
|
+
"approve each MCP call individually, so 18 workflows via run_workflow = " +
|
|
9
|
+
"18 clicks. This tool = 1 click, total. " +
|
|
10
|
+
"Scope via `workflow_names`: pass an array of workflow ids to run a " +
|
|
11
|
+
"subset (e.g., user says \"validate stripe CHECKOUT\" → pass " +
|
|
12
|
+
"[\"create_checkout_session\", \"checkout_complete\"]). Names are " +
|
|
13
|
+
"case-insensitive; dashes and underscores interchangeable. " +
|
|
14
|
+
"Returns: summary (pass/fail counts, totals) + full step trace per " +
|
|
15
|
+
"workflow. After running, the user can visit " +
|
|
16
|
+
"fetchsandbox.com/runs/<sandbox_id> for a shareable visual timeline.",
|
|
12
17
|
inputSchema: {
|
|
13
18
|
type: "object",
|
|
14
19
|
properties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run_all_workflows.js","sourceRoot":"","sources":["../../src/tools/run_all_workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAqDnD,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,wEAAwE;QACxE,yEAAyE;QACzE,
|
|
1
|
+
{"version":3,"file":"run_all_workflows.js","sourceRoot":"","sources":["../../src/tools/run_all_workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAqDnD,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,yEAAyE;QACzE,4EAA4E;QAC5E,4EAA4E;QAC5E,wEAAwE;QACxE,yEAAyE;QACzE,yCAAyC;QACzC,qEAAqE;QACrE,8DAA8D;QAC9D,mEAAmE;QACnE,4DAA4D;QAC5D,oEAAoE;QACpE,8CAA8C;QAC9C,qEAAqE;IACvE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yCAAyC;aACvD;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EACT,gEAAgE;oBAChE,gEAAgE;oBAChE,wBAAwB;aAC3B;SACF;QACD,QAAQ,EAAE,CAAC,YAAY,CAAC;QACxB,oBAAoB,EAAE,KAAK;KAC5B;CACO,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAA2B;IAE3B,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,MAAM,IAAI,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,kBAAkB,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC;IACxF,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAC7C,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAuB,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,MAAgB,CAAC,CAAC,CAAE,MAAgB;QACxD,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC;QACjC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC;QAC/B,WAAW,EAAE,CAAC,CAAC,iBAAiB,IAAI,CAAC;KACtC,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO;QACP,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;KAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { postJson, ToolError } from "../client.js";
|
|
2
2
|
export const runWorkflowTool = {
|
|
3
3
|
name: "run_workflow",
|
|
4
|
-
description: "Execute
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
4
|
+
description: "Execute ONE specific workflow by name and return its step-by-step trace. " +
|
|
5
|
+
"Use ONLY when the user explicitly names a single workflow to run (e.g., " +
|
|
6
|
+
"\"run accept_payment\", \"just check the refund workflow\"). For ANY " +
|
|
7
|
+
"validation-style request — \"validate stripe\", \"check coverage\", \"run " +
|
|
8
|
+
"all workflows\", \"test this integration\", or even \"validate stripe " +
|
|
9
|
+
"checkout\" (multiple workflows match \"checkout\") — use " +
|
|
10
|
+
"`run_all_workflows` instead. The batch tool collapses N approvals to 1 " +
|
|
11
|
+
"and supports a workflow_names filter for scope. Calling this in a loop " +
|
|
12
|
+
"is an anti-pattern.",
|
|
11
13
|
inputSchema: {
|
|
12
14
|
type: "object",
|
|
13
15
|
properties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run_workflow.js","sourceRoot":"","sources":["../../src/tools/run_workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAmCnD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"run_workflow.js","sourceRoot":"","sources":["../../src/tools/run_workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAmCnD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,2EAA2E;QAC3E,0EAA0E;QAC1E,uEAAuE;QACvE,4EAA4E;QAC5E,wEAAwE;QACxE,2DAA2D;QAC3D,yEAAyE;QACzE,yEAAyE;QACzE,qBAAqB;IACvB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yCAAyC;aACvD;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,wEAAwE;oBACxE,kCAAkC;aACrC;SACF;QACD,QAAQ,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;QACzC,oBAAoB,EAAE,KAAK;KAC5B;CACO,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAuB;IAC1D,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,MAAM,IAAI,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACtE,IAAI,CAAC,KAAK,CAAC,aAAa;QAAE,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,kBAAkB,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,kBAAkB,CACjG,KAAK,CAAC,aAAa,CACpB,MAAM,CAAC;IACR,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAmB,IAAI,EAAE,EAAE,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;IACtE,OAAO;QACL,aAAa,EAAE,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,aAAa;QACnD,WAAW,EAAE,GAAG,CAAC,gBAAgB,IAAI,EAAE;QACvC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACpC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,IAAI,CAAC;QAC7C,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,KAAK;KACN,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fetchsandbox-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Turn any OpenAPI spec into a working sandbox your AI agent can use. MCP server for Claude Code, Cursor, and any other MCP-compatible LLM IDE.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "FetchSandbox",
|