#daiizメモ

ときどきいいことを書きます

PerplexityのMCPサーバーを試した

以前に環境を整えたClaude Desktopで試していく。JSON-RPC 2.0やModel Context Protocolの仕様もPhonnoでざっくり読んだので裏側で起きていることも想像できるようになった。いよいよ実物を動かして挙動を観察していくフェーズに突入。

daiiz.hatenablog.com

daiiz.hatenablog.com

下記のサーバーをREADMEに従って追加する。コードを読むと import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; で実装されていることがわかる。これは標準入出力型のMCPサーバーだ。また、PerplexityのSonar API(ウェブ検索機能付きのモデル)も試せる。一石二鳥。

github.com

前回はwsl.exe上でnpxで起動するタイプを練習したが、今回はDockerで動かすタイプ。環境変数で資格情報を渡す手法を学んだ。今後もこうやっていろいろなサービスのキーが書かれていくだろうから claude_desktop_config.json は気を付けて扱わないといけないな。

Image from Gyazo

docker buildがコケた。Dockerfileをちょっと書き換えた。3行目はCOPY perplexity-ask /app ではなくて COPY . /app が正しそう。これで無事にビルドが通った*1。自分がMCPサーバーを作るときは、Denoのシングルバイナリで配布すると利用者側での些細な躓きがなくなって嬉しいかもしれない。

Image from Gyazo

インストール済みとして認識された。

Image from Gyazo

利用可能なツールが3個増えた。

Image from Gyazo

実験としてマクドナルドの新作メニューについて聞いてみたが、Claudeが標準搭載しているWeb検索が反応してしまって出番がなかった。確実に使いたいツールがあるときは「Perplexityに聞いてみて」のように名指しで指示するしかない。今回追加した主役のMCPサーバーとのコミュニケーションが始まった。「Perplexity_research」というツールを使うようだ。

Image from Gyazo

一方その頃、MCPサーバー側のログは{"jsonrpc":"2.0", "id": 53, "error": {"code":-32601, "message": "Method not found"}}が連発していて不穏な空気が漂っていた。しかし根気よく待っていると突然に応答の出力が始まる。これらのエラーの間はたぶんSonar APIのレスポンス待ちだったのだろう。

Image from Gyazo

Claude Desktop側にもしっかり返却されたようだ。めでたしめでたし。

Image from Gyazo

これから食べるなら何がいいかを聞いてみた。実行したのが夜マックの時間帯だったので、17時以降の限定メニューを提案してくれた。

Image from Gyazo

会話も期待通りに続けられる。

Image from Gyazo

せっかく調べてもらったので、夕飯としてごはんチキンタツタを食べた。

https://usercontent.griddles.me/phonnoanno/share/Uv1T7zMnZN35#anno.webp

*1:実験が全て終わったあとに、Pull Requestで同じ修正が提案されていることに気付いた。+1しておいた。https://github.com/ppl-ai/modelcontextprotocol/pull/24