■MCPサーバによる連携
Model Context Protocol(MCP)の基礎に関して、社内勉強会で使用したスライド資料を公開します! | DevelopersIOroo-logger: Cline Memory Bankとは違うAIの記憶システムを(MCPで)作った理由MCPサーバー自作入門MCP入門MCPを活用した検索システムの作り方/How to implement search systems with MCP #catalks - Speaker DeckリモートMCPサーバーカタログ #AWS - Qiitaプログラマー必見!FastAPI-MCPでAI時代のAPI開発を加速する方法(初心者向けコード付き) #Python - QiitaMySQLのスキーマ情報を圧縮して提供するMCPサーバーを作った - $shibayu36->blog;MCPを理解する - Speaker DeckローカルRAGを手軽に構築できるMCPサーバーを作りました[B! MCP] MCPサーバーを使って請求書作成から送付まで自動化してみた話MCPアーキテクチャパターン - Carpe DiemClineとDDDと私 - コドモン Product Team BlogGemini CLI の簡単チュートリアル[B! AI] Cline利用におけるデータの取り扱いについて - サーバーワークスエンジニアブログCline駄目そう?一般的な規約という声もある
Clineのデータの持ち方 一応通信はないらしい
Cline - AI Autonomous Coding Agent for VS CodeWE CLAIM NO OWNERSHIP RIGHTS OVER YOUR USER CONTENT. とはあるが再利用に使わないという意味ではないらしい
Privacy. By using the Service, you acknowledge that we may collect, use, and disclose your personal information and aggregated and/or anonymized data as set forth in our Privacy Notice.とあるのでな
■構成
MCPホスト:Cline等のAIエージェント
↓
MCPクライアント:Json設定のProxy (これ以降が狭義MCPサーバ? あるいは全体でMCPサーバ)
┣→ここでコマンドを打つように設定すればそのままローカルがEPになる
↓ (uvはPythonパッケージ管理/仮想環境ツール) uv run python src とか
API EP
■外部APIに通信かローカルか2種類と考えていい
stdio ローカルのサーバと通信
remote リモートのサーバと通信(SSE→Streamable http)
メッセージはJSON-RPC2.0
ローカルにおきDockerを動かす形
機能は3つ
Resources:事前に情報をファイルで読み込ませる感じ
Prompts:プロンプトのテンプレ設定しておく感じ
Tools:使うツールを設定しておく感じ
(MCPクライアントは2つ:無意識でいい)
Sampling:MCPを使うよ~
Roots:MCPを使うファイルシステム確認~
これで人間が操作していた内容をMCPで実施するようにする
LLM→人間→Github/Slack/GCP etc.
↓
LLM→MCP→Github/Slack/GCP etc.
■MPCサーバとは何者?
Model Context Protocol (MCP)は、特にLLMを活用するアプリケーションにおいて、モデルとのやりとりを標準化するためのプロトコル
API EPやローカルプロセスをMCPサーバと言っているケースもあるが、MCPの文脈からするとMCPサーバは仲介。なぜか?
従来のクライアントサーバモデルとは逆方向に見えるから分かりにくいから、MCPクライアントは広義のMCPサーバに含まれている
MCPにおける構成
[ユーザー] -> [LLM (MCPサーバ)] --> [MCPクライアント] -> [API/CLI/ローカルプロセス】
伝統的な通常のクライアント・サーバ構成
[Client] -> [Server]
■github-mcp-server設定
GitHub - github/github-mcp-server: GitHub's official MCP ServerGithub トークン発行はココで→ https://github.com/settings/personal-access-tokens
クラシックトークンのrepo全体でも良さそう
MCP Marketplace>Remote server>Edit configuration>下記コードをコピペする
{
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "github_pat_xxxxxxx"
},
"disabled": false,
"autoApprove": []
}
}
}
上手く行かないので、Cline自身にMCPサーバの調整をしてもらうと下記となった (Docker、DockerGroup、Proxy等)
{
"mcpServers": {
"github": {
"command": "sg",
"args": [
"docker",
"-c",
"docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN -e http_proxy -e https_proxy ghcr.io/github/github-mcp-server stdio"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "github_pat_xxxxx",
"http_proxy": "http://proxy:3128",
"https_proxy": "http://proxy:3128"
},
"disabled": false,
"autoApprove": []
}
}
}
■ローカルサーバ
//// UV
curl -Ls https://astral.sh/uv/install.sh | sh
cd /mnt/c/Users/unco/Desktop/local_test/MCP/kuso-app
uv venv 該当ディレクトリに仮想環境を設定
source .venv/bin/activate アクティベート
uv pip install google-cloud-asset
uv pip freeze > requirements.txt
python3 main.py
deactivate 停止
gcloud auth application-default login --no-launch-browser
gcloud auth login --no-launch-browser
消したければ、venvを削除するだけ
上記はpip+requirementsだが下記の方がいいかも、add+tomlで管理
uv init myproject (myprojectディレクトリ、tomlファイルが作成される)
uv add numpy
uv remove numpy
nv sync
uv lock
uv tree
uv python install 3.10 3.11
uv python list
uv python pin 3.11
uv tool install ruff
uv tool list
uvx pytest 一時的に仮装環境を汚さず実行
uv exports --format-requirements.txt
権限確認API(analyzeIamPolicy)
curl \
'https://cloudasset.googleapis.com/v1/projects/prj-xxxxx:analyzeIamPolicy?analysisQuery.accessSelector.roles roles%2 Fbigquery.dataowner&analysisQuery.identitySelector.identity=user%3Axxxxx%40xxxxx.com&key=[YOUR_API_KEY]'\
--header "Authorization: Bearer $(gcloud auth print-access-token)"\
--header Accept: application/json' \
--compressed
※APIキー不要だた、HTTPやJSの方法も出る
parentでエラーがでてもscopeという意味> organizations/123, folders/123, projects/my-project-id, projects/12345
400 Missing parent field in request. [field_violations {
field: "parent"
description: "Missing parent field in request." }
↑
■2023-04-24
Dialog flow ES - Chatbotの作り方
対話式アプリの有効性>何か対策をしときたい
Dialogflow:FAQのチャットボットを作りたい
intentをFAQの数だけ作る
intentグループがあれば纏められるが、、
色は赤や青で分ける必要がある? entitityは色だが単語で分ける
entitiy: colors、単語:赤、類語:Red、朱色等
単語:白、類語:ホワイト等
entitity 個別項目(色、サイズ、キーワード)トレーニングフェーズで使う用語を設定しておく
intent 意図(選択、買う、確認、支払)チャットで引きあたる項目で、数多く作ることになる
上の2つを結びつきを強くするcontext
input context 該当のインテントの変遷の一つ前の別名を指定
output context(コンテキスト用エイリアス名) 該当のインテントの別名を設定する
Training phrases(想定するユーザの入力文)
Responses(答えへの反応
料金 無料の範囲である程度賄える
項目を500から選ぶとしても大丈夫 外部のデータソースを使う(できそう)
色を10個を選択するとしても大丈夫
結果を外部に連携することもできそう
AI型は入力された質問に対して、FAQから適切な回答を表示(正誤で学習し判定上がる)
シナリオ型は入力値から分岐を判定して進む、あみだくじタイプの定型処理に持っていく
■Dialog flow ES
下記の辺りを設定すれば、チャットボットが回答するようになる
ESとしては、ユーザ入力を構造化データにする処理を行いパラメータへ検索を掛ける挙動となっている
ユーザ行動の履歴から検索ヒットの改善を学習するタイプのAI
インテント分類(ユーザの意図のパターンを設定)
┣トレーニングフレーズ(質問の例文を指定)
┣アクション (何を実行するか指定)
┣パラメータ/エンティティ(質問から抽出すると型を指定)
┗レスポンス (何を返答するか指定)
コンテキスト: input (一つ前のインテント〉 と output (当インデントの別名)
イベント:エンドユーザーの発言からではなく、発生したイベントに基づいてインテントを呼び出す
アクション: デフォルトfallbackにはinput-unknown がついている
パラメータ:下記くらいの考慮で良さそう
@sys.any キーワードを設定してしまう?
@sys.url
@sys.person ロールや役職を設定してしまう?
@sys.email
■Agent 設定
Agent > ML setting > Train でトレーニングさせる。
megaでなく普通のエージェントの方が分かり易い?
Agent > environment > publish パブリッシュし公開?
■ intent
テキストレスポンスにタグが使えずリンクにならない。
ユーザエクスプレッションの単語をドラッグ反転させ techinical_terms 等で検索するとEntityを反映することができる。
(Entity登録済みなら熟語でもOKだが、未登録なら単語で設定したような)
■Entitiy 設定
業務で使用している重要用語は @technical_termsとして作り、揺らぎを全て入力したい
BigQuery: BQ、ビッグクエリ、、、
個人情報: パーソナルインフォメーション, PII、、、
■Integration設定
WebDemoを有効化
DialogMessangerを有効化(こっちのがCoolでは
■FAQを簡単に構築するコツ
検索を網羅するように質問を重要単語を全て入れた形で複数設定する
代表的な質問をレスポンスに入れてしまうとFAQとして分かり易い
参考になりそうなの一例を回答します。
Q「ああああ」
A「いいい」
■思うような結果にならない場合のチューニング
トレーニングフレーズを追加するのが基本
できるだけキーワードをEintity化することもよい方法
Trainingに過去キーワードがあり正誤判定することができる
Validationにトレーニングフレーズの追加等の問題提起が出ているので対処