インストール
- python
https://www.python.org/ - node.js/npm
https://nodejs.org/ja/ - Claude for Desktop
https://claude.ai/download
オプション
- uv
(windowsの場合)Powershellで以下コマンド
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
MCP環境構築
python用mcpライブラリインストール
を使う。
pipでもよいが
``` # pipを使う場合 pip install "mcp[cli]" ```demoの部分は任意のフォルダ名
uv init demo
cd demo
uv add "mcp[cli]"
以下のファイルが作成されているはず
demo
├main.py
├pyproject.toml
├README.md
└(省略)その他のファイル
MCPサーバ作成
main.pyを以下のように書き換える。とりあえず以下を張り付ければOK
"""
FastMCP クイックスタートの例
`examples/snippets/clients` ディレクトリに移動して、以下を実行:
uv run server fastmcp_quickstart stdio
"""
from mcp.server.fastmcp import FastMCP
# MCPサーバーの作成
mcp = FastMCP("デモ")
# 足し算ツールの追加
@mcp.tool()
def add(a: int, b: int) -> int:
"""2つの数値の足し算"""
return a + b
# 動的な挨拶リソースの追加
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""パーソナライズされた挨拶の取得"""
return f"おはきーた、{name}さん!"
# プロンプトの追加
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
"""挨拶プロンプトの生成"""
styles = {
"friendly": "暖かく、フレンドリーな挨拶を書いてください。語尾を「だにゃん」にしてください。",
"formal": "フォーマルで、プロフェッショナルな挨拶を書いてください。語尾を「であります」にしてください。",
"casual": "カジュアルで、リラックスした挨拶を書いてください。語尾を「でやんす」にしてください。",
}
# スタイルに応じた指示と名前を組み合わせたプロンプトの返却
return f"{name}という名前の人に向けて、{styles.get(style, styles['friendly'])}。"
mcp.toolで簡単な足し算を
mcp.resourceで独自の挨拶ルールを
mcp.promptoで独自のプロンプトを
それぞれ定義した。
(変化がわかりやすいようにふざけた文を作るように設定してある。)
これでClaudeからそれ関係の指示をすればこのルールに乗っかった回答をする・・・ハズ
Claude Desktopにインストール
uv run mcp install main.py
MCP Inspectorというツールを使って以下でデバッグモードで起動させることもできる。
uv run mcp dev main.py
とりあえずmcp installコマンドでインストール後は
Claude Desktopを再起動すると上記で作成したサーバーが追加される
(普通に×押しても閉じないので ファイル→終了 から再起動必要。)
「2たす3は」などの指示を行うと、初回はMCPのツールを使うかの確認画面が出るはず。
また、この状態でmcp.promptで作成したgreet_user()をテストしようと「田中さんへの挨拶文を作って」と指示したがうまく動かなかった。(MCPで定義した関数を通らなかった。)
恐らく、挨拶に特異性がないのでMCPに頼るまでもないとAIが判断した可能性がある。
「greet_userを使って田中さんへの挨拶を作って」と指示したらばMCPで定義したプロンプトを使ってあいさつ文を作った。(語尾が「だにゃん」になった。)
また、mcp.resourceに至っては認識すらしていなかった。(MCP Inspctorで確認してlistされなかった)
以下のようなIssueがあるようなので一旦放置しておく。
https://github.com/modelcontextprotocol/python-sdk/issues/268
とりあえず2025/8現在だとmcp.tool以外はそこまで動作が安定していない ようだ。
Claude自身に解決策を聞いてもmcp.toolだと安定するよ、という返答が来るのみであった。
mcp installじゃなくて設定ファイルから手動でインストールする方法
基本的にmcp installを使えば不要なのだが、
claude_desktop_config.jsに関しては設定を追加するときに直接いじることがあるので記載
%HOMEPATH%\AppData\Roaming\Claude\claude_desktop_config.json
にあるファイルをオープン
VS Codeで開く場合のコマンドコピペ用
code %HOMEPATH%\AppData\Roaming\Claude\claude_desktop_config.json
{
"mcpServers": {
"\u30c7\u30e2": {
"command": "C:\\Users\\<ユーザ名>\\.local\\bin\\uv.EXE",
"args": [
"run",
"--with",
"mcp[cli]",
"mcp",
"run",
"C:\\<main.pyまでのパス>\\main.py"
]
}
}
}
色んなサービスと接続する
サービス側に設定しつつ、claude_desktop_config.jsonの設定ファイルに反映させる
基本的にclaude_desktop_config.jsonの設定は簡単なのだが、サービス側の設定がめんどくさい
ローカルファイル
npm install -g @modelcontextprotocol/server-filesystem
実行後
claude_desktop_config.jsonに"filesystem"{~}を追加
(filesystem{~}の前の行の閉じ } を }, とカンマを追加してください。以降は追加部分のみ記載します)
{
"mcpServers": {
"~"{
~
},
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"C:\\Users\\Hoge\\Documents",
"C:\\Users\\Hoge\\Desktop" ★アクセスさせたいフォルダ列挙
]
}
}
}
ブラウザ
npm install -g @modelcontextprotocol/server-playwright
実行後
"playwright": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-playwright"
]
}
Gmail
refs https://github.com/GongRzhe/Gmail-MCP-Server?tab=readme-ov-file#installing-manually
GCP側の設定
- (なければ)プロジェクトの作成
- Gmail APIを有効
- APIとサービス>認証情報>認証情報を作成>OAuthクライアントID>ウェブアプリケーション (デスクトップアプリケーションのほうが簡単かも。未確認)
- 承認済みのリダイレクトURIに
http://localhost:3000/oauth2callback
を設定 作成を押してしばらく待つとクライアント一覧に⇩ボタンが出るはずなのでjsonダウンロード- GCPの仕様変更でクライアントシークレットを作ったタイミングでしかダウンロードボタンが表示されなくなった。見逃した場合はAdd Secretから再度クライアントシークレット作成し、ダウンロードボタン⇩押下
claude_desktop_config.jsonの設定
Home Directory(Windowsの場合C:\Users<ユーザー名>)に
.gmail-mcp
フォルダを作成し、先ほどダウンロードしたjsonをgcp-oauth.keys.json
にリネームして格納
claude_desktop_config.jsonに以下slack{~}部分を追加
"gmail": {
"command": "npx",
"args": [
"@gongrzhe/server-gmail-autoauth-mcp"
]
}
Slack
Slack側の設定
-
https://api.slack.com/apps
にアクセス - Create New App > From Scratch > 好きなアプリ名と対象のワークスペース
- OAuth & Permissions > Add an OAuth Scope
以下を追加
channels:history (会話取得)
groupes:history (グループの会話取得)
channels:read (チャンネル情報)
chat:write (メッセージ送信)
users:read (ユーザー情報)
その他必要に応じてreactions:write(リアクション) users:read.email(メール)あたり - OAuth Tokens > Install to <ワークスペース名>を押下
Oauth Tokeが表示されるのでコピーしておく - Slackでブラウザでアクセスして、該当ワークスペースを開く
URL中の以下のT~の部分が「チームID」なのでメモっておく。
https://app.slack.com/client/TXXXXXXXXXXX
(ところでChromeでSlackはじかれるようになった???) - Botに動いてもらいたい部屋で
/invite @Bot名
で招待しておく
claude_desktop_config.jsonの設定
以下slack{~}部分を追加
"slack": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-slack"
],
"env": {
"SLACK_BOT_TOKEN": "<OauthToken>",
"SLACK_TEAM_ID": "<TeamID>"
}
}