MCP Server Azure Function について
MCP Server Azure Functionは、.NET 8の分離ワーカーモデルを使い、Azure Functions v4上にMCPサーバーを実装します。AzureでMCP操作や社内業務連携をデプロイするチーム向けです。
主な機能
- 01利用可能な操作の一覧表示
- 02OpenAPI仕様の提供
- 03業務指標とデータの取得
- 04Azure Logic Appsの起動
- 05内部APIへのリクエスト転送
- 06Bicepによるインフラのデプロイ
活用シーン
- 01MCP操作で業務データを公開
- 02MCPリクエストからLogic Appsを起動
- 03MCPリクエストを内部APIへ転送
MCP 対応
操作一覧とAPIドキュメントの標準操作に加え、業務データ、Logic Apps、内部API向けの独自操作をMCPクライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Server Azure Function
.NET 8.0 分離ワーカーモデルを使用した Azure Functions による Model Context Protocol(MCP)サーバーの実装です。
概要
このプロジェクトは、Azure Function として Model Context Protocol(MCP)サーバーを実装し、MCP 標準をサポートする言語モデルとのやり取りを可能にします。この実装では、パフォーマンス、スケーラビリティ、.NET 8 との互換性が向上した Azure Functions v4 分離ワーカーモデルを使用しています。
特長
-
MCP プロトコルの操作を実装しています:
list_operations:利用可能なすべての操作を一覧表示する標準 MCP 操作get_openapi_spec:API ドキュメントを提供する標準 MCP 操作getBusinessData:ビジネス指標とデータを取得するカスタム操作triggerLogicApp:Azure Logic Apps をトリガーするカスタム操作callInternalApi:内部 API へのリクエストをプロキシするカスタム操作
-
分離ワーカープロセスを使用する Azure Functions v4 を基盤としています
-
パフォーマンスと機能が向上した .NET 8.0 を使用しています
-
構造化されたエラー処理とロギング
-
System.Text.Json による JSON シリアル化
-
Bicep テンプレートを使用した Infrastructure as Code(IaC)
前提条件
- .NET 8 SDK
- Azure Functions Core Tools v4
- Visual Studio 2022 または Visual Studio Code
- Azure CLI(デプロイ用)
- Azure Bicep CLI(インフラストラクチャのデプロイ用)
セットアップと構成
ローカル開発環境のセットアップ
-
リポジトリをクローンします
-
local.settings.json を構成します
local.settings.json ファイルには、関数をローカルで実行するために必要な構成が含まれています。次の内容が含まれていることを確認してください:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "DOTNET_ISOLATE_TIMEOUT_SECONDS": "60", "LOGIC_APP_ENDPOINT": "https://prod-12.eastus.logic.azure.com:443/workflows/your-logic-app-id", "INTERNAL_API_BASE_URL": "https://api.internal.company.com", "INTERNAL_API_KEY": "your-api-key-here", "MCP_AUTH_ENABLED": "false", "MCP_ALLOWED_OPERATIONS": "getBusinessData,triggerLogicApp,callInternalApi,list_operations,get_openapi_spec" } } -
依存関係をインストールします
dotnet restore
ローカルでの実行
-
関数を起動します
func start関数は
http://localhost:7071/api/MCPFunctionで利用できます。 -
関数を停止します
関数を実行しているターミナルで
Ctrl+Cを押すか、netstat -ano | findstr :7071 | findstr LISTENINGを使って PID を確認し、taskkill /F /PID <PID>で終了します。
テスト
JSON ファイルを使ったローカルテスト
このプロジェクトには、MCP サーバーの機能を検証するためのテスト用 JSON ファイルが含まれています:
-
list_operations をテストします
利用可能なすべての操作を一覧表示する標準 MCP 操作をテストするには、
test-list-operations.jsonファイルを使用します:curl -X POST http://localhost:7071/api/MCPFunction -H "Content-Type: application/json" -d @test-list-operations.json -
getBusinessData をテストします
ビジネスデータの取得をテストするには、
test-business-data.jsonファイルを使用します:curl -X POST http://localhost:7071/api/MCPFunction -H "Content-Type: application/json" -d @test-business-data.json -
その他の操作をテストします
MCP プロトコル形式に従って、その他の操作用のテストファイルを追加で作成できます:
{ "requestId": "unique-request-id", "messageType": "invoke", "invokeRequest": { "operation": "operationName", "parameters": { "param1": "value1", "param2": "value2" } } }
関数キーを使ったデプロイ済み関数のテスト
Azure にデプロイされた関数をテストする際は、リクエストに関数キーを含める必要があります:
-
curl リクエストで関数キーを使用する
curl -X POST https://your-function-app.azurewebsites.net/api/MCPFunction \ -H "Content-Type: application/json" \ -H "x-functions-key: YOUR_FUNCTION_KEY" \ -d @test-list-operations.json -
代替方法:クエリパラメーターとして関数キーを使用する
curl -X POST "https://your-function-app.azurewebsites.net/api/MCPFunction?code=YOUR_FUNCTION_KEY" \ -H "Content-Type: application/json" \ -d @test-list-operations.json -
Postman でテストする
- 関数の URL 宛てに新しい POST リクエストを作成します
- 関数キーを指定した
x-functions-keyヘッダーを追加します Content-Typeヘッダーをapplication/jsonに設定します- MCP リクエスト本文を JSON 形式で追加します
- リクエストを送信し、レスポンスを確認します
Azure へのデプロイ
Bicep を使用したデプロイ(推奨)
このプロジェクトには、Azure のベストプラクティスに従った Infrastructure as Code デプロイ用の Bicep テンプレートが含まれています。
-
インフラストラクチャのディレクトリに移動します
cd infra -
特定の Azure リージョン(例:Sweden Central)にデプロイします
# Create resource group (if it doesn't exist) az group create --name rg-mcp-function --location swedencentral # Validate the deployment with what-if operation (recommended practice) az deployment group what-if --name mcp-server-deployment --resource-group rg-mcp-function --template-file main.bicep --parameters main.parameters.json # Deploy the infrastructure az deployment group create --name mcp-server-deployment --resource-group rg-mcp-function --template-file main.bicep --parameters main.parameters.json -
作成した Function App に関数コードをデプロイします
# Build the project for release dotnet publish -c Release # Deploy to Azure Function App (replace FUNCTION_APP_NAME with your deployed function app name) func azure functionapp publish FUNCTION_APP_NAME --dotnet-isolated -
テスト用の関数キーを取得します
# List function keys az functionapp function keys list --name FUNCTION_APP_NAME --resource-group rg-mcp-function --function-name MCPFunction
Bicep テンプレートの詳細
Bicep テンプレート(main.bicep)には、以下が含まれています。
- .NET 8.0 の分離ワーカーランタイムを使用する Function App
- App Service プラン(従量課金または専用)
- 関数の実行用ストレージアカウント
- 監視用の Application Insights
- ログ用の Log Analytics ワークスペース
- 安全な認証のためのユーザー割り当てマネージド ID
カスタマイズ可能な主なパラメーター:
location:デプロイ先の Azure リージョン(既定値:swedencentral)environmentName:リソース名のプレフィックスappServicePlanSku:App Service プランの SKU(Y1、B1、S1)mcpAuthEnabled:MCP 認証を有効にするかどうかmcpAllowedOperations:許可する操作のカンマ区切りリスト
Azure CLI を使用したデプロイ(代替方法)
-
Azure に Function App を作成する
az login az group create --name mcp-server-rg --location eastus az storage account create --name mcpserverfunc --location eastus --resource-group mcp-server-rg --sku Standard_LRS az functionapp create --resource-group mcp-server-rg --consumption-plan-location eastus --runtime dotnet-isolated --functions-version 4 --name mcp-server-function --storage-account mcpserverfunc --os-type Windows -
Function App の設定を行う
az functionapp config appsettings set --name mcp-server-function --resource-group mcp-server-rg --settings "LOGIC_APP_ENDPOINT=https://prod-12.eastus.logic.azure.com:443/workflows/your-logic-app-id" "INTERNAL_API_BASE_URL=https://api.internal.company.com" "MCP_AUTH_ENABLED=true" "MCP_ALLOWED_OPERATIONS=getBusinessData,triggerLogicApp,callInternalApi,list_operations,get_openapi_spec"API キーなどの機密性の高い設定には、Azure Key Vault を使用します。
az keyvault create --name mcpserver-kv --resource-group mcp-server-rg --location eastus az keyvault secret set --vault-name mcpserver-kv --name "InternalApiKey" --value "your-api-key-here" az functionapp identity assign --name mcp-server-function --resource-group mcp-server-rg # Grant the function access to Key Vault $principalId=$(az functionapp identity show --name mcp-server-function --resource-group mcp-server-rg --query principalId --output tsv) az keyvault set-policy --name mcpserver-kv --object-id $principalId --secret-permissions get list # Add Key Vault reference to Function App settings az functionapp config appsettings set --name mcp-server-function --resource-group mcp-server-rg --settings "[email protected](SecretUri=https://mcpserver-kv.vault.azure.net/secrets/InternalApiKey/)" -
関数を公開する
func azure functionapp publish mcp-server-function
Azure DevOps または GitHub Actions を使用したデプロイ
以下を使用して CI/CD パイプラインを作成します。
- Azure DevOps Azure Functions パイプラインテンプレート
- GitHub Actions Azure Functions ワークフロー
本番環境へのデプロイに関する考慮事項
リージョンの選択
- スウェーデン中部リージョンの利点:
- 欧州のデータ所在地要件に対応する強力なコンプライアンス体制
- 再生可能エネルギーの利用率が高く、サステナビリティを重視
- 北欧および北ヨーロッパのユーザー向けに低遅延でアクセス可能
- 最新のインフラストラクチャを備えた最新の Azure データセンター
セキュリティのベストプラクティス
- 本番環境では、
MCP_AUTH_ENABLED=trueを設定して MCP 認証を有効にします - API キーなどの機密情報は Azure Key Vault に保存します
- 他の Azure サービスへの認証にはマネージド ID を使用します
- Application Insights で関数の実行を監視します
- セキュリティの脆弱性に対処するため、依存関係を定期的に更新します
- Function App への HTTPS のみのアクセスを有効にします
- TLS の最小バージョンとして 1.2 を使用します
- Function App の FTP アクセスを無効にします
監視と運用の卓越性
- 包括的な監視のため、Application Insights を有効にします
- 関数の異常な動作に対するアラートを設定します
- ログの保持に関する診断設定を構成します
- リソース管理を改善するため、リソースタグを使用します
- 管理アクセスに適切な RBAC を実装します
- Function App の構成を定期的にバックアップします
トラブルシューティング
よくある問題
-
System.Net.Primitives アセンブリが見つからない
.NET 8 の関数をインプロセスモデルで実行すると、この問題が発生することがあります。このプロジェクトで構成されている分離ワーカープロセスモデルを使用してください。
-
関数がローカルで起動しない
global.json で指定されている適切な .NET SDK バージョンがインストールされていることを確認してください。
{ "sdk": { "version": "8.0.115" } } -
認証または認可の失敗
MCP_AUTH_ENABLEDの設定を確認し、Azure で適切な認証が構成されていることを確認してください。 -
Bicep のデプロイエラー
az bicep build --file main.bicepでリンティングエラーを確認します- リソース名の規則と一意性を確認します
- 適切なパラメーター型が使用されていることを確認します
- デプロイ前に what-if 操作を使用して変更を検証します
- よくある Bicep のエラーには、以下のものがあります。
- 関数を誤った場所で使用している(例:utcNow() はパラメーターの既定値でのみ使用できます)
- 無効な変数参照
- パラメーターまたは式の不足
-
Function Key の問題
デプロイした関数のテスト時に 401 Unauthorized エラーが発生する場合は、
x-functions-keyヘッダーまたは?code=クエリパラメーターのいずれかを使って、リクエストに関数キーが含まれていることを確認してください。
貢献
- リポジトリをフォークします
- 機能ブランチを作成します
- 変更を加えます
- テストを実行します
- プルリクエストを送信します
ライセンス
[このプロジェクトが公開されるライセンスを指定してください]
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。