reminders-bridge について
RemindersBridgeは、ユーザーのMacで動く小型エージェントを介してChatGPTをApple Remindersに接続します。リマインダーの読み取りと変更に対応し、データへのアクセスはMac上で行います。ステートレスなリレーがコネクターとエージェント間で要求と結果を中継します。
主な機能
- 01リマインダーの検索と読み取り
- 02リストと項目の表示
- 03期限付きリマインダーの作成
- 04完了または未完了への切り替え
- 05名前、メモ、日付の編集
活用シーン
- 01予定のリマインダーを探す
- 02買い物リストに項目を追加する
- 03完了したタスクに印を付ける
- 04リマインダーの期限を変更する
MCP 対応
ホスト型MCPエンドポイントはOAuthでChatGPTに接続し、ツール呼び出しをペアリング済みのMacエージェントに中継してReminders.appを操作します。検索、読み取り、一覧表示、作成、完了、更新のツールを提供します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://remindersbridge.vercel.app/mcpclaude mcp add --transport http isaiahdupree-reminders-bridge https://remindersbridge.vercel.app/mcp{"mcpServers":{"isaiahdupree-reminders-bridge":{"type":"http","url":"https://remindersbridge.vercel.app/mcp"}}}Cursor で開く{"servers":{"isaiahdupree-reminders-bridge":{"type":"http","url":"https://remindersbridge.vercel.app/mcp"}}}VS Code で開く{"mcpServers":{"isaiahdupree-reminders-bridge":{"type":"http","url":"https://remindersbridge.vercel.app/mcp"}}}{"mcpServers":{"isaiahdupree-reminders-bridge":{"serverUrl":"https://remindersbridge.vercel.app/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
RemindersBridge は、ChatGPT がApple Remindersを利用できるようにする Model Context Protocol(MCP)コネクターです。読み取りはローカルで実行され、要求された結果は認証済みのリレーを通じて渡されます。すべての操作は、小さなローカルエージェントを介してご自身の Mac上で実行されます。クラウド側にあるのは、ChatGPT と Mac の間でリクエストを中継する、ステートレスなリレーだけです。
ChatGPT ──OAuth──► RemindersBridge relay ──job queue──► apple-reminders-agent ──► Reminders.app
(connector) (Vercel, stateless) (your Mac, polls & executes) (on your Mac)
リマインダーの読み取りや書き込みが行われるのは、ご自身の Mac だけです。リレーに保存されるのは、有効期間の短いジョブのペイロードとアカウント情報のみです。ジョブが実行中でない限り、リレーがリマインダーを見ることはなく、ジョブは数秒で期限切れになります。
ユーザー向け — 3 ステップ
1. アカウントを作成します。remindersbridge.vercel.app にアクセスして、ペアリングコードを生成してください。
2. Mac エージェントをインストールします(Node 18+ が必要です)。
npx apple-reminders-agent pair <YOUR-CODE> # link this Mac to your account
npx apple-reminders-agent install # keep it running on every restart
Reminders に初めてアクセスすると、macOS に **「Terminal が Reminders を操作しようとしています」**と表示されます。OKをクリックしてください(初回のみ)。
3. ChatGPT に接続:「設定」→ 「プラグイン」→ 「開発者モード」をオンにする(「セキュリティとログイン」)→ カスタムプラグインを「作成」→ MCP サーバーの URL **https://remindersbridge.vercel.app/mcpを貼り付ける → 認証で OAuth を選択 → サインインして「許可」**します。
これで完了です。新しいチャットで、*「Apple Reminders から歯科の予約を検索して」や、「明日が期限のオーツミルクを Groceries リストに追加して」*と頼んでみてください。
エージェントの実行中は、Mac のスリープを解除しておく必要があります。
npx apple-reminders-agent installを実行すると、ログイン時に自動起動し、クラッシュした場合も再起動します。
エージェントの管理
npx apple-reminders-agent status # is it paired & reachable?
npx apple-reminders-agent logs # recent activity
npx apple-reminders-agent uninstall # stop auto-start
ChatGPT でできること
| ツール | 操作 |
|---|---|
search | キーワードでリマインダーを検索 |
fetch | ID を指定して、リマインダーの詳細を取得 |
list_lists | 未完了件数とともに、すべてのリマインダーリストを表示 |
list_reminders | リマインダーを一覧表示(リストを指定した絞り込みや、完了済み項目の表示も可能) |
get_reminder | ID または名前を指定してリマインダーを読み取り |
create_reminder | リマインダーを作成(名前、任意のメモ、期限、追加先リスト) |
complete_reminder | リマインダーを完了にする(または未完了に戻す) |
update_reminder | リマインダーの名前、メモ、期限を編集 |
セルフホスト
独自のリレーを実行すれば、ホストされているインスタンスに依存せずに利用できます。
前提条件: Vercel アカウントと Supabase プロジェクト(無料プランで問題ありません)。
- ストレージ — Supabase プロジェクトの SQL エディターで
supabase/schema.sqlを実行します。RLS が有効な、Redis 形式の小さな KV とキューのインターフェイス(nb_*関数)が作成されます。 - デプロイ —
server/ディレクトリを Vercel にデプロイします。 - 環境変数を設定します(
server/.env.exampleを参照)。SUPABASE_URL、SUPABASE_SERVICE_ROLE_KEY— プロジェクトと service-role キーJWT_SECRET—openssl rand -hex 32
- 確認:
curl https://YOUR-APP.vercel.app/api/healthを実行し、redisConfigured、redisOk、jwtSecretSetがすべてtrueであることを確認します。 - エージェントの接続先を設定します:
npx apple-reminders-agent pair <CODE> --server https://YOUR-APP.vercel.app
動作の仕組み
- 認証 — PKCE と Dynamic Client Registration(RFC 7591)を用いた OAuth 2.1 です。ChatGPT が自身を登録し、ユーザーが RemindersBridge の同意ページでサインインすると、ChatGPT はスコープが設定された MCP アクセストークンを取得します。JWT は HMAC で署名されます。権限がそれぞれ異なる 3 種類(
session、agent、mcp)があります。Resend(RESEND_API_KEY)を使ったメール認証も任意で利用できます。設定されていない場合は無効で、認証の必須化は任意で有効にできます(REQUIRE_EMAIL_VERIFICATION)。 - リレー — MCP ツールの呼び出し → ジョブを
jobs:<user>にプッシュ(TTL は呼び出し側の待機時間以下とし、放置されたジョブが遅れて実行されないようにします)→ ロングポーリングを継続している Mac エージェントに約 200ms 以内にジョブが渡され、実行後に結果をプッシュ → MCP ハンドラーが結果を返します。ロングポーリングにより、固定間隔ではなくジョブの到着時に配信されるため、リレーのオーバーヘッドは約 1 秒ではなく約 300ms です。エージェントは、接続中のみ「オンライン」と見なされます。 - エージェント — 依存関係のない Node CLI です。ツールは JXA(
osascript -l JavaScript)を介して Reminders.app を操作します。引数は argv 経由で JSON として渡されます(シェルによる文字列展開は行いません)。macOS LaunchAgent により、ログイン後もクラッシュ後も起動状態が維持されます。
リポジトリ構成
server/ Vercel functions: OAuth + MCP endpoint + relay (deploy this)
agent/ apple-reminders-agent — the npm-published Mac CLI (users npx this)
kit/ Browser automations: register the dev-mode connector AND
fill the OpenAI directory submission (see kit/README.md)
supabase/ schema.sql for self-hosting the storage
test/ end-to-end OAuth + MCP integration test
開発
# server
cd server && cp .env.example .env.local # fill in, then: vercel dev
# end-to-end test against a live deployment (reads ../.env.local)
node test/e2e-oauth.mjs
# agent unit tests
node --test agent/test-agent-unit.mjs
セキュリティとプライバシー
- リマインダーの読み取りと書き込みはお使いの Mac 上でのみ行われます。リレーは要求されたコンテンツを短期間だけジョブ/結果キューに保存します。ジョブのペイロードは Redis 形式のストレージに短い TTL で保存され、配信後に削除されます。
- エージェントトークンは
~/.remindersbridge-agent.json(モード600)に保存されます。 - シークレットはコミットされません。
.gitignoreと.env.exampleファイルを参照してください。 - 書き込みツールには破壊的操作としてマークが付けられているため、リマインダーを変更する前に ChatGPT が確認を求めます。
ライセンス
MIT © Isaiah Dupree
本番環境のストレージと所有者の確認
Relay 1.4 は、設定された共有 Supabase プロジェクト内の、サービスロール専用の分離されたテーブル/関数を使用します。本番環境ではストレージ設定がない場合に処理を拒否し、RPC リクエストを 10 秒以内に制限します。また、ストレージまたは署名の設定が利用できない場合は HTTP 503 を返します。このバージョンをデプロイする前に、リポジトリに含まれている分離ストレージのマイグレーションを適用してください。このマイグレーションによって、別のブリッジのアカウントテーブルや関数が置き換えられることはありません。
node --env-file=.env.local test/live-storage.mjs は、一時的な統合テストキーを使って、実際の永続ストア、FIFO、期限切れ処理、カウンターを検証します。BRIDGE_SESSION_FILE=/private/owner-session.json BRIDGE_READ_TOOL=READ_TOOL node test/live-relay.mjs は、実際の所有者セッション、PKCE OAuth、ホストされた MCP、ペアリング済み Mac からの読み取りを検証します。このブリッジのインベントリツールを選択してください。レビュアーのデータは、実稼働環境での受け入れ確認には使用できません。認証情報とセッションは Git の外部に保管してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。