Skip to main content
Glama

moodle_browser

Browse any Moodle page in a headless browser, clicking, filling forms, or uploading files. Use it for tasks without a dedicated tool, like quiz attempts or forum reading.

Instructions

Browse any Moodle page in a real headless browser, optionally clicking/filling.

This is the universal fallback for anything without a dedicated tool: taking a quiz, filling a form, uploading a file, reading a forum. Each call is stateless but the server-side Moodle state persists.

Action objects (executed in order): {"type":"click","selector":"text=Attempt quiz now"} {"type":"fill","selector":"#id_answer","value":"42"} {"type":"select","selector":"select[name=x]","value":"1"} {"type":"check","selector":"input[value=1]"} {"type":"set_file","selector":"input[type=file]","value":"/path/file.pdf"} {"type":"press","value":"Enter"} {"type":"goto","url":"/mod/quiz/attempt.php?attempt=..."} {"type":"wait","value":1000} {"type":"wait_for","selector":".que"} {"type":"scroll","value":800}

Returns the page title, URL, readable text, and all visible form elements (with names/labels/options) plus optional screenshot path. JavaScript confirm/alert dialogs are accepted automatically.

Args: url: page to open (path or full university URL). actions: optional list of actions to perform before reading the page. screenshot: save a PNG screenshot and return its path.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "url": "<url>"
    },
    "name": "moodle_browser"
  }
}

Input Schema

NameRequiredDescriptionDefault
urlYes
actionsNo
screenshotNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.5.1

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description does substantial work: it discloses that calls are stateless while server-side Moodle state persists, that actions execute in order, that JS confirm/alert dialogs are auto-accepted, and what the response contains. It does not state login/session prerequisites or selector failure/timeout behavior, so it is not fully complete for a browser automation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and fallback role, then uses compact action examples and a short Args section. Its length is justified because the input schema provides almost no parameter documentation and the action vocabulary is central to correct use.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex browser tool with no output schema, and the description explains the return contents, action execution model, state persistence, and dialog handling. It is missing operational prerequisites such as whether a Moodle login session is required and what happens on selector failures or timeouts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the Args section defines url as a path or full university URL, explains that actions is an optional ordered list, and says screenshot saves a PNG and returns its path. The action-object examples also document the meaningful fields for click, fill, select, check, set_file, press, goto, wait, wait_for, and scroll.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence specifies the verb (browse), resource (any Moodle page), execution mode (real headless browser), and optional interactions. It also explicitly positions itself as the universal fallback, which distinguishes it from dedicated siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit selection rule: use this as the universal fallback for anything without a dedicated tool. It also names representative use cases such as quizzes, forms, uploads, and forums, so an agent knows when to reach for this general browser tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.