mcpField
R
reminders-bridge

reminders-bridge

リモート
remindersbridge.vercel.app生産性14 日前に更新
リポジトリ公式サイト

reminders-bridge について

RemindersBridgeは、ユーザーのMacで動く小型エージェントを介してChatGPTをApple Remindersに接続します。リマインダーの読み取りと変更に対応し、データへのアクセスはMac上で行います。ステートレスなリレーがコネクターとエージェント間で要求と結果を中継します。

主な機能

  1. 01リマインダーの検索と読み取り
  2. 02リストと項目の表示
  3. 03期限付きリマインダーの作成
  4. 04完了または未完了への切り替え
  5. 05名前、メモ、日付の編集

活用シーン

  1. 01予定のリマインダーを探す
  2. 02買い物リストに項目を追加する
  3. 03完了したタスクに印を付ける
  4. 04リマインダーの期限を変更する

MCP 対応

ホスト型MCPエンドポイントはOAuthでChatGPTに接続し、ツール呼び出しをペアリング済みのMacエージェントに中継してReminders.appを操作します。検索、読み取り、一覧表示、作成、完了、更新のツールを提供します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://remindersbridge.vercel.app/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

✅ RemindersBridge

Apple Reminders を ChatGPT から利用できます — ご自身の Mac を通じて。

License: MIT npm

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キーワードでリマインダーを検索
fetchID を指定して、リマインダーの詳細を取得
list_lists未完了件数とともに、すべてのリマインダーリストを表示
list_remindersリマインダーを一覧表示(リストを指定した絞り込みや、完了済み項目の表示も可能)
get_reminderID または名前を指定してリマインダーを読み取り
create_reminderリマインダーを作成(名前、任意のメモ、期限、追加先リスト)
complete_reminderリマインダーを完了にする(または未完了に戻す)
update_reminderリマインダーの名前、メモ、期限を編集

セルフホスト

独自のリレーを実行すれば、ホストされているインスタンスに依存せずに利用できます。

前提条件: Vercel アカウントと Supabase プロジェクト(無料プランで問題ありません)。

  1. ストレージ — Supabase プロジェクトの SQL エディターで supabase/schema.sql を実行します。RLS が有効な、Redis 形式の小さな KV とキューのインターフェイス(nb_* 関数)が作成されます。
  2. デプロイ — server/ ディレクトリを Vercel にデプロイします。
  3. 環境変数を設定します(server/.env.example を参照)。
    • SUPABASE_URL、SUPABASE_SERVICE_ROLE_KEY — プロジェクトと service-role キー
    • JWT_SECRET — openssl rand -hex 32
  4. 確認: curl https://YOUR-APP.vercel.app/api/health を実行し、redisConfigured、redisOk、jwtSecretSet がすべて true であることを確認します。
  5. エージェントの接続先を設定します: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 の外部に保管してください。

コメント

MCP は初めてですか?

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

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