Dynamics 365 MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ORG_URL | No | Organization root URL, such as https://your-org.crm.dynamics.com. Do not include /api/data/v9.2, credentials, a query string, or a fragment. | |
| AD_DOMAIN | No | On-premises AD/NTLM authentication: AD domain. | |
| AUTH_TYPE | No | Authentication type: 'online' (OAuth 2.0 client credentials, default), 'op_ad' (on-premises AD/NTLM), or 'op_ifd' (on-premises IFD/ADFS). | online |
| CACHE_TTL | No | Cache lifetime in seconds, a non-negative integer; 0 disables TTL-based expiration. | 7200 |
| CLIENT_ID | No | Online authentication: application client ID. | |
| TENANT_ID | No | Online authentication: tenant ID, domain, or a supported authority URL. | |
| AD_PASSWORD | No | On-premises AD/NTLM authentication: AD password. | |
| AD_USERNAME | No | On-premises AD/NTLM authentication: AD username. | |
| API_VERSION | No | Web API version, for example v9.1 or v9.2; no automatic version probing or switching. | v9.2 |
| IFD_ADFS_URL | No | On-premises IFD/ADFS authentication: ADFS server URL. | |
| IFD_PASSWORD | No | On-premises IFD/ADFS authentication: password. | |
| IFD_RESOURCE | No | On-premises IFD/ADFS authentication: optional resource; defaults to the organization URL. | |
| IFD_USERNAME | No | On-premises IFD/ADFS authentication: username. | |
| CLIENT_SECRET | No | Online authentication: application client secret. | |
| IFD_CLIENT_ID | No | On-premises IFD/ADFS authentication: ADFS client ID. | |
| AD_WORKSTATION | No | On-premises AD/NTLM authentication: optional AD workstation. | |
| IFD_TOKEN_PATH | No | On-premises IFD/ADFS authentication: optional token path; defaults to /adfs/oauth2/token. | |
| ENVIRONMENT_URL | No | Accepted as an alias for ORG_URL. If both are supplied, they must identify the same organization. | |
| D365_DOTNET_PATH | No | Optional path to the .NET executable, required for local DLL inspection, assembly updates, and the full test suite. | dotnet |
| MAX_READ_RETRIES | No | Maximum retries for transient GET failures, 0-5. | 2 |
| CACHE_TTL_SECONDS | No | Compatibility alias for CACHE_TTL; CACHE_TTL takes precedence when both are set. | |
| IFD_CLIENT_SECRET | No | On-premises IFD/ADFS authentication: optional client secret. | |
| MAX_RETRY_DELAY_MS | No | Maximum permitted retry wait, 0-300000 ms. | 30000 |
| REQUEST_TIMEOUT_MS | No | Per-request HTTP timeout, 1-300000 ms. | 30000 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_solutionsB | List native solution identity/state with optional exact unique-name/ID/managed filters. Bounded paging stays in the current query scope. Visible rows are not deployment validation. |
| list_solution_componentsA | List visible solutioncomponent membership rows for an exact solution; objectid/type, membership row ID and root inclusion behavior are separate. Optional filters combine with the solution. No code/XML/configuration is read; completeness does not prove export payload contents. |
| get_solution_component_dependenciesB | Invoke native RetrieveRequiredComponents, RetrieveDependentComponents or RetrieveDependenciesForDelete after current CSDL validation. Default direction required. Returns projected dependency edges and explicit bounded completeness. Does not compute transitive closure, authorize deletion or prove deployment readiness. |
| add_solution_componentA | Default preview of adding one existing component to a visible ordinary unmanaged solution. Validates the actual object/type, current CSDL and complete visible membership/required-dependency baseline. Types: 1 Entity, 2 Attribute, 9 global Option Set, 10 Entity Relationship, 14 Entity Key, 26 Saved Query, 60 System Form, 61 Web Resource, 90–93 plugin types/assemblies/steps/images. Attribute/Key requires logical_name. Fixed AddRequiredComponents=false/DoNotIncludeSubcomponents=true; implicit parent shells may still be added. Execute with planHash plus explicit unprotected Action; reread membership and report observed deltas without claiming export completeness. |
| inspect_solution_packageA | Inspect a local solution ZIP or base64 without CRM configuration. Bounds ZIP headers, paths, inflated sizes and every payload CRC; reads only solution.xml identity, publisher and declaration counts. No extraction/execution. Does not prove authenticity, safe code, dependencies, contents or deployability. |
| export_solutionA | Preview by default. Native ExportSolution from a visible ordinary unmanaged source; choose managed output explicitly. Current CSDL and caller/environment identity are validated. Execute with planHash; writes an exclusive new local .zip, verifies identity/hash, never returns base64 or overwrites files. No publish. On failure the reserved path can be empty/partial; no automatic replay. |
| import_solution_asyncA | Preview first import of an ordinary unmanaged ZIP into the configured environment. Execute with planHash and allow_unprotected_write=true. Same solution-name updates, managed/patch/upgrade imports are blocked. First import can change shared unmanaged components. Fixed overwrite overlay/workflow activation/dependency skip/holding/upgrade flags false; no environment overrides or separate publish. Submits once using ImportSolutionAsync; accepted is not completed. Unknown outcomes retain a client-assigned importJobId for manual status checks. |
| get_solution_import_statusA | Read native asyncoperation and/or importjob by explicit receipt IDs once, without polling or resubmission. Separates terminal async state, progress, unavailable/hidden/forbidden evidence and solution identity readback. Caller-supplied IDs are independent observations, not an independently verified relation. Progress=100/identity match is not deployment/runtime proof. No raw job/log/configuration text returned. |
| get_solution_snapshotA | Capture the configured environment and current-caller explicit visible membership with selected properties. Profiles: 1 table, 9 global Picklist, 10 relationship, 61 Web Resource, 91 non-package database assembly. Binary content is hashed, never returned/executed. Normalize labels/option values and retain IDs only as evidence. Unsupported/forbidden/partial/unstable inventory is explicit. No nested expansion, atomic snapshot, publication, full schema/dependency/runtime proof. Pass or save the returned snapshot JSON to compare separately configured environments. |
| compare_solution_snapshotsA | Compare two versioned snapshot objects locally without CRM settings. Verify canonical shape and integrity hashes; match portable names and selected properties/root scope, ignoring environment GUIDs and label transport fields. Report missing/extra/changed component references and property paths. Gaps/ambiguous keys/unknown scope make the comparison inconclusive, never a false pass. Option display order, unselected settings, full payload, managed layers, publication and runtime are outside this profile. Read-only; no authentication or environment switching. |
| verify_solution_deploymentA | Read-only selected-scope verification of the configured target against an expected snapshot. Returns a live snapshot comparison and, for explicit receipt IDs, independent native job/import-log evidence with text withheld. No full deployment/publication/runtime/causal package-job linkage is asserted, and job success never overwrites known component differences. Does not import, publish, repair, poll or replay. |
| get_solution_import_logA | Explicitly read a native solution importjob data XML by GUID and return bounded result summaries. <=2 MiB XML; no DTD/entities/namespaces or execution. Counts include manifest/section results, not unique components; failures/warnings prioritized. Raw XML is never returned. Error text is opt-in and bounded with best-effort credential redaction. Logs do not prove async completion or deployment; missing/forbidden/unsupported data is distinct from success. Uses importjobs, not record-data importlogs. |
| get_ribbon_definitionC | Read native effective classic entity Ribbon through current CSDL-validated RetrieveEntityRibbon, with typed enum/alias encoding. Validate/decompress the bounded ZIP RibbonXml.xml part without extraction/execution. Summarize buttons, commands, rule references and candidate insertion locations; full XML is opt-in. Does not evaluate user visibility/security, execute JavaScript, edit merged definitions or support modern commanding. |
| inspect_ribbon_solutionB | Inspect one entity classic RibbonDiffXml from a local solution ZIP without CRM configuration. Returns package identity and bounded button/command summaries, optional selected diff XML. Native merged definitions and solution diffs are different representations; a package is not target/runtime evidence. |
| edit_ribbon_solutionA | Preview by default; edit only one entity classic RibbonDiffXml in an ordinary unmanaged local ZIP. Add standalone custom JS buttons with publisher-scoped IDs, explicit current-table insertion location, ordered parameters, multilingual labels and packaged JS/raster icons; update labels/sequence; hide/unhide via a dedicated contradictory client display rule on an unshared custom command. Preserve other languages/rules/handlers, all other archive payloads and outside-Ribbon XML semantics. Execute with current planHash to write an exclusive NEW ZIP; never overwrite input, import, publish or run code. Built-in replacements, arbitrary rules, handler updates, modern commands and deployment remain separate workflows. |
| import_ribbon_solutionA | Preview first, then submit one native async import into an EXISTING ordinary unmanaged solution for reviewed classic Ribbon edits. Replay the structured edits and require exact candidate bytes; match organization/caller/table/publisher/version/complete visible membership and a fresh target export payload baseline. This is a WHOLE-SOLUTION import, including other unchanged components. Execute with current planHash, allow_unprotected_write and allow_full_solution_import. No upgrade/managed/override/automatic publish. Unknown acceptance retains client importJobId and is never replayed. Accepted responses yield a same-server-process provenance receipt for separate publication; receipt loss/restart is not permission to reimport. |
| publish_ribbon_solutionB | Separate preview/publish after a same-process authenticated import receipt, matching native succeeded import job and successful bounded manifest log. Check current target/exportable non-Ribbon baseline, CSDL and effective Ribbon before native PublishXml. Execute with planHash, allow_unprotected_write and allow_full_table_publish. Publishes the ENTIRE table, including unrelated pending fields/forms/views; pending contents are not locked/read completely. Referenced JS/images are NOT published by this request; use separate Web Resource publication. Compare changed button definitions after acceptance without running code or claiming UI/security/runtime success. Preserve published=true on readback failure; no reimport or automatic republish. |
| verify_ribbon_deploymentA | Read-only recovery/inspection: replay local source/changes, validate the candidate, resolve the current configured target and compare changed button attributes, command/action/parameter structure, labels and local display rules against native effective classic Ribbon. Missing/ambiguous/expanded evidence remains inconclusive or different. No receipt or reimport required; no publish/retry/repair, code execution or claim that the package was imported/published or the button works for a user. |
| get_api_operationA | Read current service CSDL to inspect Action/Function overloads, exact parameter types/facets, binding and import names. Optional entity-set binding narrows signatures. Returns direct input type definitions; nested types are not expanded. Read-only metadata does not prove permissions/runtime support. |
| call_d365_api_actionA | Invoke a current CSDL-defined Action/Function after typed validation. Preserves legacy defaults: Action POST and immediate execution, returning native data directly. Supports single-entity or collection binding, explicit overload IDs, primitive/enum/structural collections and safe Function parameter aliases. Optional dry_run previews without invocation and withholds parameter values by default. Optional expected_hash checks preview planHash; return_details=true returns receipt/data. No Action replay or generic business readback. |
| update_model_column_settingsA | Default preview of existing ordinary unmanaged custom column settings; nine supported base types. Allows length/range/precision expansion, requirement level, auditing/search managed values, Boolean/existing Picklist defaults and DateTime display format. Preserves full definition, labels, choices and date behavior. Rejects narrowing, primary/derived/calculated/rollup/autonumber columns and type/schema changes. Execute with preview planHash as expected_hash plus allow_unprotected_write=true; full native PUT then readback, no automatic publication. |
| update_model_relationshipA | Preview/update an existing unmanaged custom 1:N menu/cascade or N:N per-side menus by full native PUT with language merging. Preserves table/column/intersect identity and omitted settings. Menu must be confirmed customizable. Cascade changes can affect future related-record deletion, ownership and access; native cross-relationship rules remain platform-validated. Requires planHash and explicit unprotected write; saves and reads back separately from publication. |
| reactivate_model_keyA | Preview/submit the native ReactivateEntityKey Action only for an existing unmanaged Failed key index after its cause has been corrected. Uses actual key LogicalName, preserves key columns and never recreates/deletes the key. Requires planHash and explicit unprotected Action. Acceptance is separate from a new job link and Active state; performs one metadata readback, never polls/replays the submission. Inspect later with get_model_key. |
| d365_plugin_assembly_inspectA | Read actual DLL identity, target framework, public plugin contract types and reference metadata locally using a fixed .NET 10 metadata-reader process. No CRM settings required. Does not load/execute inspected code, verify its signature or resolve dependencies. |
| d365_plugin_assemblies_queryB | List native plugin assembly metadata with optional exact ID/name filters. Excludes content, credentials and configuration; bounded completeness is explicit. Does not invoke the .NET reader. |
| d365_plugin_assembly_updateA | Default preview only. Compare actual DLL against a stored unmanaged database assembly and preserve all existing plugin type IDs/names. Permit same major/minor non-decreasing build/revision, same identity/framework/references and AnyCPU signed managed DLL only. Managed, packaged, workflow, added/removed/unresolved types and dependency changes are blocked. Execute with preview fingerprint and metadata-gated concurrency; verify stored bytes, identity and type IDs after saving. .NET 10 Runtime required. Never creates assemblies or retargets steps. |
| d365_plugin_images_queryB | List native images for an exact step without reading plugin configuration. Bounded results report completeness; does not follow continuation links. |
| d365_plugin_image_registerA | Preview/register a native Pre/Post/Both image with explicit readable fields. Supports entity-specific Create, Update, Delete, Assign and SetState steps. Validates stage/message and overlapping aliases. Preview fingerprint required to write. No assembly upload or automatic publication. |
| d365_plugin_image_updateA | Preview/update an unmanaged customizable image. Omitted patch values are preserved. Checks fields, parent step and duplicate aliases, requires preview fingerprint and metadata-gated concurrency, then reads back saved fields. |
| d365_plugin_image_deleteA | Preview/delete an unmanaged customizable image by exact ID. Requires preview fingerprint, metadata-gated concurrency and a subsequent 404 to confirm deletion. Does not delete its parent step or retry a write. |
| list_model_ui_componentsB | List bounded native saved/unpublished system forms or views for one table. Returns IDs and types, with explicit list limits; no XML or automatic published-version fallback. |
| get_model_ui_componentB | Read a native unpublished system form/view definition, structural inventory, SHA-256 preview fingerprint and native ETag when available. Publication state is not inferred. |
| edit_model_formA | Structurally edit a Main form: append a scalar field using an explicit compatible existing control template, add a verified JavaScript library, or bind onload/onsave/onchange. No arbitrary XML, PCF/Lookup template copying or code execution. Default preview. Execute with current expected_hash; native ETag support is checked, otherwise explicit allow_unprotected_write is required. No automatic publication. |
| edit_model_viewA | Structurally edit a public system view: add/remove root display columns, set widths or replace simple root-field ordering. Preserves filters, joins and FetchXML attributes needed by other dependencies. Rejects aggregate/distinct query rewrites. Default preview, fingerprint and metadata-gated ETag/fallback checks, saved readback, no automatic publish. |
| get_model_choicesA | Read bounded native global or local Boolean/Picklist/MultiSelectPicklist options with multilingual labels and a fingerprint. Explicit global_choice_name OR a table/column pair. Reports shared global references without silently retargeting a later write. |
| create_model_choicesA | Create a global Picklist choice with an existing unmanaged solution and publisher prefix. Default preview. Omit option value to request native publisher-based allocation; supplied numeric values and label sets must be unique. Verifies saved labels and allocated values; no automatic publication. |
| change_model_choice_valueA | Insert a numeric choice option or update existing option labels/description through native InsertOptionValue/UpdateOptionValue (MergeLabels=true). Unmanaged choices only. Explicitly address a global choice to change shared values. Default preview; execution needs current expected_hash and allow_unprotected_write=true. No delete, renumber, state/status mutation or automatic publish. |
| publish_model_choicesA | Publish one entire shared global choice by native PublishXml; includes other pending changes to this global choice. Default preview. Local choices use the separate whole-table publish_model_table tool. Publication never replays a save and does not verify UI behavior. |
| get_model_relationshipB | Read a native relationship definition by schema name, cast to 1:N or N:N metadata. Does not infer publication or UI placement. |
| create_model_relationshipB | Create native 1:N (with a new Lookup) or N:N relationship. Default preview runs metadata reads and read-only POST eligibility checks, then exposes cascade rules and native create body. Checks publisher, managed properties and duplicate names. No implicit publish, form editing or update of existing relationships. |
| get_model_keyB | Read one native alternate-key definition and Pending/InProgress/Active/Failed index state. Optional linked job projection excludes free-text messages/data. A saved key is usable for alternate-key operations only after its native index is Active; no automatic reactivation. |
| create_model_keyA | Create a native alternate-key definition on 1–16 columns with solution/publisher, type, field-security and duplicate checks. Default preview; server validates index size and existing uniqueness asynchronously. Pending/unknown is not Active. No record scan, index reactivation, save replay or implicit publication. |
| get_model_definitionB | Retrieve a complete table or supported column definition and SHA-256 fingerprint using strong consistency. Supports nine basic/choice column types, including expanded choices. Publication state remains unknown; fingerprint is not a platform lock. |
| create_model_tableA | Create an ordinary custom table with a primary text name column using native EntityDefinitions. Requires an existing unmanaged solution and matching publisher prefixes. Default preview; does not place fields on forms or request publication. |
| create_model_columnB | Create native String, Memo, Integer, Decimal, Money, DateTime, Boolean, Picklist or MultiSelectPicklist column. Choice columns use local options or a validated global choice binding. Checks parent managed properties, publisher prefix and duplicate logical name. Default preview; save and publication remain separate. |
| update_model_labelsA | Update table/column labels by native full-definition PUT with MSCRM.MergeLabels=true. Preserves other retrieved properties, including choice definitions. Does not update option values: use change_model_choice_value. Execution requires current expected_hash and allow_unprotected_write=true; a concurrency race remains. Default preview. |
| publish_model_tableA | PublishXml for one entire table, including OTHER pending fields, forms, views and ribbon customizations. Default preview exposes scope; publication is separate from save. No automatic save replay on publication failure. |
| get_diagnostic_settingsA | Read current organization trace/audit switches and optional table audit metadata. Reports forbidden/unavailable/unknown evidence separately; current switches do not prove historical settings or deleted logs. Does not enable logging or auditing. |
| query_plugin_trace_logsA | Read bounded native plugin trace rows by time, correlation ID, step and exact plugin type. Default excludes message/exception text; configuration and secureconfiguration are always excluded. Empty results do not prove no execution, disabled logging or log deletion. |
| query_failed_system_jobsA | Read native failed system jobs (statuscode 31) using completion-time bounds and optional correlation/owning step IDs. Excludes job data/configuration and message text by default. Does not retry, cancel or change jobs. |
| diagnose_plugin_failureA | Build a read-only evidence report from exception-filtered traces, failed jobs and current plugin steps, anchored by correlation, step or plugin type. Uses native IDs for links, reports missing/forbidden/limited sources and keeps root cause undetermined. Current step state is not historical configuration. |
| query_security_principalsA | Read bounded visible users, teams or roles with optional ID/name/business-unit filters. Disabled users are included unless enabled is explicit. Catalog entries do not imply effective record permissions. |
| get_principal_security_contextA | Read a user/team profile, direct roles and bounded visible team memberships/roles. Preserves partial/forbidden sources and business-unit role identities. Does not reconstruct all inherited/group/shared/field privileges; use get_record_access for native record rights. |
| get_record_accessB | Use native bound RetrievePrincipalAccess for the specified principal and record. Returns effective record rights without inventing why they were granted or claiming field/business-rule access. Does not change permissions. |
| get_record_audit_historyA | Read one native RetrieveRecordChangeHistory page. Default withholds attribute values. Preserves MoreRecords/cookie and current audit-setting evidence; no actor/time/ID is invented if native AuditRecord is absent. Empty history does not prove logs were deleted or auditing was disabled. |
| get_audit_detailsB | Read native bound RetrieveAuditDetails and independent audit summary metadata. Attribute audit old/new values are opt-in and bounded; other detail types are named without fabricating unsupported fields. Detail and summary permissions are reported separately. |
| create_new_recordA | Create a native record. Accepts returned entity/ID headers or a supplied primary key, reports confirmed save separately from ID availability. dry_run previews without writing. |
| update_existing_recordA | Update a native record with row-version protection where supported. Defaults to a fresh ETag; unsupported concurrency stops writes unless unprotected operation is explicit. Does not upsert a missing GUID. |
| delete_record_by_idA | Delete a native record with validated GUID and concurrency conditions. dry_run identifies the target without deleting. A specific supplied ETag is never downgraded. |
| upsert_record_by_keyB | Use one active native alternate key with conditional PATCH. Validates key metadata/types and never silently changes key values. Races return errors; writes are never automatically repeated. |
| associate_recordsA | Associate records using a validated native navigation property. Single-valued lookup uses conditional PATCH; collection membership uses $ref and requires explicit allow_unprotected_write because parent ETags do not guarantee membership concurrency. |
| disassociate_recordsA | Remove a native association. A single lookup is cleared only if it currently points to the supplied target; collection membership uses DELETE on the specific $ref. No related record is deleted. |
| execute_record_batchA | Execute up to 100 validated record mutations in native $batch chunks. Each operation has its own change set, so a later failure does not roll back earlier operations. Preflights all operations before dispatch, reports per-item outcomes, stops after unknown results and respects request cancellation. |
| execute_record_transactionA | Execute up to 100 validated mutations in ONE native $batch change set, without chunking or fallback to individual writes. Reports committed false for confirmed rejection and unknown for transport/server ambiguity. Preflight reads are outside the transaction; arbitrary HTTP and Content-ID dependencies are not accepted. |
| search_web_resources_by_nameA | Find Web Resources by a substring of name, with bounded OData results. Defaults to published definitions; include_unpublished=true reads the latest saved definitions. Content is excluded by default. Supports the legacy camelCase parameters. |
| create_web_resource_and_publishA | Create a Web Resource without overwriting an existing saved name. Defaults to scoped PublishXml after saving. publish=false saves only; dry_run=true previews without writing. A publication error preserves saved=true and the created ID; recover with publish_web_resource. |
| update_web_resource_and_publishA | Update an existing Web Resource by GUID and optionally publish it. Uses If-Match:* to prevent accidental upsert; pass if_match for optimistic concurrency. dry_run reads the latest saved/unpublished definition and returns hashes and ETag. Does not rename or change the resource type. |
| publish_web_resourceA | Publish a single saved Web Resource with native PublishXml, without saving/re-uploading content. Use for save-only workflows or recovery after a publish failure. Publishes the latest saved version at execution time. |
| d365_plugin_registration_metadataA | Discover native plugin types, assemblies, SDK messages and message filters. Bounded read-only listings report limits; metadata does not prove write permission. Does not upload assemblies. |
| d365_plugin_steps_queryA | Query native plugin steps with exact filters. Secure Configuration is excluded by default; explicit include_secure_configuration=true is required to read plaintext. All supplied filters, including step_id, are combined. Results are bounded by top. |
| d365_plugin_step_registerA | Register a step for an existing native plugin type. Resolves message/entity filters, validates filtering fields and detects duplicate signatures. No write is automatically replayed. Optional secure configuration is allocated separately and bound in the step create; all phases report their IDs on failure. dry_run previews without writing. |
| d365_plugin_step_updateA | Update one plugin step. Omitted fields/configuration are kept; configuration supports keep/set/clear. Uses table concurrency metadata and a specific ETag by default. Secure set creates a replacement row and binds it in the same PATCH as step changes; clear unbinds. Existing configuration rows are retained, never blindly deleted. Write/readback failures preserve phase evidence. |
| get_environment_capabilitiesA | Read WhoAmI, RetrieveVersion and table definitions to inspect the configured CRM environment. Reports metadata evidence separately from untested permissions and SDK support; does not change the connection or select another API version. |
| get_entity_metadata_summaryB | Get a summary of entity metadata including primary key, name field, and business-relevant attributes. System-redundant fields are excluded. |
| get_field_picklist_optionsB | Get OptionSet (enum) definitions for a specific field within an entity. Supports both local and global OptionSets. |
| get_entity_navigation_linksB | Get navigation properties (relationships) for an entity, including 1:N, N:1, and N:N relationships. |
| preview_fetchxml_queryB | Preview the first result using the same FetchXML state/filter logic as query_by_fetchxml. Returns effective query and paging information without claiming the sample is a full result set. |
| query_by_fetchxmlA | Execute FetchXML with explicit state policy and bounded native cookie/simple paging. Defaults to one page. Returns value, effective query, completeness and continuation; use fetch_all for multiple pages. |
| clear_server_cacheA | Clear local cached metadata and authentication tokens and invalidate query continuations. Does not change CRM data. |
| get_current_user_contextB | Get information about the currently connected user and organization context. |
| list_all_entity_definitionsB | List basic definitions (logical name, display name, etc.) for all entities in the system. |
| search_records_by_odataA | Query records using OData with explicit state policy, stable ordering and bounded server-driven paging. Defaults to one page and legacy statecode=0 where valid; all adds no implicit state filter. Returns completeness and continuation. |
| get_record_by_idC | Retrieve detailed information for a single record by its GUID. |
| get_detailed_field_metadataC | Get full metadata details for a specific attribute (field) for deep analysis. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 84 tools
The set covers many distinct Dynamics 365 subdomains, but several tools overlap in purpose, especially metadata readers (get_model_definition, get_entity_metadata_summary, get_detailed_field_metadata, list_all_entity_definitions), choice readers (get_field_picklist_options, get_model_choices), and relationship readers (get_model_relationship, get_entity_navigation_links). The very detailed descriptions help disambiguate most cases, but with 84 tools there is still meaningful selection risk.
Most names are snake_case verb_noun, but the d365_plugin_* family uses noun_verb forms such as d365_plugin_assembly_inspect and d365_plugin_steps_query, while other areas use create_model_*, get_model_*, and generic record verbs. The conventions are mixed but generally readable.
84 tools is far beyond the 50+ threshold for an extreme mismatch, even for a large enterprise platform like Dynamics 365. The surface should be consolidated or split into smaller purpose-specific servers to reduce cognitive load.
The server covers records, metadata, solutions, ribbon, plugins, web resources, audit, security, diagnostics, and querying, but lifecycle coverage is uneven. Notable gaps include no create_solution, no remove_solution_component, no delete_web_resource, no delete_plugin_step, and no delete operations for model tables, columns, relationships, or keys.