Developer

Browser API

Open URLs in the system default browser.

The Browser API opens URLs in the user’s default system browser.

Capability required: browser:open

Frontend (iframe)

import { createResourceClient } from "@rightplace/sdk";

const rp = createResourceClient();
await rp.ready();

// Open a URL in the system browser
await rp.browser.open("https://example.com");

// Open documentation
await rp.browser.open("https://docs.example.com/api");

Backend (Node.js)

import { createResourceServer } from "@rightplace/sdk/server";

const server = createResourceServer({
  methods: {
    openDashboard: async (params, { rp }) => {
      await rp.browser.open(`https://dashboard.example.com/${params.id}`);
      return { ok: true };
    },
  },
});

server.start();

MCP

The iframe SDK’s rp.browser.open(url) opens a URL in the system browser - that’s not exposed via MCP (agents already have their own ways to open URLs).

The agent-facing browser tools instead control a RightPlace Browser applet - navigation, clicks, screenshots, scripts. Each one is a CallRegistry hook and is prefixed rightplace_browser_:

GoalMCP tool
Navigaterightplace_browser_navigate
Click an elementrightplace_browser_click
Fill an inputrightplace_browser_fill
Screenshotrightplace_browser_screenshot
Accessibility treerightplace_browser_axTree
Run JSrightplace_browser_eval
Wait for elementrightplace_browser_waitForElement

All of them require resourceId - the browser applet to act on - and honor the browser:* permission scopes.

RobinPath Bridge

Same tools are reachable on the rightplace module. You can also call them via the generic rightplace.hook helper:

# Navigate + wait + screenshot
rightplace.browser_navigate {resourceId: "res_browser_1", url: "https://example.com"}
rightplace.browser_waitForLoad {resourceId: "res_browser_1"}
rightplace.browser_screenshot {resourceId: "res_browser_1"} into $shot
rightplace.clipboard_copy $shot.dataUrl

# Click + fill
rightplace.browser_click {resourceId: "res_browser_1", selector: "input[name=q]"}
rightplace.browser_fill {resourceId: "res_browser_1", selector: "input[name=q]", value: "rightplace"}
rightplace.browser_pressKey {resourceId: "res_browser_1", key: "Enter"}

# Run JS and read the return value
rightplace.hook "res_browser_1" "browser.eval" {script: "document.title"} into $title
log "title:" $title

To just open a URL in the system browser from RobinPath, use os.openUrl or similar - the iframe-level rp.browser.open is not mirrored in the bridge.

API Reference

rp.browser.open(url)

ParameterTypeDescription
urlstringThe URL to open
ReturnsPromise<void>

Manifest Configuration

{
  "capabilities": [
    "browser:open"
  ]
}

Notes

  • URLs are opened in the user’s default system browser (Safari, Chrome, Firefox, etc.), not in RightPlace’s built-in browser.
  • Only http:// and https:// URLs are supported.
  • Use this for external links, OAuth flows, documentation references, or any URL the user should interact with outside of your applet.