CRM Account Planning Cowork Agent MCP Server
Provides CRM account planning tools that interact with Salesforce, such as retrieving account 360 views, pipeline, opportunity details, relationships, and updating next steps, with support for writes gated by configuration.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CRM Account Planning Cowork Agent MCP ServerShow me the account 360 and open opportunities for Contoso."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CRM Account Planning Cowork Agent — MCP Server
One-click Azure deployment for the integration layer described in microsoft/ai-agent-runbooks → CRM-Account-Planning-Cowork-Agent → 2.Architecture.md.
The runbook is guidance, not code. The only component in that architecture you actually deploy to Azure is the MCP server — Copilot Cowork, the built-in skills, custom skills, and the Organization Asset Library are all M365 tenant configuration. This repo builds and deploys that MCP server, with the tool design, payload shaping, and governance switches the runbook prescribes.
The button works in any Azure tenant — it only needs Contributor on a resource group. With the
default dataMode = sample it deploys and runs end to end with no CRM credentials, so you can wire
it into Copilot and validate the whole path before touching Salesforce.
What gets deployed
Resource | Purpose |
App Service plan (Linux, B1 by default) | Hosts the server; |
Web App (Node 20 LTS) | The MCP server, HTTPS-only, TLS 1.2 minimum, FTPS disabled, health probe on |
Application Insights + Log Analytics | The MCP server is in the critical path of a sales workflow — monitor it like production |
System-assigned managed identity | Ready for Key Vault references or downstream Entra-protected APIs |
Source is shipped as a prebuilt zip release asset and pushed to the site by the ARM deployment itself, so there is no container registry, no build pipeline in your subscription, and no secrets in the template. The deployment finishes with the code already running.
Parameters
Parameter | Default | Notes |
|
| Must be globally unique — it becomes the hostname |
|
|
|
|
|
|
| empty | Required only when |
| empty | Optional bearer token on |
|
| Set |
| latest release asset | Prebuilt zip to deploy. Point at your own build to ship your tool set |
After deployment
The deployment outputs mcpEndpoint and healthEndpoint. Check the server is up:
curl https://<siteName>.azurewebsites.net/health
# {"status":"ok","dataMode":"sample","writesEnabled":true,"protectedByApiKey":false}Then point any MCP client at https://<siteName>.azurewebsites.net/mcp. DNS for a brand-new
hostname can take a minute to propagate.
Related MCP server: Azure ML MCP Server
The tools
Five task-shaped tools, matching the runbook's "do this" table. Each returns a bounded, field-selected payload — never raw CRM records.
Tool | Returns |
| One account: firmographics, open opportunities, renewal dates, product usage, key contacts, recent activity — assembled server-side |
| Open opportunities for an owner or segment with stage, value, close date, risk |
| One opportunity with custom fields and field history |
| Parent/child accounts, partners, competitive displacements |
| A single, narrow write — gated by |
Design constraints honoured deliberately:
5 tools, not 40. Response quality degrades past ~10, and all tools of a matched plugin are injected into the prompt.
No
run_soql_query. Query composition stays server-side so the model never needs CRM schema knowledge.Bounded payloads. Row caps, field selection, and truncated free-text fields keep the token window intact.
Write blast radius of one. The write tool takes exactly one record id and one field.
Connecting it to Copilot
Deploy, then confirm
/health.Register the endpoint
https://<siteName>.azurewebsites.net/mcpas an MCP plugin — via Copilot Studio, or admin-deployed org-wide from the Microsoft 365 admin center (the governed path).Write the plugin description carefully. Past five plugins, selection is semantic matching on the plugin description, not on individual tools.
Add your custom skills for account-plan structure and QBR narrative rules, and point the artifact templates at your Organization Asset Library (
.potx/.dotx/.xltx).
Re-run your evaluation set after every deployment of this server: MCP plugins resolve tools dynamically at runtime, so a server change alters agent behaviour immediately with no release gate.
Identity: read this before production
The target pattern is per-user OAuth — the user authenticates to the MCP server, the server exchanges for a CRM token scoped to that user, and every tool call runs under it, so CRM record visibility follows the seller's own permissions and writes are attributable in the CRM audit trail.
The salesforce data mode in this repo implements the runbook's documented fallback: OAuth 2.0
client credentials against a connected app, i.e. a scoped service identity. Use it to get moving,
and treat it as a deliberate, documented limitation:
Restrict the plugin audience to a group whose CRM access is uniform.
Consider
allowWrites = falseuntil per-user identity is in place.Validate what identity your server actually receives in the exact Copilot surface you publish to before you build on the passthrough assumption.
Move the client secret to Key Vault and reference it from app settings once you are past the pilot.
Local development
npm install
npm start # http://localhost:3000/mcpEnvironment variables: PORT, DATA_MODE, ALLOW_WRITES, MCP_API_KEY, MAX_PIPELINE_ROWS,
SF_INSTANCE_URL, SF_CLIENT_ID, SF_CLIENT_SECRET, SF_API_VERSION.
Rebuild the ARM template after editing the Bicep:
az bicep build --file infra/main.bicep --outfile azuredeploy.jsonPublishing a new package: push a tag (v*) and the package workflow builds the zip, attaches it
to the release, and the button picks it up from releases/latest/download.
Licence
MIT. Sample data is fictional. Not an official Microsoft product.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
MCP server for generating rough-draft project plans from natural-language prompts.
Create, deploy, and operate MCP servers directly from your GitHub repositories.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables deployment and hosting of custom MCP servers on Databricks Apps platform. Provides a template and deployment methods for creating scalable MCP servers with Databricks authentication.-
- AlicenseNot gradedqualityFmaintenanceDeploys an MCP server on Azure Container Apps that exposes Azure ML managed online endpoints as tools, enabling AI agents like Azure AI Foundry to invoke machine learning models via natural language.MIT
- AlicenseNot gradedqualityCmaintenanceDeploys a Model Context Protocol (MCP) server on Azure with industry-specific templates, sample data, and pre-configured tools for AI agents to query and manage resources.1MIT
- AlicenseAqualityBmaintenanceMCP server for Azure resource management, AI Foundry, and Entra ID — inspect and operate Azure infrastructure through AI agents.3MIT