Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,16 @@ namespace WebMCP {
fromOrigins?: string[];
}

/**
* Options for executing a tool.
*/
interface ModelContextExecuteToolOptions {
/**
* An AbortSignal that can be used to cancel the execution of the tool.
*/
signal?: AbortSignal;
}

/**
* Represents a tool that has been registered and is available for execution.
*/
Expand Down Expand Up @@ -208,6 +218,13 @@ namespace WebMCP {
* @param options Filtering options.
*/
getTools(options?: ModelContextGetToolOptions): Promise<RegisteredTool[]>;
/**
* Executes a tool on the document it was registered on.
* @param tool The tool to execute.
* @param inputObject The input parameters for the tool.
* @param options Execution options.
*/
executeTool(tool: RegisteredTool, inputObject?: object, options?: ModelContextExecuteToolOptions): Promise<string>;
/**
* Event handler for the toolchange event.
*/
Expand Down
25 changes: 25 additions & 0 deletions index.test-d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,3 +162,28 @@ test('supports tool annotations', () => {
expectTypeOf<WebMCP.ModelContextTool['annotations']>().toEqualTypeOf<WebMCP.ToolAnnotations | undefined>();
expectTypeOf<WebMCP.RegisteredTool['annotations']>().toEqualTypeOf<WebMCP.ToolAnnotations | undefined>();
});

declare const registeredTool: WebMCP.RegisteredTool;

test('supports executeTool', async () => {
const controller = new AbortController();

if (document.modelContext) {
const result = await document.modelContext.executeTool(registeredTool);
expectTypeOf(result).toEqualTypeOf<string>();

await document.modelContext.executeTool(registeredTool, { query: 'test' });
await document.modelContext.executeTool(registeredTool, [1, 2, 3]);
await document.modelContext.executeTool(registeredTool, {}, { signal: controller.signal });

// @ts-expect-error inputObject must be an object.
await document.modelContext.executeTool(registeredTool, 'invalid');
// @ts-expect-error inputObject must be an object.
await document.modelContext.executeTool(registeredTool, 123);
}

expectTypeOf<WebMCP.ModelContextExecuteToolOptions>().toEqualTypeOf<{
signal?: AbortSignal;
}>();
});