Node.js
import { Hyperbrowser } from "@hyperbrowser/sdk";
const client = new Hyperbrowser();
const result = await client.sessions.webmcp.invoke("session-id", {
toolRef: "tool-ref-from-discovery",
input: {}, // Match the selected tool inputSchema.
timeoutSeconds: 60,
});from hyperbrowser import Hyperbrowser
client = Hyperbrowser()
result = client.sessions.webmcp.invoke("session-id", {
"tool_ref": "tool-ref-from-discovery",
"input": {}, # Match the selected tool input_schema.
"timeout_seconds": 60,
})curl --request POST \
--url https://api.hyperbrowser.ai/api/session/{id}/webmcp/invoke \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"toolRef": "<string>",
"input": {},
"timeoutSeconds": 60
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hyperbrowser.ai/api/session/{id}/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([
'toolRef' => '<string>',
'input' => [
],
'timeoutSeconds' => 60
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.hyperbrowser.ai/api/session/{id}/webmcp/invoke"
payload := strings.NewReader("{\n \"toolRef\": \"<string>\",\n \"input\": {},\n \"timeoutSeconds\": 60\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.hyperbrowser.ai/api/session/{id}/webmcp/invoke")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"toolRef\": \"<string>\",\n \"input\": {},\n \"timeoutSeconds\": 60\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperbrowser.ai/api/session/{id}/webmcp/invoke")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"toolRef\": \"<string>\",\n \"input\": {},\n \"timeoutSeconds\": 60\n}"
response = http.request(request)
puts response.read_body{
"status": "completed",
"outputBytes": 1,
"untrustedContent": true,
"durationMs": 1,
"invocationId": "<string>",
"output": "<unknown>",
"errorText": "<string>",
"outputTruncated": true,
"outputPreview": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}WebMCP
Invoke a WebMCP tool
Invoke once and wait for the result.
POST
/
api
/
session
/
{id}
/
webmcp
/
invoke
Node.js
import { Hyperbrowser } from "@hyperbrowser/sdk";
const client = new Hyperbrowser();
const result = await client.sessions.webmcp.invoke("session-id", {
toolRef: "tool-ref-from-discovery",
input: {}, // Match the selected tool inputSchema.
timeoutSeconds: 60,
});from hyperbrowser import Hyperbrowser
client = Hyperbrowser()
result = client.sessions.webmcp.invoke("session-id", {
"tool_ref": "tool-ref-from-discovery",
"input": {}, # Match the selected tool input_schema.
"timeout_seconds": 60,
})curl --request POST \
--url https://api.hyperbrowser.ai/api/session/{id}/webmcp/invoke \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"toolRef": "<string>",
"input": {},
"timeoutSeconds": 60
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hyperbrowser.ai/api/session/{id}/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([
'toolRef' => '<string>',
'input' => [
],
'timeoutSeconds' => 60
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.hyperbrowser.ai/api/session/{id}/webmcp/invoke"
payload := strings.NewReader("{\n \"toolRef\": \"<string>\",\n \"input\": {},\n \"timeoutSeconds\": 60\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.hyperbrowser.ai/api/session/{id}/webmcp/invoke")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"toolRef\": \"<string>\",\n \"input\": {},\n \"timeoutSeconds\": 60\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperbrowser.ai/api/session/{id}/webmcp/invoke")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"toolRef\": \"<string>\",\n \"input\": {},\n \"timeoutSeconds\": 60\n}"
response = http.request(request)
puts response.read_body{
"status": "completed",
"outputBytes": 1,
"untrustedContent": true,
"durationMs": 1,
"invocationId": "<string>",
"output": "<unknown>",
"errorText": "<string>",
"outputTruncated": true,
"outputPreview": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}{
"message": "<string>",
"error": "<string>",
"code": "<string>",
"invocationId": "<string>"
}See the WebMCP guide for SDK examples and invocation lifecycle details.
Authorizations
Path Parameters
Session ID.
Body
application/json
Required string length:
1 - 4096Arguments matching the tool inputSchema. At most 1 MiB when JSON encoded. Keys are passed through unchanged.
Tool execution budget in seconds. Expiration requests cancellation; it does not guarantee rollback.
Required range:
1 <= x <= 120Response
Success
Available options:
completed, error, canceled, awaiting_submission Byte length of the original JSON output.
Required range:
x >= 0Required range:
x >= 0Handle for subsequent result reads or cancellation, when provided.
Any JSON value returned by the page, including null. Absent if unavailable or withheld for exceeding the output limit.
True when output exceeds 1 MiB. Full output is withheld.
At most 4096 UTF-8 bytes of the oversized output; may be incomplete JSON.
Was this page helpful?
⌘I