MCPで研究！Notion+Jupyter+Google ScholarでAIに勝手に実験してもらおう！

こんにちは！ひさふるです！

みなさん、MCP使ってますか？？(もう今さら感が否めないですが...)

最近、MCPの使い道を模索する中で、学生時代を思い出して**MCPに研究をさせる**なんてことをやってみたのですが、意外と上手くいきそうな気配がしました。

今回は、Claude DesktopにMCPを導入し、AIに自律的に研究させてみた話をご紹介しようと思います！

## MCPとは？
MCP (Model Context Protocol)とは、生成AIに対し様々なツールを提供するために定義された**プロトコル**です。

MCPはよく"AIにおけるUSB-Cのようなもの"と例えられるように、何か特定の機能を指すわけではなく、単なる接続口の形式に過ぎません。

しかし、MCPの形式に沿って提供されたツールなら簡単にAIに組み込むことが出来ます。また今後もMCP対応のツールは更に増えると予想されるため。今後AIにツールを提供する方法の主流になっていくと予想されています。

:::note info
MCPはAIに様々なツールを提供するプロトコル
:::

## MCPが強みを発揮できる環境とは？
では、まずはどのような環境でMCPの強みを活かすことが出来るか考えてみましょう。

### RAGとMCPの違い
よく、MCPはRAG(Retrieval Augmented Generation)と比較されることがあります。
※ RAGは外部のベクトルDBを参照することで、生成AIの回答に追加の情報を与える仕組み

(本質的には全然違うものの)、どちらも外部のツールとやり取りするという点では似ています。

![mcp_rag.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655545/d734ccd2-9bb1-4514-b8c2-a22c73a74bca.png)

RAGなどの従来システムの特徴は、以下の2点です。
1. 実効する順番が明確に決まっている
1. AIが実際に使われるのは一部

この2点が表すのは、RAGなどのシステムでは**生成AIの自由度が低い反面、実行の順序や実行内容が決まっており再現性が高い**ということです。

すなわち、ツールとして挙動が安定しており、常に一定の回答を得られることを期待出来るのがRAGなどの良いところでしょう。

一方で、MCPの特徴は以下の2点です。
1. MCP Serverを利用するかどうかは任意
1. MCP Serverを呼び出す順番は自由

RAGと比較して、MCPはAIの持つ自由度が高く、**AIが好きなツールを好きなタイミングで呼び出せる**ようになっています。

なので、MCPは**RAGと比較すると挙動の不確実性が高いが、汎用性が高く様々なタスクに対応出来る可能性を秘めている**と言えるでしょう。(ただし接続するツール次第ですが)

### MCPがその能力を発揮できる場所
以上の事柄をもとに考えると、MCPは**使うツールや実行順が決まっておらず、アドリブで対応する必要があるタスク**でこそ、その強みを発揮できると言えるでしょう。

(やることが毎回同じタスクであれば、MCPを利用しても実行結果の安定性が損なわれるだけですしね)

そこで今回は、アドリブ対応が多くなりそうなタスクである**研究**をMCPを使ってAIにさせてみようと思います！

:::note info
MCPはアドリブ対応が必要なタスクで真価を発揮する
:::

## MCPに研究をさせてみよう！
今回は、大学院にいた頃を思い出して、MCPに情報系の研究をさせてみようと思います！

まずは、作成した構成を以下に示します。

![mcp2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655545/885c7858-76e9-498b-af57-173476d23a08.png)

生成AI部分はCluade Desktopを使い、そこにMCPとして以下の3つのツールを接続しました。
- 論文検索 MCP
    - Google Scholarやarxivに対して、論文検索を実行出来るMCP Server。参考文献の調査に使用。
    - https://github.com/openags/paper-search-mcp
- Jupyter MCP Server
    - ブロック単位でのコード実行が可能なJupyter NotebookをMCP経由で操作可能にしたもの。実験の実施に使用。
    - https://github.com/datalayer/jupyter-mcp-server
- Notion MCP Server
    - おなじみのメモツール"Notion"をMCPで操作出来るようにしたもの。実験結果の報告書作成に使用。
    - https://notion.notion.site/Notion-MCP-1d0efdeead058054a339ffe6b38649e1

これをもってして、
1. 先行研究・参考文献の調査
1. コーディング+実験の実施
1. 結果のまとめと報告

まで、AIに自律的にやってもらおうというのが今回の目標です！

<details><summary>詳しい導入方法</summary>

他にも詳しい記事がたくさんあるので、簡単に...

Claude Desktopの設定画面を開くと、`開発者(Developer)`という項目があると思います。その中の`構成を編集(Edit Config)`というボタンをクリックすると、`claude_desktop_config.json`というファイルが開きます。

ここに、MCPの設定を追記していきます。
今回は、以下のようにファイルに設定を記載しました。(詳しい内容は、後述の各サーバーの設定方法を参考にしてください🙇🙇)

```json
{
  "mcpServers": {
    "jupyter": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "SERVER_URL",
        "-e",
        "TOKEN",
        "-e",
        "NOTEBOOK_PATH",
        "datalayer/jupyter-mcp-server:latest"
      ],
      "env": {
        "SERVER_URL": "http://host.docker.internal:8888",
        "TOKEN": "MY_TOKEN",
        "NOTEBOOK_PATH": "test.ipynb"
      }
    },
    "notionApi": {
      "command": "npx",
      "args": ["-y", "@notionhq/notion-mcp-server"],
      "env": {
        "OPENAPI_MCP_HEADERS": "{\"Authorization\": \"Bearer ntn_****\", \"Notion-Version\": \"2022-06-28\" }"
      }
    }
    "paper_search_server": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/your/paper-search-mcp",
        "-m",
        "paper_search_mcp.server"
      ]
    }
  }
}
```

- jupyter mcp serverの設定手順
    - jupyter labでjupyter serverが起動していることが前提になります
    - また、`NOTEBOOK_PATH`として、操作する対象のノートブックを先に作成しておく必要があります
    - https://jupyter-mcp-server.datalayer.tech/docs/usage/
- notion mcp serverの設定手順
    - 私はnpxを用いた方法でmcp serverを用意しました
    - https://github.com/makenotion/notion-mcp-server
- paper search mcp serverの設定手順
    - こちらは、npxでサーバーをダウンロードし、uvで起動するようです
    - https://github.com/openags/paper-search-mcp

</details>

## 実行結果
今回は、簡単な情報系の実験として、以下のテーマを設定しました！

:::note 
テーマ：ニューラルネットワークの活性化関数を変えたときの学習効率の変化
:::
(詳細な説明を省きますが、用は機械学習を行う際の内部の構成によって、どれだけ学習を効率化出来るか、という実験ですね。)

では、Claude Desktopに入力したプロンプトの全文を表示します。

```
研究テーマ: 活性化関数による学習効率の変化

概要: 簡易的なニューラルネットワークを実装し、活性化関数の違いによる学習効率の変化を実験してください

・まず、どのような活性化関数があるか、Google Scholar等を中心に信頼できるソースを検索し、実装方法を検討してください。

・方針がまとまったら、Jupyter上で簡易的な機械学習プログラムを実装し、実験を行ってください。
　機械学習を実装するライブラリは、scikit-learnを使用してください。
 また、matplotlibは日本語の表示に対応していないため、図の表示は全て英語で行ってください。
 実験は簡易的なものでかまいませんが、活性化関数によって差が出ると見込まれるようなニューラルネットワークを使用してください。
 データセットはmnistを使ってください。

・結果は、notion内に新しくページを作ってまとめてください。
  文章は論文調で書いてください。
　実験の背景から実験内容、結果、参考文献等を記述してください。
  また、参考文献を引用する場合は、文末に[1]のような形で参考文献番号を付けてください。
```

### 第一段階：先行研究・参考文献の調査

上記のプロンプトを入力すると、さっそくClaudeがPaper Search MCP Serverを使って参考文献の調査を始めました。Google ScholarとArxivから、横断的に資料を検索していますね。

![スクリーンショット 2025-05-28 17.11.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655545/8bf6a505-0ea5-4d75-9dc0-737c83a28170.png)

(ただ、Google ScholarとArxivで検索出来るのは無料で公開されている範囲なので、実際の研究では更に深い調査が必要ですね。)

### 第二段階：実験設計と実行
次に、Claudeが実験計画を始めました。今回は、6つの活性化関数の比較を行う計画を立てたようですね。

![スクリーンショット 2025-05-28 17.14.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655545/3a8fa51f-e021-460e-bc8c-4e08d77964df.png)

実験計画をもとに、Jupyterの実装が始まりました。
今回は`sklearn`を用いて3層のニューラルネットワークの実装をするようです。
(何故か6種類と言ってたのに、実際に使われた活性化関数は3種類になっていますね...まあこれは御愛嬌ということで...)

実験の結果、損失関数の比較が出力され、各活性化関数を採用したときの学習効率の違いが図として出力されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655545/498da98a-c9f4-40fb-9ec2-3a33960e75c5.png)

表形式での表示や結果のまとめもやってくれたようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655545/1e79238f-9e7d-4d09-9bb9-fd261d993653.png)

### 第三段階：Notionへの実験結果のまとめ
最後に、Claudeが実験の報告内容をNotionにまとめてくれました。

![スクリーンショット 2025-05-29 17.21.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655545/63b9dfa7-f9be-427c-8832-8fda9f38a201.png)

書き出しは良さそうですね。
(本当はmarkdownではなくNotion上でh2要素などを使って欲しかったですが、今回はテストなので良しとします。)

![スクリーンショット 2025-05-12 14.53.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655545/793a259a-0a98-4c5a-b074-6aa552f8182d.png)

更に、実験結果の数値などもまとめてくれていますね。

![スクリーンショット 2025-05-29 17.18.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655545/2796321c-029c-438f-8878-45a6dad657c8.png)

最後には参考文献もつけてくれています。
これは第一段階で調査していたものですね。

![スクリーンショット 2025-05-29 17.18.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655545/0468999f-59dc-4dbf-baf5-7f161b80dd30.png)

### 実験をやらせてみた感想
数行のプロンプトで、調査から実験、まとめまで自律的に実行してくれたのはとても感動しました！

その一方で、立てた実験計画と実施内容が違ったりと、色々とツッコミどころはありそうです。

この辺は、本来もっと詳細な実験条件の指定があるはずなので、もっと実際の研究用途で使ったときどのような結果になるのかは調査してみたいですね。

まだまだ足りない部分は多いものの、今後に期待出来る結果でした。

## 【現実的な話】MCPはどれくらいすごいのか
最後に、ちょっと余談です。

最近、MCPはAI界隈で注目の的となり、MCPの登場でAIが更に発展すると一部では言われています。

反対に少し冷めた反応も多く、MCPは先述の通りただのプロトコルであるため、特に何かが新しく出来るようになったわけではありません。

例えば、MCPではAIにWeb検索をさせることが可能ですが、今までもAIにWeb検索をさせること自体はMCPに頼らずとも可能でした。

そのため、「MCPの登場で何かが大きく変わるわけではない」という意見も理解ができ、エンジニアとしてこのあたりは正確な認識が必要だと思っています。

一方で、規格の統一化がもたらす恩恵は大きく、私達が「最近のだいたいのスマホはUSB-Cで充電できるでしょ！」と考えているように、デファクトスタンダード (事実上の標準) があると他の技術との連携が本当にラクなんですよね。

"革新的な全く新しい技術では無いけれど、AI技術の拡散には大きく貢献するのがMCP"というのが、私の今の認識です。

## おわりに
今回、MCPを使ってClaude Desktopに様々なツールを連携させることで、計画から実験の実行、結果のまとめまでを一気通貫で実行させることができました！

一方で細かく見ていくとミスも多く、実験計画と実際のコードが合っていなかったりと、本当の研究に使えるかはまだ検証が必要でしょう。

ただ、AIの性能は今後も飛躍的に良くなっていくと考えています。

少し待てば、研究を任せられるレベルの生成AIも登場すると思うので、そのときにもう一度同じことをやらせてみたいですね。

ここまで読んでいただきありがとうございました🙇