脚本执行服务器

一个支持在macOS上执行AppleScript和JavaScript for Automation(JXA)的MCP服务器,安全设计仅阻止删除操作。

  • by Akira-Papa
  • JavaScript
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 akira-papa/osascript-mcp-1

使用说明

osascript MCP服务器

一种MCP服务器,可以运行macOS的osascript(AppleScript/JavaScript for Automation)。

特徴

  • AppleScript支持:运行macOS的本机AppleScript
  • JXA支持: JavaScript for Automation(JXA)を実行
  • 安全设计:仅限文件删除命令块(其他全部允许)
  • Desktop Extension 対応:以.mcpb格式一键安装

安装

方法1:从MCPB文件(推荐)

  1. .mcpb 下载文件
  2. 拖放到Claude Desktop
  3. 允许安装

方法2:手动设定

Claude Desktop的配置文件(~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "osascript": {
      "command": "node",
      "args": ["/path/to/osascript-mcp/server/index.js"],
      "env": {
        "OSASCRIPT_TIMEOUT": "30000",
        "OSASCRIPT_LOG_SCRIPTS": "true"
      }
    }
  }
}

使用方法

运行AppleScript

tell application "Finder" to get name of every disk

运行JXA(JavaScript)

Application("System Events").processes().map(p => p.name())

允许的操作

下面的操作是全部允许已完成:

壳命令(非删除)

do shell script "ls -la ~/Desktop"
do shell script "whoami"
do shell script "curl -s https://api.github.com"
do shell script "cat ~/.zshrc"

Finder 操作

tell application "Finder" to get name of every disk
tell application "Finder" to get every file of desktop
tell application "Finder" to open folder "Documents" of home

系统事件

tell application "System Events" to get name of every process
tell application "System Events" to keystroke "hello"
tell application "System Events" to key code 36 -- Enter

应用程序控制

tell application "Safari" to get URL of current tab of window 1
tell application "Music" to get name of current track
tell application "Calendar" to get events of calendar 1

被阻止的操作

以下仅删除操作将被阻止:

在壳中删除

-- これらはブロックされます
do shell script "rm test.txt"
do shell script "rm -rf ~/test"
do shell script "rmdir testdir"

在查找器中删除

-- これらはブロックされます
tell application "Finder" to delete file "test.txt" of desktop
move file "test.txt" to trash
empty trash

配置选项

|选项|说明|默认| |-----------|------|-----------| | timeout |脚本执行超时(毫秒)|30000| | log_scripts |是否日志输出脚本|真|

开発

构建

# 依存関係インストール
npm install

# ローカルテスト
npm start

# MCPB パッケージ作成
npm install -g @anthropic-ai/mcpb
mcpb validate manifest.json
mcpb pack .

测试

# 許可されるスクリプトのテスト
echo 'tell application "Finder" to get name of every disk' | node server/index.js

# サーバーの直接実行(デバッグ用)
node server/index.js

安全性

此服务器采用“最低安全性”设计:

  • ✅ 许可:外壳命令(ls, curl, cat 的下界
  • ✅ 许可:系统事件(keystroke, key code)
  • ✅ 许可:控制所有应用程序
  • ❌ 块: rm, delete, trash 等删除操作

如果需要更严格的安全性server/index.js 的,之 BLOCKED_PATTERNS 中所述修改相应参数的值。

许可证

麻省理工学院

相关链接