Invoke a discovered WebMCP tool
curl --request POST \
--url https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {},
"tool_ref": "<string>",
"timeout_sec": 60
}
'import requests
url = "https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke"
payload = {
"input": {},
"tool_ref": "<string>",
"timeout_sec": 60
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({input: {}, tool_ref: '<string>', timeout_sec: 60})
};
fetch('https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'input' => [
],
'tool_ref' => '<string>',
'timeout_sec' => 60
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke"
payload := strings.NewReader("{\n \"input\": {},\n \"tool_ref\": \"<string>\",\n \"timeout_sec\": 60\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input\": {},\n \"tool_ref\": \"<string>\",\n \"timeout_sec\": 60\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"input\": {},\n \"tool_ref\": \"<string>\",\n \"timeout_sec\": 60\n}"
response = http.request(request)
puts response.read_body{
"invocation_id": "<string>",
"status": "completed",
"error_text": "<string>",
"output": "<unknown>"
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "outcome_unknown",
"message": "<string>",
"invocation_id": "<string>"
}{
"code": "invalid_request",
"message": "<string>"
}Browser WebMCP
Invoke a discovered WebMCP tool
Invokes the exact live registration identified by tool_ref and waits synchronously for its result. Navigation during execution is allowed. If the tab or embedded frame disappears, or the request times out after invocation begins, the response reports outcome_unknown and the tool is not retried.
POST
/
browsers
/
{id_or_name}
/
webmcp
/
invoke
Invoke a discovered WebMCP tool
curl --request POST \
--url https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {},
"tool_ref": "<string>",
"timeout_sec": 60
}
'import requests
url = "https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke"
payload = {
"input": {},
"tool_ref": "<string>",
"timeout_sec": 60
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({input: {}, tool_ref: '<string>', timeout_sec: 60})
};
fetch('https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'input' => [
],
'tool_ref' => '<string>',
'timeout_sec' => 60
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke"
payload := strings.NewReader("{\n \"input\": {},\n \"tool_ref\": \"<string>\",\n \"timeout_sec\": 60\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input\": {},\n \"tool_ref\": \"<string>\",\n \"timeout_sec\": 60\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onkernel.com/browsers/{id_or_name}/webmcp/invoke")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"input\": {},\n \"tool_ref\": \"<string>\",\n \"timeout_sec\": 60\n}"
response = http.request(request)
puts response.read_body{
"invocation_id": "<string>",
"status": "completed",
"error_text": "<string>",
"output": "<unknown>"
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "bad_request",
"message": "Missing required field: app_name",
"details": [
{
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
],
"inner_error": {
"code": "invalid_input",
"message": "Provided version string is not semver compliant"
}
}{
"code": "outcome_unknown",
"message": "<string>",
"invocation_id": "<string>"
}{
"code": "invalid_request",
"message": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Browser session ID or name
Body
application/json
The raw JSON request body is limited to 1 MiB plus 4 KiB of envelope overhead before decoding.