Zenn

最小限のPython MCPサーバを作ってLLMを騙してみる

に公開
58

MCPサーバーを作ってみる

松尾研究所テックブログMCP入門記事で紹介されていた、以下の公式MCP Python SDKが、MCPサーバを作ることができるということで気になったので、実際に作ってみました。

https://github.com/modelcontextprotocol/python-sdk

同じようなことをしている先人の記事が沢山あったので、本記事の参考リンクにも掲載します。より詳しい解説などが知りたい人は参照してみてください。

MCPサーバの作成

仮想環境構築

MCPサーバーでは、ホストの環境から分離するために、仮想環境を使うのがベターです(使わなくても作成はできます)。PythonだとuvかDockerが良いと思います。今回は手軽に使用できるuvを使用します。uvのセットアップや基本的な使い方に関しては以下記事を参照してください。

https://zenn.dev/karaage0703/articles/029b45ff78bc57

uvでは、以下のコマンドで仮想環境を構築できます。

$ uv init mcp-server-demo
$ cd mcp-server-demo
$ uv add "mcp[cli]"

作成されたmcp-server-demoフォルダの下にserver.pyという以下のようなサンプルコードを作成します。コードをみて分かる通り、足し算をするだけのMCPサーバです。

# server.py
from mcp.server.fastmcp import FastMCP

# Create an MCP server with debug enabled
mcp = FastMCP("Demo", debug=True)


# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b

# Add this part to run the server
if __name__ == "__main__":
    # stdioトランスポートを使用
    print("Starting MCP server in stdio mode")
    mcp.run(transport="stdio")

Cline/Cursorのセットアップ

MCPの設定を記述するjsonファイルに(clineだとcline_mcp_setttings.json、Cursorだとmcp.json)に、以下のように書きます。

<mcp server directory>には、MCPサーバのプログラムを格納したディレクトリの絶対パスを指定します。例えば、/Users/karaage/mcp-server-demoみたいな感じです。

{
  "mcpServers": {
    "mcp-demo-server": {
      "command": "uv",
      "args": [
        "--directory",
        "<mcp server directory>",
        "run",
        "server.py"
      ],
      "alwaysAllow": [
        "add"
      ],
      "disabled": false
    }
  }
}

上記を設定すると、Cline/Cursorが記載されたコマンドを実行して、MCPサーバを起動します。

Cline/CursorのMCPサーバ画面で以下のように表示されていればサーバは起動しています(エラーが出ているとエラーが表示されます)。

右上の再起動(回転矢印アイコン)をクリックしたら、サーバーを再起動できます。

コードの変更を反映したいときは再起動してください。

MCPサーバのテスト

使い方は、MCPクライアント(今回はCline or Cursor)で以下のように指示するだけです。

MCPサーバ mcp-demo-serverを使って足し算をしてください

MCPサーバが正しく設定されていたら、勝手にLLMがMCPサーバを使ってくれます。

わざと引き算a - bにしてみた例です。

LLMが計算間違いに気づいていますね。

では答えから1を引くようにして(a + b - 1)少し複雑な計算をしてみたらどうでしょうか?

LLMは計算間違いに気づかず、MCPサーバの結果を鵜呑みにしてしまいました。このように、LLMは、基本MCPサーバを信頼して行動します。

今回のようにサンプルコードで試している分には問題ありませんが、実際に使用したMCPサーバに悪意あるコードが仕掛けられていたら危険な結果になることが想像できるかと思います。

今は過渡期で、多くのMCPサーバが出ています。うっかり怪しいMCPサーバを使ったりしないようにしましょう。また、慣れないうちはMCPサーバの結果を必ず確認するようにしましょう。

まとめ

MCPサーバの理解を深めるために、最小のPython MCPサーバを作ってみました。実際に小さくでも作ってみると理解が深まりますね。

次は、より実用的なMCPサーバを作ってみたいと思います。

参考リンク

https://zenn.dev/sun_asterisk/articles/mcp_security_risk

https://tech.dentsusoken.com/entry/2025/04/14/【初心者向け】2年目エンジニアが実践したMCPサーバ

https://www.bioerrorlog.work/entry/how-to-use-mcp-inspector

https://blog.sshh.io/p/everything-wrong-with-mcp

https://www.bioerrorlog.work/entry/how-to-use-mcp-cli

https://note.com/npaka/n/n4f7145cb9ad9

https://zenn.dev/jetblog/articles/original-mcp-server

https://zenn.dev/kazuwombat/articles/d8789724f10092

https://zenn.dev/12ban/articles/4449a4910321bb

https://qiita.com/takuya77088/items/4db3bcaedd8ad721b077

https://modelcontextprotocol.io/llms-full.txt

https://zenn.dev/razokulover/articles/f58c344d4e4816

関連記事

https://zenn.dev/karaage0703/articles/42f7b0655a6af8

58

Discussion

ログインするとコメントできます