import type { ConnectionName, IntegrationSlug, Owner, ToolAddress, ToolName } from "./ids";/* Tools belong to a connection and are PERSISTED, like v1 — not resolved live on * every list. A plugin produces them at create/refresh (openapi from the * integration's spec; mcp by dialing the connection's server), the SDK stamps * each with its address and stores it per-connection (option C), and `tools.list` * is a read. *//** Default-policy hints a plugin attaches to a tool — enforced by the executor * before the handler runs. */export interface ToolAnnotations { readonly requiresApproval?: boolean; readonly approvalDescription?: string; readonly mayElicit?: boolean;}/** A tool as produced by a plugin — the definition, no address yet (the SDK * stamps that from the owning connection). */export interface ToolDef { readonly name: ToolName; readonly description?: string; readonly inputSchema?: unknown; readonly outputSchema?: unknown; readonly annotations?: ToolAnnotations;}/** A persisted, addressable tool as returned by `tools.list`. */export interface Tool { readonly address: ToolAddress; readonly owner: Owner; readonly integration: IntegrationSlug; readonly connection: ConnectionName; readonly name: ToolName; /** The plugin that owns the connection's integration. */ readonly pluginId: string; readonly description: string; readonly inputSchema?: unknown; readonly outputSchema?: unknown; readonly annotations?: ToolAnnotations; /** True for plugin-contributed static tools (for example Executor's own * configuration tools). Static tools have no backing connection even though * they carry owner/connection metadata for UI grouping. */ readonly static?: boolean;}/** Narrow `tools.list` to a subset; omit for the whole catalog. */export interface ToolListFilter { readonly integration?: IntegrationSlug; readonly owner?: Owner; readonly connection?: ConnectionName; /** Case-insensitive substring match against `name` OR `description`. */ readonly query?: string; /** Resolve plugin-derived annotations. Defaults to true. */ readonly includeAnnotations?: boolean; /** Include tools whose effective `tool_policy` is `block`. Defaults to `false` * so agent-facing surfaces silently omit blocked tools. */ readonly includeBlocked?: boolean;}
import type { ConnectionName, IntegrationSlug, Owner, ToolAddress, ToolName } from "./ids";
/* Tools belong to a connection and are PERSISTED, like v1 — not resolved live on
* every list. A plugin produces them at create/refresh (openapi from the
* integration's spec; mcp by dialing the connection's server), the SDK stamps
* each with its address and stores it per-connection (option C), and `tools.list`
* is a read. */
/** Default-policy hints a plugin attaches to a tool — enforced by the executor
* before the handler runs. */
export interface ToolAnnotations {
readonly requiresApproval?: boolean;
readonly approvalDescription?: string;
readonly mayElicit?: boolean;
}
/** A tool as produced by a plugin — the definition, no address yet (the SDK
* stamps that from the owning connection). */
export interface ToolDef {
readonly name: ToolName;
readonly description?: string;
readonly inputSchema?: unknown;
readonly outputSchema?: unknown;
readonly annotations?: ToolAnnotations;
}
/** A persisted, addressable tool as returned by `tools.list`. */
export interface Tool {
readonly address: ToolAddress;
readonly owner: Owner;
readonly integration: IntegrationSlug;
readonly connection: ConnectionName;
readonly name: ToolName;
/** The plugin that owns the connection's integration. */
readonly pluginId: string;
readonly description: string;
readonly inputSchema?: unknown;
readonly outputSchema?: unknown;
readonly annotations?: ToolAnnotations;
/** True for plugin-contributed static tools (for example Executor's own
* configuration tools). Static tools have no backing connection even though
* they carry owner/connection metadata for UI grouping. */
readonly static?: boolean;
}
/** Narrow `tools.list` to a subset; omit for the whole catalog. */
export interface ToolListFilter {
readonly integration?: IntegrationSlug;
readonly owner?: Owner;
readonly connection?: ConnectionName;
/** Case-insensitive substring match against `name` OR `description`. */
readonly query?: string;
/** Resolve plugin-derived annotations. Defaults to true. */
readonly includeAnnotations?: boolean;
/** Include tools whose effective `tool_policy` is `block`. Defaults to `false`
* so agent-facing surfaces silently omit blocked tools. */
readonly includeBlocked?: boolean;
}