# 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/)