WebMCP Specification v1.2 & Complete 66 Tool Reference

Developer & Platform Reference

Complete documentation for all 66 native WebMCP browser agent tools registered on document.modelContext: state inspection, relational ERD schemas, Concepts architectural drafting guides, multi-layer canvas, and spatial orchestration.

Relational ERD & SQL Exporter

Drop table nodes, configure column types, toggle PK/FK badges, and link foreign keys. Instant DDL generation for PostgreSQL, MySQL, and SQLite in platform and via WebMCP export_sql_ddl().

PostgreSQL · MySQL · SQLite

Concepts Precision & Drafting Tools

Architectural straight-edge ruler guides, compass arc guides, Copic marker palettes, vector stroke slicing, Chaikin curve smoothing, multi-layer canvas stacks, and 60fps presentation laser pointers.

Ruler · Compass · Layers · Laser · 66 Tools

WebMCP Autonomous Pairing

Zero-token DOM protocol exposing 66 typed tools on document.modelContext. AI agents in ChatGPT and Chrome inspect visual hierarchies, cluster ideas, and execute spatial edits in sub-15ms latency.

66 Native Tools · Sub-15ms RPC · Zero Vision Lag

Testing WebMCP in Your Browser

Two official ways to test live WebMCP agents on Boardify right now.

Method 1 · Zero Setup

ChatGPT In-App Browser

ChatGPT Pro / Plus in-app browser supports WebMCP out of the box. Simply share your Boardify link or ask ChatGPT to open https://boardify.live/canvas.

Method 2 · Desktop Chrome

Google Chrome Flag

Open chrome://flags/#enable-webmcp-testing in Chrome, toggle to Enabled, and relaunch your browser.

WebMCP Protocol Architecture & RPC Lifecycle

How browser-native LLM agents discover, invoke, and orchestrate tools on the live canvas.

1

1. Discovery Handshake

When an agent loads Boardify, it inspects document.modelContext.tools. All 66 tool definitions, JSON schemas, descriptions, and parameter constraints are registered synchronously.

2

2. Direct DOM RPC Dispatch

Calls execute in-memory with sub-15ms response times. Zero screenshot uploads, zero OCR hallucinations, and zero token waste. Full support for batch spatial mutations and undo/redo stacks.

3

3. Structured Context Memory

Every action updates the canvas spatial topology graph. Agents can query inspect_visual_hierarchy to retrieve bounding boxes, cluster densities, and orphan node alerts.

Protocol spec: WebMCP v1.2 Standard · Registered on window.modelContext

Interactive Tool Explorer & Schema Spec

Browse, search, and test all 66 registered WebMCP tools available to LLM agents.

Matches (66 / 66)All (66)
Tool SpecificationCore State & Inspection
document.modelContext

get_canvas_state

Read the full whiteboard canvas: all notes, signs, tech logos, headings, checklists, stamps, and directed connection wires. Call this first to inspect and understand the active board context.

Input JSON Schema

{
  "type": "object",
  "properties": {}
}

Interactive Test Runner (JSON Payload)

Sample Expected Response
{
  "success": true,
  "total_notes": 8,
  "total_links": 6,
  "element_breakdown": { "default": 4, "erd-table": 2, "logo": 2 },
  "notes": [...],
  "links": [...]
}

Production Database Security & Firestore Rules

Production-grade, owner-scoped authorization rules adhering to Google Firebase security guidelines.

Document-Level Authorization & Multi-Tenant Isolation

Boardify utilizes authenticated, tenant-isolated Firestore rules. Boards are read-restricted to their creator (ownerId) or explicit members, unless explicitly marked public. Never use open allow read, write: if true; rules in production deployments.

firestore.rules (Production Configuration)Cloud Firestore v2
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    function isAuthenticated() {
      return request.auth != null;
    }
    function isOwner(data) {
      return isAuthenticated() && (data.ownerId == request.auth.uid || data.userId == request.auth.uid);
    }
    function isMember(data) {
      return isAuthenticated() && ('members' in data && request.auth.uid in data.members);
    }
    function isPublic(data) {
      return data.isPublic == true || data.visibility == 'public';
    }

    // Canvas Whiteboards
    match /boards/{boardId} {
      allow read: if resource == null || isPublic(resource.data) || isOwner(resource.data) || isMember(resource.data);
      allow create: if isAuthenticated() && (
        request.resource.data.ownerId == request.auth.uid ||
        request.resource.data.userId == request.auth.uid
      );
      allow update: if isOwner(resource.data) || isMember(resource.data);
      allow delete: if isOwner(resource.data);
    }

    // User Profile Data
    match /users/{userId} {
      allow read: if isAuthenticated();
      allow write: if isAuthenticated() && request.auth.uid == userId;
    }
  }
}