LINE Bot MCP Serverの使い方|AIエージェントとLINE公式アカウントを連携
LINEが公開している公式のLINE Bot MCP Serverを使い、Claude DesktopなどのAIエージェントからLINE公式アカウントのメッセージ送信・一斉配信・プロフィール取得・リッチメニュー管理を行う方法。ツール一覧、npx/Dockerでの設定、メッセージ通数、セキュリティ、できないことを解説します。

#LINE Bot MCP Serverでできること
LINE Bot MCP Serverは、AIエージェントとLINE公式アカウントをつなぐ、LINE公式のオープンソースのMCPサーバーです。Claude DesktopなどのMCPクライアントに追加すると、「このユーザーにメッセージを送って」「友だち全員に配信して」「今月の残り通数は?」「リッチメニューを作って」と自然な言葉で頼むだけで、エージェントがMessaging APIを呼び出します。LINEを運営するLINEヤフー株式会社(LY Corporation)が2025年4月にGitHubのline/line-bot-mcp-serverでApache 2.0ライセンスのもと公開しました。2026年10月時点でnpmの最新版は0.5.0で、READMEでは引き続き試験利用向けのプレビュー版とされています。
誰が何を提供しているかを明確にしておきます。このMCPサーバーはLINEのツールです。LineBot.proはMCPサーバーもMCP連携も提供していません。本記事では、LINEのサーバーの仕組み、安全な設定方法、できないことを解説し、最後に当社のようなツールとの組み合わせ方を紹介します。
#できること・できないこと
- できること: あなたやチームメンバーがAIアシスタントを通じてLINE公式アカウントを操作すること。送信、一斉配信、アカウント情報の一部の取得、リッチメニューの管理です。
- チャットボットではありません。 Webhookを持たないため、お客様からのメッセージを受け取りません。誰かがエージェントに指示したときだけ動きます。お客様への自動応答には、Webhookで動くボット(LINE BotとLIFFアプリにAI機能を組み込む方法を参照)か、既製のLINEチャットボットが必要です。
- 完成版ではありません。 LINEの告知では、試験的に公開しておりMessaging APIの機能をすべてサポートしているわけではない、とされています。
#Model Context Protocol(MCP)とは
Model Context Protocol(MCP)は、AIアプリケーションを外部のシステムにつなぐためのオープンな標準規格です。Anthropicが2024年11月25日にオープンソースとして公開し、現在はClaude、ChatGPT、Visual Studio Code、Cursorなど多くのAIアプリや開発ツールが対応しています(modelcontextprotocol.io、2026年10月時点)。
押さえておきたい役割は3つです。
| 役割 | 内容 | 本記事での例 |
|---|---|---|
| MCPホスト | ユーザーが対話するAIアプリ | Claude Desktopなど |
| MCPクライアント | ホストが各サーバーとの間に開く接続 | Claude Desktopが自動で作成 |
| MCPサーバー | ツール・リソース・プロンプトを提供するプログラム | LINE Bot MCP Server |
ホストは各サーバーにどのツールがあるかを問い合わせ、モデルがツールを使うと判断すると、その呼び出しをサーバーに送って結果をモデルに返します。通信方式(トランスポート)は2種類で、ホストが起動して手元のPCで動かすstdioと、リモートのサーバー向けのStreamable HTTPです。LINE Bot MCP Serverはstdioを使うため、サーバーはあなたのPC上で動き、チャネルアクセストークンも手元の設定ファイルにだけ置かれます。
あなた → AIアプリ(MCPホスト:Claude Desktopなど)
│ stdio
▼
LINE Bot MCP Server(あなたのPC上で動作)
│ HTTPS + チャネルアクセストークン
▼
LINE Messaging API → LINE公式アカウント → 友だち
#ツール一覧と必要なもの
npmのバージョン0.5.0で使えるツールは次のとおりです(READMEとパッケージを2026年10月14日に確認)。
| ツール | 内容 | 主な入力 | メッセージ通数の消費 |
|---|---|---|---|
| push_text_message | 1人のユーザーにテキストを送信 | userId(またはDESTINATION_USER_ID)、message.text | あり(1通) |
| push_flex_message | 1人のユーザーにFlex Message(バブルまたはカルーセル)を送信 | userId、message.altText、message.contents | あり(1通) |
| broadcast_text_message | 友だち全員にテキストを送信 | message.text | あり(届いた友だち1人につき1通) |
| broadcast_flex_message | 友だち全員にFlex Messageを送信 | message.altText、message.contents | あり(届いた友だち1人につき1通) |
| get_profile | ユーザーの表示名、プロフィール画像URL、ステータスメッセージ、言語を取得 | userId | なし |
| get_message_quota | 当月の上限通数と利用状況を取得 | なし | なし |
| get_rich_menu_list | アカウントのリッチメニュー一覧を取得 | なし | なし |
| create_rich_menu | 1〜6個のアクションでリッチメニューを作成し、シンプルな画像を生成・アップロードしてデフォルトに設定 | chatBarText、actions | なし |
| delete_rich_menu | リッチメニューを削除 | richMenuId | なし |
| set_rich_menu_default | リッチメニューをデフォルトに設定 | richMenuId | なし |
| cancel_rich_menu_default | デフォルトのリッチメニューを解除 | なし | なし |
| get_follower_ids | 友だちのユーザーIDをページごとに取得 | start、limit | なし |
GitHubのREADMEにはget_group_summary(グループトークの名前とアイコンの取得)も掲載されていますが、確認時点ではnpmの0.5.0には含まれていませんでした。今後のリリースで追加される見込みです。
使う前に知っておきたいこと:
- プッシュ配信と一斉配信は月間のメッセージ通数を消費します。 一斉配信は届いた友だち1人につき1通です。LINEでは応答メッセージ(リプライ)は通数にカウントされませんが、このサーバーはWebhookを持たず応答トークンを受け取らないため、リプライはできません。
- get_follower_idsは、認証済アカウントまたはプレミアムアカウントでのみ使えます(Messaging APIの制限)。
- create_rich_menuは内蔵テンプレートにボタン名を入れたシンプルな画像を作り、そのメニューを全員向けのデフォルトに設定して既存のデフォルトを置き換えます。また、Messaging APIで設定したデフォルトのリッチメニューは、LINE Official Account Managerで設定したものより優先されます(Messaging APIリファレンス)。まずテスト用アカウントで試しましょう。
- push_flex_messageとbroadcast_flex_messageのFlex MessageのJSONはモデルが書きます。 送信前に確認するか、検証済みのJSONをエージェントに渡しましょう。
#必要なもの
- npxで使う場合はNode.js 22以降、またはDocker。
- Messaging APIを有効にしたLINE公式アカウント。
- そのアカウントのチャネルアクセストークン(長期)。テスト時の既定の送信先として自分のユーザーID(任意)。
#Claude Desktopでの設定手順
#ステップ1:Messaging APIを有効にする
LINE Official Account Managerの設定 → Messaging APIから利用を開始します。これでLINE Developersコンソールのプロバイダーの下にMessaging APIチャネルが作成されます。アカウントがまだない場合は、先にLINE公式アカウントの作り方をご覧ください。試験利用には、本番とは別のテスト用アカウントを使いましょう。
#ステップ2:チャネルアクセストークンとユーザーIDを取得する
LINE Developersコンソールでチャネルを開きます。
- Messaging API設定タブ:**チャネルアクセストークン(長期)**を発行します。これがCHANNEL_ACCESS_TOKENです。
- チャネル基本設定タブ:あなたのユーザーID(Uで始まる文字列)をコピーします。DESTINATION_USER_IDに設定すれば、テストメッセージが自分に届きます。
#ステップ3:Claude Desktopにサーバーを追加する
Claude DesktopでSettings → Developer → Edit Configを開くと、claude_desktop_config.jsonが開きます(macOSは~/Library/Application Support/Claude/、Windowsは%APPDATA%\Claude\)。LINEのREADMEにある設定を追加します。
{
"mcpServers": {
"line-bot": {
"command": "npx",
"args": ["@line/line-bot-mcp-server"],
"env": {
"NPM_CONFIG_IGNORE_SCRIPTS": "true",
"CHANNEL_ACCESS_TOKEN": "FILL_HERE",
"DESTINATION_USER_ID": "FILL_HERE"
}
}
}
}
| 変数 | 必須 | 意味 |
|---|---|---|
| CHANNEL_ACCESS_TOKEN | 必須 | ステップ2で発行したチャネルアクセストークン(長期) |
| DESTINATION_USER_ID | 任意 | ツールの呼び出しにuserIdが含まれないときの既定の送信先 |
| NPM_CONFIG_IGNORE_SCRIPTS | 任意(LINEの設定例に記載) | npxがパッケージを取得するときにインストールスクリプトを実行しないようnpmに指示 |
npxは毎回最新版を取得します。プレビュー版なので、"@line/line-bot-mcp-server@0.5.0"のようにバージョンを固定し、計画的に更新するのも一案です。
#別の方法:Docker
LINEのREADMEでは、ソースコードからイメージをビルドします(ビルド済みイメージの記載はありません)。
git clone https://github.com/line/line-bot-mcp-server.git
cd line-bot-mcp-server
docker build -t line/line-bot-mcp-server .
{
"mcpServers": {
"line-bot": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "CHANNEL_ACCESS_TOKEN",
"-e", "DESTINATION_USER_ID",
"line/line-bot-mcp-server"
],
"env": {
"CHANNEL_ACCESS_TOKEN": "FILL_HERE",
"DESTINATION_USER_ID": "FILL_HERE"
}
}
}
}
#ステップ4:再起動してテストする
Claude Desktopを完全に終了して起動し直すと、ConnectorsにLINEのツールが表示されます。次のように頼んでみましょう。
LINEで私に「Claudeからこんにちは」と送って。
Claudeはツールを実行する前にあなたの許可を求め、DESTINATION_USER_ID宛てにpush_text_messageを呼び出します。メッセージはあなたのLINEに届き、アカウントの通数を1通消費します。
ツールが表示されない場合は、MCPのログ(macOSは~/Library/Logs/Claude、Windowsは%APPDATA%\Claude\logs)を確認します。Claudeを使わずにツールを試したいときは、READMEにあるMCP Inspectorが使えます。
# inside a clone of line/line-bot-mcp-server
npm install
npm run build
npx @modelcontextprotocol/inspector node dist/index.js \
-e CHANNEL_ACCESS_TOKEN="YOUR_CHANNEL_ACCESS_TOKEN" \
-e DESTINATION_USER_ID="YOUR_USER_ID"
#AIエージェントに頼めること
| 依頼の例 | エージェントが呼ぶツール | 通数の消費 |
|---|---|---|
| 「今月はあと何通送れる?」 | get_message_quota | なし |
| 「U1234…さんに、本日は18時閉店と伝えて」 | push_text_message | 1通 |
| 「ラテ1杯買うと1杯無料のカードを、メニューボタン付きで私に送って」 | push_flex_message | 1通 |
| 「月曜は祝日のため休業と一斉配信して」 | broadcast_text_message | 友だち1人につき1通 |
| 「このお客様のLINEの言語設定は?」 | get_profile | なし |
| 「リッチメニューは何がある?デフォルトはどれ?」 | get_rich_menu_list | なし |
| 「メニュー・予約・地図のボタンがあるリッチメニューを作って」 | create_rich_menu | なし(ただしデフォルトのメニューが置き換わる) |
#Flex Message
push_flex_messageとbroadcast_flex_messageでは、エージェントがFlexコンテナ(バブルまたはカルーセル)をmessage.contentsとして渡し、通知に表示されるaltTextを添えます。最小限のバブルの例:
{
"type": "bubble",
"hero": {
"type": "image",
"url": "https://example.com/latte.jpg",
"size": "full",
"aspectRatio": "20:13",
"aspectMode": "cover"
},
"body": {
"type": "box",
"layout": "vertical",
"contents": [
{ "type": "text", "text": "Iced latte: buy 1 get 1", "weight": "bold", "size": "lg", "wrap": true },
{ "type": "text", "text": "Today until 6 pm", "size": "sm", "color": "#666666" }
]
},
"footer": {
"type": "box",
"layout": "vertical",
"contents": [
{ "type": "button", "style": "primary", "action": { "type": "uri", "label": "See menu", "uri": "https://example.com/menu" } }
]
}
}
画像はLINEがアクセスできるHTTPSのURLである必要があります。まず自分宛てに送って確認してから一斉配信しましょう。
#向いている使い方
- オーナー・店長の作業: キャンペーン前の残り通数の確認、希望したお客様への個別連絡、臨時休業の告知。
- 作成とテスト: エージェントにFlex Messageを作らせ、自分のアカウントに送ってスマートフォンで確認。
- アカウントの整理: リッチメニューの一覧、デフォルトの切り替え、古いメニューの削除。
向いていないこと:お客様への自動応答、配信の予約、一部のお客様だけへの配信。このサーバーにはWebhook、予約配信、絞り込み配信(ナローキャスト)の機能がありません。
#独自のMCPツールを追加する
LINEのツールは汎用的です。たとえばpush_text_messageは、モデルが指定したどのユーザーIDにも送信します。業務で使うなら、1つのことだけを行い、送信先は自社のデータベースから引く小さなMCPサーバーを自作するほうが安全な場合が多いでしょう。モデルは「注文A1024の状況を送って」とは頼めても、誰に届くかは選べません。
// shop-line-tools.ts: your own MCP server, next to LINE's
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { messagingApi } from "@line/bot-sdk"
import { z } from "zod"
import { findOrder } from "./orders" // your own database code
const line = new messagingApi.MessagingApiClient({
channelAccessToken: process.env.CHANNEL_ACCESS_TOKEN!,
})
const server = new McpServer({ name: "shop-line-tools", version: "1.0.0" })
server.registerTool(
"send_order_status",
{
title: "Send order status",
description: "Look up an order and push its current status to the customer who placed it.",
inputSchema: { orderId: z.string().describe("Order number, for example A1024") },
annotations: { destructiveHint: true },
},
async ({ orderId }) => {
const order = await findOrder(orderId)
if (!order?.lineUserId) {
return { content: [{ type: "text", text: "Order not found, or the customer isn't linked to LINE." }], isError: true }
}
// The recipient comes from your database, never from the model.
await line.pushMessage({
to: order.lineUserId,
messages: [{ type: "text", text: "Order " + orderId + ": " + order.statusLabel }],
})
return { content: [{ type: "text", text: "Sent the status of order " + orderId + "." }] }
},
)
await server.connect(new StdioServerTransport())
この例のポイント:
- 公式の@line/bot-sdk(バージョン11はNode.js 22以降が必要)とTypeScript版のMCP SDKを使っています。LINEのサーバー自体も、registerToolとstdioトランスポートで同じように作られています。
- ESモジュールとして実行し(トップレベルawaitを使用)、ログはstdoutではなくstderrに出力します。stdioではstdoutがプロトコルの通信に使われるためです。
- このツールのプッシュ配信も、通常のプッシュ配信と同じく通数を消費します。
同じ設定ファイルで、LINEのサーバーと並べて登録します。
{
"mcpServers": {
"line-bot": {
"command": "npx",
"args": ["@line/line-bot-mcp-server"],
"env": {
"NPM_CONFIG_IGNORE_SCRIPTS": "true",
"CHANNEL_ACCESS_TOKEN": "FILL_HERE",
"DESTINATION_USER_ID": "FILL_HERE"
}
},
"shop-line-tools": {
"command": "node",
"args": ["/absolute/path/to/dist/shop-line-tools.js"],
"env": { "CHANNEL_ACCESS_TOKEN": "FILL_HERE" }
}
}
}
#双方向のボットにはWebhookが必要
MCPサーバーは、エージェントに呼ばれたときだけ動きます。お客様のメッセージに反応する(通数を消費しない応答APIで数秒以内に返信する)には、LINEの署名を検証して返信するWebhookのエンドポイントが必要です。これは別の構成で、LINE BotとLIFFアプリにAI機能を組み込む方法とLINEチャットボットの作り方で解説しています。
#セキュリティ・通数・運用のポイント
| リスク | 対策 |
|---|---|
| チャネルアクセストークンが漏れると、誰でもアカウント名義で送信できる | 手元の設定ファイルかシークレット管理に保管し、リポジトリや共有するプロンプトには書かない。漏れたらLINE Developersコンソールで再発行する。 |
| エージェントが誤った内容を送信・一斉配信する | ツール実行前の承認を有効にしておく。LINEは送信系・リッチメニュー系のツールに破壊的操作の注釈(destructiveHint)を付けており、クライアントが警告できる。送信済みのメッセージは編集・削除できない。 |
| 一斉配信で月間の通数を使い切る | 先にget_message_quotaで確認する。一斉配信は届いた友だち1人につき1通を消費する。 |
| create_rich_menuがお客様に見えるメニューを置き換える | 別のLINE公式アカウントでテストし、デザイン済みメニューのIDを控えてset_rich_menu_defaultで戻せるようにする。 |
| 顧客情報がAIとの会話に残る | get_profileは名前・画像・ステータスメッセージを返す。必要な分だけ取得し、各国の個人情報保護法(日本の個人情報保護法、タイと台湾のPDPA)に従う。 |
| プレビュー版の仕様変更 | npmのバージョンを固定し、更新前にリリースノートを読む。 |
習慣にしたいこと:
- 試験はテスト用のLINE公式アカウントで行う(コミュニケーションプランで十分)。
- お客様に届く文面は一字一句指定し、送信前にエージェントに表示させて確認する。
- チームで頻繁に使う操作は、汎用ツールではなく用途を絞った独自ツールにする。
#LineBot.proとの関係
LineBot.proにはMCPサーバーがなく、本記事の手順にLineBot.proは不要です。そのうえで、LINEのサーバーの周辺で役立つ場面が3つあります。
- デザインされたFlex Message。 AIリッチメッセージ作成ツールは、ヒーロー画像(1200 × 675 px)・見出し・本文・ボタンを備えたFlexカードとそのJSONを8クレジットで作成します。JSONをコピーしてpush_flex_messageで送るようエージェントに頼めば、モデルにレイアウトを即興させずに済みます。
- デザインされたリッチメニュー。 create_rich_menuはシンプルなテンプレート画像を描きます。AIリッチメニュー作成ツールは1〜6ボタンのブランドに合った画像とJSONを10クレジットで生成し、メニューはLINE Official Account Managerでアップロードします。
- コード不要の一斉配信。 配信だけが目的なら、LineBot.proのキャンペーン機能がAIでメッセージを作り、友だち全員または貼り付けたユーザーIDのリストへ、即時または予約で配信します。送信は0クレジットで、LINEの通数はそのまま適用されます。
独自のMCPツール、Webhookで動くボット、自社システムとの連携が必要な場合は、LINE APIの受託開発でご相談ください。新規登録で50クレジットが無料で付与され、クレジットは月額料金のない買い切りパックです。
#よくある質問
Q: LINE Bot MCP ServerはLINEの公式ツールですか?
はい。LINEを運営するLINEヤフー株式会社がGitHubのlineオーガニゼーションで公開し、2025年4月にLINE Developersサイトで告知しました。現在もプレビュー版です。
Q: 無料で使えますか?
サーバー自体はオープンソース(Apache 2.0)で無料です。ただし、プッシュ配信や一斉配信したメッセージはLINE公式アカウントの月間通数を消費し、利用するAIアプリにも別途料金がかかる場合があります。
Q: お客様への自動応答に使えますか?
使えません。Webhookがないため届いたメッセージを見ることができず、あなたがエージェントに指示したときだけ動きます。自動応答にはWebhookで動くボットが必要です。
Q: どのAIアプリで使えますか?
手元でstdioのサーバーを起動できるMCPクライアントであれば使えます。LINEのREADMEにはClaude DesktopとClineの設定例があります。
Q: LineBot.proにMCPサーバーはありますか?
ありません。LineBot.proはAIでリッチメニュー、Flex Message、バナーを作成し、キーワード応答ボットとキャンペーン配信を提供しています。LineBot.proで作ったFlexのJSONはLINEのMCPサーバー経由で送信でき、独自のMCPツールは受託開発で対応します。
Q: AIエージェントにチャネルアクセストークンを渡しても安全ですか?
トークンは手元の設定ファイルに置かれ、サーバーもあなたのPCで動きます。ただし、トークンを使えるものは何であれ友だちにメッセージを送れます。テスト用アカウントから始め、ツール実行前の承認を有効にし、漏えいした場合はすぐに再発行してください。
次のステップ:
- 最新のツールはLINEのGitHubのREADMEで確認する
- LINE BotとLIFFアプリにAI機能を組み込む方法でWebhookのボットを作る
- エージェント経由で送るFlex Messageのカードを作る
- LINE APIの受託開発について相談する
LineBot.proについて
LineBot.proは、LINE公式アカウント向けのAIツールです。リッチメニュー、リッチメッセージ、バナーの作成、一斉配信、キーワードによる自動応答に対応しています。本記事はLINE Messaging APIの実務経験をもとに、当チームが執筆しています。
お問い合わせ関連記事

LINE BotとLIFFアプリにAI機能を組み込む:設計とコード例【2026】
LINEにAIを組み込む開発者向けガイド。LINEの制約に沿ったWebhook構成、@google/genaiによる根拠付きのGemini回答、承認済みの返信をAIに選ばせる方法、お客様の写真、LIFF・LINEミニアプリのセキュリティ、コスト、実運用の事例を解説します。
続きを読む
LINE Botの作り方 2026:Messaging API開発入門
Messaging APIでLINE Botを作る手順を、チャネルの準備からWebhookの署名検証、Flexメッセージとクイックリプライ、ポストバックを使った予約フロー、FAQに限定したAI回答、デプロイまで解説します。Node.js(@line/bot-sdk v11)とPython(line-bot-sdk v3)のコード付きです。
続きを読む
@line/bot-sdk Expressミドルウェア実装例(v11)
@line/bot-sdk v11のExpress+TypeScriptによるWebhook実装例。middleware()を置く場所、Node.js・Python・PHPでのvalidateSignature、Flex Messageを使ったreplyMessage、sentMessagesと引用トークン、実際に出るエラーと対処を解説します。
続きを読む