A protocol and SDK for connecting AI agents to local capabilities across browsers, VS Code, Chrome extensions, and Node.js environments. Includes client SDKs in TypeScript, Python, Go, and Rust.
MDP provides 19 tools across browser automation (page.*) and VSCode integration (vscode.*) with explicit schemas and descriptions. However, critical gaps undermine production readiness: (1) Parameter descriptions are sparse or missing entirely, most tools lack per-parameter guidance on format, constraints, or valid ranges. (2) Output schemas are not documented, LLMs cannot predict response structure for chaining. (3) Error handling is absent, no recovery guidance, retryability classification, or actionable error messages. (4) Naming is inconsistent: 'page.snapshot' vs 'page.queryElements' mixes verb-noun with noun patterns. (5) Many parameters lack type constraints (e.g., 'key' in pressKey accepts any string; should enumerate valid keys). Baseline: production tools average 194 chars per description and 100% have param annotations; MDP averages ~60 chars with ~40% param coverage. This is a D-tier server.
Click a DOM element on the target page.
Fill an input, textarea, select, or contenteditable element.
Move focus to a matching element on the target page.
Dispatch a keyboard event to the active element or a selected element.
Query DOM elements from the target page.
Scroll a matching element into the viewport.
Scroll the page viewport to a specific position.
Collect a lightweight snapshot of the target page for this route client.
Output schemas not documented. LLMs cannot predict response structure for tool chaining. E.g., page.snapshot returns what fields? page.queryElements returns what per-element data?
Parameter descriptions missing or generic. 'key' in page.pressKey accepts any string but should enumerate valid keys (Enter, Escape, ArrowUp, etc.). 'selector' lacks format guidance (CSS selector syntax). 'timeoutMs' lacks range (min/max).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Wait until a matching DOM element is no longer visible.
Wait until the target page contains a matching DOM element.
Wait until visible page text contains the requested string.
Wait for the target page URL to match a condition.
Wait until a matching DOM element becomes visible.
Run an allowlisted VSCode command.
Find files in the current VSCode workspace using glob patterns.
Read diagnostics from the current VSCode workspace or a specific document.
Read the current VSCode workspace, active editor, and diagnostic state.
Read a workspace file by relative path, absolute path, or URI and return its text and metadata.
Search the current VSCode workspace for text matches and preview snippets.
No error handling guidance. Tools lack recovery hints, retryability classification, or actionable error messages. E.g., if page.click fails, should the agent retry? Call page.scrollIntoView first? No guidance provided.
Inconsistent naming conventions. 'page.snapshot' uses noun-first; 'page.queryElements' uses verb-noun. Should standardize to verb_noun (e.g., 'page.getSnapshot', 'page.queryElements'). LLMs parse intent from names, inconsistency causes confusion.
Missing parameter constraints. 'maxTextLength', 'maxResults', 'timeoutMs' lack min/max bounds. Unbounded numbers let LLMs pass absurd values (e.g., maxResults=999999) that break performance or APIs.