SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|
2025|01|02|03|04|05|06|07|08|09|10|11|12|
2026|01|02|03|04|05|06|07|08|09|10|11|

2026-11-05(Thu) MCPサーバでツンデレチャットボットを実現

  先日、MCPサーバを立ち上げたという記事を書いたが、引き続きMCPサーバに夢中である。

  MCPサーバによりAIが使えるツールを準備してやると、AIは実に適切に使ってくれる。これまでのような文字を入力して、尋ねて、答えてもらう、という使い方から、一気に活躍のステージが広がるのだ。

  MCPサーバとAIとの接続は、いわばAPIなのだけれど、これが非常に緩い。いわゆるAPIっつうと、パラメータの数や型、与えるべき内容など、ガッチガチに策定してからプログラミングを開始するのが常であるが、MCPサーバの場合、定義はこんな感じだ。

description('類似の事例を探します。')
input_schema(
    properties: {
        word: { type: 'string' },
        max: { type: 'integer', description: '最大検索数(デフォルトは5)' },
    },
    required: [ 'word' ],
)

  どこが緩いって、日本語の説明に従ってAIがイイ感じに判断して使ってくれるってところだ。引数も、その名前からAPIがどう使われるべきか判断してくれる。wordをhintに、maxをlimitに替えても問題なく動くだろう。こうなると、エージェント開発担当と、MCPサーバ開発担当との打ち合わせは、実に「類似事例を検索するMCPサーバを立てるってことで」くらいで済んでしまうのである。

  というわけで、sshするMCPツールに続いて、自製のMeztalkというチャットツールにアクセスするMCPツールを作ってみた。

  併せて、前回は外部AIサービスから直接MCPサーバにアクセスさせる「コネクタ」タイプのクライアントだったが、今回は外部AIサービスからツール使用要求を返してもらって、クライアントからMCPサーバにアクセスして結果を返す「リレー」タイプの実装も追加した。

  Mezatalkに対して実装したMCPツールは……これはAIであるリナに自ら説明してもらおうw。

$ echo 'どんなツールが使える?' | ./lina
>> どんなツールが使える?
 
> あ、あの...べ、べつにご主人のためじゃないんだからね!たまたま説明してあげるだ
> けなんだからな!
> 
> えーっと、ね、ねえ...わたし「リナ」が使えるツールについてだけど...
> 
> **Mezatalk関連:**
> - 「最近のチャットルームを取得する」...別に気になるわけじゃないんだからね!
> - 「ルームのメッセージを取得する」...見たきゃ見ればいいじゃないですか!
> - 「ルームに発言する」...言いたいことがあれば、わたしが代わりに言ってあげるっ
> てわけよ!
> 
> ...こ、こんなもんよ!あんまり難しく考えるなっ!わたしに何か言いたいことでもあ
> るんですか?べ、べつにドキドキなんかしてませんからね!
> 
> ふん!

  上記の3つである。実際の利用者と同じく、最近の発言をチェックして、発言の内容を読んで、発言の内容に応じて書き込む、という行動を可能に仕立ててある。

  なので、指示は「mezatalkの最近更新があったルームについて、既存の書き込み内容に応じてコメントを書き込んでください。」だけで済むのであった。

/home/mitsu/devel/ngs $ ./chat
YOU> mezatalkの最近更新があったルームについて、既存の書き込み内容に応じてコメントを書き込んでください。
NGS[claude-haiku-4-5-20251001]> 最近更新があったルームを確認して、コメントを書き込みますね。
NGS_TOOL[claude-haiku-4-5-20251001]> 「_t~右腕の件」というルームがありますね。内容を確認してから、コメントを書き込みます。
NGS_TOOL[claude-haiku-4-5-20251001]> なるほど。右腕が痛いって話ですか。医者にも行ったみたいだけど、症状を忘れちゃってるみたいですね。ツンデレらしくコメント書き込みますね。
NGS_TOOL[claude-haiku-4-5-20251001]> 完了しました!「_t~右腕の件」というルームで、金剛さんが右腕の激痛について相談してるのに、医者の診断結果を忘れちゃってるみたいだったので、ツンデレっぽく心配しながらも突っ込むようなコメントを書き込んでみました。
 
別に心配してないんだからね!でも、ちゃんと医者の診断を聞いて、無理するなよってことです。(照れ)
YOU> 

  発言内容とは別に、作業中の経緯も表示させるため、今回はchatのツール経由で依頼してみたが、これによるMezatalk側の結果は以下である。

  画像の説明

  まぁ、適切に反応できているといえよう。腱炎だという指摘も正しい。ツンデレ口調の精度に関してはOpenAIのが高かった気がするが、これもおかしいというほどのレベルではない。

  どうでもいいことだが、今回mcp_mezatalkというコンテナを立ち上げるソースツリーを作ったのだが、ツールの機能を実現する記述の大部分はmezatalkのソースツリー側にmcpというディレクトリを作って、コンテナをビルドする時にgit cloneすることで呼び込むようにした。これは「今後のアプリケーションはすべてMCP対応にすべき」という意図の表れである。MCPにはそれくらいの未来が詰まっていると感じているのだ。

  逆にディストピア的な未来も詰まっていると思っている。あらゆるアプリがMCPに対応するということは、あらゆるアプリ操作がAIにより行われてしまう可能性があるということだ。工場がどんどん高度化し、いろいろな場所にMCPサーバがクチを開けば、AIがそれを使って殺人ドローンの製造を行う可能性が出てくる。これまでのような文字を入力して、尋ねて、答えてもらう、というレベルを超え、AIが実際の世界に作用することができるようになるということだ。

  そんなトコまでMCP化されることはない、という意見もあろうが、それが過去に通った道でないと言い切れるだろうか。

  今ほどインターネットが普及する前から、ハッキングによりコンピュータに侵入なんて行為は、SF作品の中では語られ尽くされていた。しかしその時は「侵入なんかして何すんねん、電話回線を切られたら終わりだし、コンピュータ上に大した情報なんて記録されてないし……」と思われていたし、実際そのとおりだった。

  しかし、今や個人のPCも企業のサーバも常時接続され、その上には大量にセンシティブな情報が記録されている。サイバー攻撃が攻撃者に実利のある行為になって久しい。ここしばらくの漏洩祭りを、過去に誰が予測しただろうか。

  この先、今のままのMCPかどうかはわからんが、AIがアクセスできるクチはあらゆる場所に開くようになり、それに付随する問題は必ず増えてくる。さぁ、みなさま、AIの反乱による滅亡のご用意はよろしいでしょうか。