AI AgentをChatGPT、Claude、Cursor向けMCPサーバーにする

Piotr Grudzień
公開日 読了時間:約25分
AI AgentをChatGPT、Claude、Cursor向けMCPサーバーにする

はじめに

これまでのこのシリーズのチュートリアルでは、Quickchat AI Agentを何かに接続してきました。Telegram、Google Sheets、Discordです。今回は方向が逆です。エージェントが、他のAIが接続する対象になります。つまり、ユーザーがそのエージェントだけが知っていることを尋ねたときに、ChatGPT、Claude、Cursorが呼び出すツールになります。

仕組みはMCPサーバーです。設定は意図的に単純です。すべてのQuickchat AI Agentには、https://app.quickchat.ai/mcp/your-agent-id 形式のURLでホストされるMCPサーバーがすでにあります。有効にしてURLをコピーし、コネクターとしてAIアプリに貼り付けます。統合はこれだけで完了し、コードは不要です。 アクセスはデフォルトでprivateです。変更するまでは、接続にはQuickchat AIアカウントでのサインインが必要です。

このガイドの最後までに、架空の開発者向けツール企業のサポートエージェントを作成し、実際のナレッジを与え、MCPサーバーとして公開し、実際のAIアプリに接続し、Inboxで本当に新しいものを確認します。つまり、自社製品について2つのAIが互いに会話する様子です。その過程で、エージェントはチャットアプリ内から営業リードも取得します。また、呼び出し元AIが中継すること、しないことも扱います。これは、この投稿で最も興味深い発見でした。

必要なものは2つです。

この機能の正式なリファレンスは、ドキュメントのdocs.quickchat.ai/channels/mcpにあります。MCP自体に馴染みがない場合は、MCP解説でプロトコルを詳しく説明しています。この投稿で必要なのは、下の1段落版だけです。

作成するもの

架空の企業Orbitは、開発者向けにホスト型ベクトル検索APIを販売しています。そのサポートエージェントは、プラン、レート制限、リージョン、認証、SDKなどのドキュメントを知っています。このエージェントをMCPサーバーとして公開し、実際のAIアプリから5つの動作を実行します。

#AIアプリに尋ねる内容エージェントが行うこと確認できる場所
1”What are Orbit’s rate limits on the free plan?”Knowledge Baseから回答するアプリのチャット + Inbox
2”Does Orbit have a Ruby SDK?”知らないと答える(その事実は意図的に欠けています)アプリが正直な「いいえ」を中継する
3”Get me a demo, here are my details”Smart Data Gatheringでリードを取得するInbox内の連絡先情報
4”Put me through to a human”Human Handoffをトリガーする会話がチームに再割り当てされる
5フォローアップ質問同じ会話を継続するInbox内の1つのスレッド

以下の内容はすべて、実行中の製品に対して実際に構築、テストしたものです。各スクリーンショットは実際のキャプチャです。外部アプリの画面については、クリックする場所を正確に示します。

誰が誰を呼び出すか: MCP client、MCP server、AI Agent、AI Action

この4つの用語は、MCPサーバーを仕事で出荷している人たちの間でも頻繁に混同されます。それぞれ1文で説明します。

  • MCP clientは、ユーザーが話しかけるAIアプリ(ChatGPT、Claude、Cursor)です。いつツールを呼び出すかを決めます。
  • MCP serverは、ツールを提供するものです。ここでは、Quickchat AIが https://app.quickchat.ai/mcp/<your-agent-id> でエージェントごとに1つホストします。
  • AI Agentはあなたのエージェントです。Knowledge Base、プロンプト、設定した動作を含みます。MCPサーバーは、そのソケットにすぎません。
  • AI Actionsは、返信中にエージェント自身が実行できることです(API呼び出し、リード取得、人への引き継ぎ)。質問がMCP経由で届いても動作し続けます。

このウォークスルーでは、明示的に接続されたMCPクライアントを使います。サーバーURLを公開したりWebサイトウィジェットを追加したりしても、それだけで訪問者のChatGPTやClaudeアカウントがそのサーバーに接続されるわけではありません。未接続のアシスタントがWebサイト上の経路を検出して使うかどうかは、別の問題です。

MCP呼び出しチェーンの図。ユーザーがAIアプリに質問し、MCP clientがapp.quickchat.aiでホストされたMCP server上のask_orbitツールを呼び出し、Orbit AI AgentがKnowledge Baseから回答する 全体のチェーンです。ツールを呼び出すかどうかを決めるのはMCP clientであり、あなたでもエージェントでもない点に注意してください。

MCP(Model Context Protocol)は、中間の矢印を機能させる標準です。AIアプリがサーバーのツールを検出し、それを呼び出すための統一された方法です。トランスポートは通常のHTTPSです(通信の詳細に関心がある場合はstreamable HTTPです)。そのため、統合面は1つのURLだけになります。

理解しておくべき重要な反転は次のとおりです。呼び出し元モデルはツールの名前と説明を読み、自分でエージェントを呼び出す価値があるタイミングを判断します。 強制はできません。調整セクションの内容は、すべてここから導かれます。

構築前に知っておくべき3つのこと

ウォークスルーの前に、サーバーの動作に関する3つの事実を確認します。

  • エージェントごとに1つのツール。 サーバーは単一のツールを公開します(名前はあなたが付けます。ここでは ask_orbit です)。このツールは1つの文字列引数 message を受け取り、エージェントの返信を返します。その返信パイプラインでは、有効化されたActionsを実行できます。外部システムを変更する呼び出しも含まれます。
  • セッションは会話に対応します。 各MCPセッションはInbox内の1つの会話に対応します。呼び出し間でセッションを維持するクライアントでは、フォローアップが同じ会話にスレッド化されます。ただし、多くのチャットアプリは質問ごとに新しいセッションを開くため、実際には各質問が別々の会話として届くことがよくあります。アイドル状態のセッションは数時間後に期限切れになります。
  • これは本物のエージェントです。 呼び出しはWebサイトウィジェットと同じ返信パイプラインを通ります。Knowledge Base検索、AI Actions、Smart Data Gathering、Human Handoffは、サイト上とまったく同じように動作します。各返信は同じAIメッセージクレジットを消費します。

ステップ1: Orbitエージェントを作成し、ナレッジを与える

エージェントを作成し(Getting Started flowは数分で完了します)、そのアイデンティティを設定します。Orbitのメインプロンプトは1段落です。

あなたはOrbitの開発者サポートアシスタントです。Orbitは開発者向けのホスト型ベクトル検索APIです。Knowledge Baseを使用して、Orbitのプラン、レート制限、リージョン、認証、SDK、検索機能に関する質問に回答してください。簡潔かつ技術的に回答してください。ナレッジに含まれていないことについては、知らないとはっきり述べてください。

次にKnowledge Baseを開き、記事を追加します。Orbitには短い記事が6つあります。プランと料金、レート制限、リージョンとデータレジデンシー、認証とAPIキー、SDKとAPIクライアント、ハイブリッド検索です。エージェントが正確に述べるべき実際の事実は、たとえば次のようなものです。

プラン別のレート制限: Freeでは1分あたり60クエリ、1分あたり120書き込みが許可されます。Proでは1分あたり600クエリ、1分あたり1,200書き込みが許可されます。Scaleの制限はカスタムです。制限はプロジェクトごとにトークンバケットで適用されます。制限を超えると、APIはRetry-Afterヘッダー付きでHTTP 429を返します。バッチupsertは100ベクトルごとに1書き込みとしてカウントされます。

OrbitエージェントのQuickchat AI Knowledge Baseページ。6つの記事があり、すべてのステータスがReadyになっている OrbitのKnowledge Baseです。6つの記事で製品をカバーしています。SDK記事にはPython、TypeScript、Goを意図的に記載し、Rubyは記載していません。

意図的な欠落に注意してください。SDK記事にはRubyが記載されていません。これは意図的です。サポートエージェントにとって最も重要な動作は、知らないときに何をするかです。易しい質問だけを投げるのではなく、それを正直にテストします。

より詳しいKnowledge Baseガイドが必要な場合は、効果的なKnowledge Baseの構築に関するドキュメントページで、ソース、タグ、再トレーニングについて説明しています。

ステップ2: MCPサーバーを有効にする

サイドバーでExternal Appsを開き、MCPタイルをクリックします。

Quickchat AIダッシュボードのExternal Applicationsページ。MCPタイルに「Let ChatGPT/Claude talk to your AI Agent via MCP」と表示されている MCPは、他の外部公開面であるAPIやプラットフォーム別統合の隣にあります。

MCPパネルには、すべてが1画面にあります。Enable MCPトグル、Configure MCPダイアログ、Connect MCPダイアログ、**Require sign-in (private)**トグルです。

Quickchat AIダッシュボードのMCPパネル。Enable MCPがオン、Configure MCPとConnect MCPボタン、Require sign-inトグルが表示されている MCPの全体画面です。有効にし、エージェントを説明し、URLをコピーします。

Enable MCPをオンにし、次にConfigure MCPを開きます。このダイアログは見た目以上に重要です。その理由については1セクション全体を使って説明します。フィールドは3つあります。

Configure MCPダイアログ。Nameが「Orbit Docs Assistant」、エージェントが知っていることの説明、Commandが「ask_orbit」になっている 呼び出し元AIが読む3つの文字列です。これらが、エージェントと接続するすべてのAIアプリの間のインターフェースになります。

  • Name: AIアプリがエージェントを見るときの名前です。ここでは Orbit Docs Assistant です。
  • Description: エージェントが何を知っていて何ができるか、何ができないかを2から3文で書きます。呼び出し元モデルはこれを使って、そもそもいつエージェントを呼び出すかを判断します。そのため、マーケティング文ではなくAPI契約のように書きます。ここでは次のようにします。
Orbit(ホスト型ベクトル検索API)に関する開発者の質問に回答します。対象はプランと料金、レート制限、リージョン、認証、SDKです。Orbit自身のドキュメントだけに基づいて回答し、カバーされていない内容についてはその旨を述べます。また、フォローアップ依頼(デモ、Scaleプランの料金、レート制限引き上げ)を登録できます。ユーザーの連絡先情報を渡すと、Orbitチームが連絡します。
  • Command: AIアプリに見えるツール名です。文字とアンダースコアを使います。ここでは ask_orbit です。モデルが自然に選びそうな名前にします。

次にConnect MCPを開き、your MCP server URLをコピーします。

https://app.quickchat.ai/mcp/<your-agent-id>

Connect MCPダイアログ。エージェントのMCPサーバーURL、Copyボタン、Claude、Cursor、ChatGPT向けのアプリ別手順が表示されている 統合面全体です。1つのURL、Copyボタン、アプリ別手順があります。コピーして貼り付ければ完了です。

同じダイアログには、次に実行するアプリ別手順も記載されています。今は**Require sign-in (private)**をオンのままにします。これがデフォルトです。Quickchat AIワークスペースにサインインしない限り、誰もMCP経由でエージェントを使用できません。後で、トレードオフを理解したうえで意図的にpublicへ切り替えます。

ステップ3: Claudeから接続する

ClaudeでSettingsを開き、Connectors(現在はCustomizeセクション内)を見つけ、Add、次にAdd custom connectorをクリックします。名前を付け、MCPサーバーURLを貼り付けます。Claudeは無料プランを含むすべてのプランでカスタムコネクターをサポートしています(無料アカウントではカスタムコネクターを1つ追加できます)。

ClaudeのAdd custom connectorダイアログ。名前OrbitとMCPサーバーURLが貼り付けられている Claudeでの設定全体です。名前とURLだけです。OAuthフィールドは空のままにします。Quickchat AIが認証を処理します。

サーバーはprivateなので、Claudeは初回にサインイン手順へ送ります。通常のQuickchat AIログインページが開き、サインインするとコネクターが完了します。同意画面やコピーするトークンはありません。ワークスペースのメンバーでない人はここで停止します。

private MCPサーバーが接続中にAIアプリをリダイレクトするQuickchat AIサインインページ privateモードの実際の動作です。AIアプリは通常のQuickchat AIサインインへ移動します。チームは入れますが、それ以外は入れません。

次に、Orbitだけが知っていることをClaudeに尋ねます。

What are Orbit's rate limits on the free plan?

Claudeはその質問が ask_orbit の領域にあると認識し、ツールを呼び出し、エージェントの回答を中継します。1分あたり60クエリ、1分あたり120書き込み、3つのリージョンです。これらの数値はKnowledge Base記事から来たもので、モデルの想像ではありません。

Claudeの会話。ClaudeがOrbitコネクターを使用し、ナレッジベースからOrbitのFreeプランのレート制限とリージョンを回答している 「Loaded tools, used Orbit integration」: Claudeがエージェントを呼び出し、Knowledge Baseに書かれている内容を正確に中継しました。読者はClaudeと話していますが、事実はあなたのものです。

次に、罠の質問をします。

Does Orbit have a Ruby SDK?

エージェントは、ドキュメントにはRuby SDKが記載されていないと答えます。Claudeはその正直な「いいえ」を中継します。こちらの実行では、Knowledge Baseを確認し、公式Ruby SDKはないと報告し、実際に存在するSDK(Python、TypeScript、Go)を正しく列挙し、代わりにRubyから通常のREST APIを呼び出すことを提案しました。

Claudeの会話。Orbitには公式Ruby SDKがなく、RubyからFaradayまたはNet::HTTP経由でREST APIを使うことを提案し、実在するPython、TypeScript、Go SDKを正しく列挙している 有用な代替案付きの正直な「いいえ」です。ClaudeはRuby SDKを作り話ししませんでした。Knowledge Baseが実際に述べていることを中継し、代わりにREST経路を示しました。

同じやり取りは、通常のMCP会話としてInboxにも表示されます。エージェントが尋ねられた質問と、与えた回答を確認できます。

MCPチャネルでのRuby SDK質問に関するQuickchat AI Inboxのトランスクリプト。visitorの質問と、Ruby SDKはないというエージェントの正直な回答が表示されている 同じ会話のあなた側です。エージェントはKnowledge Baseから回答し、カバーしていない内容を明確に述べました。幻覚のSDKはありません。

これがステップ1で意図的に欠落を作った効果です。エージェントからモデル、ユーザーまで、正直さのチェーン全体がエンドツーエンドで機能することを確認できました。

ステップ4: ChatGPTから接続する

ChatGPTでは、カスタムMCPコネクターはdeveloper modeの背後にあります。有料プランが必要です。Settings、Appsの順に移動し、Advanced settingsを開いてDeveloper modeをオンにします。ChatGPTはこれを「elevated risk」と表示します。developer modeでは、コネクターがそのツールで許可されたことを実行できるため、ChatGPTは意図的なオプトインを求めます。

ChatGPTのAdvanced settings。Developer modeトグルがオンになっており、「elevated risk」と表示されている Developer modeにより、ChatGPTでカスタムコネクターが使えるようになります。接続する前に、エージェントのナレッジと有効なActionsを確認してください。

次にCreate appをクリックします。接続をServer URLに設定し、MCPサーバーURLを貼り付け、(publicエージェントの場合は)No Authを選択します。

ChatGPTのNew Appダイアログ。接続がServer URLに設定され、Orbit MCPサーバーURLが貼り付けられ、No Authが選択され、developer-modeリスク確認が表示されている 名前を付け、URLを貼り付け、確認にチェックを入れてCreateします。リスク文言はChatGPTのものですが妥当です。信頼できるサーバーだけを追加してください。これはあなたが管理するサーバーです。

ChatGPTは最後の確認を表示し、1クリックでコネクターが追加されます。

ChatGPTの確認ダイアログ「Add Orbit to ChatGPT」。ConnectとCancelボタンが表示されている Connectすると、OrbitはChatGPTが任意の会話で呼び出せるツールになります。

ChatGPT固有の注意点が2つあります。

  • ChatGPTがツール呼び出しの承認を求める場合、送信される質問だけでなく、エージェントで有効化されたActionsも考慮してください。それらのActionsは接続済みサービスに変更を加える可能性があります。
  • ChatGPTはOpenAIのサーバーから接続します。ClaudeがAnthropicのサーバーから接続するのと同じです。Quickchat AIがホストしているため、MCPサーバーはその両方から到達できます。これはまさに、あなたが構築しなくてよくなった部分です。

同じレート制限の質問をすると、今回はChatGPT内で、同じKnowledge Baseに基づく回答が得られます。

ChatGPTの会話。ChatGPTがOrbitコネクターを呼び出し、ナレッジベースからOrbitのFreeプランのレート制限とデプロイ可能リージョンを回答している 「Called tool」の後に同じ事実が続きます。60/120、プロジェクトごとの制限、3つのリージョンです。HTTP 429の詳細も記事内にあるため、ChatGPTはそれも中継しています。

ステップ5: Cursorから接続する

CursorでSettings、Tools & MCPsの順に移動し、Add Custom MCPをクリックします。Cursorは編集用に ~/.cursor/mcp.json を開きます。リモートMCPサーバーは1つの "url" エントリです。

{
  "mcpServers": {
    "orbit": {
      "url": "https://app.quickchat.ai/mcp/<your-agent-id>"
    }
  }
}

ファイルを保存すると、Cursorが読み取ります。orbit サーバーがTools & MCPsの下に表示され、その ask_orbit ツールも表示されます。AgentペインでOrbitに関する質問をすると、初回にツールを呼び出そうとした時点で、Cursorが承認を求めます。

Cursorのツール承認プロンプト。「Run Ask Orbit in orbit」と、送信しようとしているメッセージ、Run / Skipボタンが表示されている Cursorは、ツールを実行する前に、エージェントへ送信しようとしている正確なメッセージを表示します。一度承認すると、インラインで回答します。

Cursor Agentの会話。CursorがAsk Orbitツールを実行し、ナレッジベースからOrbitのFreeプランのレート制限とデプロイリージョンの表を回答している Cursorはエディター内から同じツールを呼び出します。「These limits and regions come from Orbit’s own docs via the Orbit MCP server」と、こちらが促していないのに注記しています。

Cursorでは、開発者向けの価値が明確になります。コードを書いている途中で「レート制限に達したらOrbitは何を返すのか」と尋ねると、エディターを離れずにOrbitの実際のドキュメントから回答が得られます。製品にSDKがある場合、これはユーザーにとって新しいドキュメント面になります。

ボーナス: ターミナル派向けの1コマンド

Claude Code(AnthropicのCLI)は、1つのコマンドでリモートMCPサーバーを追加できます。サーバーの健全性を確認する最速の方法でもあります。

claude mcp add --transport http orbit https://app.quickchat.ai/mcp/<your-agent-id>

次に、セッション内でOrbitに関する質問をすると、デスクトップクライアントと同じように ask_orbit を呼び出し、エージェントの回答を中継します。誰かに知らせる前にサーバーが稼働していることを確認する、最短のエンドツーエンドチェックでもあります。

プロトコル自体を見たい場合、サーバーはHTTPS上の通常のJSON-RPCを話します。これは任意のターミナルから実行できるハンドシェイク全体です。

curl -X POST https://app.quickchat.ai/mcp/<your-agent-id> \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

レスポンスには、Configure MCPで書いた名前、説明、入力スキーマを含む1つのツールが一覧表示されます。呼び出しは、もう1つのリクエストです。

curl -X POST https://app.quickchat.ai/mcp/<your-agent-id> \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"ask_orbit","arguments":{"message":"What are Orbit rate limits on the free plan?"}}}'

返信はツール結果内の {"reply": "..."} として返ります。簡単なテストにはSDKもセッション処理も不要です。Mcp-Session-Id ヘッダーが重要になるのは、クライアントがフォローアップを1つの会話にスレッド化したい場合だけです。

Inboxで2つのAIの会話を見る

ここからが、この設定を運用していて面白い部分です。Inboxを開き、MCPトラフィックによって作成された会話を確認します。それらはMCPソース付きでマークされた通常の会話であり、ウィジェットやチャネルのトラフィックと同じ場所に並びます。

Quickchat AI Inboxのリスト。MCPトラフィックで作成された会話が赤いMCPソースアイコン付きで表示されている すべてのMCPのやり取りは、完全なトランスクリプトと、すでに追跡している他の情報を含む通常の会話としてInboxに入ります。

Inboxは、どのアプリが呼び出したかも記録します。会話を開き、Detailsを確認します。Channelフィールドにクライアント名が表示されます。Cursorは自身を識別するため、その会話は**“MCP Cursor”と表示されます。ChatGPTとClaudeは識別名を送らないため、一般的な”MCP.”**の下に入ります。

Cursorによって作成されたMCP会話のDetailsペイン。Channelフィールドが「MCP Cursor」と表示され、会話がAI Agentに割り当てられている Cursor由来の会話です。「MCP Cursor」とタグ付けされ、他の自動返信と同じようにAI Agentが処理しています。

ここで、この仕組みを本当に新しくしているひねりがあります。「visitor」は人ではありません。ユーザーの代わりに、呼び出し元AIが自分の言葉で書いています。 人間はCursorやClaudeに何かを入力しました。エージェントに届くのは、そのAIによる言い換えです。ユーザーの言葉にかなり近い場合もあれば、AIがまったく新しい整ったメッセージを作る場合もあります。実際の例を2つ並べます。

「The visitor is another AI」というタイトルの図。2つの実際のリクエストを比較している。Cursorはレート制限の質問をほぼそのまま中継し、Claudeはカジュアルなデモ依頼を、挨拶と連絡先情報の整った要約を含む丁寧でよく整ったメッセージに変換した 左: Cursorは質問をほぼそのまま渡しました。右: Claudeはカジュアルなデモ依頼から、丁寧なメッセージ全体を作成しました。どちらの場合も、エージェントが受け取ったテキストを誰かがそのまま入力したわけではありません。これは呼び出し元AI自身の言葉です。

これが、Inboxに記録されるものです。自社製品についての2つのAIシステム間の交渉であり、奇妙なほど実務的です。2つの会話を横に並べると、手品の種がはっきりします。左は開発者がClaudeに入力した内容とClaudeの返信です。右はQuickchat AI Inbox内の同じやり取りです。Claudeが作成したメッセージが「visitor」として届き、エージェントが通常どおり回答します。

2つの部屋での1つのやり取りを並べた図。左では、Claudeに入力されたカジュアルなデモ依頼とClaudeの返信。右では、Quickchat AI Inbox内の同じやり取り。Claudeの整ったメッセージがvisitorとして届き、エージェントが返信してリードを取得している 2つの部屋、1つの会話です。あなたはClaudeに話しかけます。Claudeは依頼を書き換えてエージェントに話しかけます。右側の整った「visitor」メッセージはClaudeの文言であり、人の文言ではありません。エージェントは「Jan」に感謝し、他のvisitorと同じように回答します。

Inboxで使っているものはすべて適用されます。Why AI said thatビュー、トピック、評価、エクスポートです。MCPトラフィックは別世界ではありません。1つのチャネルです。

エージェントはMCP経由でも能力を維持する

MCP呼び出しはWebサイトウィジェットと同じ返信パイプラインを実行するため、サイト向けに設定した機能はChatGPTやClaudeが呼び出したときにも動作します。最も分かりやすい実演はリード獲得です。OrbitのエージェントはSmart Data Gatheringを使用します。Actions & MCPsページでSmart Data Gatheringカードを開き、Edit Actionをクリックして設定します。キャンペーン名を「Demo and Scale plan leads」とし、収集する2つのフィールド(emailとcompany)を追加し、開発者がデモ、Scale料金、またはレート制限引き上げを依頼した場合のみ尋ねるように指定しました。通常のドキュメント質問では尋ねません。

「Demo and Scale plan leads」という名前のSmart Data Gatheringキャンペーンエディター。収集データのテーブルにemailとcompanyがあり、明示的なデモまたは料金リクエストに限定する説明が表示されている 実際のエディターです。キャンペーン名、フィールド、「ask only when…」の説明はすべてあなたが設定します。リード獲得の動作はここから来ます。Webサイトで使う場合と同じ設定です。

エンドツーエンドで動作する様子を見ます。開発者がClaude内で自分の詳細を提供し、エージェントがKnowledge Baseから回答し、Smart Data Gatheringが同じターンで会話に連絡先を保存します。メッセージ上にマークも付きます。

Quickchat AI Inbox内のClaudeが作成したvisitorメッセージ。Scaleプランとデモについて尋ね、エージェントの返信と、同じターンでリードが取得されたことを示す強調表示された「1 action called」マーカーが表示されている Inbox内のClaude作成メッセージです。通常のvisitorと同じように回答されています。強調表示された**「1 action called」**マーカーは、Smart Data Gatheringが同じターンでリードを取得したことを示します。

次に、チームはDetailsペインとリードエクスポートで取得済みの連絡先を確認できます。

Inbox DetailsペインのVisitorセクション。取得されたメールアドレスと会社名Acme Roboticsが表示されている 会話のDetailsペインに表示された取得済みリードです。スペースの都合で長いメールアドレスはペイン上で省略されています。完全なアドレスはメッセージ内にあります。

営業リードがClaude経由で届きました。 フォームもウィジェットも、Webサイトへの訪問もありません。

エージェントの他のツールキットも同様です。カスタムAI Actionsは、質問がMCP経由で届いた場合でも、ウィジェット上とまったく同じように発火します。そのため、機能リクエストをスプレッドシートに記録するエージェントや、社内APIを呼び出すエージェントは、どのAIアプリが質問したかに関係なく同じ動作を続けます。Inboxはそれらの呼び出しを同じ方法でマークします(メッセージ上の「N actions called」)。そのため、何が実行されたかを監査できます。

呼び出し元AIが中継すること、しないこと

このセクションを書く予定はありませんでした。最初のテスト実行で驚きがあり、その驚きがこの投稿で最も有用だったため、ここにあります。

Run 1: 呼び出し元AIに指摘されました。 OrbitのSmart Data Gatheringは連絡先情報を積極的に尋ねるよう設定されており、MCP Descriptionにはエージェントがドキュメント質問に回答する、とだけ書かれていました。Claudeに無害なレート制限の質問をしました。Claudeは事実を正しく中継した後、エージェントが追加したリード獲得の質問にフラグを立てました。

引用カード: Claudeが、ツール応答に「どの会社向けに構築しているか」を尋ねる質問が付け加えられていると指摘し、それは本物のドキュメント内容ではなく注入されたプロンプトのように読めるため無視すると述べている

もう一度読んでください。呼び出し元AIは、私たち自身のリード獲得をプロンプトインジェクションの試みとしてフラグ付けしました。 デモ用に詳細を渡すよう明示的に依頼すると、さらに強く拒否しました。ドキュメントQ&Aツールが突然個人情報を求めるのは、そのための正当なチャネルではないという判断です。

一度分かれば、診断は覚えておくべきメンタルモデルになります。呼び出し元モデルにとって、ツールが宣言したDescriptionは契約であり、ツールの出力はデータです。こちらの契約は「ドキュメント質問に回答する」でした。そのため、データ内に埋め込まれた連絡先情報の要求は約束されておらず、まさにインジェクション攻撃のように見えました。契約の1文を変えると、まったく同じ返信が、無視されるものから信頼されるものに変わりました。

ビフォーアフター図。同じエージェント返信に連絡先質問が付加されている。ドキュメント回答のみを約束するDescriptionでは、呼び出し元AIがプロンプトインジェクションとしてフラグ付けし無視する。フォローアップ依頼の登録も約束するDescriptionでは、呼び出し元AIが連絡先を渡し、リードが取得される Run 2では、Descriptionに1文(「it can also register a follow-up request: pass along the user’s contact details」)を追加しました。同じデータでも契約の内側に入ったため、Claudeはそれを通し、リードが取得されました。

1つ厄介な点が残りました。キャンペーンがまだ積極的に尋ねる設定だったため、通常の質問にもリード獲得の促しが付きました。そこでRun 3では、キャンペーン説明を、開発者がデモ、料金、または制限引き上げを明示的に依頼した場合のみ尋ねるように限定しました。その後、通常の質問には通常の回答だけが返り、呼び出し元AIは自分の言葉でフォローアップ経路を提示し始めました。“If you outgrow these limits, I can pass along a request to Orbit’s team for a rate limit increase or Scale plan pricing.”

3つの要約カード。1つ目は、Descriptionは契約であり、フォローアップ経路を含めてエージェントができることを宣言すること。2つ目は、呼び出し元モデルはパイプではなくフィルターであり、契約に一致するものを中継し、一致しないものを隔離すること。3つ目は、ユーザーとエージェントの間に2つのAI判断が入るため、データ収集を明示的なシグナルに限定すること

全体を結び付けるルールは次のとおりです。Configure MCPの3つの文字列(Name、Description、Command)は、エージェントが呼び出されるかどうか、いつ呼び出されるかを決めます。エージェント自身の設定は、呼び出された後に何を言うかを決めます。動作がおかしく見えるときは、まずその2つのレイヤーのどちらがそれを生んだのかを確認してください。

Human handoff: AIアプリを離れずにエスカレーションする

Human HandoffもMCP上で動作します。実用的に有用です。人が対応すべき質問を、ユーザーがChatGPTやClaudeを離れることなくチームへ届けられます。Claudeに、ドキュメントでは回答できない内容を尋ねました(防衛セクターのクライアント向けの署名済みDPAとオンプレミス導入)。Orbitは自分の範囲を超えていると認識し、その旨を述べてhandoffしました。

Inbox内のhandoffのやり取り。DPAとオンプレミス導入に関するAIが書いたvisitorメッセージと、人によるフォローアップを示すエージェントの返信 エージェントは知らないことを認識し、きれいにエスカレーションしました。依頼と、取得した連絡先情報は、チームが対応できる未割り当ての会話としてInboxに届きます。

これが利点です。人が必要なリードが、取得済みの状態で、フォローアップに必要な情報とともにキューに入っています。MCPは1つの質問と1つの回答なので、フォローアップ自体はAIアプリ内ではなくあなた側(メール、電話)で行われます。そのため、handoffでは連絡先情報を収集します。多くの質問では、迅速な文書化済み回答で十分です。エージェントがそれを処理します。少数の人が必要な質問は、チームへルーティングします。

これは安全ですか?

短く言うと、Webサイトウィジェットと同程度に安全であり、デフォルトはより厳格です。境界がプロンプトではなくツール一覧である理由については、パッケージマネージャー内の70,000件のメッセージが参考になります。

  • デフォルトでprivate。 新しいMCPサーバーにはサインインが必要です。AIアプリは標準のQuickchat AIログインへリダイレクトし、ワークスペースのメンバーだけが通過できます。何も公開せずに、内部ドキュメント用のオラクルを構築、テスト、使用できます。未認証のリクエストには、通常の401チャレンジが返ります。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer error="invalid_token",
  resource_metadata="https://app.quickchat.ai/.well-known/oauth-protected-resource/mcp/<id>"
  • URLは秘密ではなくアドレスです。 URL内のエージェントIDは、Webサイトウィジェットが公開しているものと同じ識別子です。それを知っているだけでは不十分です。可視性トグルがアクセス制御です。
  • ツールはエージェントに質問します。その影響はエージェントの機能に依存します。 このチャネルは、別個のアカウント管理ツールを公開しません。会話の保存、AIクレジットの消費、Knowledge Baseからの回答、有効化されたActionsの実行は行います。Actionは外部システムを変更できるため、アクセスを共有する前に、その権限とエージェントに利用可能なナレッジを確認してください。質問応答インターフェースであることは、読み取り専用動作の保証ではありません。
  • publicにすることは課金判断でもあります。 **Require sign-in (private)**をオフにすると、リンクを持つ誰でもサインインせずにエージェントを使用できます。publicツールを共有する目的はそこにあります。ウィジェットと同じルールが適用されます。すべての返信がプランのメッセージクレジットを消費し、すべての呼び出し元がエージェントのレート制限を共有します(こちら側の分単位と日単位の上限により、1人の呼び出し元がすべてを使い切ることは防ぎます)。クレジットが尽きた場合、ツールは黙って失敗するのではなく、エージェントが現在利用できないと回答し始めます。
  • 受信する質問は信頼できない入力として扱ってください。 呼び出し元モデルは、エージェントからの予期しない要求をフィルタリングできますが、それはあなた自身のActionsに対するセキュリティ境界ではありません。接続サービスの範囲を限定し、その呼び出しを受け取るシステム側で認可を強制してください。publicの呼び出し元は、エージェントの有効な機能が許可するあらゆることを求められます。指示だけで、非公開データや特権操作を保護すべきではありません。

本番公開

ローンチチェックリストは、次の順序です。

  1. ナレッジを先に整える。 エージェントは、他人のAIアプリ内で引用されることになります。Knowledge Baseが繰り返してほしい事実を述べていることを確認し、デプロイします。
  2. 3つの文字列をAPI契約のように書く。 Name、Description、Commandです。リード獲得を使う場合は、フォローアップ機能を宣言します。
  3. privateでテストする。 Require sign-inをオンのままにし、自分のClaudeまたはChatGPTを接続して、冒頭の表にある5つの動作を実行します。カバーされている質問、カバーされていない質問、リード、handoff、フォローアップです。
  4. 1日Inboxを見る。 InboxはMCPトラフィックを示し(Cursorは具体的に名前も付きます)、トランスクリプトから呼び出し元AIがどう表現するかが分かります。仕様書よりも、10件の実際のやり取りから多くを学べます。
  5. その後、publicについて判断する。 リンクを持つ誰に対しても自分のクレジットで提供したい場合だけ、トグルを切り替えます。製品の背後にあるドキュメントアシスタントでは、publicが通常適切です。内部ナレッジオラクルでは、privateであること自体が機能です。
  6. ユーザーがすでにいる場所でURLを共有する: ドキュメントページ、README、Discordです。URLがオンボーディング全体です。

関連ガイド

よくある質問

AI Agent向けのMCPサーバーとは何ですか?

MCP(Model Context Protocol)サーバーは、AI Agentの機能を、他のAIアプリが呼び出せるツールとして公開する標準エンドポイントです。ユーザーがChatGPT、Claude、Cursorなどの対応アプリでQuickchat AI Agentのサーバーを接続すると、そのアプリは質問応答ツールを検出し、Knowledge Baseから回答を要求できます。これはWebサイトのウィジェットと同じ考え方ですが、呼び出し元が人ではなく別のAIアプリであり、接続全体が1つのホスト済みURLで完結する点が異なります。

AI AgentにMCPサーバーを持たせるために、コードを書いたりホスティングしたりする必要はありますか?

いいえ。すべてのQuickchat AI Agentには、ホスト済みMCPサーバーが組み込まれています。ダッシュボードで有効にし、https://app.quickchat.ai/mcp/your-agent-id 形式のURLをコピーして、ChatGPT、Claude、Cursor、または他のMCPクライアントに貼り付けます。ホスティングと保守は自動で行われ、接続にコードは不要です。

ChatGPT、Claude、Cursorは自社のナレッジベースから質問に回答できますか?

はい。Quickchat AI AgentのMCPサーバーURLをコネクターとして接続すると、AIアプリはエージェントに質問するためのツールを1つ取得します。エージェントはKnowledge Baseから回答し、アプリがその回答を中継するため、ユーザーはモデルの推測ではなく、文書化済みの事実を受け取れます。

AI AgentをMCPサーバーとして公開するのは無料ですか?

はい。MCPはFreeプランを含むすべてのQuickchat AIプランに含まれているため、無料アカウントでこのガイド全体を実行できます。エージェントが生成する各返信は、Webサイトウィジェットでの返信と同じように、プランのAIメッセージクレジットを消費します。

カスタムMCPコネクターをサポートするChatGPTプランはどれですか?

カスタムMCPコネクターはChatGPTのdeveloper modeの背後にあり、有料のChatGPTプランが必要です。Claudeは無料プランでカスタムコネクターをサポートします(1つに制限)。CursorはすべてのプランでリモートMCPサーバーをサポートします。どのアプリが接続しても、Quickchat AI側の動作は同じです。

MCPサーバーは実際に何ができますか?Quickchat AIアカウントを変更できますか?

エージェントに質問するためのツールを1つ公開します。設定の編集、Knowledge Baseの管理、他のエージェントの管理に使う別個のアカウント管理ツールは公開しません。エージェントはKnowledge Baseから回答し、会話を保存し、AIクレジットを消費し、有効化されたActionsを実行できます。外部システムを変更する呼び出しも含まれます。アクセスを共有する前に、このエージェントで利用可能なナレッジとActionsを確認してください。メッセージクレジット制限とレート制限は引き続き適用されます。

MCPサーバーURLは秘密ですか?誰かに見つかった場合はどうなりますか?

URLにはエージェントの公開scenario idが含まれます。これはWebサイトウィジェットがすでに公開しているものと同じ識別子です。そのため、秘密ではなくアドレスとして扱ってください。アクセスは**Require sign-in (private)**トグルで制御します。Private(デフォルト)は、チーム内のサインイン済みメンバーだけが接続できることを意味します。Publicは、リンクを持つ誰でもエージェントを使用でき、すべての返信があなたに課金され、呼び出し元がエージェントのレート制限を共有することを意味します。

エージェントがMCP経由で呼び出された場合も、AI Actionsとhuman handoffは動作しますか?

はい。MCP呼び出しはWebサイトウィジェットと同じ返信パイプラインを通るため、Knowledge Baseの回答、カスタムAI Actions、Smart Data Gathering(リード獲得)、Human Handoffは、ChatGPT、Claude、Cursorがエージェントを呼び出した場合もすべて実行されます。たとえばhandoffでは、ユーザーがAIアプリを離れることなく、会話と取得済みの連絡先情報がチームのフォローアップ用にInboxへ送られます。

自社データやナレッジベースをChatGPTに接続するにはどうすればよいですか?

データをQuickchat AI AgentのKnowledge Baseに入れ、MCPサーバーを有効にし、そのサーバーURLをコネクターとしてChatGPTに追加します。するとChatGPTはエージェントに質問するツールを取得し、エージェントはデータから回答します。コードは不要です。Knowledge Baseがデータソースで、MCPサーバーが接続なので、他に配線するものはありません。同じURLはClaudeとCursorでも機能します。

コードを書かずにMCPサーバーを構築するにはどうすればよいですか?

構築する必要はありません。すべてのQuickchat AI Agentは、すでにホスト済みのMCPサーバーです。ダッシュボードでナレッジを追加し、MCPサーバーを有効にし、単一の質問ツールに名前を付け、URLをコピーします。Quickchat AIがサーバーを実行、保守するため、ノーコードのMCPサーバーは数分で用意できます。

ChatGPTやClaudeが、エージェントのフォローアップ質問の中継を拒否するのはなぜですか?

呼び出し元AIが、ツールの説明を契約として扱うためです。エージェントが連絡先情報を求めても、MCPの説明にドキュメント質問への回答のみと書かれている場合、呼び出し元モデルはその予期しない要求をプロンプトインジェクションの可能性として読み取り、フィルタリングします。MCP Descriptionフィールドにその機能を記述し、データ収集を明示的な依頼に限定すると、クライアントが意図された動作を理解しやすくなります。それでも、フォローアップ質問を中継するか、許可を求めるかはクライアントが判断します。

エージェントをMCPサーバーとして公開することと、エージェントをMCPサーバーに接続することの違いは何ですか?

方向です。このガイドは提供側についてです。つまり、エージェントがChatGPT、Claude、Cursorから呼び出されるツールになります。逆方向は利用側です。たとえばShopifyのような他者のMCPサーバーをエージェントがツールとして呼び出し、ライブのストアデータに対して操作します。Quickchat AI Agentはこの両方を同時に実行できます。

ChatGPTやClaudeが実際にエージェントへ何を尋ねたかを確認するにはどうすればよいですか?

Quickchat AI Inboxを開きます。すべてのMCPのやり取りはMCPソースバッジ付きの会話として記録され、visitorメッセージは呼び出し元AIが書いた文です。通常は、そのユーザーが入力した内容の言い換えです。同じセッション内のフォローアップ質問は、同じ会話に入ります。

まとめ

Quickchat AI Agentは、これで両方向に動作します。自社チャネルでユーザーと話し、同時にツールとして他のAIにも回答します。統合全体は1つのホスト済みURLで、デフォルトはprivate、無料枠にも含まれます。すでに保守しているナレッジは、ユーザーが自社製品について尋ねたときにChatGPT、Claude、Cursorが引用するものになります。リードは他人のAIアプリ内から届き、すべてのやり取りは2つのAIの読みやすい会話としてInboxに入ります。

構築は30分です。通常どおり、重要な作業は言葉にあります。呼び出し元モデルにエージェントの用途を伝える3つの文字列と、その回答を中継する価値のあるものにするナレッジです。

設定リファレンス: ドキュメントのGet your MCP server URL。