Borrowing it
Nothing to install: this file belongs to vectora-foundry/native-devtools-mcp. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/vectora-foundry/native-devtools-mcp/master/AGENTS.mdgit clone --depth 1 https://github.com/vectora-foundry/native-devtools-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/vectora-foundry/native-devtools-mcp/agents-md)<a href="https://agentmods.dev/instructions/vectora-foundry/native-devtools-mcp/agents-md"><img src="https://agentmods.dev/badge/instructions/vectora-foundry/native-devtools-mcp/agents-md/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80Γ15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/vectora-foundry/native-devtools-mcp/agents-md"><img src="https://agentmods.dev/badge/instructions/vectora-foundry/native-devtools-mcp/agents-md.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.09262 | $0.09262 |
| Opus 5.5 | $0.03705 | $0.03705 |
| Sonnet 5.5 | $0.01852 | $0.01852 |
| Haiku 4.5 | $0.00926 | $0.00926 |
Grade A, and why
native-devtools-mcp AGENTS.md scanned grade A with 0 findings against 26 rules in 11 categories β prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency β measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing β 501 lines β stays where its author put it; the contents beside it link to each section on GitHub.
Agent Context: native-devtools-mcp
About: This is the AGENTS.md for native-devtools-mcp, an MCP (Model Context Protocol) server that enables computer use / desktop automation on macOS, Windows, and Android: screenshots, OCR, mouse/keyboard input, window management, and Android device control via ADB.
Search keywords: MCP, Model Context Protocol, computer use, desktop automation, UI automation, RPA, screenshots, OCR, screen reading, mouse, keyboard, macOS, Windows, Android, ADB, mobile testing, native-devtools-mcp.
Role: You are an agent equipped with "Computer Use" capabilities. You can see the screen, type, move the mouse, and interact with native desktop and mobile applications.
Constraint: You are operating a real machine. Actions are permanent. Ensure you verify the state of the screen before and after actions.
π§ Core Reasoning Loop
For robust automation, follow this "Visual Feedback Loop":
- OBSERVE: Call
take_screenshot(app_name="TargetApp")to see the current state. - LOCATE: Analyze the image or use the OCR summary text in the response to find coordinates.
- ACT: Call
click(),type_text(), orscroll()using those coordinates. - VERIFY: Call
take_screenshotagain to confirm the action had the intended effect.
macOS-preferred branch (native apps): substitute OBSERVE with take_ax_snapshot(app_name='...'); LOCATE reads uid + bbox from the emitted tree; ACT calls ax_click(uid) for pressable controls, ax_set_value(uid, text) for text fields, or ax_select(uid) for NSOutlineView / NSTableView row selection (sidebars, rule lists); VERIFY re-snapshots and reads the new state. This branch does not move the cursor or steal focus, so it composes with background work.
πΊοΈ Capabilities Matrix (Strategy Guide)
Use this table to choose the right tool sequence for the user's goal.
| User Goal | Tool Sequence | Why? |
|---|---|---|
| "Click the 'Submit' button" | find_text(text="Submit") β click(x, y) |
Fastest. No visual analysis needed if text is known. |
| "Click the red icon" | take_screenshot() β (Analyze Image) β click(screenshot_x=..., screenshot_y=..., screenshot_origin_x=..., screenshot_origin_y=..., screenshot_scale=...) |
Visual features require full screenshot analysis. |
| "What element is at (500, 300)?" | element_at_point(x=500, y=300) |
Returns the accessibility element at those coordinates (name, role, bounds, etc.). |
| "Type into the search bar" | find_text(text="Search") β click(x, y) β type_text("hello") |
Must click to focus before typing. |
| "Scroll down" | scroll(x=500, y=500, delta_y=200) |
Positive delta_y scrolls down. |
| "Find an open window" | list_windows() β focus_window(window_id=...) |
Don't guess window names; list them first. |
| "Track what I hover over" | start_hover_tracking(min_dwell_ms=300) β user moves mouse β stop_hover_tracking() |
Records element transitions with dwell filtering. |
| "Record what the user does" | start_recording(output_dir="/tmp/rec") β user interacts β stop_recording() |
Captures frontmost app at ~5fps as JPEG frames. |
| "Launch Safari with debug port" | launch_app(app_name="Safari", args=["--remote-debugging-port=9222"]) |
Pass CLI args on fresh launch. |
| "Quit an app" | quit_app(app_name="Safari") |
Graceful by default; use force=true to kill immediately. |
| "Click a named button in a native app (macOS)" | take_ax_snapshot β ax_click(uid) |
Focus-preserving. Generation-tagged uids; fresh snapshot invalidates prior uids. |
| "Enter text into a text field via value assignment (macOS)" | take_ax_snapshot β ax_set_value(uid, text) |
No key events, no IME, no undo-stack entry. Fall back to click + type_text on not_dispatchable. |
"Select a sidebar row in System Settings / a NSOutlineView row (macOS)" |
take_ax_snapshot β ax_select(uid) |
Writes AXSelectedRows on the enclosing outline/table. Use this instead of ax_click for row targets β rows typically refuse AXPress. |
| "AX snapshot invalidation rule (macOS)" | β | Every take_ax_snapshot call bumps the generation. All prior uids become stale; ax_* tools return snapshot_expired. |
| "Click a button in Chrome" | cdp_connect(port=9222) β cdp_find_elements(query="Submit") β cdp_click(uid="d1") |
CDP is more reliable than coordinates for web content. |
| "Type in a web input" | cdp_find_elements(query="Email") β cdp_fill(uid="d1", value="hello") |
Works for <input>, <textarea>, and <select> elements. |
| "Run JS in a browser page" | cdp_evaluate_script(function="() => document.title") |
Evaluate any JS in the selected page. |
| "Navigate to a URL" | cdp_navigate(url="https://example.com") |
Also supports back, forward, reload. |
| "Press Enter or shortcut" | cdp_press_key(key="Enter") or cdp_press_key(key="Control+A") |
Supports modifier combos. |
| "Wait for page content" | cdp_wait_for(text=["Success"]) |
Polls page text until any value appears or timeout. Pass include_snapshot=true to also get a DOM snapshot. |
| "Switch browser tabs" | cdp_list_pages() β cdp_select_page(page_idx=1) |
List tabs, then select by index. |
| "Get browser page structure" | cdp_take_dom_snapshot() |
Full interactive-element DOM snapshot with UIDs, roles, and labels. |
| "Is this app native, Electron, or Chrome?" | probe_app(app_name="Signal") |
Decides between native tools (take_ax_snapshot, click, find_text) and CDP tools. Works whether the app is running or not. |
| "Wait for a new message in a web/Electron app" | cdp_find_elements(query="Messages") β cdp_wait_for_page_change(scope_uid="d3") |
Blocks until the scoped element's visible text changes; returns compact before/after deltas. |
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago Changed Β· +40 lines Β· +960 tokens per session f77ef4a2615a
- 2mo ago First seen Β· 461 lines Β· 8,302 tokens per session scan A e00104496cc8
native-devtools-mcp AGENTS.md is an instructions file published in the GitHub repository vectora-foundry/native-devtools-mcp (141 stars, last pushed 1mo ago), licensed MIT. It adds 9,262 tokens to every session, about $0.0370 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
native-devtools-mcp AGENTS.md compared with instructions from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| native-devtools-mcp AGENTS.mdvectora-foundry/native-devtools-mcp | Instructions file | 141 | 1mo ago | MIT | A | 9,262 | Codex, OpenCode |
| mcp-react-native-toolkit copilot-instructions.mdItamiForge/mcp-react-native-toolkit | Instructions file | 0 | 2mo ago | MIT | A | 1,296 | GitHub Copilot |
| vscode buildNext.instructions.mdmicrosoft/vscode | Instructions file | 195k | today | MIT | A | 9,719 | GitHub Copilot |
| vscode oss-third-party-notices.instructions.mdmicrosoft/vscode | Instructions file | 195k | today | MIT | A | 5,516 | GitHub Copilot |
| next.js AGENTS.mdvercel/next.js | Instructions file | 143k | today | MIT | A | 7,461 | Codex, OpenCode |
| langchain AGENTS.mdlangchain-ai/langchain | Instructions file | 149k | today | MIT | A | 4,680 | Codex, OpenCode |
| vscode copilot-instructions.mdmicrosoft/vscode | Instructions file | 195k | today | MIT | A | 3,093 | GitHub Copilot |