npm package: @iflow-mcp/akira-papa-osascript-mcp-1
Description: osascript MCP server for macOS automation - execute AppleScript and JXA
Author: akirapapa
Latest version: 1.0.0

# osascript MCP Server

macOS の osascript（AppleScript / JavaScript for Automation）を実行できる MCP サーバーです。

## 特徴

- **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`）に追加:

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

## 使用方法

### AppleScript の実行

```applescript
tell application "Finder" to get name of every disk
```

### JXA（JavaScript）の実行

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

## 許可される操作

以下の操作は**全て許可**されています：

### シェルコマンド（削除以外）
```applescript
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 操作
```applescript
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
```

### System Events
```applescript
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
```

### アプリケーション制御
```applescript
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
```

## ブロックされる操作

以下の**削除操作のみ**がブロックされます：

### シェルでの削除
```applescript
-- これらはブロックされます
do shell script "rm test.txt"
do shell script "rm -rf ~/test"
do shell script "rmdir testdir"
```

### Finder での削除
```applescript
-- これらはブロックされます
tell application "Finder" to delete file "test.txt" of desktop
move file "test.txt" to trash
empty trash
```

## 設定オプション

| オプション | 説明 | デフォルト |
|-----------|------|-----------|
| `timeout` | スクリプト実行タイムアウト（ミリ秒） | 30000 |
| `log_scripts` | スクリプトをログ出力するか | true |

## 開発

### ビルド

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

# ローカルテスト
npm start

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

### テスト

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

# サーバーの直接実行（デバッグ用）
node server/index.js
```

## セキュリティ

このサーバーは「最小限のセキュリティ」設計を採用しています：

- ✅ **許可**: シェルコマンド（`ls`, `curl`, `cat` など）
- ✅ **許可**: System Events（`keystroke`, `key code`）
- ✅ **許可**: 全アプリケーションの制御
- ❌ **ブロック**: `rm`, `delete`, `trash` などの削除操作

より厳格なセキュリティが必要な場合は、`server/index.js` の `BLOCKED_PATTERNS` を編集してください。

## ライセンス

MIT

## 関連リンク

- [MCP Protocol](https://modelcontextprotocol.io/)
- [MCPB Specification](https://github.com/modelcontextprotocol/mcpb)
- [AppleScript Language Guide](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/)
- [JXA Release Notes](https://developer.apple.com/library/archive/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/)