Skip to main content
Glama
luleigreat

issue-collector

by luleigreat

send_issue_email MCP

ユーザーが有人対応に切り替えた際に残した連絡先メールアドレスと問題の説明を、SMTP で固定のサービスメールボックスに送信します。

Agent には send_issue_email(email, question) という1つのツールだけが見えます。

3つのメールアドレスの役割

役割

取得元

用途

送信者 From

.env の SENDER_EMAIL / SMTP_USERNAME

SMTP にログインして実際に送信するアカウント

受信者 To

.env の TARGET_EMAIL

問題を受け取るために固定で使うサービスメールボックス

ユーザーメール

ツール引数 email

件名・本文に記載し、Reply-To に設定。カスタマーサポートがユーザーに直接返信しやすくする

.env はインフラであり、一度デプロイすれば十分です。email / question は会話ごとに異なり、Agent が会話変数(例:$邮箱、$问题)から渡します。

Related MCP server: MCP Sendmail Server

環境要件

  • Python 3.10+

  • 使用する SMTP にアクセスできること(ローカルから Gmail に直接接続するには、465/587 の送信が可能であること)

インストール

cd send_issue_email_mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env

以下の説明に従って .env を設定してください。.env をリポジトリにコミットしないでください。

.env の設定

必須:受信とSMTP

TARGET_EMAIL=issues@example.com

SMTP_HOST=smtp.gmail.com
SMTP_PORT=465
SMTP_USERNAME=your_account@gmail.com
SMTP_PASSWORD=xxxx xxxx xxxx xxxx
SMTP_USE_SSL=true

SENDER_EMAIL=your_account@gmail.com
SENDER_NAME=问题收集机器人

変数

説明

TARGET_EMAIL

問題の受信ボックス。必須

SMTP_HOST / SMTP_PORT

SMTP サーバー

SMTP_USERNAME / SMTP_PASSWORD

ログイン認証情報。Gmail はアプリパスワードを使うこと。ログインパスワードではない

SMTP_USE_SSL

true = SSL(465);false = STARTTLS(587)

SENDER_EMAIL

送信者。デフォルトは SMTP_USERNAME と同じ

SENDER_NAME

送信者の表示名

Gmail の同等な2つの組み合わせ:

方式

SMTP_PORT

SMTP_USE_SSL

SSL(推奨)

465

true

STARTTLS

587

false

Workspace / 学校の Google アカウントは管理者によって SMTP が無効にされている場合があり、その場合は接続できません。

MCP トランスポート(リモートクライアント)

智齿は入力した URL のルートパスに対して POST / を送信します。そのため、リモートのデフォルトは次のとおりです:

MCP_TRANSPORT=streamable-http
MCP_HOST=0.0.0.0
MCP_PORT=8765
MCP_PATH=/

変数

説明

MCP_TRANSPORT

streamable-http:リモート(智齿);stdio:ローカルの Agent がプロセスを起動;sse:旧バージョンの GET /sse(智齿は現在この方式ではない)

MCP_HOST

リッスンアドレス。リモートでは 0.0.0.0 を指定

MCP_PORT

リッスンポート。ローカルでは 8000 が他のプロジェクトに占用されがちなので、8765 が使える

MCP_PATH

HTTP エンドポイントのパス。智齿では / にする必要がある

.env を変更した後、ターミナルで同名の変数をすでに export している場合、load_dotenv() は上書きしません。新しいターミナルを開くか、先に unset MCP_TRANSPORT TARGET_EMAIL を実行してから起動してください。

送信を先に検証する(MCP を起動しない)

source .venv/bin/activate
python test_email.py

成功すると、次のように表示されます:成功:问题已发送至服务邮箱 ...

スクリプトの最初の引数は模擬ユーザーの連絡先メールアドレスであり、送信者ではありません。自分の実際のメールアドレスに変更してテストすることをおすすめします。example.com が受信側でスパムとしてブロックされるのを防げます。

SMTP の成功は、メールサーバーがメールを受け付けたことを意味するだけです。宛先が企業の飞书などのメールボックスの場合は、送信済みフォルダ「已发送」、退信の有無、相手側のスパム/隔離を確認してください。

MCP の起動(智齿 / リモート)

source .venv/bin/activate
python server.py

ログに次のような表示が出ているはずです:

transport 'streamable-http' (stateless) on http://0.0.0.0:8765/

同時に2つ起動しないでください。そうしないと address already in use になります。再起動が必要な場合は、古いプロセスを停止してから起動してください。

智齿に入力する URL

トランスポートタイプは Streamable HTTP / HTTP を選択してください(SSE は選択しないでください)。

URL には /sse や /mcp を付けないでください。このマシンに到達できるルートアドレスを入力します:

http://<这台机器的可达地址>:<MCP_PORT>/

例:ローカルネットワークの場合:http://192.168.x.x:8765/

智齿がクラウド SaaS の場合は、プライベート IP にアクセスできません。パブリック IP、ドメイン、またはトンネルが必要です。URL も同じくルートパスにし、サフィックスは付けないでください。

保存後、再接続してください。サービスログが POST / HTTP/1.1" 200 になっているはずです(404 ではなく)。

ローカルでのセルフチェック

curl -sS -X POST http://127.0.0.1:8765/ \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"check","version":"0.0.1"}}}'

正常時は、"jsonrpc":"2.0" と "serverInfo":{"name":"issue-collector"...} を含む JSON が返ります。

MCP の起動(ローカル stdio)

.env で MCP_TRANSPORT=stdio に設定すると、Cursor などのローカルクライアントがコマンドで起動します。例:

{
  "mcpServers": {
    "issue-collector": {
      "command": "/绝对路径/send_issue_email_mcp/.venv/bin/python",
      "args": ["/绝对路径/send_issue_email_mcp/server.py"]
    }
  }
}

stdio モードでは、通常のログを stdout に出力しないでください。

ツール仕様

send_issue_email(email: str, question: str) -> str

  • email:ユーザーの連絡先メールアドレス

  • question:問題・要望

  • 戻り値は 成功: または 错误: で始まる文字列で、Agent が分岐に使用します

メール件名:[问题收集] 来自用户 {email} ({时间})
本文にはユーザーのメールアドレス、送信日時、問題の説明を含めます;Reply-To はユーザーのメールアドレスです。

send_message の成功後、すぐに MCP 結果を返します。SMTP の QUIT / 接続クローズはバックグラウンドスレッドで実行し、SSL クローズが智齿のタイムアウトを超えないようにします。

ログ

実行ログはプロジェクト配下の log/ に書き出され、日ごとに1ファイルになります。同日に複数回起動した場合は追記されます:

log/2026-08-19.log

HTTP リクエストの開始と終了、ツール呼び出し、SMTP 接続/ログイン/送信の所要時間、バックグラウンドでのクローズ結果を含みます。SMTP パスワードは含みません。

トラブルシューティング

現象

原因

対応

智齿に「サービス応答形式が異常」と表示;ログ POST / 404

クライアントがルートパスに POST しているのに、サービスが /sse にある、または対応するトランスポートが起動していない

MCP_TRANSPORT=streamable-http、MCP_PATH=/、URL に /sse を付けない

[Errno 48] address already in use

ポートが前の MCP プロセスに占有されている

古いプロセスを停止してから起動する。同時に2つ起動しない

ログ POST /sse 404

URL に /sse が余分に書かれている

ルートパス / に変更

スクリプトがまだ古い TARGET_EMAIL に送信する

ターミナルに古い環境変数が残っており、load_dotenv() が上書きしない

unset TARGET_EMAIL または新しいターミナルを開く

SMTP は成功したが受信ボックスにない

スパム/隔離に入った、または受信アカウントを誤って確認している

送信済みフォルダ、退信、相手側のスパムボックスを確認

Gmail 535 / Password not accepted

ログインパスワードを使用した、または2段階認証が有効でない

アプリパスワードに変更

load_dotenv() は server.py の起動時に一度だけ実行されます。.env だけを変更してプロセスを再起動しなければ、実行中のサービスは新しい値を読み込みません。

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables sending emails via SMTP with template management, supporting multiple SMTP configurations, template creation with variable substitution, and bulk email sending with rate limiting.
    6
    227 npm
    24
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables sending emails via SMTP with support for HTML content, attachments, bulk sending, and template-based emails. Features session management and full MCP Streamable HTTP transport compliance.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables sending emails through SMTP using nodemailer, allowing AI assistants to send plain text and HTML emails with configurable SMTP credentials.
    25 npm
    2
    ISC