qualien-mcp
Officialqualien-mcp is a composite MCP gateway for QA/SDET work that exposes Playwright browser automation and filesystem tools behind one connection, with many more testing-relevant servers configurable.
Browser automation (Playwright): navigate pages, click, type, fill forms, hover, drag, select options, manage tabs, handle dialogs, emulate media, evaluate JavaScript, take screenshots, capture accessibility snapshots, inspect network requests and console messages, upload/drop files, and wait for text or timeouts.
File system operations: read/write/edit files, read media files, list directories (with sizes), create directories, move/rename files, search files, get file info, view directory trees, and list allowed directories.
Gateway features: single endpoint for multiple MCP servers, namespaced tools (
playwright__…,filesystem__…), per-server and per-tool allow/deny curation, centralized logging, and clean child-process lifecycle management.Safe-by-default guardrails: filesystem roots restriction, read-only database enforcement, destructive infra tool blocking, and configurable overrides.
Configurable catalog: enable 21+ testing-relevant servers (GitHub, Jira, Postgres, MySQL, Slack, Docker, Kubernetes, OpenAPI, Figma, Confluence, Azure DevOps, Selenium, WebDriverIO, BrowserStack, MS-365, Sentry, etc.) via
qualien-mcp.config.json.Remote and OAuth support: connect to remote HTTP MCP servers (e.g., GitHub) with per-user device-flow login and local credential storage.
Composite QE tools:
qe__verify_api_vs_dbfor end-to-end API↔DB consistency checks (available when a database server is connected), with more planned (repro-from-Jira, page-object-from-URL, flaky triage).
Provides tools to manage Docker containers, with destructive operations blocked by default for safety.
Enables reading Figma designs using a FIGMA_API_KEY.
Integrates with GitHub's hosted MCP to handle pull requests, issues, and code review, with OAuth login support.
Provides tools to read and update Jira issues using an Atlassian API token.
Allows inspecting and operating a Kubernetes cluster using the local kubeconfig, with destructive commands blocked by default.
Provides SQL access to MySQL databases for validating backend data, read-only by default with write/DDL operations blocked.
Enables reading and posting Slack messages using a Slack token.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@qualien-mcpOpen the login page in Playwright, screenshot it, and compare with the fixture file."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
qualien-mcp
One MCP server that gives your AI assistant a QA toolkit: Playwright, your test files, GitHub, Jira, Postgres and more, behind a single connection.
qualien-mcp is a composite MCP gateway for SDET / QE work. It aggregates Model Context Protocol servers behind one connection, with a curated catalog of 21 testing-relevant servers, per-tool allow/deny, and read-only-by-default guardrails. Add one server to Claude Code, Claude Desktop, Cursor or VS Code instead of five.
npx qualien-mcpOut of the box it serves the QE starter pair: Playwright MCP (browser automation, DOM, screenshots) and Filesystem MCP (read/edit project files, page objects, test utils), with zero config. Tools are exposed to your assistant namespaced as playwright__… and filesystem__….
Why a gateway?
Your assistant can already connect to many MCP servers directly — so a gateway earns its place by doing what a pile of servers can't:
One endpoint to add to any client (Claude Code, Claude Desktop, Cursor, …).
Curation — enable/disable per server and per tool. Fewer, better-named tools = better tool-selection by the model (dumping 200 tools at it makes it worse).
One routing/logging surface — every call is logged to stderr with the downstream, tool, and latency.
Clean lifecycle — spawns each downstream as a child process and tears them all down on exit (no orphaned browser processes).
Curated for QE — an opinionated SDET toolkit, not a generic proxy.
Related MCP server: Multi-MCP Hub
Use it with your assistant
Claude Code:
claude mcp add qualien -- npx -y qualien-mcpor in .mcp.json / user settings:
{
"mcpServers": {
"qualien": { "command": "npx", "args": ["-y", "qualien-mcp"] }
}
}Claude Desktop (claude_desktop_config.json) and Cursor (~/.cursor/mcp.json or .cursor/mcp.json): the same shape under mcpServers.
Claude Desktop extension: download qualien-mcp-<version>.mcpb from the latest release and open it. Claude Desktop asks for a project folder: the Filesystem tools are limited to it, and a qualien-mcp.config.json inside it turns on more servers. Also listed on Smithery.
VS Code (.vscode/mcp.json):
{
"servers": {
"qualien": { "command": "npx", "args": ["-y", "qualien-mcp"] }
}
}That single entry gives your assistant every tool from every aggregated server.
Add more servers
Drop a qualien-mcp.config.json in your working directory (or pass --config <path>). Entries merge over the built-in defaults — redefine a key to change it, or set enabled: false to turn a default off. No new release needed.
{
"servers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/abs/path/to/allow"]
},
"sequential-thinking": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
},
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest"]
},
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"],
"tools": { "deny": ["browser_close"] }
}
}
}See qualien-mcp.config.example.json for the full shape (command, args, env, enabled, tools.allow / tools.deny).
Built-in catalog
qualien-mcp ships a curated catalog of 21 known servers (each verified against npm), so you enable one by key with just your secrets — no need to remember packages or commands:
{
"servers": {
"chrome-devtools": { "enabled": true },
"postgres": { "enabled": true, "env": { "DATABASE_URI": "postgres://…" } },
"slack": { "enabled": true, "env": { "SLACK_MCP_XOXP_TOKEN": "xoxp-…" } }
}
}Run npx qualien-mcp catalog to list them all with what each needs. Current catalog:
Key | What | Needs |
| Browser automation, DOM, screenshots | — |
| Read/edit project files | a dir to allow (default cwd) |
| PRs, issues, code review |
|
| Structured reasoning / debugging | — |
| Persistent knowledge graph | — |
| Network, console, perf, storage | — |
| SQL / validate backend data |
|
| SQL / validate backend data | MySQL env |
| Read/post Slack |
|
| Manage containers | Docker daemon |
| Inspect/operate a cluster | kubeconfig |
| Drive any REST API from its spec |
|
| Read/update Jira issues | Atlassian API token env |
| Read Figma designs |
|
| Test plans, release notes, living docs | Atlassian API token env |
| Work items, repos, pipelines, test plans | your ADO org as an arg + sign-in |
| Drive a browser via Selenium WebDriver | a browser + driver on PATH |
| Browser and native-mobile automation | — (cloud creds optional) |
| Real browser/device cloud; read test runs |
|
| Excel, Word, Outlook, Teams, SharePoint |
|
| Real user-facing errors → new tests | a Sentry auth token |
use mounts a catalog server under a different key (e.g. two databases): { "db-prod": { "use": "postgres", "enabled": true, "env": {…} } }. Anything not in the catalog you still define in full (command/args or type/url).
Remote & OAuth servers (e.g. GitHub)
Downstreams can be remote (Streamable HTTP) as well as local. A remote server is { "type": "http", "url": "…" }, and if it needs OAuth, each user logs in with their own account — tokens are stored per user at ~/.qualien-mcp/credentials.json (0600), on that user's own machine, and are never bundled, shared, or sent anywhere by qualien-mcp.
GitHub's hosted MCP is the reference case, and it needs no setup beyond one command:
Turn it on in
qualien-mcp.config.json:{ "servers": { "github": { "enabled": true } } }Authorize once:
npx qualien-mcp login github
login prints a short code and a URL; you approve it on github.com and you're done. There is no OAuth App to register and no client secret anywhere.
GitHub requires a client_secret to exchange an authorization code — PKCE does not lift that, because GitHub does not distinguish public from confidential clients. qualien-mcp ships on npm, so a secret in the package would be a published secret. The device flow is the one grant GitHub allows without a secret, and it's the grant GitHub recommends for CLIs. So qualien-mcp ships only a public client id — an identifier, not a credential — and every user's tokens are minted on, and stay on, their own machine.
To use your own GitHub OAuth App instead of the shipped one, set clientId (and enable the device flow on it under Settings → Developer settings → OAuth Apps):
{
"servers": {
"github": { "clientId": "<your client id>", "enabled": true }
}
}If a remote server isn't logged in yet, the gateway skips it with a hint (run: npx qualien-mcp login github) and still serves everything else — it never blocks startup. Servers that support dynamic client registration need no clientId at all.
Safe by default
qualien-mcp enforces guardrails centrally, before forwarding a call — so they hold no matter what the downstream permits, and composite tools can't bypass them either:
Databases are read-only —
postgres/mysqlcalls containing write/DDL SQL (INSERT/UPDATE/DELETE/DROP/…) are refused. Opt in with{ "postgres": { "readOnly": false } }.Filesystem roots —
{ "filesystem": { "roots": ["./src", "./tests"] } }refuses any call whose path argument escapes those directories.Destructive infra tools blocked —
docker/kubernetestools whose name looks destructive (delete/remove/prune/kill/…) are refused unless{ "allowDestructive": true }.Plus per-server
tools.deny/tools.allowcuration.
Honest scope: these stop an LLM from accidentally doing damage. The SQL check is keyword-based (heuristic), not a parser — it is not adversarial sandboxing. Real isolation needs the downstream's own permissions or a container.
Composite QE tools
Beyond passthrough, qualien-mcp ships tools it implements itself (namespace qe__) that orchestrate several downstreams in one call — the QE payoff of a gateway.
qe__verify_api_vs_db — end-to-end API↔DB consistency in one call. Give it two sub-calls (namespaced tools you can discover via tools/list); it runs both and diffs the payloads:
{
"api": { "tool": "openapi__getUser", "arguments": { "id": 1 } },
"db": { "tool": "postgres__query", "arguments": { "sql": "select id, name from users where id = 1" } },
"match": "subset" // every field the DB returns must match the API (default)
}
// → { "match": false, "differences": [ { "path": "name", "api": "Ann", "db": "Bob" } ], … }Composite tools appear only when their required downstreams are connected (qe__verify_api_vs_db needs a database server). More to come (repro-from-Jira, page-object-from-URL, flaky triage).
How it works
In one process, qualien-mcp is both an MCP server to your assistant and an MCP client to each downstream:
assistant ⇄ qualien-mcp ⇄ playwright-mcp
⇄ filesystem-mcp
⇄ …tools/listfans out to every downstream, filters by your curation rules, and namespaces each as<server>__<tool>.tools/callroutes by that prefix to the owning server and passes the response straight through.Resources and prompts are aggregated the same way when a downstream provides them.
A downstream that fails to start is logged and skipped — the gateway still serves the rest.
Logs go to stderr (stdout is the protocol); your host surfaces them in its MCP logs.
Roadmap
✅ Playwright + Filesystem, namespacing, curation, logging, clean lifecycle
✅ Config-driven catalog of 21 servers, remote/OAuth servers (GitHub via device flow), safe-by-default guardrails,
qe__verify_api_vs_dbNext: more composite QE tools (repro-from-Jira, page-object-from-URL, flaky triage)
Feedback
Found a bug, want a server added to the catalog, or have an idea? Email contact@qualien.ai or open an issue. qualien-mcp is part of qualien.ai, which also builds AI agents that test web apps (Olympus) and native Android apps (Pulse) from plain English.
License
MIT
Available Tools
39 toolsfilesystem__create_directoryCreate DirectoryAIdempotent
Create a new directory or ensure a directory exists. Can create multiple nested directories in one operation. If the directory already exists, this operation will succeed silently. Perfect for setting up directory structures for projects or ensuring required paths exist. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds real context beyond that: nested creation in one call, silent success when the path already exists, and confinement to allowed directories. Return/pagination behavior is not described, but an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and idempotency behavior, with no redundant sentences. The 'Perfect for...' sentence is mildly promotional but still carries usable usage context, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation tool with idempotency covered by annotations and return values covered by an output schema, the description supplies the key missing pieces: nested creation, silent success, and the sandbox restriction. What remains thin is only path-format guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there is one required parameter, so the description carries the burden of explaining the 'path' argument. It only indirectly hints at path constraints via the allowed-directories note, and says nothing about whether the path is absolute, relative, or a file-vs-directory form.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create a new directory'), and further scopes it with nested-directory creation and silent-on-exists semantics. No sibling tool in the list performs directory creation, so an agent can identify this unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage contexts ('setting up directory structures for projects or ensuring required paths exist') and states the sandbox constraint ('only works within allowed directories'). It does not name an alternative tool or an explicit when-not-to-use case, which is minor here since no sibling overlaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem__directory_treeDirectory TreeBRead-only
Get a recursive tree view of files and directories as a JSON structure. Each entry includes 'name', 'type' (file/directory), and 'children' for directories. Files have no children array, while directories always have a children array (which may be empty). The output is formatted with 2-space indentation for readability. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| excludePatterns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by detailing the output shape (name/type/children, empty children arrays for files vs directories) and the constraint that it only works within allowed directories.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence and the structural detail follows logically with no filler. It runs a bit long on output-format specifics that the output schema already covers, but every sentence is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, yet it does so adequately. However it omits any explanation of excludePatterns and gives no usage guidance relative to the many sibling listing/search tools, leaving gaps for a 2-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters. The description never mentions 'path' or 'excludePatterns' — the latter is a non-obvious optional filter whose semantics (glob? regex? relative paths?) are undocumented anywhere. Only the 'allowed directories' constraint hints at path behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Get a recursive tree view of files and directories') and states it returns a JSON structure. The 'recursive' qualifier implicitly distinguishes it from non-recursive siblings like list_directory, but it never names that alternative explicitly, so sibling differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the word 'recursive' suggests this is the tool to reach for when a full subtree is needed versus list_directory or get_file_info, but there is no explicit when-to-use, when-not-to-use, or named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem__edit_fileEdit FileADestructive
Make line-based edits to a text file. Each edit replaces exact line sequences with new content. Returns a git-style diff showing the changes made. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| edits | Yes | ||
| dryRun | No | Preview changes using git-style diff format |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds useful context beyond them: it returns a git-style diff of changes, uses exact-match replacement (so a near-miss silently fails), and is sandboxed to allowed directories.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, none wasted, with the core operation front-loaded and the return/scope facts following compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and the safety profile is carried by annotations. However, common prerequisites for this kind of edit tool (e.g., reading the file first so oldText matches) and the interaction between dryRun and the diff are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 33% schema coverage the description needs to compensate for undocumented params. It reinforces the exact-line-match semantics of edits but says nothing about 'path' and only indirectly touches dryRun (via 'returns a git-style diff'), so compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('make line-based edits to a text file') and specifies the mechanism ('replaces exact line sequences with new content'), which distinguishes it from the bare write_file sibling. It does not explicitly name write_file as the alternative, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use-this-instead-of-write_file guidance. 'Only works within allowed directories' is a constraint, not selection guidance, and 'each edit replaces exact line sequences' describes mechanics rather than when the tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem__get_file_infoGet File InfoARead-only
Retrieve detailed metadata about a file or directory. Returns comprehensive information including size, creation time, last modified time, permissions, and type. This tool is perfect for understanding file characteristics without reading the actual content. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds a useful access constraint ('Only works within allowed directories') and enumerates the returned metadata fields, which goes beyond the annotations but doesn't cover permissions/auth mechanics or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose and return contents, then the directory restriction. Minor filler in 'This tool is perfect for' but overall tight and well ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return field detail is somewhat redundant, and annotations cover safety. However, with 0% schema coverage on the sole parameter and no path-expression guidance, the definition leaves a gap an agent needs filled before calling correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema gives no semantics for the lone 'path' parameter. The description mentions 'allowed directories' but never clarifies what the path should be relative to, whether it must be absolute, or the format expected—leaving the required parameter under-specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Retrieve) and resource (metadata about a file or directory), and names exactly what is returned. It is clearly distinguishable from read_file and list_directory siblings, which read content or enumerate entries rather than fetch metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for understanding file characteristics without reading the actual content' implicitly contrasts it with read_file, but no explicit when-to-use or when-not guidance is given, nor are alternatives named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem__list_allowed_directoriesList Allowed DirectoriesARead-only
Returns the list of directories that this server is allowed to access. Subdirectories within these allowed directories are also accessible. Use this to understand which directories and their nested paths are available before trying to access files.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: subdirectories within allowed directories are also reachable, which matters for scope reasoning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the return value and scoping rule, then the usage hint. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the description covers purpose, scope, and usage. Minor room to note edge cases (e.g., empty list or access-denied), but nothing essential is missing for a zero-param discovery tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing to document and the baseline is 4. The description correctly implies a no-argument call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns the list of directories that this server is allowed to access'), which is distinct from content-listing siblings like list_directory or directory_tree. An agent can identify it as a workspace-scope discovery tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it: 'Use this to understand which directories and their nested paths are available before trying to access files.' That is clear context for invoking it first, though it names no alternative tool for related tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem__list_directoryList DirectoryARead-only
Get a detailed listing of all files and directories in a specified path. Results clearly distinguish between files and directories with [FILE] and [DIR] prefixes. This tool is essential for understanding directory structure and finding specific files within a directory. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and a closed world, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the [FILE]/[DIR] prefix convention for output and the allowed-directories restriction. It omits whether the listing is recursive or paginated, which matters next to directory_tree.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the action and output convention. 'This tool is essential for understanding directory structure' is slightly promotional filler, but nothing is redundant enough to impede selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained, and the description sensibly adds only the [FILE]/[DIR] formatting cue that the schema may not convey. Annotations carry the safety profile. The one real gap is recursion/pagination behavior relative to directory_tree, which a careful agent would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single 'path' parameter, so the description must compensate. It says the listing is for 'a specified path' and that the tool works only within allowed directories, which hints at path scoping but never says whether absolute vs relative paths are expected or how to discover allowed roots. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Get a detailed listing of all files and directories') and defines the scope as a single specified path. It stops short of distinguishing itself from the very close siblings list_directory_with_sizes and directory_tree, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Essential for understanding directory structure and finding specific files' implies the use case, and 'Only works within allowed directories' is a real constraint. But it never says when to prefer this over list_directory_with_sizes (sizes), directory_tree (recursion), or search_files (pattern matching), so the routing decision is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem__list_directory_with_sizesList Directory with SizesBRead-only
Get a detailed listing of all files and directories in a specified path, including sizes. Results clearly distinguish between files and directories with [FILE] and [DIR] prefixes. This tool is useful for understanding directory structure and finding specific files within a directory. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| sortBy | No | Sort entries by name or size | name |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=false, so safety and scope are largely covered. The description adds the useful constraint 'Only works within allowed directories' and the output-format note about [FILE]/[DIR] prefixes, but says nothing about permissions failures, symlink handling, or depth behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the behavior and output format. The middle 'useful for understanding directory structure' sentence is the weakest and is close to filler, but nothing is bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a readOnly/openWorld=false annotation pair and an output schema present, the definition covers what an agent needs to invoke it: path scope, size inclusion, and the allowed-directory restriction. The one real hole is sibling differentiation from list_directory and directory_tree.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: sortBy carries an enum and description in the schema, while path has none. The description only alludes to a 'specified path' and mentions sizes, adding no format, absolute-vs-relative, or sort-behavior detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb and resource ('Get a detailed listing of all files and directories in a specified path, including sizes') and the differentiating trait versus a plain listing. However, it never acknowledges the sibling filesystem__list_directory, so an agent cannot tell from the description alone which of the two listing tools to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage statement is 'This tool is useful for understanding directory structure and finding specific files within a directory,' which is generic enough to apply to list_directory, directory_tree, and search_files alike. There is no when-to-use condition, no exclusion, and no named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem__move_fileMove FileADestructive
Move or rename files and directories. Can move files between directories and rename them in a single operation. If the destination exists, the operation will fail. Works across different directories and can be used for simple renaming within the same directory. Both source and destination must be within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| destination | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the mutation semantics are covered. The description adds genuinely new behavioral facts: the operation fails if the destination already exists (a non-obvious failure mode) and both paths must fall within allowed directories (a sandbox/auth boundary). It stops short of describing atomicity or behavior across filesystems.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior and the failure condition are front-loaded and easy to scan. However, the cross-directory/rename idea is stated twice ('Can move files between directories and rename them' and 'Works across different directories and can be used for simple renaming'), which is mild redundancy in an otherwise tight description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and annotations cover the safety profile. The description supplies the key behavioral facts an agent needs (rename vs move, fail-on-existing-destination, allowed-directory constraint). Only path-format and atomicity details are missing, which are minor for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 2 parameters at 0% schema description coverage, so the description must carry the load. It does state a constraint on both (source and destination must be within allowed directories), but it never explains path formats, whether relative paths are accepted, or whether source/destination may be files vs directories. Partial compensation, not full.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Move or rename files and directories') and clarifies scope: cross-directory moves and in-place renaming. This is clearly distinguishable from siblings like write_file, edit_file, or create_directory without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than prescribed: 'can be used for simple renaming within the same directory' tells the agent one valid scenario, and the destination-must-not-exist rule implicitly tells it when the call will fail. However, no alternative tool is named and there is no explicit when-not-to-use guidance (e.g., use copy instead if the source should be retained).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem__read_fileRead File (Deprecated)ARead-only
Read the complete contents of a file as text. DEPRECATED: Use read_text_file instead.
| Name | Required | Description | Default |
|---|---|---|---|
| head | No | If provided, returns only the first N lines of the file | |
| path | Yes | ||
| tail | No | If provided, returns only the last N lines of the file |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds the deprecation status and the text-decoding behavior, but says nothing about encoding failures, binary files, or size limits. With annotations carrying safety, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, function first and deprecation warning second, with zero filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the deprecation redirect is present. It stops short of noting that head/tail still apply or that the tool may be removed, which is minor given the tool's deprecated status.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, with head/tail already documented in the schema. The description's 'complete contents' actually undercuts those options without explaining how they interact. Baseline 3 is correct since the schema does most of the parameter work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read the complete contents of a file') plus the output form ('as text'), and explicitly names the sibling that replaces it. An agent can distinguish this from read_text_file without inspecting either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly declares deprecation and names the alternative tool to use instead ('Use read_text_file instead'), which is exactly the when-not-to-use / alternative routing an agent needs. Nothing about tool selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem__read_media_fileRead Media FileARead-only
Read a file and return it as a base64-encoded content block with its MIME type. Image and audio files are returned as image/audio content; any other file type is returned as an embedded resource. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the base64 encoding, MIME type inclusion, the content-type branching (image/audio vs embedded resource), and the allowed-directory restriction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the core purpose and return behavior front-loaded, followed by the branching detail and the directory constraint. No filler, though the return-format sentence is longer than strictly necessary given an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema present, the description covers purpose, output shape, and access constraints, so an agent has enough to invoke it correctly. The only real gap is path format semantics, which the empty schema description leaves undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single 'path' parameter carries no description, so the description is the only source of parameter meaning. It says nothing about path format (absolute vs relative) or resolution rules. With only one self-evident parameter, this is adequate but not compensating for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Read a file') plus the distinctive output form ('base64-encoded content block with its MIME type'), which separates it from read_text_file. It does not explicitly name a sibling to contrast with, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the media-oriented return behavior, and the constraint 'Only works within allowed directories' gives a boundary condition. However, it never states when to prefer this over read_file, read_text_file, or read_multiple_files, leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem__read_multiple_filesRead Multiple FilesARead-only
Read the contents of multiple files simultaneously. This is more efficient than reading files one by one when you need to analyze or compare multiple files. Each file's content is returned with its path as a reference. Failed reads for individual files won't stop the entire operation. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | Array of file paths to read. Each path must be a string pointing to a valid file within allowed directories. |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavior beyond the readOnlyHint/openWorldHint annotations: partial-failure tolerance ("failed reads for individual files won't stop the entire operation") and the output convention that each file's content is paired with its path. It does not mention size limits or truncation behavior, but with annotations and an output schema covering the rest, this is solid added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then rationale, then output shape, then failure semantics, then the directory constraint — four tight sentences with no filler. Slightly more verbose than strictly necessary given the annotations, but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema, full schema coverage, and safety annotations, the description is complete: it covers purpose, efficiency rationale, partial-failure behavior, and the allowed-directory restriction. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter and schema description coverage is 100%, so the schema already explains that paths is an array of valid file paths within allowed directories. The description adds no format, syntax, or ordering detail beyond that, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) applied to a specific resource (multiple files) and explicitly scopes it as simultaneous reads, distinguishing it from the sibling read_file/read_text_file/read_media_file tools. An agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"More efficient than reading files one by one when you need to analyze or compare multiple files" gives a clear use condition and implicitly points to the single-file siblings as the alternative. It stops short of an explicit when-not rule (e.g., use read_file for a single path), so it is strong but not complete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem__read_text_fileRead Text FileARead-only
Read the complete contents of a file from the file system as text. Handles various text encodings and provides detailed error messages if the file cannot be read. Use this tool when you need to examine the contents of a single file. Use the 'head' parameter to read only the first N lines of a file, or the 'tail' parameter to read only the last N lines of a file. Operates on the file as text regardless of extension. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| head | No | If provided, returns only the first N lines of the file | |
| path | Yes | ||
| tail | No | If provided, returns only the last N lines of the file |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint and closed-world operation, and the description adds real context on top: encoding handling, detailed error behavior on failure, and the 'only works within allowed directories' scope constraint. It stops short of describing output/pagination format, but the additions are genuine.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and well organized, but 'Operates on the file as text regardless of extension' largely repeats the opening 'as text' clause and is minor redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-format detail is unnecessary; the description covers read-only nature, encoding, error behavior, partial reads, and directory scoping. It is nearly complete for a simple read tool, with only the sibling differentiation left thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: head and tail are already documented in the schema, and the description usefully restates that they read first/last N lines, while 'path' remains undescribed in both places (though self-explanatory). The description adds little beyond the schema for the parameters it does cover.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Read the complete contents of a file... as text') and clarifies text handling 'regardless of extension', which helps separate it from a media-reading sibling. It never explicitly names the alternative tools (read_file, read_media_file, read_multiple_files), so the agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this tool when you need to examine the contents of a single file' gives an implied when-to-use and the head/tail sentence sketches partial-read scenarios. However, no sibling is named as an alternative and no explicit exclusions (e.g., binary/media, multiple files at once) are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem__search_filesSearch FilesARead-only
Recursively search for files and directories matching a pattern. The patterns should be glob-style patterns that match paths relative to the working directory. Use pattern like '.ext' to match files in current directory, and '**/.ext' to match files in all subdirectories. Returns full paths to all matching items. Great for finding files when you don't know their exact location. Only searches within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| pattern | Yes | ||
| excludePatterns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuine behavioral context beyond that: results are full paths to all matches, and the search is confined to allowed directories (with no traversal escape). It says nothing about result volume, ordering, or truncation on large trees, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core action and then the pattern syntax, with no redundant restatement of the title. The pattern guidance at the top is the highest-value content and appears early. Slightly long, but each sentence contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The pattern semantics are covered thoroughly and an output schema exists so return values needn't be detailed, but with 0% schema coverage the description leaves 'path' and 'excludePatterns' entirely unexplained. An agent can call it, but must guess at the exclude list format and whether path is a base directory or a file.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It does this well for the trickiest parameter, explaining that patterns are glob-style, path-relative, with '*.ext' versus '**/*.ext' semantics. However, 'path' and 'excludePatterns' are never mentioned or explained, leaving two of three parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Recursively search for files and directories') plus the matching mechanism (glob patterns). The 'recursively' qualifier implicitly separates it from list_directory and directory_tree, though no sibling is named explicitly, which keeps it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Great for finding files when you don't know their exact location' gives a clear positive use context, and 'Only searches within allowed directories' sets a boundary. No alternatives (e.g., list_directory for a single level, directory_tree for a full hierarchy) are named, so it stops short of explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filesystem__write_fileWrite FileADestructiveIdempotent
Create a new file or completely overwrite an existing file with new content. Use with caution as it will overwrite existing files without warning. Handles text content with proper encoding. Only works within allowed directories.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description's reinforcement that it overwrites 'without warning' adds confirming context. It also adds the 'Only works within allowed directories' scope constraint and encoding behavior, which go beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences with the core action first. The encoding sentence is marginally useful but borders on filler, keeping it just short of ideal economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a mutating write tool with annotations covering the safety profile, the description covers creation, overwrite behavior, encoding, and directory scope adequately; only parameter-level detail is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for both params, so the description carries the burden but only obliquely touches path semantics via 'allowed directories.' The 'content' parameter and path format are left entirely unexplained, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new file or completely overwrite an existing file') with clear scope. It distinguishes create-vs-overwrite behavior, but never names the sibling it should be preferred over, such as edit_file for partial changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The warning 'Use with caution as it will overwrite existing files without warning' implies this is for full writes over incremental edits, but no explicit when-to-use or when-not-to-use guidance or named alternative (edit_file) is given. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_clickCDestructive
Perform click on a web page
| Name | Required | Description | Default |
|---|---|---|---|
| button | No | Button to click, defaults to left | |
| target | Yes | Exact target element reference from the page snapshot, or a unique element selector | |
| element | No | Human-readable element description used to obtain permission to interact with the element | |
| modifiers | No | Modifier keys to press | |
| doubleClick | No | Whether to perform a double click instead of a single click |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and readOnlyHint=false. The description adds no additional behavioral context beyond stating the action. It does not disclose side effects (e.g., navigation, page state changes) or permission requirements, relying entirely on the 'destructive' hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise and front-loaded. However, it is too minimal to be informative; space could be better used to add context without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, no output schema, and multiple sibling tools, the description is very incomplete. It does not explain what happens after clicking (e.g., waiting for navigation, return value), the scope of interaction (openWorldHint=true), or how the 'target' parameter relates to the 'element' parameter. Significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The tool description adds no extra meaning to parameters beyond what the schema already provides. A baseline of 3 is appropriate since the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Perform click on a web page' clearly states the verb and resource, but it is vague and does not differentiate from sibling tools like hover, double-click (which is a parameter), or select_option. It is not a tautology but lacks specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., playwright__browser_hover, playwright__browser_drag). It does not mention when not to use it or any prerequisites. Without such guidance, an agent may select this tool inappropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_closeCDestructive
Close the page
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'Close the page' while annotations (title: 'Close browser', destructiveHint: true, readOnlyHint: false) indicate it closes the browser. This contradiction between description and annotations makes the behavioral intent unclear. The description also fails to detail what state changes occur, confirmation steps, or whether the entire session is terminated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (single sentence) but underspecified. While brevity is valued, the content is too sparse to be effectively informative, especially given the contradiction with annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is simple with no parameters and no output schema, the description should at least unambiguously state what is closed (browser vs page) and any notable side effects. It fails to do so, leaving the agent confused about the tool's exact scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters (schema coverage 100% with empty object), so the description does not need to add parameter information. The baseline for zero parameters is 4, and the description does not detract from this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Close the page', which is a verb+resource, but the tool name and annotation title indicate it closes the browser. This mismatch creates ambiguity about the actual resource being closed, lowering clarity. It does distinguish from siblings since no other sibling closes anything, but the inconsistency hurts the score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as navigating away or using a different browser management tool. There is no context on prerequisites, side effects, or situations to avoid, leaving the agent to infer usage solely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_console_messagesCRead-only
Returns all console messages
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Return all console messages since the beginning of the session, not just since the last navigation. Defaults to false. | |
| level | Yes | Level of the console messages to return. Each level includes the messages of more severe levels. Defaults to "info". | info |
| filename | No | File name to save the console messages to. Relative file names are resolved against the workspace root. If not provided, messages are returned as text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds nothing behavioral on top of that — notably it omits that the default scope is 'since last navigation' and that output can be written to a file, both of which change how an agent should call it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste, but it is terse to the point of under-specification rather than efficiently complete. Shortness here comes from omission, not economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a 100%-documented schema and annotations covering safety, the description need not carry return-value detail (no output schema exists). Still, for a tool whose default scope depends on session/navigation state, the one-line description leaves the agent without the context it needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the 'all', 'level', and 'filename' params each documented in the schema, so the baseline is 3. The description adds no meaning beyond the schema, and its wording ('all console messages') arguably conflicts with the schema default where 'all' is false.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Returns') and resource ('console messages'), which is unambiguous against most siblings. It does not distinguish itself from a near sibling such as browser_network_requests or explain scope (session vs navigation), so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g. 'call after browser_navigate'), and no mention of alternatives for related data like network requests. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_dragBDestructive
Perform drag and drop between two elements
| Name | Required | Description | Default |
|---|---|---|---|
| endTarget | Yes | Exact target element reference from the page snapshot, or a unique element selector | |
| endElement | No | Human-readable target element description used to obtain the permission to interact with the element | |
| startTarget | Yes | Exact target element reference from the page snapshot, or a unique element selector | |
| startElement | No | Human-readable source element description used to obtain the permission to interact with the element |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as destructiveHint: true and openWorldHint: true, indicating the operation modifies state and relies on external context. The description does not elaborate on these or mention any other behavioral details (e.g., element visibility requirements, coordinate-based vs. element-based drag). It provides marginal added value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is direct and to the point. No wasted words, but could potentially include more context without becoming overly long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a drag-and-drop operation (interaction with page elements, potential for state changes), and lack of output schema, the description is insufficient. It does not explain how elements are identified (via snapshot references), what happens to intermediate mouse events, or how errors are handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, meaning all parameters have descriptions in the schema. The description does not add extra meaning beyond what is already in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a 'drag and drop' action between two elements. The verb 'Perform' and resource 'drag and drop' are specific. It distinguishes from siblings like 'click' and 'hover', but not explicitly against 'browser_drop' which might be related.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. For example, 'browser_drop' is a sibling with potentially overlapping functionality, and there is no mention of prerequisites like needing a page snapshot or permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_dropADestructive
Drop files or MIME-typed data onto an element, as if dragged from outside the page. At least one of "paths" or "data" must be provided.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Data to drop, as a map of MIME type to string value (e.g. {"text/plain": "hello", "text/uri-list": "https://example.com"}). | |
| paths | No | Absolute paths to files to drop onto the element. | |
| target | Yes | Exact target element reference from the page snapshot, or a unique element selector | |
| element | No | Human-readable element description used to obtain permission to interact with the element |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description adds the behavioral context of simulating a drag from outside the page. However, it does not mention potential side effects like triggering page navigation, file downloads, or that the element must be a valid drop target. The description adds moderate value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The first sentence defines the core action, the second adds a critical constraint. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality and constraints. It does not explain the permission mechanism for the 'element' parameter (covered in schema) or the need for a valid drop target, but for a specialized tool with a detailed schema, it is sufficiently complete. No output schema exists, but the return value is implied by the action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline is 3. The description adds a usage constraint ('at least one of paths or data must be provided') that is not in the schema's required list, and clarifies the two modes. This adds meaningful value beyond the parameter descriptions in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'drop' and the resource 'files or MIME-typed data onto an element'. It distinguishes from sibling tools like file_upload by specifying 'as if dragged from outside the page', and clarifies the two input modes with the constraint 'at least one of paths or data must be provided'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly distinguishes from file upload (for input elements) and drag (within-page), but does not explicitly state when to use this tool versus alternatives. It does provide a clear prerequisite: at least one of 'paths' or 'data' must be provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_emulate_mediaADestructive
Emulate CSS media features for the page, for example switch between the light and dark color scheme. Omitted parameters are left unchanged; null clears an override.
| Name | Required | Description | Default |
|---|---|---|---|
| media | No | Changes the CSS media type of the page | |
| contrast | No | Emulates the prefers-contrast media feature | |
| colorScheme | No | Emulates the prefers-color-scheme media feature | |
| forcedColors | No | Emulates the forced-colors media feature | |
| reducedMotion | No | Emulates the prefers-reduced-motion media feature |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the agent knows this mutates page state. The description usefully adds the state model ('omitted parameters are left unchanged; null clears an override'), but it never explains the scope/lifetime of the override (per page? per session?) or that emulation persists and affects later screenshots/snapshots.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the core purpose is front-loaded ahead of the override-semantics detail. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety and no output schema to explain, the definition is essentially complete for calling the tool. The only real gap is that an agent cannot tell how long the emulation persists or whether it must be reset, which matters for a stateful, destructive-hinted tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so per-parameter meaning (media, contrast, colorScheme, forcedColors, reducedMotion) is already documented in the schema, establishing the baseline of 3. The description adds non-obvious cross-parameter semantics — omission preserves current values while explicit null clears an override — which is genuinely useful information the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('emulate') and resource ('CSS media features for the page') and grounds it with a concrete example (light/dark color scheme). This is clearly distinguishable from render-adjacent siblings like browser_resize, which changes viewport dimensions rather than media feature emulation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example case ('switch between the light and dark color scheme') implies the testing scenario in which this tool is used, but there is no explicit when-to-use/when-not guidance and no named alternative. Nothing tells an agent when emulation is preferable to, say, resizing or evaluating CSS directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_evaluateCDestructive
Evaluate JavaScript expression on page or element
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Exact target element reference from the page snapshot, or a unique element selector | |
| element | No | Human-readable element description used to obtain permission to interact with the element | |
| filename | No | File name to save the result to. Relative file names are resolved against the workspace root. If not provided, result is returned as text. | |
| function | Yes | () => { /* code */ } or (element) => { /* code */ } when element is provided |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the safety profile is covered by structured data. The description adds nothing beyond that: no mention that arbitrary JS can mutate page state, no note about the permission requirement for element targets, and no guidance on result handling. Baseline low because it contributes zero behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste, which is structurally clean. It is arguably too terse for a destructive, arbitrary-code-execution tool, but it is not padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that runs arbitrary JavaScript with destructiveHint=true and no output schema, the description should at least cover the permission flow for element targets or the difference from browser_run_code_unsafe. Neither is addressed, so an agent cannot confidently choose or invoke it correctly on its own.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (target, element, filename, function) are already documented in the schema with useful detail. The description adds no parameter information beyond the schema, which is acceptable at baseline 3 but earns no extra credit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (evaluate) and resource (JavaScript expression on page or element), so the agent knows the operation immediately. However, it does nothing to distinguish it from the sibling playwright__browser_run_code_unsafe, which also executes code in the browser, leaving the boundary between the two unclear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over browser_run_code_unsafe, no prerequisites, and no note that element-targeted evaluation triggers a permission flow (implied by the 'element' parameter). The 'on page or element' phrasing hints at two modes but never explains which to use when.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_file_uploadCDestructive
Upload one or multiple files
| Name | Required | Description | Default |
|---|---|---|---|
| paths | No | The absolute paths to the files to upload. Can be single file or multiple files. If omitted, file chooser is cancelled. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive, non-read-only, and open-world behavior. The description adds no behavioral context beyond 'upload', such as side effects, interaction with the file chooser dialog, or state changes. The description adds minimal value over annotations for understanding implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (two words plus a brief schema). It front-loads the verb and resource. However, it could be expanded slightly to include context without being verbose, but for a simple tool this is adequate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter set, high schema coverage, and presence of annotations, the description is minimally adequate. It covers the basic action but lacks information about when the file chooser appears, whether the element must be an input[type=file], or how it interacts with other browser tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'paths', which explains absolute paths, single/multiple files, and cancellation. The tool description adds no additional parameter meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Upload one or multiple files' clearly states the verb (upload) and resource (files). It distinguishes from sibling browser tools like navigate, click, and filesystem tools because 'upload' is specific to file selection in a browser context. However, it does not specify the target (e.g., to a file input element), which slightly reduces clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. Siblings include filesystem write tools, but no context is provided about prerequisites (e.g., a file input must be focused) or when to avoid using it. The schema mentions cancellation, but overall usage direction is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_fill_formBDestructive
Fill multiple form fields
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Fields to fill in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and readOnlyHint=false, so the agent knows this is a write operation. The description adds no further behavioral details (e.g., that it modifies the page, requires user interactions, or handles errors). With annotations present, the bar is lower, but the description still adds no value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It is front-loaded and efficient. However, it could be slightly more informative without sacrificing brevity, earning a 4 rather than 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested array with 5 sub-properties, no output schema), the description is far too minimal. It does not mention that the tool requires target references from a page snapshot, how it handles multiple fields, or what happens on failure. The schema provides structure but the description fails to contextualize the tool's purpose and usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all parameters clearly (e.g., target, name, type, value). The description does not add any additional meaning or examples beyond what the schema provides. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Fill multiple form fields' clearly states the action (fill) and resource (form fields). It distinguishes from sibling tools like 'type' (single field) and 'click' by implying batch operation, though it could be more explicit about the 'multiple' aspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives (e.g., 'type' for single fields, 'click' for interactive elements). No prerequisites, such as needing a page snapshot or target references, are mentioned. The description is too terse to provide usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_findARead-only
Search the accessibility snapshot of the current page for text or a regular expression. Returns matching snapshot nodes with a few lines of surrounding context (like search snippets), each shown under its path from the root of the tree, which is cheaper than capturing the whole snapshot when you only need to locate an element and its ref.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Plain text to search for in the page snapshot (case-insensitive substring match). Provide either text or regex, not both. | |
| regex | No | Regular expression to search for in the page snapshot. Matching is case-sensitive by default; wrap the pattern in slashes to add flags, e.g. "/error/i" for case-insensitive. Provide either text or regex, not both. | |
| filename | No | Save results to a file instead of returning them in the response. Relative file names are resolved against the workspace root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, destructiveHint false, openWorldHint). The description adds real value beyond that: it describes the return shape (matching nodes with surrounding context, each under its path from the root), which matters since there is no output schema. It does not mention zero-match behavior, but that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads what is searched and then layers the return format and the cost rationale. No filler, every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description responsibly explains what comes back and in what structure, and annotations carry the safety semantics. It omits edge cases like no-match results or how filename output differs from inline results, keeping it just short of fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (text, regex, filename) are fully documented in the schema, including the text/regex mutual-exclusion rule. The description adds nothing parameter-specific, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (the accessibility snapshot of the current page) plus the accepted inputs (text or regex). It also implicitly but clearly distinguishes itself from browser_snapshot by positioning itself as the cheaper locator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"which is cheaper than capturing the whole snapshot when you only need to locate an element and its ref" gives a clear condition for choosing this over the snapshot sibling. It stops short of naming browser_snapshot explicitly, so the agent must infer the alternative, but the when-to-use guidance is solid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_handle_dialogBDestructive
Handle a dialog
| Name | Required | Description | Default |
|---|---|---|---|
| accept | Yes | Whether to accept the dialog. | |
| promptText | No | The text of the prompt in case of a prompt dialog. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, indicating mutation potential. The description adds no further behavioral context beyond the title, but does not contradict annotations. No additional detail on what happens (e.g., dialog closed, page affected) is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, efficient and front-loaded. However, it is minimal and could say more without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 2 parameters, no output schema, and annotations are present but basic. The description does not explain return behavior or error conditions, leaving gaps about what the tool outputs or requires.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are fully described in the schema. The description adds no additional meaning beyond the schema, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'handle a dialog', which identifies a specific browser interaction. However, it does not distinguish from siblings like invoking alerts or prompts, and the term 'dialog' is broad but implied by context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives is provided. The description lacks context about prerequisites (e.g., dialog must be present) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_hoverCDestructive
Hover over element on page
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Exact target element reference from the page snapshot, or a unique element selector | |
| element | No | Human-readable element description used to obtain permission to interact with the element |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint: true and openWorldHint: true, but the description adds no behavioral context beyond the obvious. It does not disclose that hovering may trigger mouseover events, change UI state, or require the element to be visible. The description fails to enrich the understanding provided by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that immediately conveys the core function. It is not verbose, but it is also not overly terse to the point of being useless. It earns its place by stating the purpose clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple hover tool, the description is too sparse. It lacks any context about return values, prerequisites (e.g., page loaded, element visible), side effects, or when to use hover over other interactions. Given the tool's 2 parameters and no output schema, the description should provide more guidance to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – both parameters (target and element) are already well-described in the schema. The tool description 'Hover over element on page' adds no additional meaning or usage hints for the parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Hover over element on page' clearly states the action (hover) and the target (element on a page). It distinguishes from sibling tools by naming a specific interaction, but it is brief and could be more precise about the nature of the hover (e.g., triggering mouse events).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool vs. alternatives like playwright__browser_click, playwright__browser_drop, or playwright__browser_find. It does not mention prerequisites, constraints, or scenarios where hovering is appropriate. This is a significant gap given the large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_network_requestARead-only
Returns full details (headers and body) of a single network request, or a single part if part is set. Use the number from browser_network_requests.
| Name | Required | Description | Default |
|---|---|---|---|
| part | No | Return only this part of the request. Omit to return full details. | |
| index | Yes | 1-based index of the request, as printed by browser_network_requests. | |
| filename | No | File name to save the result to. Relative file names are resolved against the workspace root. If not provided, output is returned as text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds that the return contains headers and body, but says nothing about missing bodies, index-out-of-range handling, or output size, so value beyond annotations is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loading the primary behavior and appending the dependency on the sibling tool. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with full schema coverage and safety annotations, the definition is nearly complete and correctly cross-references the sibling that produces the index. The only gap is the return-value shape, which matters slightly more given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter (part, index, filename) already carries a description, so the schema does the heavy lifting. The description reinforces what `part` does but adds no syntax or format detail the schema lacks – baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns full details of a single network request') with clear scope, and names the sibling browser_network_requests as the source of the index. An agent can immediately distinguish this single-request getter from the list tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the concrete workflow prerequisite ('Use the number from browser_network_requests'), which tells the agent where the required index comes from. It doesn't state when to omit `part` versus requesting a part beyond the inline hint, so no explicit exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_network_requestsARead-only
Returns a numbered list of network requests since loading the page. Use browser_network_request with the number to get full details.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Only return requests whose URL matches this regexp (e.g. "/api/.*user"). | |
| static | Yes | Whether to include successful static resources like images, fonts, scripts, etc. Defaults to false. | |
| filename | No | File name to save the network requests to. Relative file names are resolved against the workspace root. If not provided, requests are returned as text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds that the output is numbered and how to follow up, but omits notable behavior such as the file-writing side effect when filename is supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste. The core behavior (numbered list) is front-loaded and the follow-up path is stated immediately after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly conveys the return shape (numbered list) and the drill-down route, and annotations cover safety. The one material gap is that the filename parameter's file-writing behavior is not surfaced as a behavioral consequence of calling the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (filter regexp, static, filename) are already documented in the schema. The description adds no parameter syntax or format detail beyond the schema, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns a numbered list of network requests since loading the page') with scope ('since loading the page'). It clearly distinguishes itself from the sibling browser_network_request, which it explicitly names as the drill-down tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use browser_network_request with the listed number to get full details, giving the agent a clean two-step workflow. It does not, however, describe when to reach for this listing tool versus alternatives, or when to use filter/static.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_press_keyCDestructive
Press a key on the keyboard
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Name of the key to press or a character to generate, such as `ArrowLeft` or `a` |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is minimal and adds little beyond the annotations. Annotations already show destructiveHint=true and readOnlyHint=false, implying mutation, but the description does not explain what side effects occur (e.g., navigation, form submission, or triggering shortcuts). Without annotations, this would score lower, but the descriptions should supplement the annotations with context like "This can trigger browser keyboard shortcuts or activate form submission." The description merely restates the obvious.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it is too terse and lacks structure. It does not front-load crucial details like supported key formats or behavioral notes. The sentence is earned, but it could be expanded slightly to improve completeness without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the destructiveHint=true annotation and the lack of an output schema, the description should explain what happens after the key press (e.g., does the browser navigate? Does a form submit?). With many sibling tools and only one parameter, the description is inadequate for an AI agent to fully understand when and how to use it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'key', and its description is comprehensive: 'Name of the key to press or a character to generate, such as `ArrowLeft` or `a`'. The tool description adds no further meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description "Press a key on the keyboard" clearly identifies the verb (press) and resource (key on keyboard), but it does not distinguish this tool from similar sibling tools like playwright__browser_type or playwright__browser_click. The purpose is clear but lacks specificity about what types of keys or combinations are supported.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like playwright__browser_type (for typing text) or playwright__browser_click (for mouse actions). It does not explain if this tool is suitable for key combinations (e.g., Ctrl+C), special keys, or single character keys, nor does it mention prerequisites such as having a focused element. The explicit destructiveHint=true annotation suggests it may cause state changes, but the description does not elaborate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_resizeADestructive
Resize the browser window
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | Width of the browser window | |
| height | Yes | Height of the browser window |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations: destructiveHint=true indicates state change, which resizing implies. However, it adds no additional behavioral context beyond what the annotations already convey. The description is consistent and sufficient when combined with annotations, but it does not elaborate on side effects like viewport changes or page re-layout.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of five words with no wasted words. It is front-loaded and immediately understandable. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (two numeric parameters, no output schema), the description is borderline adequate. It does not specify units (pixels), constraints, or how resizing interacts with the page. While the core action is clear, additional context like 'changes the viewport size' or 'affects page layout' would improve completeness without becoming verbose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters having descriptions (width and height). The description does not add any meaning beyond the schema; it simply restates the action. Baseline 3 is appropriate as the schema already documents the parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Resize the browser window' is clear, specific, and uses a verb-resource pair. It uniquely identifies the action among sibling tools, as no other tool handles resizing. The purpose is immediately obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, constraints, or when resizing is appropriate. Sibling tools like 'playwright__browser_navigate' or 'playwright__browser_take_screenshot' are unrelated, but no explicit when-not or context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_run_code_unsafeADestructive
Run a Playwright code snippet. Unsafe: executes arbitrary JavaScript in the Playwright server process and is RCE-equivalent.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | A JavaScript function containing Playwright code to execute. It will be invoked with a single argument, page, which you can use for any page interaction. For example: `async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }` | |
| filename | No | Load code from the specified file. Relative file names are resolved against the workspace root. If both code and filename are provided, code will be ignored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds real value beyond them by naming the severity: it runs in the Playwright server process and is 'RCE-equivalent', which tells the agent the blast radius is the host, not just the page.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, purpose front-loaded and the danger statement immediately following. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dangerous execution tool with a fully documented schema and complete annotation profile, the description covers what the agent needs to call it and respect it. It omits the relationship to browser_evaluate and the return-value semantics of the executed function, but these are minor given no output schema exits to contradict.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (code, filename) are richly documented, including the invocation signature and the precedence rule when both are supplied. The description adds nothing about parameters, which is acceptable given the schema does the heavy lifting; baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Run a Playwright code snippet') and immediately scopes the mechanism ('executes arbitrary JavaScript in the Playwright server process'). This distinguishes it in spirit from the page-scoped sibling browser_evaluate, though it never names that sibling, so the differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or alternative guidance. The 'Unsafe' label signals caution but gives the agent no condition for choosing this over browser_evaluate or any other sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_select_optionBDestructive
Select an option in a dropdown
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Exact target element reference from the page snapshot, or a unique element selector | |
| values | Yes | Array of values to select in the dropdown. This can be a single value or multiple values. | |
| element | No | Human-readable element description used to obtain permission to interact with the element |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as destructiveHint:true (modifies UI) and readOnlyHint:false, which is consistent. The description adds no further behavioral details about side effects (e.g., triggering events, page reloads). It is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (one sentence) and front-loaded. It is appropriately concise for a simple action, but could be slightly expanded with usage hints without sacrificing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 params, all described in schema), the description is minimally adequate. However, it lacks context about return value (none provided) or multi-select behavior, which would help completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add additional semantics beyond what the schema provides (e.g., explaining how 'values' interact, or when 'element' is necessary). It relies fully on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool selects an option in a dropdown, which is a specific verb+resource. It distinguishes well from siblings like 'fill_form', 'click', and 'type', which are for different interactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool vs alternatives like 'fill_form' or 'click' for dropdowns. It does not mention prerequisites (e.g., needing a page snapshot first) or exclusion scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_snapshotBRead-only
Capture accessibility snapshot of the current page, this is better than screenshot
| Name | Required | Description | Default |
|---|---|---|---|
| boxes | No | Include each element's bounding box as [box=x,y,width,height] in the snapshot. Coordinates are viewport-relative, in CSS pixels (Element.getBoundingClientRect) | |
| depth | No | Limit the depth of the snapshot tree | |
| target | No | Exact target element reference from the page snapshot, or a unique element selector | |
| filename | No | Save snapshot to a file instead of returning it in the response. Relative file names are resolved against the workspace root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so safety is covered. The description adds no behavioral context beyond purpose: it does not say what the snapshot contains (accessibility tree), how it is returned, or how depth/box options affect output size. It also does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded clause with no waste; the trailing comparison earns its place by differentiating from screenshot, though it is informal and would be stronger stated as a concrete condition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with complete parameter docs and annotation coverage, the description is adequate but thin: it never says what an accessibility snapshot actually returns or why an agent would choose it over console messages, evaluate, or find, which matters since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with four well-documented optional parameters, so the schema carries the burden. The description adds no parameter meaning beyond what is already there, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Capture accessibility snapshot of the current page') and explicitly contrasts itself with the sibling browser_take_screenshot, so an agent can pick between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'this is better than screenshot' implies the tool should be preferred for inspecting page content over visual capture, but there is no explicit when-to-use/when-not guidance, no mention of prerequisites (e.g. needing a loaded page), and no other alternatives named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_tabsBDestructive
List, create, close, or select a browser tab.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to navigate to in the new tab, used for new. | |
| index | No | Tab index, used for close/select. If omitted for close, current tab is closed. | |
| action | Yes | Operation to perform |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false, so the description's 'create, close' is consistent but adds no new behavioral insight. It does not disclose error handling (e.g., what happens if you close a non-existent tab), side effects of 'select' (focus changes), or the fact that openWorldHint=true implies external side effects. The description is too minimal to add value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is very concise and front-loaded. It lists the actions without any filler. However, it could be more structured (e.g., bullet points) to improve readability, but it is not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain what the tool returns for each action (e.g., for 'list', a list of tabs; for 'new', the new tab's info). It does not do this. Additionally, the description does not mention the tool's scope (e.g., operates on the current browser context). The tool has multiple actions and no output documentation, making it incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter (url, index, action). The description does not add any extra meaning or clarify usage of the parameters beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb-resource combination: 'List, create, close, or select a browser tab.' This directly addresses the four distinct actions the tool performs, and it distinguishes the tool from sibling tools like playwright__browser_navigate (which navigates the current tab) and playwright__browser_close (which closes the entire browser).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that for navigating the current page one should use playwright__browser_navigate, or that closing the browser should use playwright__browser_close. The actions are listed but without context of trade-offs or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_take_screenshotARead-only
Take a screenshot of the current page. You can't perform actions based on the screenshot, use browser_snapshot for actions.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Image format for the screenshot. If unset, inferred from the filename extension, otherwise png. | |
| scale | Yes | Image resolution scale. "css" produces a screenshot sized in CSS pixels (smaller, consistent across devices). "device" produces a high-resolution screenshot using device pixels (larger, accounts for the device pixel ratio). Default is css. | css |
| target | No | Exact target element reference from the page snapshot, or a unique element selector | |
| element | No | Human-readable element description used to obtain permission to interact with the element | |
| filename | No | File name to save the screenshot to. Relative file names are resolved against the workspace root. If not specified, the screenshot is saved into the output directory as `page-{timestamp}.{png|jpeg|webp}`. | |
| fullPage | No | When true, takes a screenshot of the full scrollable page, instead of the currently visible viewport. Cannot be used with element screenshots. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true). Beyond that, the description discloses a genuinely non-obvious behavioral trait: the returned image is static and cannot drive further actions, which steers the agent's downstream planning. It doesn't mention where output lands or size implications, but that is largely covered elsewhere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose first and the routing caveat second; every clause carries information and nothing is padded or repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully signals that the return is a non-actionable image and points to the alternative tool. Filename defaults and format inference are left to the schema, so almost nothing an agent needs is missing, though the destination/output-directory behavior is never surfaced in prose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with type/scale/target/element/filename/fullPage all documented in-schema including enum semantics and the fullPage/element conflict. The description adds no parameter-level detail, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ('Take a screenshot of the current page') and explicitly distinguishes itself from the sibling browser_snapshot, which is the main tool it could be confused with. An agent can separate the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear negative condition ('You can't perform actions based on the screenshot') and names the correct alternative (browser_snapshot) for action-based work. It does not state when a screenshot IS the right choice (e.g. visual verification, user-facing evidence), so guidance is strong but not fully bidirectional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_typeCDestructive
Type text into editable element
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to type into the element | |
| slowly | No | Whether to type one character at a time. Useful for triggering key handlers in the page. By default entire text is filled in at once. | |
| submit | No | Whether to submit entered text (press Enter after) | |
| target | Yes | Exact target element reference from the page snapshot, or a unique element selector | |
| element | No | Human-readable element description used to obtain permission to interact with the element |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds little beyond annotations. While annotations indicate the tool is destructive (destructiveHint: true) and not read-only, the description does not elaborate on side effects (e.g., replacing content, pressing Enter with submit, typing character by character with slowly). The agent gains minimal behavioral context from the description alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, containing no wasted words. It front-loads the core action. However, it is perhaps too brief given the tool's multiple parameters and behavioral nuances, but still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters and no output schema, the description should provide a fuller picture of the tool's behavior. It does not explain how the tool interacts with the page (e.g., focusing the element, clearing content), nor does it mention the optional 'slowly' or 'submit' behaviors. The agent would need to rely heavily on the schema and trial-and-error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds the context that the element must be 'editable', which is not in the schema. This provides marginal additional meaning, but no further parameter detail beyond what the schema already supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Type text into editable element' uses a specific verb and resource, clearly indicating the tool inputs text into an editable field. However, it does not distinguish itself from sibling tools like playwright__browser_fill_form or playwright__browser_press_key, which also involve text entry, so it loses a point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. Siblings such as fill_form (for multiple fields), press_key (for single keys), or click (to focus) are not mentioned, nor are any exclusions or prerequisites given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playwright__browser_wait_forBRead-only
Wait for text to appear or disappear or a specified time to pass
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | The text to wait for | |
| time | No | The time to wait in seconds, at most 30 | |
| textGone | No | The text to wait for to disappear |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds no behavioral context beyond the annotations: it doesn't say what happens on timeout, whether it blocks the page, or whether multiple conditions can be combined. With annotations present the bar is lower, but this description contributes essentially nothing behavioral.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with zero filler, and the three operating modes are enumerated up front. Nothing is repeated or wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter, zero-required tool with no output schema, the description is minimally adequate. However, it omits an important operational fact: nothing states that at least one of text/textGone/time must be supplied, nor what the tool returns or how it behaves when the condition is already satisfied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema documents each of the three parameters including the 30-second cap on 'time'. The description only loosely echoes those concepts ('text to appear or disappear or a specified time') and adds no syntax or precedence detail. Baseline 3 is appropriate when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb (Wait for) with three concrete conditions (text appears, text disappears, time elapses), so an agent immediately knows the tool's scope. It doesn't differentiate itself from siblings like browser_click or browser_snapshot, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no mention of when not to use it, and no reference to alternatives (e.g., snapshot/find for polling content). The only cue is the implicit 'you need to wait' condition, which is not enough to route an agent reliably.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
24 tool updates
v0.4.1- Changed
filesystem__create_directory2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
filesystem__directory_tree2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
filesystem__edit_file2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
filesystem__get_file_info2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
filesystem__list_allowed_directories2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
filesystem__list_directory2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
filesystem__list_directory_with_sizes2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
filesystem__move_file2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
filesystem__read_file2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
filesystem__read_media_file2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
filesystem__read_multiple_files2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
filesystem__read_text_file2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
filesystem__search_files2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
filesystem__write_file2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
playwright__browser_console_messages1 field changed- changed
Input schema / properties / filename / descriptionPrevious value: -"Filename to save the console messages to. If not provided, messages are returned as text."New value: +"File name to save the console messages to. Relative file names are resolved against the workspace root. If not provided, messages are returned as text."
- Added
playwright__browser_emulate_media - Changed
playwright__browser_evaluate1 field changed- changed
Input schema / properties / filename / descriptionPrevious value: -"Filename to save the result to. If not provided, result is returned as text."New value: +"File name to save the result to. Relative file names are resolved against the workspace root. If not provided, result is returned as text."
- Changed
playwright__browser_find1 field changed- added
Input schema / properties / filenameAdded value: +{ + "description": "Save results to a file instead of returning them in the response. Relative file names are resolved against the workspace root.", + "type": "string" +}
- Changed
playwright__browser_network_request1 field changed- changed
Input schema / properties / filename / descriptionPrevious value: -"Filename to save the result to. If not provided, output is returned as text."New value: +"File name to save the result to. Relative file names are resolved against the workspace root. If not provided, output is returned as text."
- Changed
playwright__browser_network_requests1 field changed- changed
Input schema / properties / filename / descriptionPrevious value: -"Filename to save the network requests to. If not provided, requests are returned as text."New value: +"File name to save the network requests to. Relative file names are resolved against the workspace root. If not provided, requests are returned as text."
- Changed
playwright__browser_run_code_unsafe1 field changed- changed
Input schema / properties / filename / descriptionPrevious value: -"Load code from the specified file. If both code and filename are provided, code will be ignored."New value: +"Load code from the specified file. Relative file names are resolved against the workspace root. If both code and filename are provided, code will be ignored."
- Changed
playwright__browser_snapshot1 field changed- changed
Input schema / properties / filename / descriptionPrevious value: -"Save snapshot to markdown file instead of returning it in the response."New value: +"Save snapshot to a file instead of returning it in the response. Relative file names are resolved against the workspace root."
- Changed
playwright__browser_take_screenshot1 field changed- changed
Input schema / properties / filename / descriptionPrevious value: -"File name to save the screenshot to. Defaults to `page-{timestamp}.{png|jpeg|webp}` if not specified. Prefer relative file names to stay within the output directory."New value: +"File name to save the screenshot to. Relative file names are resolved against the workspace root. If not specified, the screenshot is saved into the output directory as `page-{timestamp}.{png|jpeg|webp}`."
- Changed
playwright__browser_wait_for1 field changed- changed
Input schema / properties / time / descriptionPrevious value: -"The time to wait in seconds"New value: +"The time to wait in seconds, at most 30"
38 tool updates
v0.4.0- First observed
filesystem__create_directory - First observed
filesystem__directory_tree - First observed
filesystem__edit_file - First observed
filesystem__get_file_info - First observed
filesystem__list_allowed_directories - First observed
filesystem__list_directory - First observed
filesystem__list_directory_with_sizes - First observed
filesystem__move_file - First observed
filesystem__read_file - First observed
filesystem__read_media_file - First observed
filesystem__read_multiple_files - First observed
filesystem__read_text_file - First observed
filesystem__search_files - First observed
filesystem__write_file - First observed
playwright__browser_click - First observed
playwright__browser_close - First observed
playwright__browser_console_messages - First observed
playwright__browser_drag - First observed
playwright__browser_drop - First observed
playwright__browser_evaluate - First observed
playwright__browser_file_upload - First observed
playwright__browser_fill_form - First observed
playwright__browser_find - First observed
playwright__browser_handle_dialog - First observed
playwright__browser_hover - First observed
playwright__browser_navigate - First observed
playwright__browser_navigate_back - First observed
playwright__browser_network_request - First observed
playwright__browser_network_requests - First observed
playwright__browser_press_key - First observed
playwright__browser_resize - First observed
playwright__browser_run_code_unsafe - First observed
playwright__browser_select_option - First observed
playwright__browser_snapshot - First observed
playwright__browser_tabs - First observed
playwright__browser_take_screenshot - First observed
playwright__browser_type - First observed
playwright__browser_wait_for
TDQS
Scored across 39 tools
Most tools target clearly distinct actions (click, hover, drag, navigate, etc.), but a few pairs overlap: read_file is a deprecated duplicate of read_text_file, list_directory essentially duplicates list_directory_with_sizes, and browser_network_requests vs browser_network_request differ only by singular/plural. Descriptions do enough to disambiguate in most cases.
Names follow a consistent snake_case verb_noun pattern (read_text_file, write_file, create_directory, browser_navigate, browser_click) cleanly separated by filesystem__/playwright__ prefixes. Minor deviations like the legacy read_file vs read_text_file and the noun-first browser_console_messages slightly break the pattern.
39 tools is heavy for a single server, though it reflects two bundled domains (filesystem ~14, playwright ~25). Each namespace is reasonable on its own, but combined the surface is on the large side and pushes toward the 'heavy' band.
Playwright coverage is thorough (navigation, interaction, forms, network, dialogs, screenshots, tabs), and filesystem covers read/write/edit/list/search/tree/move/info. However, the filesystem domain has a notable gap: there is no delete/remove tool for files or directories, forcing agents into dead ends for cleanup.
Maintenance
Related MCP Connectors
Unified gateway exposing 150+ tools across all NexGenData MCP servers via one endpoint.
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
- gatewayOAuthai.sealgate
MCP gateway with runtime security policy, tool-call-level control, and audit of agent actions.
One MCP endpoint for your company's tools, with per-person sign-in, policy and audit.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceAggregates multiple MCP servers behind a single, secure endpoint with unified tool/resource discovery, OAuth authentication, and resilient request routing. Enables users to manage and interact with multiple MCP backends through one centralized interface with load balancing and circuit breakers.2-
- FlicenseNot gradedqualityDmaintenanceA centralized gateway and router that integrates multiple MCP servers into a single endpoint with built-in policy enforcement and secret management. It features a Web GUI for managing tool access, audit logs, and multi-environment configurations across various sub-servers.-
- AlicenseNot gradedqualityCmaintenanceA gateway that aggregates multiple MCP servers into a single endpoint, namespacing their tools and forwarding calls, so an agent connects to one MCP to access the entire stack.MIT
- AlicenseNot gradedqualityCmaintenanceA unified MCP gateway that aggregates multiple MCP servers and API plugins behind a single endpoint with authentication, rate limiting, audit logging, REST API bridge, and web dashboard.8MIT