-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Expand file tree
/
Copy pathtools.ts
More file actions
113 lines (108 loc) · 3.1 KB
/
tools.ts
File metadata and controls
113 lines (108 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import { McpContext } from "./context.js";
import { deployTool, listDeploysTool } from "./tools/deploys.js";
import { searchDocsTool } from "./tools/docs.js";
import {
createProjectInOrgTool,
initializeProjectTool,
listOrgsTool,
listProjectsTool,
} from "./tools/orgs.js";
import { listDashboardsTool, runDashboardQueryTool } from "./tools/dashboards.js";
import { startDevServerTool, stopDevServerTool, devServerStatusTool } from "./tools/devServer.js";
import { listPreviewBranchesTool } from "./tools/previewBranches.js";
import { listProfilesTool, switchProfileTool, whoamiTool } from "./tools/profiles.js";
import { getQuerySchemaTool, queryTool } from "./tools/query.js";
import {
cancelRunTool,
getRunDetailsTool,
getSpanDetailsTool,
listRunsTool,
waitForRunToCompleteTool,
} from "./tools/runs.js";
import { getCurrentWorker, getTaskSchemaTool, triggerTaskTool } from "./tools/tasks.js";
import {
listPromptsTool,
getPromptVersionsTool,
promotePromptVersionTool,
createPromptOverrideTool,
updatePromptOverrideTool,
removePromptOverrideTool,
reactivatePromptOverrideTool,
} from "./tools/prompts.js";
import { respondWithError } from "./utils.js";
/** Tool names that perform write/mutating operations. */
const WRITE_TOOLS = new Set([
deployTool.name,
triggerTaskTool.name,
cancelRunTool.name,
createProjectInOrgTool.name,
initializeProjectTool.name,
promotePromptVersionTool.name,
createPromptOverrideTool.name,
updatePromptOverrideTool.name,
removePromptOverrideTool.name,
reactivatePromptOverrideTool.name,
]);
export function registerTools(context: McpContext) {
const tools = [
searchDocsTool,
listOrgsTool,
listProjectsTool,
createProjectInOrgTool,
initializeProjectTool,
getCurrentWorker,
getTaskSchemaTool,
triggerTaskTool,
listRunsTool,
getRunDetailsTool,
getSpanDetailsTool,
waitForRunToCompleteTool,
cancelRunTool,
deployTool,
listDeploysTool,
listPreviewBranchesTool,
getQuerySchemaTool,
queryTool,
listDashboardsTool,
runDashboardQueryTool,
whoamiTool,
listProfilesTool,
switchProfileTool,
startDevServerTool,
stopDevServerTool,
devServerStatusTool,
listPromptsTool,
getPromptVersionsTool,
promotePromptVersionTool,
createPromptOverrideTool,
updatePromptOverrideTool,
removePromptOverrideTool,
reactivatePromptOverrideTool,
];
for (const tool of tools) {
// In readonly mode, skip write tools entirely so the LLM never sees them
if (context.options.readonly && WRITE_TOOLS.has(tool.name)) {
continue;
}
const isWrite = WRITE_TOOLS.has(tool.name);
context.server.registerTool(
tool.name,
{
annotations: {
title: tool.title,
readOnlyHint: !isWrite,
destructiveHint: isWrite,
},
description: tool.description,
inputSchema: tool.inputSchema,
},
async (input, extra) => {
try {
return tool.handler(input, { ...extra, ctx: context });
} catch (error) {
return respondWithError(error);
}
}
);
}
}