+
Tool Policies
+
+
+
+
+
+ }
+ />
+
+ 0 ? "text-red-600" : undefined}
+ />
+ 0 ? activeTeamsCount : "—"} />
+
+
+ {needsReviewTools.length > 0 && (
+
+
Needs Review
+
+ {needsReviewTools.length} new tool{needsReviewTools.length !== 1 ? "s" : ""} discovered that require policy
+ decisions.
+
+
+ {needsReviewTools.map((tool) => (
+
+
+ {tool.tool_name}
+
+
+
+ ))}
+
+
+ )}
+
+ {query.isError && (
+
+ {toMessage(query.error, "Failed to load tools")}
+
+ )}
+
+
void query.refetch()}
+ onSelectTool={onSelectTool}
+ savingInput={savingInput}
+ savingOutput={savingOutput}
+ onInputPolicyChange={handleInputPolicyChange}
+ onOutputPolicyChange={handleOutputPolicyChange}
+ />
+
+ );
+};
diff --git a/ui/litellm-dashboard/src/components/ToolPolicies/ToolPoliciesTable.test.tsx b/ui/litellm-dashboard/src/components/ToolPolicies/ToolPoliciesTable.test.tsx
new file mode 100644
index 00000000000..9d32ad667bd
--- /dev/null
+++ b/ui/litellm-dashboard/src/components/ToolPolicies/ToolPoliciesTable.test.tsx
@@ -0,0 +1,189 @@
+import React from "react";
+import { describe, expect, it, vi } from "vitest";
+import { screen, waitFor } from "@testing-library/react";
+import userEvent from "@testing-library/user-event";
+
+import { renderWithProviders } from "../../../tests/test-utils";
+import type { ToolRow } from "@/components/networking";
+import { ToolPoliciesTable } from "./ToolPoliciesTable";
+
+const TOOLS: ToolRow[] = [
+ {
+ tool_id: "tool-1",
+ tool_name: "get_weather",
+ input_policy: "untrusted",
+ output_policy: "untrusted",
+ call_count: 12,
+ team_id: "team-alpha",
+ key_alias: "prod-key",
+ key_hash: "hash-aaa",
+ user_agent: "curl/8.7.1",
+ created_at: "2026-07-21T10:00:00Z",
+ },
+ {
+ tool_id: "tool-2",
+ tool_name: "search_web",
+ input_policy: "trusted",
+ output_policy: "trusted",
+ call_count: 5,
+ team_id: "team-beta",
+ key_alias: "dev-key",
+ key_hash: "hash-bbb",
+ created_at: "2026-07-20T10:00:00Z",
+ },
+ {
+ tool_id: "tool-3",
+ tool_name: "delete_file",
+ input_policy: "blocked",
+ output_policy: "untrusted",
+ call_count: 100,
+ key_hash: "hash-ccc",
+ created_at: "2026-07-19T10:00:00Z",
+ },
+];
+
+const renderTable = (overrides: Partial