Skip to content

[MCP] Add Query API tool support to MCP configuration#6670

Open
onbuyuka wants to merge 12 commits intomainfrom
private/onbuyuka/mcpquery
Open

[MCP] Add Query API tool support to MCP configuration#6670
onbuyuka wants to merge 12 commits intomainfrom
private/onbuyuka/mcpquery

Conversation

@onbuyuka
Copy link
Copy Markdown
Contributor

@onbuyuka onbuyuka commented Feb 13, 2026

Summary

  • Introduce Query API tools as a new tool type in MCP configurations, alongside the existing Page API tools. This enables MCP configurations to expose read-only API query endpoints (e.g., PowerBI report queries, finance API queries) as tools, expanding the data surfaces available to MCP clients.
  • Add AboutText annotations to 86 existing API queries across APIReportsFinance, PowerBIReports, and related apps. These descriptions help MCP tool discovery by providing semantic context about each query's purpose and data contents.
  • Extend the MCP Config UI and public API with full query tool lifecycle support: creation (CreateQueryAPITool), lookup (MCPQueryConfigToolLookup page), validation, version management, and bulk add by API group — all mirroring the existing page tool patterns.

Changes

Core MCP Configuration (MCPConfigImplementation, MCPConfig):

  • New CreateAPIQueryTool, ValidateAPIQueryTool, GetHighestAPIQueryVersion, LookupAPIQueryTools, ValidateAPIQueryVersion, LookupAPIQueryVersions procedures
  • Query tools are read-only by design: AllowCreate, AllowModify, AllowDelete, and AllowBoundActions silently no-op for query object types
  • GetAPIPublishers, AddToolsByAPIGroup, and AddStandardAPITools now aggregate both page and query publishers/tools (standard API queries filtered to v2.0)
  • Export/import supports the new Query object type
  • Obsoleted the single-param GetAPIToolId overload in favor of one accepting ObjectType

UI:

  • New MCPQueryConfigToolLookup page (8367) for selecting API queries
  • MCPConfigToolList updated with Object Type field, query-aware lookup/validation, and conditional editability (CUD fields disabled for query tools)

API Query AboutText additions (86 queries):

  • APIReportsFinance (6 queries), PowerBIReports Core/Finance/Inventory/Manufacturing/Projects/Purchasing/Sales/Obsolete (80 queries)

Tests:

  • New Mock API Query and Mock APIV2 Query test query objects
  • 8 new test cases: TestCreateQueryAPITool, TestCreateInvalidQueryAPITool, TestQueryToolDoesNotAllowCreate/Modify/Delete/BoundActions, TestFindMissingObjectWarningsForQueryTool, TestLookupAPIQueryTools
  • Updated test library with LookupAPIQueryTools and renamed GetHighestAPIVersion to GetHighestAPIPageVersion

Fixes AB#631273

@onbuyuka onbuyuka changed the title [MCP] Add Query API tool support to MCP configuration [WIP][MCP] Add Query API tool support to MCP configuration Feb 13, 2026
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AL Documentation Audit

Documentation gaps were detected in the following apps:

  • MCP-Test-Library: 0% documentation coverage
  • MCP-Test: 0% documentation coverage
  • MCP: 0% documentation coverage
  • Power-BI-Report-embeddings-for-Dynamics-365-Business-Central: 74% documentation coverage

To generate documentation, run /al-docs init or /al-docs update using GitHub Copilot CLI or Claude Code.
This review is for awareness to help keep documentation in sync with code changes. It is okay to dismiss this request.

@github-actions github-actions Bot added this to the Version 29.0 milestone Apr 17, 2026
@onbuyuka onbuyuka changed the title [WIP][MCP] Add Query API tool support to MCP configuration [MCP] Add Query API tool support to MCP configuration Apr 21, 2026
@onbuyuka onbuyuka marked this pull request as ready for review April 23, 2026 07:58
@onbuyuka onbuyuka requested a review from a team as a code owner April 23, 2026 07:58
Copilot AI review requested due to automatic review settings April 23, 2026 07:58
@onbuyuka onbuyuka requested review from a team as code owners April 23, 2026 07:58
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends the MCP configuration feature to support API Query objects as tools (in addition to API Pages), and enriches API query metadata with AboutText to improve discoverability for MCP clients.

Changes:

  • Add end-to-end MCP configuration support for Query API tools (lookup UI, validation, creation, version selection, warnings handling, import/export parsing).
  • Update MCP tool-list UI to be query-aware and disable CUD/bound-actions toggles for Query tools.
  • Add AboutText descriptions to a large set of API queries (PowerBIReports, APIReportsFinance, and obsolete query APIs) and add test coverage + mock API query.

Reviewed changes

Copilot reviewed 98 out of 98 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/System Application/Test/MCP/src/MCPConfigTest.Codeunit.al Adds/updates tests for query-tool creation, lookup, and behavior parity with page tools
src/System Application/Test Library/MCP/src/MockAPIQuery.Query.al Adds a mock API query used by MCP tests
src/System Application/Test Library/MCP/src/MCPConfigTestLibrary.Codeunit.al Renames/extends test-library APIs for page vs. query tool lookup/versioning
src/System Application/Test Library/MCP/app.json Extends ID range to include the new mock query object
src/System Application/App/MCP/src/Configuration/Pages/MCPQueryConfigToolLookup.Page.al New lookup page for selecting API queries as MCP tools
src/System Application/App/MCP/src/Configuration/Pages/MCPConfigToolList.Page.al Updates tool list UI to support both Page and Query tools
src/System Application/App/MCP/src/Configuration/Codeunits/MCPUpgrade.Codeunit.al Uses new “highest API page version” helper during upgrade
src/System Application/App/MCP/src/Configuration/Codeunits/MCPConfigMissingReadTool.Codeunit.al Scopes “missing read” warning logic to Page tools only
src/System Application/App/MCP/src/Configuration/Codeunits/MCPConfigMissingParent.Codeunit.al Updates missing-parent remediation to use page-specific tool creation/checks
src/System Application/App/MCP/src/Configuration/Codeunits/MCPConfigMissingObject.Codeunit.al Extends missing-object warning detection to Query tools
src/System Application/App/MCP/src/Configuration/Codeunits/MCPConfigImplementation.Codeunit.al Core implementation for query tool lifecycle, lookup, validation, versioning, publisher aggregation, and import parsing
src/System Application/App/MCP/src/Configuration/Codeunits/MCPConfig.Codeunit.al Public API surface updates: page tool creation rename + query tool creation + new GetAPIToolId overload
src/Apps/W1/PowerBIReports/App/_Obsolete/Sales/APIs/ValueEntriesSales.Query.al Adds AboutText for obsolete query API
src/Apps/W1/PowerBIReports/App/_Obsolete/Sales/APIs/SalesLinePBIAPI.Query.al Adds AboutText for obsolete query API
src/Apps/W1/PowerBIReports/App/_Obsolete/Purchasing/APIs/ValueEntriesPurch.Query.al Adds AboutText for obsolete query API
src/Apps/W1/PowerBIReports/App/_Obsolete/Finance/APIs/GLEntriesIncomeStatement.Query.al Adds AboutText for obsolete query API
src/Apps/W1/PowerBIReports/App/_Obsolete/Finance/APIs/GLEntriesClosing.Query.al Adds AboutText for obsolete query API
src/Apps/W1/PowerBIReports/App/Sales/APIs/SalesValueEntriesPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Sales/APIs/SalesLineV2PBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Sales/APIs/SalesLineItemShipped.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Sales/APIs/SalesLineItemOutstanding.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Sales/APIs/SalesInvoiceLinesPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Sales/APIs/SalesInvProjectLedgerEntry.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Sales/APIs/SalesCreditLinesPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Sales/APIs/SalesCrProjectLedgerEntry.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Sales/APIs/OpportunityPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Sales/APIs/OpportunityEntriesPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Sales/APIs/ItemBudgetNames.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Sales/APIs/ItemBudgetEntriesSales.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Purchasing/APIs/PurchaseLinesPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Purchasing/APIs/PurchaseInvoiceLines.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Purchasing/APIs/PurchaseCreditLines.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Purchasing/APIs/PurchValueEntriesPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Purchasing/APIs/PurchLinesItemReceived.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Purchasing/APIs/PurchLinesItemOutstd.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Purchasing/APIs/ItemBudgetEntriesPurch.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Projects/APIs/PurchLinesJobReceived.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Projects/APIs/PurchLinesJobOutstanding.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Projects/APIs/Jobs.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Projects/APIs/JobTasks.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Projects/APIs/JobPlanningLines.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Projects/APIs/JobLedgerEntriesPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/WorkCenters.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/WorkCenterGroupsPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/RoutingsPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/RoutingLinksPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/ProdOrdersPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/ProdOrderRoutingLines.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/ProdOrderLinesManuf.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/ProdOrderCompManuf.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/ProdOrderCapacityNeeds.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/ManufacturingSetupPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/ManufValueEntriesPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/MachineCenters.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/ItemLedgerEntriesProd.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/InvAdjEntOrderPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/CapacityLedgerEntries.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Manufacturing/APIs/CalendarEntries.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/Zones.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/WhseJournalLinesToBin.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/WhseJournalLinesFromBin.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/WarehouseEntries.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/WarehouseActivityLines.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/ValueEntriesItem.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/TransferLines.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/ServiceLinesOrder.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/SalesLinesOutstanding.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/RequisitionLines.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/PurchaseLinesOutstanding.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/ProdOrderLinesInvt.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/ProdOrderCompInvt.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/PlanningComponents.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/JobPlanningLinesItem.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/ItemLedgerEntriesPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/Bins.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/AssemblyLinesItem.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Inventory/APIs/AssemblyHeadersOrder.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Finance/APIs/VendorLedgEntriesPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Finance/APIs/GLIncomeStatementPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Finance/APIs/GLEntriesBalanceSheet.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Finance/APIs/GLBudgets.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Finance/APIs/GLBudgetEntriesPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Finance/APIs/GLAccounts.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Finance/APIs/GLAccountCategories.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Finance/APIs/CustomerLedgerEntries.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Finance/APIs/CloseIncomeSourcePBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Finance/APIs/AccountCategories.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Core/APIs/ResourcesPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Core/APIs/PowerBIDimensionSetEntries.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Core/APIs/ItemsPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Core/APIs/DynamicDimensionsPBIAPI.Query.al Adds AboutText for Power BI query API
src/Apps/W1/PowerBIReports/App/Core/APIs/Dimensions.Query.al Adds AboutText for Power BI query API
src/Apps/W1/APIReportsFinance/App/src/APIFinanceGLEntry.Query.al Adds AboutText for finance reporting query API
src/Apps/W1/APIReportsFinance/App/src/APIFinanceGLBudgetEntry.Query.al Adds AboutText for finance reporting query API
src/Apps/W1/APIReportsFinance/App/src/APIFinVendLedgEntry.Query.al Adds AboutText for finance reporting query API
src/Apps/W1/APIReportsFinance/App/src/APIFinDtldVendLedgEntry.Query.al Adds AboutText for finance reporting query API
src/Apps/W1/APIReportsFinance/App/src/APIFinDtldCustLedgEntry.Query.al Adds AboutText for finance reporting query API
src/Apps/W1/APIReportsFinance/App/src/APIFinCustLedgEntry.Query.al Adds AboutText for finance reporting query API

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/System Application/Test/MCP/src/MCPConfigTest.Codeunit.al
onbuyuka and others added 3 commits April 23, 2026 13:39
- Add APIVersion filter to the query branch of AddStandardAPITools so it
  matches the page branch behavior (avoids adding duplicate v1.0/beta
  tools for the same standard API).
- Add Mock APIV2 Query test fixture (empty publisher/group, v2.0) so
  the standard-API filter has something to match.
- Assert query tool creation in TestAddStandardAPITools and
  TestAddToolsByAPIGroup - both previously verified only the page tool.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants