mcpField
M
MCP Server Azure Function

MCP Server Azure Function

ローカル
github.com/katarinasvedmanクラウド・インフラ077 週間前に更新

MCP Server Azure Function について

MCP Server Azure Functionは、.NET 8の分離ワーカーモデルを使い、Azure Functions v4上にMCPサーバーを実装します。AzureでMCP操作や社内業務連携をデプロイするチーム向けです。

主な機能

  1. 01利用可能な操作の一覧表示
  2. 02OpenAPI仕様の提供
  3. 03業務指標とデータの取得
  4. 04Azure Logic Appsの起動
  5. 05内部APIへのリクエスト転送
  6. 06Bicepによるインフラのデプロイ

活用シーン

  1. 01MCP操作で業務データを公開
  2. 02MCPリクエストからLogic Appsを起動
  3. 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)

前提条件

セットアップと構成

ローカル開発環境のセットアップ
  1. リポジトリをクローンします

  2. 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"
        }
    }
    
  3. 依存関係をインストールします

    dotnet restore
    
ローカルでの実行
  1. 関数を起動します

    func start
    

    関数は http://localhost:7071/api/MCPFunction で利用できます。

  2. 関数を停止します

    関数を実行しているターミナルで Ctrl+C を押すか、 netstat -ano | findstr :7071 | findstr LISTENING を使って PID を確認し、 taskkill /F /PID <PID> で終了します。

テスト

JSON ファイルを使ったローカルテスト

このプロジェクトには、MCP サーバーの機能を検証するためのテスト用 JSON ファイルが含まれています:

  1. 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
    
  2. getBusinessData をテストします

    ビジネスデータの取得をテストするには、test-business-data.json ファイルを使用します:

    curl -X POST http://localhost:7071/api/MCPFunction -H "Content-Type: application/json" -d @test-business-data.json
    
  3. その他の操作をテストします

    MCP プロトコル形式に従って、その他の操作用のテストファイルを追加で作成できます:

    {
      "requestId": "unique-request-id",
      "messageType": "invoke",
      "invokeRequest": {
        "operation": "operationName",
        "parameters": {
          "param1": "value1",
          "param2": "value2"
        }
      }
    }
    
関数キーを使ったデプロイ済み関数のテスト

Azure にデプロイされた関数をテストする際は、リクエストに関数キーを含める必要があります:

  1. 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
    
  2. 代替方法:クエリパラメーターとして関数キーを使用する

    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
    
  3. Postman でテストする

    • 関数の URL 宛てに新しい POST リクエストを作成します
    • 関数キーを指定した x-functions-key ヘッダーを追加します
    • Content-Type ヘッダーを application/json に設定します
    • MCP リクエスト本文を JSON 形式で追加します
    • リクエストを送信し、レスポンスを確認します

Azure へのデプロイ

Bicep を使用したデプロイ(推奨)

このプロジェクトには、Azure のベストプラクティスに従った Infrastructure as Code デプロイ用の Bicep テンプレートが含まれています。

  1. インフラストラクチャのディレクトリに移動します

    cd infra
    
  2. 特定の 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
    
  3. 作成した 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
    
  4. テスト用の関数キーを取得します

    # 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 を使用したデプロイ(代替方法)
  1. 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
    
  2. 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/)"
    
  3. 関数を公開する

    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 の構成を定期的にバックアップします

トラブルシューティング

よくある問題
  1. System.Net.Primitives アセンブリが見つからない

    .NET 8 の関数をインプロセスモデルで実行すると、この問題が発生することがあります。このプロジェクトで構成されている分離ワーカープロセスモデルを使用してください。

  2. 関数がローカルで起動しない

    global.json で指定されている適切な .NET SDK バージョンがインストールされていることを確認してください。

    {
      "sdk": {
        "version": "8.0.115"
      }
    }
    
  3. 認証または認可の失敗

    MCP_AUTH_ENABLED の設定を確認し、Azure で適切な認証が構成されていることを確認してください。

  4. Bicep のデプロイエラー

    • az bicep build --file main.bicep でリンティングエラーを確認します
    • リソース名の規則と一意性を確認します
    • 適切なパラメーター型が使用されていることを確認します
    • デプロイ前に what-if 操作を使用して変更を検証します
    • よくある Bicep のエラーには、以下のものがあります。
      • 関数を誤った場所で使用している(例:utcNow() はパラメーターの既定値でのみ使用できます)
      • 無効な変数参照
      • パラメーターまたは式の不足
  5. Function Key の問題

    デプロイした関数のテスト時に 401 Unauthorized エラーが発生する場合は、x-functions-key ヘッダーまたは ?code= クエリパラメーターのいずれかを使って、リクエストに関数キーが含まれていることを確認してください。

貢献

  1. リポジトリをフォークします
  2. 機能ブランチを作成します
  3. 変更を加えます
  4. テストを実行します
  5. プルリクエストを送信します

ライセンス

[このプロジェクトが公開されるライセンスを指定してください]

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。