meetergo について
meetergoは、スケジュールや関連するCRM業務を扱うエージェント向けのMCPサーバーです。予約変更、連絡先、ルーティングフォーム、Webサイトアシスタントの設定などを、ホスト型エンドポイントまたはローカルプロセス経由で利用できます。
主な機能
- 01空き時間の検索と予約管理
- 02ミーティングタイプと予約ページの管理
- 03連絡先とルーティングフォームの操作
- 04Webサイトアシスタントの設定とテスト
- 05ホスト型HTTPまたはローカルstdioで接続
活用シーン
- 01ミーティングの予約、変更、キャンセル
- 02今後の予約とカレンダーの空き状況確認
- 03リード振り分け用フォームの作成
- 04Webサイトアシスタントの設定とテスト
MCP 対応
スケジュール、CRM、Mira、設定に関する57種類のツールをMCPクライアントに公開します。クライアントはホスト型Streamable HTTPエンドポイントに接続するか、パッケージをローカルでstdio経由で実行できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.meetergo.com/mcpclaude mcp add --transport http com-meetergo https://mcp.meetergo.com/mcp{"mcpServers":{"com-meetergo":{"type":"http","url":"https://mcp.meetergo.com/mcp"}}}Cursor で開く{"servers":{"com-meetergo":{"type":"http","url":"https://mcp.meetergo.com/mcp"}}}VS Code で開く{"mcpServers":{"com-meetergo":{"type":"http","url":"https://mcp.meetergo.com/mcp"}}}{"mcpServers":{"com-meetergo":{"serverUrl":"https://mcp.meetergo.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
meetergo MCP サーバー
AI エージェントが実際にカレンダーを操作できるようにします。空き時間の検索、予約、日時変更、キャンセル、今後の予定の確認、連絡先レコードの管理ができます。
ドキュメントを検索するだけで、何も変更できない docs MCP サーバー(https://developer.meetergo.com/mcp)とは別のものです。どちらも便利ですが、役割は異なります。
| Docs MCP | このサーバー | |
|---|---|---|
| エンドポイント | developer.meetergo.com/mcp | mcp.meetergo.com/mcp、または stdio 経由の npx |
| ツール | SearchMeetergo | スケジュール管理、CRM、Mira、設定用の 57 個のツール |
| 予約できますか? | いいえ | はい |
| 用途 | 統合を開発する | 統合として機能する |
セットアップ
my.meetergo.com/integrations で Personal Access Token を作成します。トークンは rgo-… のような形式です。その後、クライアントからホスト型サーバーに接続するか、このパッケージをローカルで stdio 経由で実行します。このトークンは Free を含むすべてのプランで使用できます。
ホスト型
https://mcp.meetergo.com/mcp
Authorization: Bearer rgo-… で認証する Streamable HTTP です。パスが重要です。mcp.meetergo.com だけではエンドポイントになりません。リモート URL とヘッダーを指定できるクライアントの場合は、次のように設定します。
{
"mcpServers": {
"meetergo": {
"url": "https://mcp.meetergo.com/mcp",
"headers": { "Authorization": "Bearer rgo-your_token_here" }
}
}
}
ローカル(npx)
{
"mcpServers": {
"meetergo": {
"command": "npx",
"args": ["-y", "@meetergo/mcp-server"],
"env": { "MEETERGO_TOKEN": "rgo-your_token_here" }
}
}
}
Claude Desktop、Claude Code、Cursor など、MCP に対応するものであれば何でも使用できます。
トークンのスコープを設定する
トークンの作成時に、エージェントが実際に必要とする機能(スケジュール管理、連絡先と商談、Mira、フォーム、アカウント)に制限できます。制限付きトークンは、対象外のグループに属する操作を読み取りも含めてすべて拒否するため、使用する予定のツールが含まれるグループをすべて有効にしてください。Mira 専用のトークンでは予約できず、スケジュール管理専用のトークンではナレッジベースを読み取れません。
トークンを貼り付けずにサインインする
ホスト型エンドポイントでは OAuth サインインを利用できます。検出情報は /.well-known/oauth-protected-resource(RFC 9728)で公開されているため、対応クライアントは MCP URL からフローを開始できます。クライアントは事前登録されており、動的なクライアント登録で作成することはできません。Claude のカスタムコネクターでは、Advanced settings でパブリッククライアント ID mcp-claude を入力し、クライアントシークレットは空欄のままにします。Claude と ChatGPT 向けのディレクトリクライアントは、それぞれのプロバイダー用に設定されています。
Cursor と Grok Bot
このリポジトリには、Cursor と Grok Bot の両方で使用する Cursor Marketplace プラグインが含まれています。Settings、Plugins、Marketplace の順に開いて meetergo をインストールし、ブラウザーでサインインを完了してください。このプラグインはホスト型エンドポイントに接続し、パブリック PKCE クライアント ID mcp-cursor を使用します。クライアントシークレットや貼り付けるトークンは必要ありません。
Marketplace への掲載前にローカルで確認する場合は、このリポジトリをローカル Cursor プラグインとして読み込んでください。.cursor-plugin/plugin.json マニフェストが mcp.json を参照しており、そこには同じホスト型 URL と OAuth クライアント ID が記載されています。
Personal Access Token は、Free を含むすべてのプランで、すべての MCP クライアントから使用できます。このページの以降の説明では、これを前提としています。
別のユーザーとして操作する
Personal Access Token は常にその所有者として操作します。会社全体を対象にエージェントを実行し、複数の同僚に代わってアシスタントが予約する場合は、Platform API Key(ak_live:<uuid>:<secret>)を使い、対象ユーザーを指定します。
"env": {
"MEETERGO_TOKEN": "ak_live:...",
"MEETERGO_USER_ID": "the-user-uuid"
}
この 2 種類のトークンでは要件が正反対です。予約の途中で問題が判明することがないよう、サーバーは起動時に両方の要件を確認します。
- Platform API Key では
MEETERGO_USER_IDが必須です。API はほぼすべてのルートで操作ユーザーを要求します。 - Personal Access Token では
MEETERGO_USER_IDを指定してはいけません。常に所有者として操作し、API はこのヘッダーを明示的に拒否します。
ホスト型エンドポイントでは、操作ユーザーは環境変数ではなくリクエストヘッダー X-Meetergo-Api-User-Id で渡します。同じ 2 つのルールが適用され、Personal Access Token と一緒に送信すると拒否されます。
環境
stdio エントリ(npx が実行する meetergo-mcp):
| 変数 | 必須 | 用途 |
|---|---|---|
MEETERGO_TOKEN | はい | rgo-… Personal Access Token、または ak_live:… Platform API Key |
MEETERGO_USER_ID | Platform API Key 使用時 | 操作対象のユーザー |
MEETERGO_API_URL | API ベース URL の上書き値。デフォルトは https://api.meetergo.com/v4 | |
MEETERGO_NEXT_URL | ウィジェットのインストール用スニペットに表示される予約ページのホスト。デフォルトは https://cal.meetergo.com | |
MEETERGO_TIMEOUT_MS | リクエストごとのタイムアウト。デフォルトは 30000 |
ホスト型エントリを自分で実行する
このパッケージには、https://mcp.meetergo.com/mcp の背後で動作する Streamable HTTP エントリ meetergo-mcp-http も含まれています。認証情報は環境変数ではなく、リクエストごとに Authorization ヘッダーで渡されるため、1 つのプロセスで任意の数のアカウントに対応できます。ここでは MEETERGO_TOKEN と MEETERGO_USER_ID は読み込まれません。読み込む変数は次のとおりです。
| 変数 | 必須 | 用途 |
|---|---|---|
PORT | 待ち受けポート。デフォルトは 8080 | |
MEETERGO_API_URL | API ベース URL の上書き値。デフォルトは https://api.meetergo.com/v4 | |
MEETERGO_NEXT_URL | ウィジェットのインストール用スニペットに表示される予約ページのホスト。デフォルトは https://cal.meetergo.com | |
MEETERGO_DASHBOARD_URL | プランの上限エラーに含まれるアップグレードリンクで使用するダッシュボードのホスト。デフォルトは https://my.meetergo.com | |
MCP_PUBLIC_URL | このサーバーの公開 URL。デフォルトは http://localhost:$PORT です。使用されるのは オリジン のみです。オリジン + /mcp がリソース識別子となり、ディスカバリードキュメントの resource フィールド、および OAuth トークンの aud に含める値になります。そのため、https://host、https://host/、https://host/mcp はいずれも同じ設定です。絶対 http(s) URL でない場合、起動時にエラーになります | |
OAUTH_ISSUER | 3 つすべて、または未設定 | 認可サーバーの OpenID issuer(例:https://login.meetergo.com/realms/meetergo)。絶対 URL かつ https である必要があります。トークン交換では、このサーバーのクライアントシークレットとユーザーのトークンを認可サーバーに送信するためです。末尾のスラッシュは削除されます |
OAUTH_CLIENT_ID | 3 つすべて、または未設定 | このサーバーがトークンを交換する機密クライアント(RFC 8693) |
OAUTH_CLIENT_SECRET | 3 つすべて、または未設定 | そのクライアントのシークレット |
3 つの OAUTH_* 変数は、すべて設定するか、すべて未設定にしてください。 3 つすべてを設定すると、受信したアクセストークンをまず検証します。検証するのは issuer、aud、typ: Bearer、issuer の JWKS に対する RS256 署名、有効期限です。その後にのみ、上流 API 用の別のトークンに交換します。MCP 仕様では、クライアントから渡されたトークンを転送することが禁じられているため、この交換は単なる最適化ではなく、唯一の経路です。
何も設定しない場合、プロセスはベアラートークンのみで動作します。Personal Access Token と Platform API Key は使用できますが、両方の .well-known パスは 404 を返し、401 チャレンジに resource_metadata は含まれず、OAuth トークンは上流へ渡されず拒否されます。
1 つまたは 2 つだけ設定すると、一部だけの OAuth ではなく、上記のベアラートークンのみの動作になります。さらに、未設定の変数名を示す oauth_disabled_incomplete_config 警告ログが出力されます。
リトライ
どちらのエントリも、リトライの挙動は同じです。レート制限と一時的な上流エラー(429、502、503、504)の場合、最大 3 回(つまり 2 回リトライ)試行します。API から Retry-After が送信された場合は、それに従います。
リトライは 無条件には行われません。予約またはキャンセルがタイムアウト、接続切断、502 などで不確定な状態で失敗した場合、API 側ではすでに処理済みの可能性があります。また、2 回目の試行を安全に行うための冪等性キーもありません。そのため、このような場合にリトライするのは読み取り処理のみです。書き込み処理をリトライするのは、リクエストが処理されなかったことを示す唯一のレスポンスである 429 の場合に限られます。
1 つのプロンプトでオンボーディング
クライアントが MCP プロンプトに対応している場合は、meetergo: onboard を実行してください。対応していない場合は、次の内容を貼り付けてください。
会社向けに meetergo をセットアップしてください。まず get_me と get_setup_status を呼び出し、すでに存在するものを教えてください。次に propose_conversion_setup を使ってウェブサイトを分析し、提案するセットアップ(ミーティングタイプ、適格性確認の質問、ウェブサイトアシスタント)を提示してください。私の承認を得るまで、何も構築しないでください。承認後、不足しているものを作成し、create_qualification_form で質問をルーティングフォームにし、サイトをクロールしてから、run_test_drive で動作を実証し、判定結果を見せてください。最後にインストール用スニペットを提示し、貼り付けた後に verify_widget_install で確認してください。
エージェントは既存の内容を監査して提案し、あなたの承認を待ってから構築します。その後、公開前に、スクリプト化された訪問者があなた自身のアシスタントを通じて予約する様子を見せます。2 つ目のプロンプト、meetergo: weekly-review は、先週の会話を取得し、アシスタントが回答できなかった質問をすべて学習させることを提案します。
プランの制限
各ツールは、どの制限に達したのか、アップグレードするにはどこを利用すればよいのかを構造化して報告するため、エージェントは曖昧に失敗せず、状況を説明できます。get_me は plan ブロック(プランの階層、制限)も返すため、優れたエージェントは、プランでは完了できない作業を始める前に警告します。サーバー自体への接続に制限がかかることはありません。Free を含む、どのプランのトークンでも利用できます。
ツール
スケジューリングをエンドツーエンドでカバーする 57 個のツールがあります。ほとんどのエージェントが利用する一連の流れはスケジューリングです。ほかのツールは、エージェントが生の REST に頼る必要がないように用意されています。
スケジューリング
| ツール | 書き込み? | 目的 |
|---|---|---|
get_me | トークンが機能することを確認します。何も表示されない場合は、ここから始めてください | |
list_meeting_types | 予約可能な内容 | |
get_availability | ミーティングタイプの予約可能な時間枠 | |
book_appointment | はい | 時間枠を予約します |
reschedule_appointment | はい | 予約を変更します |
cancel_appointment | 破壊的 | 予約をキャンセルするか、参加者を 1 人削除します |
list_appointments | フィルター付きのページ分割されたカレンダー | |
get_todays_appointments | 今日の予約のみ | |
get_appointment | attendeeIds を含む、1 件の予約の全詳細 | |
add_guest | はい | 予約にゲストのメールアドレスを追加します |
update_appointment_notes | はい | 通話の準備事項や結果を書き戻します |
create_one_time_booking_link | はい | 代理で予約する代わりに、1 回限りのリンクを送信します |
list_calendar_connections | 接続されているカレンダー |
フォローアップ
| ツール | 書き込み? | 目的 |
|---|---|---|
send_quick_email | はい | 参加者に 1 回限りのメールを送信します(5 分間に 5 通) |
update_meeting_transcription | はい | ノート作成ツールの文字起こしや要約を添付します |
ミーティングタイプ
| ツール | 書き込み? | 目的 |
|---|---|---|
get_meeting_type | 全設定です。更新前に読み取ってください | |
create_meeting_type | はい | 予約可能なミーティングタイプを作成します |
update_meeting_type | はい | ミーティングタイプを変更します |
delete_meeting_type | 破壊的 | ミーティングタイプを削除します。そのページは機能しなくなります |
予約ページ
| ツール | 書き込み? | 目的 |
|---|---|---|
get_personal_page | 色、ヘッダー、リンク、ミーティングタイプの順序 | |
update_personal_page | はい | ブランディングを変更します |
ルーティングフォーム
| ツール | 書き込み? | 目的 |
|---|---|---|
list_routing_forms | すべてのフォームとファネル | |
get_routing_form | ステップ、フィールド、ルーティングルール | |
create_routing_form | はい | 適格性確認フォームを作成します |
update_routing_form | はい | フォームを変更します |
delete_routing_form | 破壊的 | フォームを削除します。共有リンクは機能しなくなります |
send_routing_form | はい | メールまたは SMS で送信するか、リンクを発行します |
list_form_recipients | 受け取った人、回答した人 | |
list_data_fields | フォーム間で再利用できるフィールド | |
create_data_field | はい | フィールドを追加します |
CRM
| ツール | 書き込み? | 目的 |
|---|---|---|
search_contacts | 重複を作成する前に連絡先を検索します | |
get_contact | contactId または予約の attendeeId で、レコード全体を取得します | |
create_contact | はい | 連絡先を追加します |
update_contact | はい | 連絡先を編集します |
bulk_create_contacts | はい | 一度に多数の連絡先をインポートします(1分あたり3回の呼び出し) |
delete_contact | 破壊的 | 連絡先とそのフォームの回答を削除します |
Mira、ウェブサイトアシスタント
ウェブサイトにアシスタントがいない状態から、会社独自のページをもとに回答し、 ミーティングを予約するアシスタントを稼働させるために必要なものがすべてそろっています。
| ツール | 書き込み? | 目的 |
|---|---|---|
get_setup_status | 起動チェックリスト:存在するもの、不足しているもの、次の手順 | |
get_mira_settings | アシスタントの設定全体。変更前に読み取ります | |
update_mira_settings | 破壊的 | 設定を変更します。元に戻せるよう、変更前の設定を返します |
restore_mira_settings | 破壊的 | 以前の更新時に取得したスナップショットを復元します |
propose_conversion_setup | クロール済みのサイトを読み取り、アシスタント、適格性確認、予約の設定を提案します | |
create_qualification_form | はい | 提案された質問を、編集可能な実際の振り分けフォームにします |
run_test_drive | 台本に沿って訪問者が保存済みアシスタントと会話します。判定とトランスクリプトが返されます | |
get_mira_widget_embed | 公開キー、埋め込みスニペット、プレビュー URL を取得します | |
verify_widget_install | 顧客のサイトのページを取得し、顧客自身のウィジェットが配信されていることを確認します | |
answer_visitor_question | はい | アシスタントが答えられなかった質問への回答を教えます |
get_conversation_insights | 訪問者からの質問と、アシスタントが答えられなかった箇所を確認します |
ナレッジベース
| ツール | 書き込み? | 目的 |
|---|---|---|
crawl_company_website | はい | アシスタントがサイトの情報をもとに回答できるよう、ウェブサイトを取り込みます |
get_crawl_status | 実行中のクロールの進捗を確認します | |
list_knowledge_documents | 取り込まれた内容を確認します | |
delete_knowledge_document | 破壊的 | ドキュメントを削除します。アシスタントはそのドキュメントを引用しなくなります |
search_company_knowledge | 質問への回答の根拠となる箇所を取得します |
Webhook
| ツール | 書き込み? | 目的 |
|---|---|---|
list_webhooks | 使用中のエンドポイント(会社あたり最大6件) | |
create_webhook | はい | HTTPS エンドポイントを登録します |
update_webhook | はい | URL またはイベントを変更します |
delete_webhook | 破壊的 | Webhook を削除します。イベントは直ちに停止します |
書き込み操作には readOnlyHint: false が設定され、上記で破壊的と記された項目には
destructiveHint: true が設定されています。そのため、ホストはエージェントが人間にとって
重要なものを削除する前に、確認を求めることができます。
ツールが代わりに行うこと
API は、モデルには知る方法のない情報を要求します。その定型処理を docstring で説明して うまくいくことを期待する代わりに、ツールがそれらを補います。
book_appointmentは、入れ子になったattendeeオブジェクトを構築し、receiveRemindersと必須の空のnotesの既定値を設定します。また、名前のない予約は、 招待に空欄を書き込まずに拒否します。get_availabilityとbook_appointmentは、どのホストを対象に計算するかを解決します。 API はミーティングタイプを読み込む前に、どちらもExpected hostIds or queueIdで拒否します。 一方、モデルが持つのはmeetingTypeIdだけです。create_meeting_typeは、必須ですが重要ではない6つのmeetingInfoフィールド (customChannelName、connectChannelName、空のconfirmationButtonなど)を補います。 これらが欠けているとリクエスト全体が拒否されます。スキーマに明記されていない内容はadvanced経由で渡されます。list_appointmentsは、API に既定値がない必須のpageとpageSizeを指定します。
開発
npm test # vitest
npm run build # tsc -> dist
テストではツール一覧だけでなく、ワイヤ形式を検証します。各ツールが呼び出すパスと、API の DTO が要求する正確なボディ形式です。これは意図的なものです。
0.1.x では、決して成功しないツールが 5 つ公開されていました。パスやクエリキーが誤っており、BookingDto がネストされた attendee を要求しているのに、ボディがフラットになっていました。それでも、ツールの存在だけを確認していたため、すべてのテストに合格していました。ツールを追加または変更する場合は、apps/api のルートに照らしてリクエストを固定してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。