mcpField
M
mcp-osascript

mcp-osascript

本地服务
github.com/m0rvayne生产力127 周前更新

关于 mcp-osascript

mcp-osascript 是用于自动化 macOS 应用和系统界面的 MCP 服务。它提供类型化工具来控制常见界面,并包含输入校验、权限提示和脚本执行防护。

主要功能

  1. 01控制窗口、菜单和键盘
  2. 02读取和写入剪贴板文本
  3. 03查看 Safari、Chrome 和 Arc 标签页
  4. 04截取屏幕、区域或应用窗口
  5. 05管理应用、文件和 Shortcuts
  6. 06检查权限并运行 AppleScript 或 JXA

适用场景

  1. 01移动或调整应用窗口大小
  2. 02查看浏览器标签页或复制当前网址
  3. 03浏览应用菜单并选择菜单项
  4. 04截图或运行 Apple Shortcut

MCP 相关

向 MCP 客户端提供 18 个类型化的 macOS 自动化工具,涵盖应用、窗口、菜单、键盘、剪贴板、浏览器标签页、截图和 Shortcuts 操作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"m0rvayne-mcp-osascript": {
"command": "npx",
"args": [
"-y",
"mcp-osascript"
]
}
}
}
启动命令npx -y mcp-osascript

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmcp-osascript1.1.3

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mcp-osascript

让 Claude 控制你的 Mac。 移动窗口、点击菜单、输入文本、读取剪贴板、管理浏览器标签页、截屏、运行快捷指令——18 个带类型的工具,并提供输入验证和安全防护。

npm version macOS 13+ Node 18+ License: MIT Tests: 84 passed Tests m0rvayne/mcp-osascript MCP server

已作为 io.github.m0rvayne/mcp-osascript 收录于 官方 MCP Registry


演示

快速开始

Claude Desktop — 一键安装。 从最新版本下载 mcp-osascript-1.1.3.mcpb,然后双击。Claude Desktop 会自行安装扩展。

或者手动将其添加到配置中:

{
  "mcpServers": {
    "osascript": {
      "command": "npx",
      "args": ["-y", "mcp-osascript"]
    }
  }
}

将其添加到 Claude Desktop 配置中(Settings → Developer → Edit Config),重启 Claude,即可开始使用。

其他客户端的配置(Cursor、VS Code、Claude Code)

Cursor / VS Code(Copilot)

{
  "mcpServers": {
    "osascript": {
      "command": "npx",
      "args": ["-y", "mcp-osascript"]
    }
  }
}

Claude Code

claude mcp add osascript -- npx -y mcp-osascript

从源代码运行(开发)

git clone https://github.com/m0rvayne/mcp-osascript.git
cd mcp-osascript && npm install
# then use: "command": "node", "args": ["/path/to/mcp-osascript/server/index.js"]

试试这些提示词

安装后,可以这样询问 Claude:

提示词效果
“打开 Safari,告诉我有哪些标签页”启动 Safari,读取所有标签页标题和 URL
“将 Finder 窗口移到屏幕左半边”调整窗口大小并设置位置
“点击 Keynote 中的‘文件 → 导出为 PDF’”导航菜单栏并点击相应项目
“复制当前 Chrome 标签页的 URL”读取浏览器标签页并找到当前活动标签页
“在当前活动文本字段中输入‘Hello World’”模拟键盘输入
“完成后显示通知”显示原生 macOS 横幅通知
“我现在正在使用什么应用?”返回最前端应用的名称和 bundle ID
“按下 Cmd+Shift+4”触发截屏快捷键
“列出 VS Code‘编辑’菜单中的所有项目”检查菜单栏内容
“关闭 Terminal 的第二个窗口”根据索引定位指定窗口
“截取 Safari 窗口的屏幕截图并保存到桌面”仅截取该窗口,而非整个屏幕
“我的 Slack 窗口在哪个显示器上?”读取显示器几何信息和窗口位置
“隐藏除编辑器之外的所有内容”隐藏应用,但不退出它们
“运行我的‘Daily Standup’快捷指令”按名称调用 Apple 快捷指令

工具

18 个类型化工具,每个工具都具备输入验证、错误分类和基于权限的错误消息。

工具功能权限
check_permissions报告已授予的权限及每项权限解锁的功能无
run_osascript执行任意 AppleScript 或 JXA 脚本无
get_clipboard以文本形式读取剪贴板无
set_clipboard将文本写入剪贴板无
send_notification显示 macOS 通知横幅无
open_url在浏览器中打开 URL(仅限 http/https/mailto)无
open_app启动应用或将应用置于前台无
get_frontmost_app获取当前活动应用名称和 bundle ID自动化
get_browser_tabs列出 Safari、Chrome 或 Arc 中的标签页自动化
type_text在当前活动应用中输入文本(最多 500 个字符)辅助功能
press_key按下带修饰键的按键(cmd+c、return、f5)辅助功能
manage_windows列出、移动、调整大小、最小化、全屏显示或关闭窗口辅助功能
get_displays列出显示器,包括位置、尺寸及主显示器无
app_menu列出或点击任意应用中的菜单项辅助功能
screenshot截取整个屏幕、某个区域或应用窗口屏幕录制
app_visibility隐藏、取消隐藏或退出应用辅助功能
file_open打开文件或文件夹,可选择指定应用无
run_shortcut列出或运行 Apple Shortcuts无

自动纠正菜单

当 Claude 尝试点击不存在的菜单项时,服务会自动返回该层级中可用菜单项的列表,让 Claude 使用正确名称重试。其他 MCP 服务都做不到这一点。

User:   "Click File → Export as PDF in Preview"
Claude: calls app_menu click ["File", "Export as PDF"]
Server: "Menu item 'Export as PDF' not found in 'File'.
         Available: ['New from Clipboard', 'Open...', 'Close', 'Save',
         'Duplicate', 'Rename...', 'Export...', 'Export as PDF...']"
Claude: calls app_menu click ["File", "Export as PDF..."]
Server: "Clicked: File > Export as PDF..."

为什么选择 mcp-osascript?

mcp-osascriptsteipete(880★)peakmojo(464★)
经过验证的类型化工具182(通用)1(通用)
URL 方案允许列表http/https/mailto无无
环境变量隔离(子进程)仅 PATH+HOME+LANG完整的 process.env完整的 process.env
进程组终止(无孤儿进程)SIGTERM→SIGKILL无无
错误信息清理(路径、令牌)是否否
原型污染防护Object.create(null)否否
自动纠正菜单点击是否否
集成测试8400
在 CI 中运行测试是否否
通过红队审计400
不可信输出隔离是否否
标准输入管道传递(无需临时文件)是临时文件临时文件

星标数量衡量的是受欢迎程度,而非质量——这两个替代项目都比本项目早数月出现。上表列出的是实际使用中存在差异的方面。

安全审计

已通过四轮红队审计(由作者委托对抗性 Agent 针对源代码进行测试,并非第三方认证)。最近一轮审计针对 v1.1.2,由三个并行 Agent 分别检查 Shell 相关接口、AppleScript 转义和信息泄露。审计发现了六个实际缺陷,包括一个会悄悄使另一个工具的方案允许列表失效的工具,以及一个可能泄漏并导致服务死锁的并发槽位。所有问题均已修复,并附有回归测试。escapeAS 已通过真实的 osascript 针对 13 个字符串逃逸候选项进行验证,没有任何一个能够逃逸。

权限

工具分为三个权限级别:

  • 无需权限 — 剪贴板、通知、URL、应用、文件、显示器、快捷指令。可立即使用。
  • 自动化 — 浏览器标签页、最前台应用。macOS 会针对每个浏览器提示一次。
  • 辅助功能 — 键盘、窗口、菜单、隐藏/取消隐藏。只需在 系统设置 → 隐私与安全性 → 辅助功能 中授权一次。
  • 屏幕录制 — 仅用于截图。在 系统设置 → 隐私与安全性 → 屏幕录制 中授权。

让 Claude 运行 check_permissions,它会告诉你上述权限中哪些已获授权、每项权限会解锁哪些工具,以及剩余权限应打开哪个设置面板。权限探测为只读操作,绝不会触发权限提示。

缺少权限时,服务会明确告知你该怎么做:

"Accessibility permission required. Grant access to 'osascript'
in System Settings > Privacy & Security > Accessibility."

测试

npm test

84 项集成测试覆盖全部 18 个工具,包括输入验证、安全边界(URL 方案拦截、原型污染、脚本大小限制)、超时强制执行、权限错误处理,以及针对安全审计中每项发现的回归测试。

安全与架构
安全
  • run_osascript 可执行任意代码——这是有意为之。MCP 客户端(Claude)是信任边界。
  • 脚本通过标准输入传递给 /usr/bin/osascript 执行——不创建临时文件,不存在 TOCTOU 竞态条件。
  • 脚本大小上限:50 KB。输出上限:50K 个字符;在 UTF-8 字符边界处截断(非拉丁字符输出不会出现乱码)。
  • 错误消息经过清理——会移除文件系统路径、令牌和密码。
  • 子进程仅获得最小环境变量:PATH、HOME、LANG——不会泄露 API 密钥或机密信息。
  • URL 方案允许列表——file://、smb://、vnc://、javascript: 均会被拦截。
  • 处理程序分派使用 Object.create(null)——防止原型污染。
  • 外部来源的文本(浏览器标签页标题、窗口标题、菜单项、剪贴板内容)会放在明确的 <untrusted-data> 封装中返回,因此网页即使更改自身标题,也无法将指令偷偷带入模型上下文。
  • file_open 会拒绝任何解析为 URL 的内容——open(1) 既会解析 URL,也会解析路径,因此如果没有这项检查,它会悄无声息地绕过 open_url 的方案允许列表。
  • screenshot 不会覆盖现有文件,除非设置 overwrite: true;文件扩展名必须与格式匹配。
  • 所有构建列表的工具都会移除应用提供名称中的 |、CR 和 LF,因此经过构造的窗口或标签页标题无法伪造记录。
可靠性
  • 超时时终止进程组——SIGTERM → 等待 2s → SIGKILL。不会留下孤儿进程。
  • 并发信号量——最多同时运行 5 个 osascript 进程。
  • 优雅关闭——使用 server.close(),并设有 10s 后强制退出的安全机制。
  • 错误分类——将 macOS 错误代码(-1728、-1743、-25211)解析为可执行的提示。支持英语和俄语区域设置。

要求

  • macOS 13+(Ventura 或更高版本)
  • Node.js 18+

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。