fix(tools): address final code review findings on validation, concurrency, and testing

This commit is contained in:
Lucas Winther committed 2026-09-06 18:37:21 +02:00
1 parent 9bfedf8a8b
commit 6b8045111b
4 files changed
+57 -10

No files matched your search

+4 -2
View File
@@ -30,6 +30,7 @@ export const allTools: AnyToolDefinition[] = [
export interface RegisterToolsOptions {
readOnly?: boolean;
tools?: AnyToolDefinition[];
}
/**
@@ -41,12 +42,13 @@ export function registerAllTools(
options?: RegisterToolsOptions
): void {
const isReadOnly = options?.readOnly ?? false;
const toolsToRegister = options?.tools ?? allTools;
for (const tool of allTools) {
for (const tool of toolsToRegister) {
// If server is in read-only mode, skip any non-read-only tools
if (isReadOnly && !tool.readOnly) {
continue;
}
registerTool(server, tool);
registerTool(server, tool as unknown as ToolDefinition);
}
}
+8 -2
View File
@@ -47,7 +47,13 @@ export async function handleListProjects(
try {
let filters: FilterElement[] | undefined;
if (args.filters) {
filters = JSON.parse(args.filters) as FilterElement[];
const parsed = JSON.parse(args.filters);
if (!Array.isArray(parsed)) {
return formatToolError(
new Error("filters parameter must be a JSON array string")
);
}
filters = parsed as FilterElement[];
}
const result = await listProjects({
@@ -71,7 +77,7 @@ export async function handleListProjects(
export const getProjectShape = {
projectId: z
.union([z.number().int().positive(), z.string()])
.union([z.number().int().positive(), z.string().min(1)])
.describe("Numeric project ID or string identifier/slug"),
};
+7 -5
View File
@@ -93,11 +93,13 @@ export async function handleGetQuery(
args: GetQueryArgs
): Promise<McpToolResponse> {
try {
const query = await getQuery(args.queryId);
const results = await getQueryResults(args.queryId, {
pageSize: args.pageSize,
offset: args.offset,
});
const [query, results] = await Promise.all([
getQuery(args.queryId),
getQueryResults(args.queryId, {
pageSize: args.pageSize,
offset: args.offset,
}),
]);
return formatToolSuccess({
query,