1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LINE Bot MCPサーバーの作り方(Python)

1
Posted at

LINE Botから自分のLINEアカウントにメッセージを送信するMCPサーバーを作ることができたので、作り方についてまとめます。PythonのFastMCPというライブラリを使うことにより少ないコード量で作成でき、Linux PCやラズパイ等のシングルボードコンピュータ(SBC)で実行できます。

また、タイトルから少し脱線しますが、記事の最後で「スタックチャン」という手のひらサイズのコミュニケーションロボットをAIエージェント(MCPホスト)として、音声操作でMCPサーバを使用する事例も紹介します。

1. 開発環境

  • Linux PCまたはラズパイ等のSBC
  • Python3
    • ライブラリ:FastMCP

2. 事前準備

2.1. LINE Botの作成

こちらの記事等を参考に、以下の準備を事前に完了してください。
LINE Bot のセットアップ @しげる

  • Bot (LINE公式アカウント) を作成
  • Messaging APIを有効化
  • チャネルアクセストークンを発行
  • 自分のLINEアカウントでBotを友だちに追加
  • 自分のユーザーIDを取得

ここで取得したアクセストークンとユーザーIDをMCPサーバーのプログラムで使用します。

3. 作り方

3.1. 必要なソフトウェアをインストール

uvをインストール

こちらの記事等を参考にインストールします。
uv の使い方 @npaka

プロジェクトを作成

uvのプロジェクトを作成します。以降はこのプロジェクトのフォルダ内で作業します。

uv init -p 3.10 project
cd project

ライブラリをインストール

uv add fastmcp
uv add line-bot-sdk

3.2. MCPサーバーのプログラミング

次のPythonスクリプトをmain.pyというファイル名でプロジェクトフォルダに保存します(ファイル名は任意で大丈夫です)。

main.py
import os
from fastmcp import FastMCP
from linebot import LineBotApi
from linebot.models import TextSendMessage

mcp = FastMCP("LINE MCP Server")

CHANNEL_ACCESS_TOKEN = os.environ.get("LINE_BOT_ACCESS_TOKEN")
USER_ID = os.environ.get("LINE_USER_ID")

if not CHANNEL_ACCESS_TOKEN or not USER_ID:
    raise RuntimeError("LINE_BOT_ACCESS_TOKEN and/or LINE_USER_ID environment variables are not set.")

line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)

@mcp.tool()
def send_line_message(message: str) -> str:
    '''
    Send a message to the configured LINE user ID.

    Args:
        message: The message to send to the LINE user.
    Returns:
        result
    '''
    try:
        line_bot_api.push_message(USER_ID, TextSendMessage(text=message))
        return "Message sent successfully."
    except Exception as e:
        return f"Failed to send message: {e}"


if __name__ == "__main__":
    mcp.run(
        transport="sse",
        host="0.0.0.0",
        port=8020
    )

解説:
FastMCPのおかげで非常に簡単なコードでMCPツールを実装することができています。@mcp.tool()以下で定義された関数send_line_message()が、引数で受けた文字列をBotから自分のLINEアカウントへのメッセージとして送信するツールの実装です。

mcp.run()の引数を「transport="sse"」とすることで、トランスポートをStreamable HTTPとしています。こうすることで、異なるPCからでもIPアドレスとポートを指定することでこのMCPサーバーを利用することができます。

アクセストークンと自分のLINEアカウントのユーザーIDは、環境変数から読み込んでいるため、実行前に次のように環境変数として設定してください。

export LINE_BOT_ACCESS_TOKEN=********
export LINE_USER_ID=********

3. 使い方

3.1. Clineで使用する例

VSCodeの拡張機能ClineでMCPサーバーを利用する方法です。Cline自体のインストールやLLMのAPIキーの登録等については割愛します。

作成したMCPサーバーを実行しておきます。

cd (プロジェクトフォルダ)
uv run main.py

Clineの「Config MCP Servers」で次のようにMCPサーバーを追加します。

{
  "mcpServers": {
    "line": {
      "autoApprove": [],
      "disabled": false,
      "timeout": 60,
      "url": "http://(MCPサーバーPCのIPアドレス):8020/sse",
      "type": "sse"
    }
  }
}

接続できると、次のようにMCPサーバーとして登録されます。作成したsend_line_messageがツールとして見えています。

image.png

ここまで設定できれば、「LINEで”こんにちは”というメッセージを送信して」のように入力するとMCPサーバーを使用してくれます。

3.2.【番外編】スタックチャンで使用する例

スタックチャンのことはあまり知らないけど気になる、という方はこちらの私が過去に書いた記事などをご参照願います。

私がGithubで公開しているスタックチャンのファームウェア「AI Stack-chan Ex」は、OpenAI等の生成AIサービスのAPIを利用した会話機能、及びMCPクライアント機能を実装しています。SDカードのYAMLファイルでMCPサーバーを登録することで、次の動画のように会話を通してMCPサーバーの機能を利用することができます。

ファームウェアのビルド、書き込み、YAMLの設定方法などはREADMEに詳しく記載していますので、ぜひトライしてみてください。もしわかりづらい点があれば、スタックチャンのDiscord等で質問いただければ可能な限りサポートします。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?