Fix review issues from Claude's code review

- Default taskSupport fallback to "forbidden" per MCP spec (was "optional")
- Fix import path to use @/ alias consistently
- Fix misleading "type guard" comment on getTaskSupport
- Extract getTaskSupport to a variable to avoid duplicate calls in render
- Export ExtendedTool and import in tests instead of duplicating

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
cliffhall 2026-02-23 11:15:53 -05:00
commit f64a7ea6e3
2 changed files with 9 additions and 14 deletions

View file

@ -51,12 +51,12 @@ import {
hasValidMetaName,
hasValidMetaPrefix,
isReservedMetaKey,
} from "../utils/metaUtils";
} from "@/utils/metaUtils";
/**
* Extended Tool type that includes optional fields used by the inspector.
*/
interface ExtendedTool extends Tool, WithIcons {
export interface ExtendedTool extends Tool, WithIcons {
_meta?: Record<string, unknown>;
execution?: {
taskSupport?: "forbidden" | "required" | "optional";
@ -69,7 +69,7 @@ const hasMeta = (
): tool is ExtendedTool & { _meta: Record<string, unknown> } =>
typeof (tool as ExtendedTool)._meta !== "undefined";
// Type guard to detect execution.taskSupport
// Returns the execution.taskSupport value for a tool, defaulting to "forbidden" per MCP spec
const getTaskSupport = (
tool: Tool | null,
): "forbidden" | "required" | "optional" => {
@ -83,7 +83,7 @@ const getTaskSupport = (
) {
return taskSupport;
}
return "optional";
return "forbidden";
};
// Type guard to safely detect the optional annotations field
@ -264,6 +264,8 @@ const ToolsTab = ({
return trimmedKey !== "" && !hasValidMetaName(trimmedKey);
});
const taskSupport = getTaskSupport(selectedTool);
return (
<TabsContent value="tools">
<div className="grid grid-cols-2 gap-4">
@ -777,7 +779,7 @@ const ToolsTab = ({
</div>
</div>
)}
{getTaskSupport(selectedTool) !== "forbidden" && (
{taskSupport !== "forbidden" && (
<div className="flex items-center space-x-2">
<Checkbox
id="run-as-task"
@ -785,7 +787,7 @@ const ToolsTab = ({
onCheckedChange={(checked: boolean) =>
setRunAsTask(checked)
}
disabled={getTaskSupport(selectedTool) === "required"}
disabled={taskSupport === "required"}
/>
<Label
htmlFor="run-as-task"

View file

@ -1,7 +1,7 @@
import { render, screen, fireEvent, act } from "@testing-library/react";
import "@testing-library/jest-dom";
import { describe, it, jest, beforeEach } from "@jest/globals";
import ToolsTab from "../ToolsTab";
import ToolsTab, { ExtendedTool } from "../ToolsTab";
import { Tool } from "@modelcontextprotocol/sdk/types.js";
import { Tabs } from "../ui/tabs";
import { cacheToolOutputSchemas } from "../../utils/schemaUtils";
@ -12,13 +12,6 @@ import {
RESERVED_NAMESPACE_MESSAGE,
} from "../../utils/metaUtils";
interface ExtendedTool extends Tool {
_meta?: Record<string, unknown>;
execution?: {
taskSupport?: "forbidden" | "required" | "optional";
};
}
describe("ToolsTab", () => {
beforeEach(() => {
// Clear the output schema cache before each test