DYNAMICS 365 ERP MCP を含むファイル (プレビュー)

[この記事はプレリリース ドキュメントであり、変更されることがあります]

Dynamics 365 ERP MCP サーバーでのファイルサポートにより、Dynamics 365財務および運用アプリのドキュメント中心のビジネス プロセスに対する強力なプロセス自動化とエージェントエクスペリエンスが可能になります。 MCP サーバーを使用すると、AI エージェントは、大きなクエリ結果、エクスポートされたレポート、既存の添付ファイルを埋め込みリソースとして言語モデル クライアントに返すことができます。また、クライアントからのファイル コンテンツを受け入れて、アプリケーションのレコードに添付することができます。

MCP サーバーは、ファイル操作と添付ファイル操作の 2 つのカテゴリをサポートしています。

  • 出力シナリオ - サーバーは、ファイル コンテンツまたは大きな結果セットを MCP 埋め込みリソースとして LLM クライアントに返します。
  • 入力シナリオ - サーバーはクライアントからファイル コンテンツを受け入れ、Dataverse カスタム API を使用して財務および運用のビジネス レコードに添付します。

これらの操作を組み合わせることで、エージェントはレポートを読み取り、エクスポートしたファイルをダウンロードし、手動でユーザー操作を行うことなく、プログラムによって財務および運用レコードにドキュメントを添付できます。

この記事では、サポートされているシナリオ、サポートされるツールと API、適用されるサイズとタイムアウトの制限、各要求で実行される検証について説明します。

出力シナリオ

出力シナリオは、MCP サーバーがバイナリまたは大きなテキストコンテンツを MCP 埋め込みリソースとして LLM に送り返す場合に発生します。 次の 3 つのトリガーがあります。

  • データ クエリ ツール
  • アクション実行ツール
  • フォームインタラクションツール

Important

出力シナリオでのファイルの操作はプレビュー機能です。 プレビュー機能は運用環境での使用を想定しておらず、機能が制限されている可能性があります。 これらの機能は 追加の使用条件の対象であり、公式リリースの前に利用できるため、お客様は早期アクセスしてフィードバックを提供できます。

前提条件

DYNAMICS 365 ERP MCP サーバーを使用するファイルの出力シナリオを有効にするには、次の前提条件を満たす必要があります。

SQL および OData データ クエリ ツール

data_find_entities_sqldata_find_entitiesの両方で、省略可能なブール型パラメーター (returnAsResource) を受け取ります。 このパラメーターを true に設定すると、クエリ結果 JSON がインライン テキストではなく MCP 埋め込みリソースとして返されます。 この変更により、許容される応答サイズが約 160 KB から 5 MB に上がり、エージェントがより大きな応答サイズで作業できるようになります。

ファイル リソースに対する MCP 応答は、次の形式になります。

コンテンツ ブロック タイプ 説明
Content[0] text 概要テキスト - レコード数と警告。
Content[1] resource 結果 JSON を含む EmbeddedResource { Uri、MimeType、Text }。

制約

  • インライン応答の上限は 160,000 文字 (最大 160 KB) です。 この制限を超えると、ResponseTooLarge エラーが返されます。
  • リソースの応答は 5 MB に制限されています。
  • クエリがエラーを返すと、returnAsResource に関係なく、応答は常にインラインで返されます。

一般的なフロー

  1. エージェントは SELECT ステートメントと returnAsResource=true でdata_find_entities_sqlを呼び出します。
  2. MCP サーバーはクエリを実行し、行を JSON にシリアル化し、エージェントが読み取り可能な形式にします。
  3. エージェントは、概要テキスト ブロックの後に、完全な JSON を含むリソース ブロックを受け取ります。
  4. エージェントはリソースを読み取って個々のレコードを抽出します。

API アクション ツール

api_invoke_action ツールは、returnAsResourceも受け入れます。 このパラメーターを true に設定すると、アクション応答が埋め込みリソースとして返され、クエリ ツール パターンがミラーリングされ、許可される応答サイズが 5 MB に上がります。 クエリ ツールと同じサイズ制限とエラー処理ルールが適用されます。 インライン制限を超えた場合、エラーの修正フィールドは returnAsResource=true の設定を提案します。

SSRS レポートと出力メニュー項目を含むフォーム ツール

MCP サーバーでフォーム ツールを使用する場合、エージェントはレポートを出力メニュー項目として出力するボタンを選択できます。 MCP サーバーは、これらのアクションを実行して出力ファイルを受け取り、更新されたフォーム状態と共に埋め込みリソースとしてツール応答に追加できます。

エージェントが SSRS レポートの FormStyle = "レポート" のフォームを開くと、MCP サーバーは McpReportForm パターンを検出し、レポートのエクスポート ボタンを使用するようにエージェントに指示するガイダンスを挿入します。 エクスポート ボタンをクリックすると、前のセクションで説明したダウンロード パスがトリガーされます。

MCP 応答の形状は次のとおりです。

コンテンツ ブロック タイプ 説明
Content[0] text 概要 (例: [印刷] ボタンがクリックされました。 ファイル 'report.pdf' がダウンロードされました。
Content[1] text 完全な状態の JSON。
Content[2..N] resource ダウンロードしたファイルごとに 1 つの EmbeddedResource、URI file://{fileName}。 バイナリ ファイルは base64 Blobとして返されます。テキスト ファイルは UTF-8 Textとして返されます。

たとえば、エージェントは、"ベンダーのエージング レポートの実行、今日の時点でのエージング" などのプロンプトを表示して、ベンダーのエージング レポートを実行できます。その後、エージェントはフォーム ツールを使用してフォームを検索し、レポートを実行して PDF ファイルを作成します。 MCP ツールの応答には、次の応答と同様に、ドキュメントのファイル参照が含まれます。 その後、エージェントはファイルの結果を要約し、PDF ファイルをダウンロードするためのリンクが含まれます。

[
  {
    "text": "Button __TimerForAsyncTaskPolling was clicked. File 'VendorAgingReport_04242026.pdf' was downloaded.",
    "type": "text"
  },
  {
    "text": "{\"SessionId\":\"6493e93a-a079-41eb-b53f-986fef39286e\",\"Result\":\"Button __TimerForAsyncTaskPolling was clicked.\",\"Messages\":[],\"FormState\":{\"Name\":\"No form is open\",\"Summary\":\"No form is open\",\"Form\":{},\"Buttons\":[],\"Links\":[],\"Guidance\":[\"No form is currently open. To open a new form, use the $form_open_menu_item tool.\"]},\"MCPActivityId\":\"f5de2c35-d182-0004-0051-acf682d1dc01\",\"DeepLinks\":[]}",
    "type": "text"
  },
  {
    "file": {
      "$kind": "FileDataValue",
      "value": {
        "$kind": "ConversationFileReference",
        "value": "5a0c74a9-c4aa-4189-a6e7-8cfa08293ec4"
      }
    }
  }
]

入力シナリオ: レコードに添付されたファイル

入力シナリオには、エージェントがユーザーから、または以前の出力シナリオからファイル コンテンツを取得し、カスタム API を使用して ERP ビジネス レコードにアタッチする必要があります。 カスタム API は、Microsoft Copilot Studioのフローを通じてエージェントに追加されます。 この機能を使用すると、エージェントで参照されているファイルを ERP システムのレコードへの添付ファイルとしてアップロードできます。 たとえば、注文の PDF ドキュメントをアップロードして、関連レコードに添付します。 これは、エージェント内のファイルを操作するためのCopilot Studio機能を使用して行うことができます。

アップロードを実行するアクションは、MCP サーバーに直接組み込まれません。 レコードを財務および運用環境に接続するフローはファイルのアップロードに使用され、Copilot Studio エージェントにツールとして追加する必要があります。 ただし、このフローを使用すると、Dynamics 365 ERP MCP サーバーがエージェントにツールとして追加され、ファイルがアタッチされるレコードの詳細を取得する必要があります。

Note

この機能では、Power Platform の Microsoft Dataverse コネクタが使用され、機能の使用がMicrosoft Copilot Studioに制限されます。

添付ファイルの入力を構成する

  1. エージェントの [ ツール ] タブで、[ ツールの追加] を選択します。
  2. [ ツールの追加 ] ダイアログで、[ フロー ] フィルターを選択します。 ERP で「レコードに添付ファイルを追加」フローを検索して追加する
  3. [ 入力 ] セクションで、 contentBytes 入力を追加します。
    • [ 入力の追加] アクションを選択します。
    • contentBytes入力を選択します。
    • [ 入力に使用 ] フィールドで、[ カスタム値 ] を選択します。
    • [ ] フィールドで、省略記号ボタンを選択します。
    • [ 変数の選択 ] ダイアログで、[ 数式 ] タブを選択し、次の数式を入力します: First(System.Activity.Attachments).Content
    • 挿入 を選択します。
  4. name入力を追加します。
    • [ 入力の追加] アクションを選択します。
    • name入力を選択します。
    • [ 入力に使用 ] フィールドで、[ カスタム値 ] を選択します。
    • フィールドの省略記号ボタンを選択してください。
    • [ 変数の選択 ] ダイアログで、[ 数式 ] タブを選択し、次の数式を入力します: First(System.Activity.Attachments).Name
    • 挿入 を選択します。
  5. ツールを保存します
  6. Dynamics 365 ERP MCP サーバーをツールとしてエージェントにまだ追加していない場合は、「 ERP MCP を使用してエージェントDynamics 365構築する」で説明されている手順に従って、エージェントに追加します。

その後、エージェントに追加したファイルを ERP のレコードに添付するようエージェントに求めることができます。

既知の制限

Area 制限 Workaround
ドキュメントのアップロード API パラメーターを使用して完全な DocumentUploadControl ガイダンスを受け取るのは、Copilot Studio クライアントだけです。 他のクライアントは、Copilot Studioを使用するか、別の統合を使用してカスタム API を呼び出す必要があります。
アップロード サイズ 添付ファイルの最大サイズは 15 MB (DocuParameters.maxFileSizeInFileSystemInBytesLong()) です。 API はサイズを 2 回検証し、最初に base64 の長さの見積もりから、次に MemoryStreamにデコードします。 base64 にエンコードする前に、ファイル サイズを事前検証します。
ダウンロード サイズ SAS URI と filemanagement URL の両方に対して、ファイルごとに 5 MB の制限と 60 秒のタイムアウトがあります。 現在、5 MB を超えるファイルの回避策はありません。 必要に応じて ECS を通じて制限を引き上げます。
リソースの応答 リソース モードは、 data_find_entitiesdata_find_entities_sqlでのみ使用でき、作成/更新/削除には使用できません。 大きな結果が予想される場合は、個別の読み取りクエリを発行します。
重複添付ファイル McpAttachFileToRecordCustomAPI は一意性を強制しません。 常に最初 McpIsFileAlreadyAttachedToRecord 呼び出します。
グローバル テーブル isTableGlobalを明示的に設定する必要があります。 値が正しくないと、間違った DocuRef.RefCompanyId が生成されます。 テーブルのメタデータを確認するか、 data_get_entity_metadataで確認します。