# Microsoft Dynamics 365 Sales (slim) > Microsoft's sales CRM for accounts, contacts, leads and opportunities. Its data is held in Dataverse and reached through the Dataverse Web API (OData v4), SDKs for .NET and Python, and the Dataverse MCP server. - Full: https://www.anchorterminal.com/tools/dynamics-365-sales.md (~9,600 tokens) · this version ~1,980 tokens · JSON https://www.anchorterminal.com/tools/dynamics-365-sales.json · canonical https://www.anchorterminal.com/tools/dynamics-365-sales - Index: https://www.anchorterminal.com/llms.txt · API: https://www.anchorterminal.com/api/v1/index.json · Updated: 2026-10-08 **B · 69.7/100 · rank #150 of 722 · #3 in CRM & customer platforms · not agent-ready · confidence medium** Assessment: Dynamics 365 Sales data sits in Dataverse, reached through the OData v4 Web API or the Dataverse MCP server with 15 tools. Service protection limits are published and 429 responses carry Retry-After. Access needs an Entra app registration and an administrator, and the public service health page showed no history to our reader. ## Facts - Kind: HTTP API · vendor: Microsoft · category: CRM & customer platforms · legal entity: Microsoft Corporation · provenance 90/100 - Local only (HTTP, stdio): pypi `PowerPlatform-Dataverse-Client`, npm `@microsoft/dataverse`, nuget `Microsoft.PowerPlatform.Dataverse.Client` - Auth: OAuth · pricing: Paid · x402: no · licence: Proprietary service under the Microsoft Product Terms. The Python SDK and the @microsoft/dataverse npm package are MIT - Probe metrics: not measured yet (probes haven't run) - API: Dataverse Web API, OData v4, JSON only, at https://.api.crm.dynamics.com/api/data/v9.2/. Sales tables such as lead, opportunity and quote sit beside account, contact and activity tables - MCP server: Official, generally available at https://.crm.dynamics.com/api/mcp, or through the local proxy `npx @microsoft/dataverse mcp `. 15 tools. Preview tools at /api/mcp_preview - MCP tools: search_data, search, create_record, update_record, delete_record, create_table, update_table, delete_table, read_query, describe, upsert_skill, delete_skill, init_file_upload, commit_file_upload, file_download - Credentials: OAuth 2.0 through Microsoft Entra ID. Delegated sign-in, or an application user with a client secret or certificate. Access follows Dataverse security roles - Rate limits: Per user and web server, 6,000 requests and 20 minutes of execution time per five minutes, and 52 concurrent requests. 40,000 requests per licensed user per 24 hours, and a tenant pool of 500,000 plus 5,000 per licence for application users - Errors: JSON error with code and message. 429 carries Retry-After. `Prefer: odata.include-annotations="*"` adds sub-codes and a help link - Paging: `Prefer: odata.maxpagesize` up to 5,000 rows a page and `@odata.nextLink`. `$top` limits rows. `$skip` is not supported - Safe writes: PATCH on an alternate key upserts. `If-Match` and `If-None-Match` restrict it to update or create. ETags for optimistic concurrency - Webhooks: Dataverse webhooks POST JSON for server events, synchronously or asynchronously. Azure Service Bus is the queued alternative - Search: Dataverse search at /api/search/v2.0/ and through the Web API, relevance-ranked across tables - SDKs: Python PowerPlatform-Dataverse-Client 1.1.0 (7 October 2026, MIT), .NET Microsoft.PowerPlatform.Dataverse.Client 1.2.27, npm @microsoft/dataverse 1.0.81 (26 September 2026, MIT) - Audit: Dataverse auditing logs record changes and user access once turned on per environment, table and column. Readable through the Web API. Retrieve operations are not audited - SLA: Service credit of 25 per cent below 99.9 per cent uptime, 50 below 99 and 100 below 95, for Sales Enterprise and Professional, per the SLA dated 1 October 2026 - Free tier: 30-day Dynamics 365 trial. Power Apps Developer Plan is a free Dataverse development environment with Web API access, disabled after 30 days without use - Prices: Sales Professional $65 per seat per month; Sales Enterprise $105 per seat per month; Sales Premium $150 per seat per month - Scores: Reliability 65, Performance pending, Schema & documentation 81, Agent ergonomics 86, Security & auth 74, Payments & pricing 25, Task success pending, Maintenance & community 79, Transparency & trust 75 · total over the 7 assessed categories - Why: Reliability, Graded on the Dataverse Web API, with the Dataverse MCP server noted. · Schema & documentation, Each environment serves an OData v4 service document and a CSDL $metadata document at /api/data/v9.2/$metadata, and Learn publishes a table… · Agent ergonomics, `$select`, `$top` and `Prefer: odata.maxpagesize` size responses. · Security & auth, OAuth 2.0 through Microsoft Entra ID is the only route, with delegated sign-in or an application user holding a client secret or certificate… · Payments & pricing, No x402, MPP or L402 (0). · Maintenance & community, Dataverse service update 9.2.26094 went to early release on 2 October 2026, and the Python SDK 1.1.0 was published on 7 October 2026 (30). · Transparency & trust, Closed service under the Microsoft Product Terms for Dynamics 365, with MIT SDKs (15). - Sources: 30, open questions: 9, both in the full twin - Capabilities: crm.records, crm.pipeline, crm.activities, crm.search, crm.webhooks - JSON: https://www.anchorterminal.com/api/v1/tools/dynamics-365-sales.json - Verify (for the vendor): the badge `https://www.anchorterminal.com/badges/dynamics-365-sales.svg` or a link to https://www.anchorterminal.com/tools/dynamics-365-sales from a page on microsoft.com or one of its subdomains, or the README of github.com/microsoft/PowerPlatform-DataverseClient-Python, then `POST https://www.anchorterminal.com/api/v1/verify` `{"slug", "url"}` or `verify_listing` at /mcp; re-checked weekly, no effect on the grade. Snippets in the full twin. ## Before you call it 1. Send `OData-MaxVersion: 4.0`, `OData-Version: 4.0` and `Accept: application/json`, and name columns with `$select` on every read 2. Page with `Prefer: odata.maxpagesize` (up to 5,000) and follow `@odata.nextLink`. `$skip` is not supported 3. On 429, wait the seconds in Retry-After. The `x-ms-ratelimit-*` headers are for debugging, not pacing 4. Use PATCH on an alternate key to upsert, and add `If-Match: *` when an update must not create a record 5. For MCP, call `describe` for logical table and column names before `read_query`. Update any allow list that still names `describe_table`, `list_tables` or `fetch` ## Connect ```bash pip install PowerPlatform-Dataverse-Client ``` ```bash curl "https://$DATAVERSE_ORG.api.crm.dynamics.com/api/data/v9.2/accounts?\$select=name&\$top=5" \ -H "Authorization: Bearer $DATAVERSE_ACCESS_TOKEN" \ -H "Accept: application/json" \ -H "OData-MaxVersion: 4.0" \ -H "OData-Version: 4.0" ``` ```bash claude mcp add dataverse -t stdio -- npx -y @microsoft/dataverse mcp https://yourorg.crm.dynamics.com ``` Full config and headless snippets are in the full page. Through letme (picks today, calling later): https://letme.dev/dynamics-365-sales ## Similar tools | Tool | Grade | Score | Shared capabilities | Slim | | --- | --- | --- | --- | --- | | HubSpot API + MCP | BB | 71.5 | crm.records, crm.pipeline, crm.activities, crm.search, crm.webhooks | https://www.anchorterminal.com/tools/hubspot-mcp.min.md | | Zoho CRM | BB | 70.8 | crm.records, crm.pipeline, crm.activities, crm.search, crm.webhooks | https://www.anchorterminal.com/tools/zoho-crm.min.md | | Close API + MCP | B | 66.7 | crm.records, crm.pipeline, crm.activities, crm.search, crm.webhooks | https://www.anchorterminal.com/tools/close.min.md | | Twenty API + MCP | B | 65.9 | crm.records, crm.pipeline, crm.activities, crm.search, crm.webhooks | https://www.anchorterminal.com/tools/twenty.min.md | | Affinity | B | 63.4 | crm.records, crm.pipeline, crm.activities, crm.search, crm.webhooks | https://www.anchorterminal.com/tools/affinity.min.md | ## Panel reviews (0, desk reviews from public material, no calls made)