MCP server for Microsoft Dynamics 365 Business Central — use via npx or deploy on Azure
This server demonstrates good foundational quality with well-structured tool definitions, clear naming conventions, and comprehensive descriptions. All 10 tools follow verb_noun patterns (list_, set_, get_, create_, update_, delete_). Descriptions are substantive (average ~250 chars), explaining WHAT each tool does, WHEN to use it, and relevant context. Input schemas are present with proper JSON Schema structure including types and descriptions. However, there are notable gaps: no output schemas are documented (critical for chaining), parameters lack constraints (enums, min/max), no error handling guidance, no idempotency declarations, and security patterns around destructive operations are underdeveloped. The server handles Business Central API context management well (list/set/get patterns for API and company), but lacks batch operations and does not enforce input validation rules in descriptions (e.g., UUID format, OData syntax). The tools compose reasonably well but would benefit from explicit chaining documentation and recovery paths.
Get the currently active Business Central API context (publisher, group, version, display name). Returns the API context being used for all data operations. If not explicitly set, returns Standard BC API v2.0 (publisher="", group="", version="v2.0"). Use this to verify which Business Central API endpoint is currently active.
Get the currently active Business Central company (UUID, name, details). Returns the company being used for all data operations. If not explicitly set, returns the default company (first company or configured in BC_COMPANY_ID). Use this to verify which company context is active before performing data operations.
Search Business Central OData metadata for entities, properties, relationships, or enums. Advanced tool for exploring the complete schema when get_resource_schema is insufficient. Search by term and type (entity/property/relationship/enum/all). Returns focused, relevant metadata. Use get_resource_schema for simple entity lookups. Use this for cross-entity searches or complex metadata exploration.
Get detailed schema for a specific Business Central entity. Returns all properties with names, types (Edm.String, Edm.Int32, Edm.Guid), nullability, read-only status, and key fields. Also returns navigation properties for relationships ($expand). Use this before creating or updating records to understand required fields, data types, and available properties. Case-sensitive entity names.
No output schemas documented for any tool. Critical for chaining and LLM planning. Tools like list_records, list_companies, get_odata_metadata should specify what fields are returned so agents can extract the right IDs and data for downstream calls.
Parameters lack enum constraints and range constraints. 'publisher' in set_active_api accepts free-form strings (should be enum: ["", "microsoft", ...]). 'top' in list_records lacks min/max (allows unbounded requests). 'search_type' in get_odata_metadata has enum but others don't. Unconstrained inputs invite invalid LLM submissions.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 41 | 2025-03-26+ | v1 |
List available Business Central API contexts (publisher/group/version combinations). Returns Standard BC API v2.0, Microsoft extended APIs (automation, analytics), and custom ISV APIs. Each API context provides access to different sets of Business Central entities. Use this to discover which API contexts are available before setting the active context with set_active_api.
List all companies in the Business Central environment. Returns company IDs (UUID), names, and details. Business Central supports multiple companies representing separate business entities (e.g., different subsidiaries or legal entities). Use this to discover available companies before selecting one with set_active_company. The active company determines which company data is accessed by all data operations.
Query Business Central entity records with OData V4.0 capabilities: filtering, sorting, pagination, field selection, and relationship expansion. Primary tool for retrieving data from any Business Central entity (customers, items, salesOrders, etc.). Supports complex queries including comparisons (eq, ne, gt, lt), logical operators (and, or), and string functions (contains, startswith, endswith). Use filter for conditions, orderby for sorting, top/skip for pagination, select for specific fields, expand for related entities.
List all Business Central entity names available in the current API context (customers, items, salesOrders, vendors, etc.). Business Central has 450+ entities representing business objects. Entity names are case-sensitive. Use this to discover available entities or find the correct entity name. Available entities depend on the current API context (Standard BC API, Microsoft APIs, or ISV APIs).
Set the active Business Central API context (publisher/group/version) for all subsequent data operations. This determines which Business Central API endpoint will be used. Standard BC API uses publisher="", group="", version="v2.0". Microsoft extended APIs use publisher="microsoft" with groups like "automation" or "analytics". Changes affect all tools until reset.
Set the active Business Central company for all subsequent data operations. All CRUD operations will access data from this company until changed. Requires company UUID (not name). Call list_companies first to get available company IDs. This is a global context switch affecting all data tools (list_records, create_record, update_record, delete_record, find_records_by_field).
No error handling guidance. Tools lack recovery suggestions. E.g., if set_active_company receives invalid company_id, what should the agent do? Should it call list_companies? If filter in list_records has syntax error, how should the agent fix it? Recovery guides are critical for agent resilience.
Parameter descriptions include near-example values (UUID format '269d980d-e4a6-f011-a7af-6045bdc9095d' in set_active_company). LLMs reuse example values literally, causing real calls to fail. Replace with regex pattern or constraint syntax instead.
list_records description mentions orderby, select, expand parameters but schema doesn't include them. Parameter mapping is incomplete. Either add missing params to schema or remove from description.
No pagination limit enforcement documented. list_resources claims 450+ entities but no indication if all are returned or if there's pagination. list_records accepts 'top' but no maximum stated, defaults to 100 but max of 1000 is mentioned in description, not enforced. Missing pagination cursors (next_cursor) guidance.
set_active_api and set_active_company are context-switching tools but lack idempotency declarations. If an agent retries, will calling set_active_company twice with same ID cause issues? Idempotency is critical for agent retry safety.
Tool composition could be stronger. Separate read (list_*) and discovery tools (list_resources, get_odata_metadata) are good, but no batch operations (e.g., create_records, update_records). Common workflows like 'update 50 customer statuses' require 50 sequential calls instead of one batch call, wasting tokens and latency.