Todoist のMCPサーバを実装しました
動機
後で読むサービスとしてPocketを使っていました。
しかし残念ながら、サービス終了が発表されてしまいました。
代替サービスとして、InstapaperやRaindrop.io を触ってみたのですが、イマイチ馴染めず… もともとタスク管理としてTodoist を使っていたので、Todoist で「後で読みたい記事」を管理してみることにしました。
“後で読みたい記事は後で読まない”
という格言(?)にもある通り、いくら気になる記事を登録しても後で読み返す事はありません。 AIを使って記事のカテゴリ分けや、要約をすることで、少しでも記事を読む頻度を増やそうとしてみました。
Todoist 自体が公式のMCPサーバーを提供していますが、今回はタスク管理ではなく「後で読む」サービスとして活用することが目的となっています。なのでTodoist にアクセスするためのMCPサーバを実装しました。
ClaudeCode と作ったコードは以下の通りです。
foresukecom/todoist-reader-mcp at develop
MCPについて
MCPサーバーについては色々なドキュメントが出ているので詳しくは割愛します。 Claude Codeに実装してもらう上で、新たに学んだことを書き出していきます。
今回の例だと、AIはMCPサーバを通じてTodoist のAPIを呼出します。 MCPサーバーは「ツール」という単位で機能を追加しています。
Todoist が提供しているAPI毎にツールを作ればいいかというと、そういうわけでもない。 ユースケース毎にツールを作るのがよさそう。
API毎にツールを作って、AIにどのツールを組み合わせるか判断させてもいいが、組み合わせるためにもAIの推論が発生するのでコストがかかる。 組み合わせが機械的に決まるのであれば、事前にツールとして定義しておいた方が無駄な推論が発生しないのでコスパがいい。
MCPサーバーをローカルで起動して、Claude Desktop から呼び出すのかと思っていたけど、そういうわけではなかった。 今回はMCPサーバをGo で作ったのですが、ビルド結果のバイナリファイルをClaude Desktop から指定します。それによりClaudeDesktopがMCPサーバを起動することで使用可能になります。
実際に使ってみて
todoist にタスクとして登録されている記事に対して、内容を要約してタスクのコメントに記載する、という処理がClaude Desktop 経由で実現できました。
ただし、MCPの実装が良くないのか、1件の記事を要約してもらうだけでも時間がかかり、いくつかの記事を要約してもらった時点でClaude の利用制限に引っかかってしまいました。 Proプランを使っていて、ブラウザから利用している時は利用制限なんて引っかかったこともなかったのに… 現状では気軽に扱えないのでMCPのリファクタリングが必要そうです。
Code execution with MCP: building more efficient AI agents \ Anthropic
この記事によると、効率化するためのリファクタリングというよりも、マインドセットを変えて作り直す必要がありそうです。
おわりに
これは仕方がないのですがtodolist のAPI自体にもリミットが設定されているので大量のタスクを一気に操作する事も出来ません。
MCPはAPIを公開している側からすると結構な脅威になりそうです。
レートリミットは適切に用意しておかないと、気軽に大量のアクセスが来る可能性があります。
逆に、これまでは見向きもされなかったAPIの魅力がAIによって再発見される可能性もあるのかもしれません。