# Reading Attio, Pipedrive, Zoho CRM and Dynamics 365 without changing them

Checked on 2026-11-06 against Attio's developer docs and help centre, and the Pipedrive, Zoho and Microsoft MCP pages. Plan limits and UI paths change often: verify them on the day and cite the page.

## Attio: MCP server

- Endpoint `https://mcp.attio.com/mcp`. Reads are approved automatically; writes ask for confirmation. Decline every write confirmation, and ask the user to deny write tools in the client as a second boundary.
- Identity first: `whoami`.
- Read tools for this audit: `list-objects`, `list-attribute-definitions`, `list-list-attribute-definitions`, `list-lists`, `list-workspace-members`, `list-workspace-teams`, `list-records`, `list-records-in-list`, `get-records-by-ids`, and `query-particle-sql` for counts on the Enterprise plan.
- Allow only the read tools listed here and set every other tool to deny: every `create-`, `update-`, `upsert-`, `delete-`, `add-` and `merge-` tool. `merge-records` is irreversible and creates new record IDs; the note, task, comment and list entry tools write too.
- With `list-records` and `get-records-by-ids`, request record IDs and the attributes under audit only; never print names or email addresses.
- Rate limits (per workspace): 100 reads and 25 writes per second, SQL 2 per second.

## Attio: REST API with a read-scoped token

- The admin creates a workspace token with read scopes only (`object_configuration:read`, `list_configuration:read`, `record_permission:read`, `user_management:read`, `webhook:read`), runs the calls, and shares the JSON. The agent never holds the token. Identify shows which scopes a token has.
- Attribute flags worth reading: `is_unique`, `is_required`, `is_writable`, `is_system_attribute`, `is_archived`, `is_multiselect`, and relationship cardinality. Save the list attributes response and run `normalize_exports.py attio-attributes --object <object> --options options.json`, where the options file maps each select or status attribute slug to its option titles.
- Access levels: members are admin, member or suspended; lists are full-access, read-and-write or read-only. Object and list access can be set workspace-wide on Plus and per team and member on Pro and Enterprise (ACC-05).
- Historic values: the record attribute values endpoint with `show_historic` returns each value with `active_from` and `created_by_actor`. It is not available for communication intelligence or enriched attributes. Save one block per record and field, then run `writer_history.py --format attio`.

## Attio behaviours that shape findings

- SQL is Enterprise only and SELECT only.
- A merge creates a new record; the originals can no longer be read or written, and the merge endpoint is a beta that is not idempotent. Integrations keyed on Attio record IDs need a remap (OBJ-06).
- Upsert searches on a matching attribute that need not be unique; a value matching several records is rejected. It reconciles non-matching multi-value attributes to the supplied values, which can remove existing entries (INT-07).
- Mailbox sync creates people your team emailed or met and, by default, a company for each non-public email domain (OBJ-03).
- Plans differ in seats, objects and permission controls. Free workspaces are visible and editable by all users, so restricted data on Free is ACC-05 FAIL.
- Import2 matches people by email and companies by domain, and not all historical stage changes migrate. Do not read trend breaks around a migration date as business change.

## Pipedrive

- Pipedrive's MCP server uses OAuth and the user's permissions, is metered by tokens, and documents no read-only mode. Connect it under a user with a narrow permission set and ask the user to deny every deal, person, organisation and activity create and update tool in the client.
- UI evidence to capture: data fields per entity, pipelines and stages with probabilities, automations, visibility groups and permission sets, marketplace apps and webhooks (verify each path at run time).
- Export field definitions to the generic CSV ([../assets/example-generic-fields.csv](../assets/example-generic-fields.csv) shows the columns) and run `normalize_exports.py generic-fields`. The `writers` column (semicolon separated `type:name` labels) feeds FLD-02 and FLD-03 directly, so fill it for every critical field; the same applies to Zoho CRM and Dynamics 365 exports.

## Zoho CRM

- Use only the Data Insights MCP server: read-only COQL queries, module lists and field schemas. The Data Operations, Module Customization and Workflow and Process Automation servers change data or configuration; never connect them for an audit. Calls consume API credits.
- UI evidence: modules and fields, workflow rules, Blueprint, profiles and roles, the audit log (verify paths).

## Dynamics 365 and Dataverse

- Connect the Dataverse MCP server through a connection whose security role grants read only, and allow only `read_query`, `search`, `search_data` and `describe`: the others create, update or delete rows, tables and skills, or invoke APIs. Microsoft has renamed these tools, so check any allow list against the live tool table. Calls are billed in Copilot Credits. Check Microsoft's list of supported clients before setup.
- UI evidence: solutions and their layers, business rules, Power Automate flows that touch CRM tables, security roles, business units, field security profiles and auditing settings (verify paths).

## Where each domain lives, per CRM

These are the objects and settings to look at, not exact menu labels. Find the current label in the vendor's docs on the day.

- OBJ (objects, associations, identity)
  - HubSpot: objects and custom objects, association labels, unique-value properties, company auto-association, duplicate management.
  - Salesforce: standard and custom objects, record types, External ID and Unique flags, duplicate and matching rules, lead conversion settings.
  - Attio: objects and lists, relationship attributes, unique attributes, mailbox sync record creation.
  - Pipedrive: persons, organisations, deals, leads; duplicate detection settings.
  - Zoho CRM: modules, lookup fields, unique fields, duplicate check settings.
  - Dynamics 365: tables, relationships, alternate keys, duplicate detection rules.
- FLD (properties and field governance)
  - HubSpot: property export, property definition export, data quality tabs, property history.
  - Salesforce: describe output, field history tracking, field usage from Org Check.
  - Attio: attribute definitions, select options and statuses, historic values.
  - Pipedrive: data fields; Zoho CRM: module fields and layouts; Dynamics 365: columns and auditing.
- PIPE (pipelines and stages)
  - HubSpot: pipelines and stages with probability and closed metadata. Salesforce: OpportunityStage, sales processes, forecast categories. Attio: status attributes and pipeline lists. Pipedrive: pipelines and stage probabilities. Zoho CRM: Stage-Probability mapping. Dynamics 365: business process flows and opportunity stages.
- LIFE (lifecycle and lead status)
  - HubSpot: `lifecyclestage`, `hs_lead_status`, the leads object, lifecycle automation settings. Salesforce: Lead Status, conversion, any custom lifecycle field. Attio: the status or select attribute used for lifecycle. Pipedrive: lead and deal labels. Zoho CRM: Lead Status and conversion mapping. Dynamics 365: lead status reasons and qualification.
- AUTO (automation and workflows)
  - HubSpot: workflows (v4 flow JSON), sequences. Salesforce: flows, Process Builder, Workflow Rules, Apex triggers. Attio: workflows. Pipedrive: automations. Zoho CRM: workflow rules, Blueprint, functions. Dynamics 365: Power Automate, classic workflows, plug-ins, business rules.
  - Outside HubSpot and Salesforce, automations are entered by hand. Record each one's enabled state, field writes, deletes, consent changes and filters, then set `writes_known`, `actions_known` and `refs_known` to true ([inventory-format.md](inventory-format.md)). An automation with nothing recorded keeps AUTO-03, AUTO-06 and the other rules that need its definition NOT CHECKED, never passed.
- ACC (users, permissions and teams)
  - HubSpot: users, Super Admin flag, permission sets, teams. Salesforce: profiles, permission sets and groups, roles, sharing. Attio: member access levels, list access, teams. Pipedrive: permission sets and visibility groups. Zoho CRM: profiles and roles. Dynamics 365: security roles, business units, teams, field security profiles.
- INT (integrations and sync ownership)
  - HubSpot: connected apps, legacy private apps, service keys, webhooks, data sync, the Salesforce integration. Salesforce: connected apps, External Client Apps, named credentials, OAuth tokens, installed packages. Attio: installed apps, API tokens, webhooks. Pipedrive: marketplace apps, API tokens, webhooks. Zoho CRM: connections and Zoho Flow. Dynamics 365: application users, Power Automate connections, plug-in registrations.
- REP (reporting readiness)
  - Every CRM: headline reports and dashboards, their report types or data sources, filters, currency settings, and a record-ID export with the same filters for reconciliation.
