メインコンテンツまでスキップ

MCP サーバー

MCP サーバーは、エージェントが呼び出せるツールを提供します。ここはその登録簿です。サーバーを登録すると、そのツールをワークフローのタスクテンプレートに割り当てられるようになります。タスクが使う MCP ツールを参照してください。

管理サイドバーの MCP Servers を開くと登録簿を管理できます。レコードは一意の Name、任意の Description、タグ、そして残りの入力項目を決める Transport を持ちます。

トランスポート​

トランスポート項目何か
Streamable HTTP(既定)URL、HTTP Headersリモートのサーバー。ヘッダーは毎リクエストに付きます。多くは Authorization: Bearer … です。SSE のみのサーバーには対応していません。
stdioCommand、Arguments、Environment Variablesバックエンドの子プロセスとして起動するサーバー。たとえば npx に ["-y", "@modelcontextprotocol/server-everything"] を渡します。npx と uvx のどちらも使えます。
ScriptLanguage、Source、Packages、Environment Variables自分で書いた Python または JavaScript のコード。公開された関数がそれぞれツールになります。スクリプトを書くを参照してください。

既存のサーバーのトランスポートを切り替えると、切り替え前のトランスポートの項目は消えます。stdio サーバーに URL、リモートサーバーに command、どちらかにソースコードといった、形が混ざったレコードは拒否されます。

⚠️ **stdio サーバーの登録は、指定したコマンドをバックエンドのコンテナ内で実行することを意味します。**実行はコンテナの非特権ユーザーとして行われます。ほかの MCP サーバーへの書き込みと同じく developer ロールで守られています。Arguments はシェルを介さずリストとしてプロセスに渡され、子プロセスが引き継ぐ環境変数は、安全な小さな組み合わせと設定した Environment Variables だけです。バックエンド自身の API キーやデータベース URL は見えません。

スクリプトを書く​

スクリプトサーバーを使うと、パッケージを公開しなくても、自分で書いた関数をツールにできます。Transport で Script を選び、Language を選んで、コードを Source に貼り付けます。

Source はコードエディターです。選んだ Language に合わせてコードを色分けし、行番号を付け、Tab キーでインデントします。Tab で次の項目へ移るには、先に Esc キーを押します。入力に合わせて問題のある箇所に下線が引かれ、下線にマウスを重ねると内容が表示されます。

下線意味例
赤の波線構文エラー。スクリプトを実行できません閉じていない括弧、綴りを間違えたキーワード
黄色の波線間違いの可能性がありますツールになる関数が 1 つもない。Python の関数に docstring がない、または引数に型ヒントがない。Packages が空なのに標準ライブラリ以外を import している。JavaScript の関数に description がない
アクセント色の波線補足ですJavaScript の関数に inputSchema がない

下線は助言であり、保存を妨げることはありません。保存時の検査については後述します。

PythonJavaScript
ツールになる関数トップレベルで定義した関数のうち、名前が _ で始まらないもの。import した関数は公開されません。export した関数(export function、export async function)のうち、名前が _ で始まらないもの。default export は公開されません。
ツール名関数名export 名
説明docstring関数の description プロパティ
引数型ヒントから読み取ります。対応するのは str、int、float、bool、list、dict、Literal[...]、X | None です。それ以外の型や型ヒントのない引数は、どんな値も受け付けます。関数の inputSchema プロパティ(JSON Schema)。無い場合、ツールはどんな引数も受け付けます。
呼び出され方引数を名前で渡します引数をまとめた 1 つのオブジェクトを渡します
エージェントに返るもの戻り値。文字列はそのまま、それ以外は JSON にします戻り値。文字列はそのまま、それ以外は JSON にします
def add(a: int, b: int) -> int:
"""Add two integers."""
return a + b
export function add({ a, b }) {
return a + b;
}
add.description = "Add two numbers.";
add.inputSchema = {
type: "object",
properties: { a: { type: "number" }, b: { type: "number" } },
required: ["a", "b"],
};

どちらの言語にも次の決まりがあります。

  • 標準ライブラリ(Python 自身のモジュールか、Node.js 組み込みの node: モジュール)はいつでも使えます。それ以外は Packages に登録します。
  • 関数が投げたエラーは、ツール呼び出しの失敗としてメッセージごとエージェントに伝わります。
  • print() や console.log() の出力はサーバーのログに出ます。エージェントには届きません。
  • Environment Variables は os.environ["NAME"] や process.env.NAME で読めます。資格情報をレコードに置かないのプレースホルダーも使えます。
  • Source に書けるのは 30,000 文字までです。
  • Python のコードに構文エラーがあると、保存時に行番号付きで拒否されます。JavaScript は保存時には検査されません。読み込めないスクリプトを見つけるには、保存前にテスト実行してください。
  • 読み込みに失敗したスクリプト(インストールできないパッケージ、構文エラー、トップレベルで投げられたエラー)も起動はします。そのツール呼び出しはすべて、読み込みを止めたエラーで失敗します。ツールを確認すると、使えないサーバーとして表示されます。

⚠️ スクリプトは stdio サーバーと同じ場所で、同じ制限のもとで実行されます。

パッケージを追加する​

ほかのサービスにアクセスするスクリプトには、たいていそのサービスのクライアントライブラリが要ります。AWS なら boto3 です。Packages に 1 行 1 つずつ登録し、Source でいつも通り import します。

言語パッケージの書き方例
PythonPyPI のパッケージ名。バージョン指定も付けられますboto3、boto3==1.40.0、requests>=2.32
JavaScriptnpm レジストリのパッケージ名。@バージョン も付けられますis-number、@aws-sdk/client-s3@3
import boto3


def list_buckets() -> list[str]:
"""List the S3 buckets the configured credentials can see."""
return [b["Name"] for b in boto3.client("s3").list_buckets()["Buckets"]]
  • パッケージは、その組み合わせでスクリプトが初めて起動したときにインストールされるため、時間がかかることがあります。2 回目以降はインストール済みのものを使います。まったく同じパッケージを登録したスクリプト同士は、同じインストール先を共有します。
  • インストールできないパッケージ(綴りの誤り、存在しないバージョンなど)があると、スクリプトは読み込めません。Load tools でインストーラーのエラーを確認できます。
  • 1 つのサーバーに登録できるのは 20 個までです。各パッケージは 200 文字以内で、英字・数字・@ のいずれかで始めます。
  • インストールには、スクリプトの実行場所からパッケージレジストリに接続できる必要があります。社内のレジストリから入れるには、インストーラーの変数を Environment Variables に設定します。Python は UV_INDEX_URL、JavaScript は NPM_CONFIG_REGISTRY です。

スクリプトをテスト実行する​

Environment Variables の下にある Test Run パネルは、フォームに入っている内容のままスクリプトを実行します。保存はしません。エージェントが使う前に、読み込めないスクリプトを見つけるのに使います。

  1. Load tools をクリックします。フォームにある Source、Packages、Environment Variables でスクリプトが起動します。
  2. Tool からツールを選びます。Arguments に、そのツールが宣言している引数がすべて null で入ります。
  3. Arguments(JSON オブジェクト)を編集し、Run をクリックします。
表示意味
ツールの一覧スクリプトを読み込めました。これが公開されるツールです
ツール一覧の代わりに赤い文字スクリプトを読み込めませんでした。表示されているのは、読み込みを止めたエラーです
This script exposes no tools.読み込めましたが、ツールになる関数がありません
Output にツールの出力呼び出しに成功しました
Output に赤い文字ツールがエラーを投げました。表示されているのはそのメッセージです
Arguments must be a JSON object. または Invalid JSON: …Arguments が JSON オブジェクトになっていません。実行はされていません

Environment Variables のプレースホルダーは、保存済みのサーバーと同じように展開されます。つまりテスト実行でも、同じ資格情報で同じサービスにアクセスします。テスト実行は本物の呼び出しなので、ツールが行う処理は実際に行われます。

資格情報をレコードに置かない​

⚠️ ヘッダーと環境変数にそのまま書いた値は平文で保存され、詳細ページにも表示されます。資格情報を直接書く代わりに、登録済みのシークレットの 1 エントリを参照してください。

プレースホルダー使える場所例
${secret:name/key}ヘッダーの値、環境変数の値Authorization: Bearer ${secret:github/token}
AWS_ACCESS_KEY_ID: ${secret:aws-credentials/AWS_ACCESS_KEY_ID}
${gcp-token:name/key}${secret:…} と同じ。エントリには Google Cloud の認証情報 JSON を入れておきますAuthorization: Bearer ${gcp-token:gcp-credentials/GOOGLE_CREDENTIALS_JSON}
${env:NAME}Arguments の要素。このサーバー自身の環境変数を名前で参照します--token ${env:API_KEY}

プレースホルダーが展開されるのは接続のときだけなので、資格情報が保存されたレコードに現れることはありません。

${env:NAME} は、その環境変数自身の ${secret:…} が展開されたあとに展開されます。おかげで、シークレット由来の値をコマンドラインのフラグとして使い回せます。プロセスの環境変数から読むのではなく、引数として受け取るランチャー向けです。NAME は Environment Variables のキーでなければならず、存在しないキーへの参照は — そのキーを消したせいで残った参照も含めて — 保存時に拒否されます。

Google Cloud の MCP サーバー​

Google のマネージド MCP サーバー(GKE のものなど)は API キーを受け付けません。すべてのリクエストに Google Cloud の身元に対する OAuth 2.0 アクセストークンが要り、しかもトークンは 1 時間で失効するので、シークレットに貼っておくこともできません。そこで ${gcp-token:name/key} を使います。エントリの値そのものではなく、その値から発行したばかりのアクセストークンに展開され、期限が切れれば自動で更新されます。エントリに入れる認証情報 JSON は次の 2 種類のどちらかです。

認証情報入手方法トークンのスコープ
サービスアカウントの鍵サービスアカウントを作り、MCP Tool User とツールが必要とするロールを付与して、JSON 鍵をダウンロードしますcloud-platform
OAuth クライアント ID とシークレットOAuth クライアント(デスクトップアプリ)を作って JSON をダウンロードし、自分のマシンで一度だけ gcloud auth application-default login --client-id-file=<その JSON> --scopes=https://www.googleapis.com/auth/cloud-platform を実行してサインインします。できあがった application_default_credentials.json の中身を貼ります同意したスコープ

どちらの場合も、JSON 全体をシークレットの 1 エントリとして貼り、上の例のようにサーバーの Authorization ヘッダーから参照します。ワークフローを誰が始めても、ツール呼び出しはその 1 つの身元で実行されます。壊れた認証情報や Google が受け付けなくなった認証情報は、宙に浮いた ${secret:…} 参照と同じ形で接続を失敗させます。

MCP レジストリから登録する​

一覧ページの Browse registry ボタンを押すと、公式の MCP レジストリを検索するダイアログが開きます。

  1. 名前で検索します。結果に出るのは A2Flow が登録できるサーバーだけです。streamable HTTP のエンドポイントを持つものと、npm か PyPI のパッケージとして公開されていて stdio で起動できるものです。
  2. 1 つ選びます。接続情報と、そのサーバーが必要とするヘッダーや環境変数のキーが入った状態で、新規作成フォームが開きます。
  3. シークレットの値を埋めて保存します。

パッケージから起動コマンドへの対応づけは最善努力なので、保存する前に内容を確認してください。検索先のレジストリは設定リファレンスで変更できます。

サーバーのツールを確認する​

タスクテンプレートのフォームは、サーバーが公開しているツール — 名前、説明、入力スキーマ — を問い合わせます。問い合わせ先は選んだ 1 台だけで、登録簿全体に一度に接続しにいくことはありません。到達できない、あるいは起動できないサーバーは、ツール一覧の代わりにその旨を表示します。

サーバーを削除する​

タスクやタスクテンプレートがそのサーバーのツールを割り当てている間は、サーバーを削除できません。先に割り当てを外してください。