---
title: "Add custom WebMCP tools"
method: POST
path: "/browsers/{id_or_name}/webmcp/custom-tools"
tags: ["Browser WebMCP"]
---

# Add custom WebMCP tools

`POST /browsers/{id_or_name}/webmcp/custom-tools`

## Request

- Base URL: `https://api.onkernel.com`
- URL: `https://api.onkernel.com/browsers/{id_or_name}/webmcp/custom-tools`
- Auth: HTTP bearer

Add a namespaced batch of custom tools. A custom tool can be page-backed or CDP-backed.
Page-backed tools execute in the page via JavaScript. CDP-backed tools execute via CDP and
can use all browser REPL tools (see `/repl`). The source must evaluate to a non-empty array
of definitions with URL matchers, tool metadata (including an optional output schema), and
execute functions. The batch is added atomically. Matchers apply to top-level documents and
nested frames, including out-of-process iframes; each matching tool is exposed once on the
tab's top-level document and appears in the WebMCP tool snapshot.

To update one tool, list the tools, delete its ID, and add its replacement. Set
force_overwrite_namespace to replace every existing tool in the namespace atomically;
omitted or false adds tools without replacing existing ones. Existing invocations continue.

## Request body

- AddCustomWebMCPToolsRequest
  - `force_overwrite_namespace` boolean: Atomically replace all existing tools in this namespace with this batch when true.
  - `namespace` string, required
  - `source` string, required: JavaScript expression that evaluates to a non-empty array of custom tool definitions. Limited to 8,000,000 bytes when UTF-8 encoded, so multi-byte characters reduce the allowed character count.

## Response `201`

Custom tools added. Contains only the newly added tools.

- CustomWebMCPToolsResponse
  - `tools` CustomWebMCPDefinition[], required
    - `id` string, required
    - `kind` string, required
    - `match` CustomWebMCPMatch, required
      - `url_patterns` string[], required
    - `namespace` string, required
    - `tool` WebMCPToolMetadata, required: Tool metadata follows the [MCP Tool definition](https://modelcontextprotocol.io/specification/2025-11-25/server/tools#tool) and the [WebMCP RegisteredTool definition](https://webmachinelearning.github.io/webmcp/#dictdef-registeredtool). outputSchema is optional for page and custom tools.
      - `annotations` WebMCPToolAnnotations: Tool-provided behavioral hints from the [MCP tool specification](https://modelcontextprotocol.io/specification/2025-11-25/server/tools#tool) and the [WebMCP ToolAnnotations definition](https://webmachinelearning.github.io/webmcp/#dictdef-toolannotations). These hints are untrusted and are not enforced by Kernel.
        - `autosubmit` boolean
        - `consequentialHint` boolean
        - `destructiveHint` boolean
        - `idempotentHint` boolean
        - `openWorldHint` boolean
        - `readOnlyHint` boolean
        - `untrustedContentHint` boolean
      - `description` string, required
      - `inputSchema` object, required
      - `name` string, required
      - `outputSchema` object
      - `title` string

## Other responses

- `400`: Bad Request – invalid input
- `409`: Conflict – resource already exists
- `500`: Internal Server Error
- `default`: Error returned by the browser or its proxy

## Changes

- **2026-10-16** `03b369edee49`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/kernel/apis/kernel-api/changes/browsers/:id_or_name/webmcp/custom-tools/post.md)

---

[API](https://skmtc.dev/kernel/apis/kernel-api.md) - [All operations](https://skmtc.dev/kernel/apis/kernel-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kernel/apis/kernel-api/revisions/0f6cf4f58fe6?raw)
