Skip to content
TestWebMCP

WebMCP report

openreel-webmcp.pages.dev

https://openreel-webmcp.pages.dev/

51/ 100
Grade E

15 tool(s) registered. 2 returned results and 8 returned an error when called. Visitors can't use them yet: the page has no origin trial token (see P2).

Registers tools with JavaScriptScanned 10/16/2026, 2:01:25 PM · 5474ms
Registration
36/60
Tool quality
10/15
Ready for visitors
5/25

Registered tools

batch_actionsdocument.modelContextregisterTool · 936ms

Dispatch a sequence of raw actions in order; stops on first failure.

readOnlyHint: false untrustedContentHint: false

inputSchema
{
  "type": "object",
  "required": [
    "actions"
  ],
  "properties": {
    "actions": {
      "type": "array"
    }
  },
  "additionalProperties": true
}
create_projectdocument.modelContextregisterTool · 937ms

Create a new blank project and make it active. Call this first when starting from scratch. Defaults to 1920x1080 at 30fps.

readOnlyHint: false untrustedContentHint: false

inputSchema
{
  "type": "object",
  "required": [],
  "properties": {
    "name": {
      "type": "string"
    },
    "width": {
      "type": "number"
    },
    "height": {
      "type": "number"
    },
    "frameRate": {
      "type": "number"
    }
  },
  "additionalProperties": true
}
execute_actiondocument.modelContextregisterTool · 937ms

Escape hatch: dispatch any underlying editor action by type + params. Use get_capabilities and the action catalog for valid types.

readOnlyHint: false untrustedContentHint: false

inputSchema
{
  "type": "object",
  "required": [
    "type"
  ],
  "properties": {
    "type": {
      "type": "string"
    },
    "params": {
      "type": "object"
    }
  },
  "additionalProperties": true
}
get_capabilitiesdocument.modelContextregisterTool · 891ms

Valid enums + parameter ranges.

readOnlyHint: true untrustedContentHint: true

inputSchema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": true
}
get_clipdocument.modelContextregisterTool · 927ms

Full detail for one clip by id.

readOnlyHint: true untrustedContentHint: true

inputSchema
{
  "type": "object",
  "required": [
    "clipId"
  ],
  "properties": {
    "clipId": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
get_editor_statedocument.modelContextregisterTool · 929ms

Project settings, durations, and counts.

readOnlyHint: true untrustedContentHint: true

inputSchema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": true
}
get_motion_compositiondocument.modelContextregisterTool · 930ms

Full detail for one Motion Creator composition: every layer with its id, type, transform, keyframes, and type-specific fields, plus variables, markers, beat markers, camera, and lights. Use this to recover auto-generated layer ids before animating or editing.

readOnlyHint: true untrustedContentHint: true

inputSchema
{
  "type": "object",
  "required": [
    "compositionId"
  ],
  "properties": {
    "compositionId": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
list_clipsdocument.modelContextregisterTool · 933ms

Compact clip list. Optional filters: trackIndex, fromSec, toSec; paginate huge timelines with offset/limit.

readOnlyHint: true untrustedContentHint: true

inputSchema
{
  "type": "object",
  "required": [],
  "properties": {
    "limit": {
      "type": "number"
    },
    "toSec": {
      "type": "number"
    },
    "offset": {
      "type": "number"
    },
    "fromSec": {
      "type": "number"
    },
    "trackIndex": {
      "type": "number"
    }
  },
  "additionalProperties": true
}
list_mediadocument.modelContextregisterTool · 934ms

Media library items (blob-free).

readOnlyHint: true untrustedContentHint: true

inputSchema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": true
}
list_motion_compositionsdocument.modelContextregisterTool · 934ms

Compact list of Motion Creator scenes, layers, variables, and editor instances.

readOnlyHint: true untrustedContentHint: true

inputSchema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": true
}
list_projectsdocument.modelContextregisterTool · 935ms

List saved projects (id + name + modifiedAt). Use an id with open_project.

readOnlyHint: true untrustedContentHint: false

inputSchema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": true
}
list_subtitlesdocument.modelContextregisterTool · 935ms

Subtitle/caption cues on the timeline (text + seconds, plus position/color). Includes captions made by the Auto Caption panel. Optional range filter: fromSec, toSec.

readOnlyHint: true untrustedContentHint: true

inputSchema
{
  "type": "object",
  "required": [],
  "properties": {
    "toSec": {
      "type": "number"
    },
    "fromSec": {
      "type": "number"
    }
  },
  "additionalProperties": true
}
list_tracksdocument.modelContextregisterTool · 935ms

All timeline tracks.

readOnlyHint: true untrustedContentHint: true

inputSchema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": true
}
open_projectdocument.modelContextregisterTool · 937ms

Open a saved project by id and make it active.

readOnlyHint: false untrustedContentHint: false

inputSchema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "additionalProperties": true
}
save_projectdocument.modelContextregisterTool · 937ms

Persist the active project so it can be reopened later.

readOnlyHint: false untrustedContentHint: false

inputSchema
{
  "type": "object",
  "required": [],
  "properties": {},
  "additionalProperties": true
}

Registration

36/60
Pass

Tools registered with JavaScript R1

20/20

15 tool(s) registered.

  • Tools: batch_actions, create_project, execute_action, get_capabilities, get_clip, get_editor_state, get_motion_composition, list_clips, list_media, list_motion_compositions, list_projects, list_subtitles, list_tracks, open_project, save_project
  • First tool registered 891ms after the page started loading.
Pass

Tools registered through forms R2

5/5

No form tools, and that's fine: your tools are registered with JavaScript. You only need one of the two.

  • JavaScript tools: batch_actions, create_project, execute_action, get_capabilities, get_clip, get_editor_state, get_motion_composition, list_clips, list_media, list_motion_compositions, list_projects, list_subtitles, list_tracks, open_project, save_project
Partial

Tools work when called R3

6/30

We called 10 tool(s). 8 returned an error: • get_clip: returned an error: "{"ok":false,"summary":"No project is open","error":{"code":"TOOL_ERROR","message":"No project is open"}}" • get_editor_state: returned an error: "{"ok":false,"summary":"No project is open","error":{"code":"TOOL_ERROR","message":"No project is open"}}" • get_motion_composition: returned an error: "{"ok":false,"summary":"No project is open","error":{"code":"TOOL_ERROR","message":"No project is open"}}" • list_clips: returned an error: "{"ok":false,"summary":"No project is open","error":{"code":"TOOL_ERROR","message":"No project is open"}}" • list_media: returned an error: "{"ok":false,"summary":"No project is open","error":{"code":"TOOL_ERROR","message":"No project is open"}}" • list_motion_compositions: returned an error: "{"ok":false,"summary":"No project is open","error":{"code":"TOOL_ERROR","message":"No project is open"}}" • list_subtitles: returned an error: "{"ok":false,"summary":"No project is open","error":{"code":"TOOL_ERROR","message":"No project is open"}}" • list_tracks: returned an error: "{"ok":false,"summary":"No project is open","error":{"code":"TOOL_ERROR","message":"No project is open"}}"

An agent that calls a broken tool gets an error instead of an answer. Each tool that fails costs its share of the points.

Fix: Make each tool return a real answer for a simple call. If something goes wrong, return isError: true so the agent knows it failed.

async execute({ query }) {
  try {
    const results = await search(query);
    return { content: [{ type: "text", text: format(results) }] };
  } catch (err) {
    return {
      isError: true,
      content: [{ type: "text", text: `Search unavailable: ${err.message}` }]
    };
  }
}
  • Working: get_capabilities, list_projects
Pass

Tools registered within 5 seconds R4

5/5

First tool registered 891ms after the page started loading.

  • Within the 5 second limit.

Tool quality

10/15
Fail

Valid input schemas Q1

0/5

8 of 15 tool(s) have schema problems: • batch_actions: no description on actions. • create_project: no description on name, width, height, frameRate. • execute_action: no description on type, params. • get_clip: no description on clipId. • get_motion_composition: no description on compositionId. • list_clips: no description on trackIndex, fromSec, toSec, offset, limit. • list_subtitles: no description on fromSec, toSec. • open_project: no description on id.

Agents read the schema to know what to send. A type and a short description on each field help them send the right thing.

Fix: Give every field a type and a short description.

inputSchema: {
  type: "object",
  properties: {
    query: { type: "string",  description: "What to search for" },
    limit: { type: "integer", description: "How many results to return (default 10)" }
  },
  required: ["query"]
}
  • get_capabilities: takes no input.
  • get_editor_state: takes no input.
  • list_media: takes no input.
  • list_motion_compositions: takes no input.
  • list_projects: takes no input.
  • list_tracks: takes no input.
  • save_project: takes no input.
Pass

Clear descriptions Q2

3/3

All 15 tool(s) have a description.

  • batch_actions: "Dispatch a sequence of raw actions in order; stops on first failure."
  • create_project: "Create a new blank project and make it active. Call this first when starting from scratch. Defaults to 1920x1080 at 30fp… (122 chars total)"
  • execute_action: "Escape hatch: dispatch any underlying editor action by type + params. Use get_capabilities and the action catalog for va… (130 chars total)"
  • get_capabilities: "Valid enums + parameter ranges."
  • get_clip: "Full detail for one clip by id."
  • get_editor_state: "Project settings, durations, and counts."
  • get_motion_composition: "Full detail for one Motion Creator composition: every layer with its id, type, transform, keyframes, and type-specific f… (259 chars total)"
  • list_clips: "Compact clip list. Optional filters: trackIndex, fromSec, toSec; paginate huge timelines with offset/limit."
  • list_media: "Media library items (blob-free)."
  • list_motion_compositions: "Compact list of Motion Creator scenes, layers, variables, and editor instances."
  • list_projects: "List saved projects (id + name + modifiedAt). Use an id with open_project."
  • list_subtitles: "Subtitle/caption cues on the timeline (text + seconds, plus position/color). Includes captions made by the Auto Caption … (165 chars total)"
  • list_tracks: "All timeline tracks."
  • open_project: "Open a saved project by id and make it active."
  • save_project: "Persist the active project so it can be reopened later."
Pass

Clear names Q3

2/2

All 15 tool name(s) are specific.

  • Names: batch_actions, create_project, execute_action, get_capabilities, get_clip, get_editor_state, get_motion_composition, list_clips, list_media, list_motion_compositions, list_projects, list_subtitles, list_tracks, open_project, save_project
Pass

Read-only hints Q4

3/3

All 15 tool(s) say whether they only read information.

  • batch_actions: readOnlyHint false
  • create_project: readOnlyHint false
  • execute_action: readOnlyHint false
  • get_capabilities: readOnlyHint true
  • get_clip: readOnlyHint true
  • get_editor_state: readOnlyHint true
  • get_motion_composition: readOnlyHint true
  • list_clips: readOnlyHint true
  • list_media: readOnlyHint true
  • list_motion_compositions: readOnlyHint true
  • list_projects: readOnlyHint true
  • list_subtitles: readOnlyHint true
  • list_tracks: readOnlyHint true
  • open_project: readOnlyHint false
  • save_project: readOnlyHint false
Pass

Result size Q5

2/2

Every tested tool returned between 1 and 20,000 characters.

  • get_capabilities: 19,958 characters.
  • get_clip: 104 characters.
  • get_editor_state: 104 characters.
  • get_motion_composition: 104 characters.
  • list_clips: 104 characters.
  • list_media: 104 characters.
  • list_motion_compositions: 104 characters.
  • list_projects: 65 characters.
  • list_subtitles: 104 characters.
  • list_tracks: 104 characters.

Ready for visitors

5/25
Pass

HTTPS with a valid certificate P1

5/5

The page uses HTTPS with a valid certificate.

  • Connected to openreel-webmcp.pages.dev over HTTPS.
  • Issuer: Google Trust Services
  • Valid until: Dec 1 10:45:27 2026 GMT
Fail

Origin trial token P2

0/15

No origin trial token, so your visitors can't use your tools yet.

WebMCP is still being tested in Chrome, and it only works on sites that signed up for the test. Signing up gives you a token to add to your pages. Your tools work in this report only because our scanner turns WebMCP on for itself.

Fix: Sign up for the WebMCP origin trial with your domain, then add the token to your pages.

<!-- Sign up: https://developer.chrome.com/origintrials -->
<!-- In <head>, before the script that registers your tools: -->
<meta http-equiv="origin-trial" content="YOUR_TOKEN">
Fail

No errors blocking tools P3

0/5

• Console: [SW Manager] Registration failed: TypeError: Cannot read properties of undefined (reading 'addEventListener') at D2e.register (https://openreel-webmcp.pages.dev/assets/index-CPrSsfoN.js:7573:11475… (201 chars total)

If the code that registers your tools throws an error, or your Content Security Policy blocks it, no tools get registered. A policy that blocks inline scripts is the usual cause.

Fix: Allow the script that registers your tools. A nonce is safer than 'unsafe-inline'.

Content-Security-Policy: script-src 'self' 'nonce-RANDOM_PER_REQUEST'

<script nonce="RANDOM_PER_REQUEST">
  document.modelContext?.registerTool({ /* ... */ });
</script>

Scan details

Requested
https://openreel-webmcp.pages.dev/
Final URL
https://openreel-webmcp.pages.dev/
HTTP status
200
Page title
OpenReel Video - Professional Video Editor
Load time
2901ms
Total scan time
5474ms
User agent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36

Console errors mentioning WebMCP

  • [SW Manager] Registration failed: TypeError: Cannot read properties of undefined (reading 'addEventListener') at D2e.register (https://openreel-webmcp.pages.dev/assets/index-CPrSsfoN.js:7573:11475)