[object Object]

A platform architect inherits two CRMs after a merger and is told to make them feel like one. Building point-to-point integrations is the old answer. The Wave 1 MCP integration in Copilot Studio gives you a different one: agents on each platform speak a shared protocol and coordinate without the fragile middleware. The pattern is real, and the security review is non-trivial.

The Integration

Copilot Studio agents can discover and call MCP servers, including external ones. Microsoft agents querying Salesforce via Salesforce MCP. Custom enterprise MCP servers usable from both Copilot and Agentforce. The protocol negotiates capability discovery, tool invocation, and response handling without each agent needing custom code per consumer.

agent_mcp_config:
  servers:
    - name: salesforce_crm
      url: https://contoso.my.salesforce.com/mcp
      auth: oauth2
    - name: legacy_inventory
      url: https://internal-mcp.contoso.com/inventory
      auth: managed_identity

The auth model is per-server. Standardize on OAuth where possible; managed identity is fine for internal-only servers but cannot reach across organizational boundaries.

Pattern: Cross-CRM Agent

Microsoft sales-rep agent reads Salesforce opportunity data via MCP. Writes to Microsoft Dynamics. Updates back to Salesforce for CRM consistency. Bidirectional MCP calls coordinate the dual systems. The pattern works when one CRM is the system of record and the other is read-mostly with selective write-back.

Read flow:
- Agent receives prompt about an opportunity
- Calls Salesforce MCP for opportunity details
- Calls Dynamics for related case history
- Composes response with both data sources

Write flow:
- Agent updates opportunity stage in Dynamics (system of record)
- MCP call to Salesforce mirrors the stage change
- Both systems converge within seconds

The data ownership decision must be explicit. Without it, both systems claim authority and you get conflicts in the audit trail.

Pattern: Specialized Tool

Enterprise has legacy system wrapped as MCP. Multiple agents across Microsoft and Salesforce platforms call the same MCP server for legacy access. Single integration, multiple consumers. This pattern is the cleanest way to expose a legacy ERP, mainframe, or vertical system to modern agentic workflows without rebuilding the legacy.

// Inside the MCP server
async function getInventory(sku) {
  const legacy = await callLegacyERP({ command: "INV_LOOKUP", sku });
  return { sku, available: legacy.qty, location: legacy.warehouse };
}

The MCP server is the abstraction layer. Agents do not know about the legacy details; they call a clean tool and get a structured response.

Governance

Each vendor governs agents built on their platform. Cross-vendor coordination needs shared policy at the MCP layer. Data access controls, rate limits, audit logging applied uniformly. The MCP server enforces the policy because the agents that call it are not under your control.

mcp_policy:
  rate_limit: 100/min/agent
  data_scopes:
    salesforce_read: [opportunity, account]
    dynamics_write: [opportunity_stage, activity]
  audit:
    log_calls: true
    retention_days: 90

Build the policy before opening the second MCP endpoint, not after.

Network and Latency

MCP calls cross organizational boundaries. Latency matters. A user prompt that fans out to three MCP servers for context will feel slow if any server is in a different region. Co-locate the MCP servers with the consuming agents where possible; for cross-region inevitability, set explicit timeouts on the agent side and design degraded responses.

Versioning the Tools

MCP tools are versioned. A change to the inventory lookup tool that adds a required parameter will break callers that did not get the memo. Adopt semantic versioning on tools, publish a deprecation schedule for breaking changes, and notify consumer agents (or their owners) before retiring a version.

Observability Across Vendors

Correlate the agent prompt, the MCP call, and the downstream system response with a shared correlation header. Without correlation, debugging a cross-vendor failure is guesswork. Each platform has its own log surface; the correlation header is what stitches them together.

What to do this week

Inventory the integration scenarios that already span CRMs and assess whether MCP would replace the existing middleware. Stand up one read-only MCP server for a low-risk data source, define the rate limit and audit policy, and pilot with a single agent before expanding the scope.

[object Object]
Share