Local MCP server: macOS apps and a browser by element index, plus iPhone Mirroring (experimental).
MCPpedia last refreshed this data
io.github.sgInnora/noracu is an MCP server that local MCP server: macOS apps and a browser by element index, plus iPhone Mirroring (experimental). Its tool list has not been published yet over stdio, sse and http, requires no API key, and scores 91/100 on MCPpedia's security, maintenance and efficiency rubric.
Config is the same across clients - only the file and path differ.
{
"mcpServers": {
"noracu": {
"args": [
"/ABSOLUTE/PATH/TO/noracu/src/server.mjs"
],
"command": "/opt/homebrew/bin/node"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Local MCP server: macOS apps and a browser by element index, plus iPhone Mirroring (experimental).
Run this in your terminal to verify the server starts. Then let us know if it worked - your result helps other developers.
npx -y 'noracu' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories - click any category to see the underlying evidence.
No known CVEs.
Checked noracu against OSV.dev.
Click any tool to inspect its schema.
Be the first to review
Have you used this server?
Share your experience - it helps other developers decide.
Sign in to write a review.
Others in other
deja-vu: local memory over the session histories of forty-three coding agents.
MCP WordPress Remote proxy server
专门为 agent 打造的 agent 搜索工具,具备多语言搜索能力,覆盖中文/英文/学术/代码/购物/金融/新闻/百科。
Searchable football data provider documentation for AI coding agents. Like Context7 for football data.
MCP Security Weekly
Get CVE alerts and security updates for io.github.sgInnora/noracu and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
A local MCP server that lets Claude, Cursor, or any MCP client operate macOS apps and a Playwright browser by element_index — and, experimentally, a real iPhone through Apple's iPhone Mirroring (OCR on the Mac, normalized taps). No API key; no telemetry from the server.
中文说明见 README.zh-CN.md。
One stdio MCP server. The agent snapshots a tree, gets an indexed element list, then clicks or types by element_index instead of raw pixels — the same observe/act split on the Mac and in the browser. The experimental iPhone layer runs the same observe → act loop over OCR text and normalized coordinates.

browser_snapshot returns an indexed ARIA tree; browser_click acts by element_index. The Mac layer runs the same loop (mac_ax_state → mac_click). Highlight boxes are overlays from demo/record-browser.mjs, not a product feature. The iPhone layer is not in this demo.
One MCP server, three control surfaces:
| Layer | Tools | Drives | Status |
|---|---|---|---|
| Mac | 20 (mac_*) | macOS Accessibility API (src/mac-ax.js, JXA), cliclick, screencapture | stable |
| Browser | 12 (browser_*) | Playwright (persistent profile) | stable |
| iPhone | 14 (phone_*) | iPhone Mirroring via the bundled imctl driver (Python + pyobjc) | experimental |
The iPhone layer is experimental and ships with its driver (imctl, in imctl/). It needs Apple's iPhone Mirroring with the iPhone locked and near the Mac, and a python3 with pyobjc; it observes with OCR and acts on normalized coordinates rather than element_index. Without pyobjc, phone_* tools return a one-line imctl unavailable error with the install command, and the Mac and browser layers are unaffected. The observe/act vocabulary follows the action/observation split popularized by ChatGPT's computer-use, re-implemented on open local tooling.
noracu is the local hands, not the model. Your MCP client (Claude Desktop, Claude Code, Cursor) decides what to do; this server only observes and acts on this machine.
browser_launch (NORACU_DISABLE_AUTO_INSTALL=1 turns that off). With NORACU_ALLOW_CDP=1 it also talks to a DevTools port on 127.0.0.1 that it opened itself (NORACU_ALLOW_CDP=any for other loopback ports). The browser still fetches the pages you point it at, and your MCP client still sends tool results — screenshots, OCR text — to whatever model it uses.element_index; indices expire after 30 s. On the Mac an index is backed by identity evidence (the window's ID, the child path, role, identifier, name) and the element is re-identified before every action; in the browser, tag/name/href/position are re-checked. A gone or changed element returns element_no_longer_valid instead of clicking the wrong thing. Screenshots are there when the tree is not enough.