MCP server
Poke
VoiceOS

poke-bridge

An MCP server that connects AI assistants to Poke — your iMessage-based AI agent. AIアシスタントをPoke(iMessageベースのAIエージェント)に接続するMCPサーバー。

Send instructions to Poke by voice, from Claude, from your terminal, or anywhere that supports MCP. 音声、Claude、ターミナル、またはMCP対応のどこからでもPokeに指示を送れます。

What Is Poke? Pokeとは?

Poke is an AI assistant you interact with over iMessage. It can send emails, manage your calendar, set reminders, and more — all through a simple text conversation. poke-bridge lets you trigger Poke programmatically from any MCP-compatible client or script. PokeはiMessageで使えるAIアシスタントです。メール送信、カレンダー管理、リマインダー設定など、テキストで会話するだけで実行できます。poke-bridgeを使えば、MCP対応のクライアントやスクリプトからPokeをプログラム的に操作できます。

Demo Video デモ動画

How It Works 仕組み

Your client (VoiceOS / Claude / terminal / cron)
         ↓
   poke-bridge (MCP server)
         ↓
   Poke API (POST /inbound/api-message)
         ↓
   Poke acts on your instruction
         ↓
   Reply arrives in iMessage
クライアント(VoiceOS / Claude / ターミナル / cron)
         ↓
   poke-bridge(MCPサーバー)
         ↓
   Poke API(POST /inbound/api-message)
         ↓
   Pokeが指示を実行
         ↓
   iMessageに返信が届く

Tools Exposed 公開ツール

ToolWhat it does
send_to_pokeGeneral-purpose — send any message or instruction
poke_reminderSet a reminder with a task + time
poke_draft_emailAsk Poke to draft or send an email
poke_scheduleAdd a calendar event via Poke
ツール機能
send_to_poke汎用 — メッセージや指示を送信
poke_reminderタスクと時間を指定してリマインダーを設定
poke_draft_emailメールの下書きや送信をPokeに依頼
poke_schedulePoke経由でカレンダーにイベントを追加

Configuration 設定

VariableRequiredDefaultDescription
POKE_API_KEYYesYour Poke V2 API key from Kitchen
POKE_SOURCENopoke-bridgeLabel prefixed to messages so Poke knows where they came from (e.g. VoiceOS, Claude Desktop, Cursor)
変数必須デフォルト説明
POKE_API_KEYはいKitchenから取得したPoke V2 APIキー
POKE_SOURCEいいえpoke-bridgeメッセージに付けるラベル。Pokeがどこから送られたか分かるようにします(例:VoiceOSClaude DesktopCursor

Requirements 必要なもの

Setup セットアップ

1. Clone and install 1. クローンとインストール

git clone https://github.com/gabeperez/poke-bridge.git
cd poke-bridge
npm install

2. Configure your API key 2. APIキーの設定

macOS / Linux:

cp start.sh.example start.sh
chmod +x start.sh

Open start.sh and replace your_v2_key_here with your Poke V2 API key. start.shを開いて、your_v2_key_hereをPoke V2 APIキーに置き換えてください。

Windows:

copy start.cmd.example start.cmd

Open start.cmd and replace your_v2_key_here with your Poke V2 API key. start.cmdを開いて、your_v2_key_hereをPoke V2 APIキーに置き換えてください。

⚠️ start.sh and start.cmd are gitignored. Your key will never be committed. ⚠️ start.shstart.cmdはgitignoreされています。キーがコミットされることはありません。

Usage 使い方

With VoiceOS VoiceOSで使う

VoiceOS is a voice productivity app that lets you control your computer by speaking. Add poke-bridge as a custom integration: VoiceOSは音声でコンピュータを操作できる生産性アプリです。poke-bridgeをカスタムインテグレーションとして追加してください:

Settings → Integrations → Custom Integrations → Add

FieldValue
Name🌴 Poke
Launch command (macOS)/absolute/path/to/poke-bridge/start.sh
Launch command (Windows)C:\absolute\path\to\poke-bridge\start.cmd

Then speak naturally: 自然に話しかけてください:

Why a wrapper script? VoiceOS throws ENAMETOOLONG if you pass inline env vars (KEY=value command). The wrapper script exports your key cleanly before launching the server. On Windows, .sh files won't work — use start.cmd instead. なぜラッパースクリプトが必要? VoiceOSはインライン環境変数(KEY=value command)を渡すとENAMETOOLONGエラーを起こします。ラッパースクリプトはサーバー起動前にキーをきれいにエクスポートします。Windowsでは.shファイルは動かないので、代わりにstart.cmdを使ってください。

With Claude Desktop Claude Desktopで使う

Add to your Claude Desktop config: Claude Desktopの設定ファイルに追加してください:

macOS / Linux:

{
  "mcpServers": {
    "poke": {
      "command": "/absolute/path/to/poke-bridge/node_modules/.bin/tsx",
      "args": ["/absolute/path/to/poke-bridge/poke-bridge.ts"],
      "env": {
        "POKE_API_KEY": "your_v2_key_here",
        "POKE_SOURCE": "Claude Desktop"
      }
    }
  }
}

Windows — use tsx.cmd and backslashes:

{
  "mcpServers": {
    "poke": {
      "command": "C:\\path\\to\\poke-bridge\\node_modules\\.bin\\tsx.cmd",
      "args": ["C:\\path\\to\\poke-bridge\\poke-bridge.ts"],
      "env": {
        "POKE_API_KEY": "your_v2_key_here",
        "POKE_SOURCE": "Claude Desktop"
      }
    }
  }
}

Restart Claude Desktop after saving. 保存したらClaude Desktopを再起動してください。

With Cursor / Windsurf Cursor / Windsurfで使う

Same config as Claude Desktop above. Add to your editor's MCP settings file and restart. 上記のClaude Desktopと同じ設定です。エディターのMCP設定ファイルに追加して再起動してください。

From the terminal (no MCP needed) ターミナルから(MCP不要)

The Poke API is a single POST call. Poke APIは1つのPOSTリクエストで呼び出せます。

macOS / Linux:

curl -X POST https://poke.com/api/v1/inbound/api-message \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"message": "will it rain today?"}'

Windows CMD — use escaped double quotes, no single quotes:

curl -X POST https://poke.com/api/v1/inbound/api-message -H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" -d "{\"message\": \"will it rain today?\"}"

Expected response: 期待されるレスポンス:

{"success": true, "message": "Message sent successfully"}

From a cron job or script cronジョブやスクリプトから

#!/bin/bash
export POKE_API_KEY="your_v2_key_here"

curl -s -X POST https://poke.com/api/v1/inbound/api-message \
  -H "Authorization: Bearer $POKE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"message": "The build finished. Please add a note to my todo list."}'

Or trigger from any script after a long job: 長時間のジョブの後にスクリプトからトリガーすることもできます:

run_my_long_job.sh && \
  curl -s -X POST https://poke.com/api/v1/inbound/api-message \
    -H "Authorization: Bearer $POKE_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"message": "Job done. Send me a summary of what ran today."}'

From macOS Shortcuts macOSショートカットから

Use a Get Contents of URL action: URLの内容を取得アクションを使います:

Pair it with a Siri phrase for fully voice-triggered Poke on iPhone or Apple Watch. Siriフレーズと組み合わせれば、iPhoneやApple Watchから完全に音声でPokeを操作できます。

How Messages Appear メッセージの表示について

Poke receives messages via API as a webhook — they don't show on your side of the iMessage thread, but Poke acts on them and replies normally in iMessage. Every message sent through this bridge is prefixed with [poke-bridge] (or your custom POKE_SOURCE) so Poke has context about where it came from. PokeはAPI経由でメッセージを受信します。iMessageのスレッドにはあなた側には表示されませんが、Pokeはそれに基づいて行動し、iMessageで通常通り返信します。このブリッジを通じて送られるメッセージにはすべて[poke-bridge](またはカスタムのPOKE_SOURCE)がプレフィックスとして付き、Pokeがどこから送られたか把握できます。

Project Structure プロジェクト構成

poke-bridge/
├── poke-bridge.ts     # MCP server source (TypeScript)
├── poke-bridge.mjs    # Runtime entrypoint used by launch scripts
├── start.sh           # Launch wrapper for macOS/Linux (gitignored)
├── start.sh.example   # Template — copy to start.sh and add your key
├── start.cmd          # Launch wrapper for Windows (gitignored)
├── start.cmd.example  # Template — copy to start.cmd and add your key
├── package.json
├── tsconfig.json
├── .gitignore
└── README.md

API Reference APIリファレンス

This bridge uses the Poke V2 API: このブリッジはPoke V2 APIを使用しています:

POST https://poke.com/api/v1/inbound/api-message
Authorization: Bearer YOUR_V2_KEY
Content-Type: application/json

{"message": "[poke-bridge] your instruction here", "source": "poke-bridge"}
⚠️ The legacy /api/v1/inbound-sms/webhook endpoint and pk_-prefixed V1 keys are not supported. Create a V2 key in Kitchen. ⚠️ レガシーの/api/v1/inbound-sms/webhookエンドポイントとpk_プレフィックスのV1キーはサポートされていません。KitchenでV2キーを作成してください。

Contributing コントリビューション

PRs welcome. Ideas for new tools: poke_search, poke_task, poke_note. Follow the existing pattern in poke-bridge.ts and update this README. PRを歓迎します。新しいツールのアイデア:poke_searchpoke_taskpoke_notepoke-bridge.tsの既存のパターンに従って、このREADMEも更新してください。

License ライセンス

MIT