
Dynamics Crm
Connect your agent to Microsoft Dynamics 365 CRM through Membrane so you can read and update Accounts, Contacts, Leads, and Opportunities without writing OAuth plumbing.
Overview
Dynamics-crm is an agent skill for the Build phase that connects coding agents to Microsoft Dynamics 365 CRM records and workflows via the Membrane CLI.
Install
npx skills add https://github.com/membranedev/application-skills --skill dynamics-crmWhat is this skill?
- Membrane CLI install via npm global @membranehq/cli for agent-driven Dynamics calls
- Tenant login flow with membrane login --tenant --clientName for credential refresh
- Documented entity surface: Account, Contact, Lead, Opportunity
- MIT-licensed skill aligned with Membrane Free tier for indie experiments
- Action-oriented integration model so agents focus on business logic not auth headers
- 4 core CRM entities highlighted: Account, Contact, Lead, Opportunity
Adoption & trust: 526 installs on skills.sh; 178 GitHub stars; 1/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need your agent to work with Dynamics 365 data but Microsoft auth and API surface feel too heavy to wire by hand in a solo sprint.
Who is it for?
Solo builders automating sales ops or building CRM-adjacent SaaS where the customer already runs Dynamics 365.
Skip if: Greenfield products with no Microsoft tenant, builders who cannot use third-party integration platforms, or read-only analytics that only need a warehouse export.
When should I use this skill?
The user wants to interact with Microsoft Dynamics 365 data, manage CRM records, or automate sales workflows through Membrane.
What do I get? / Deliverables
You install Membrane, authenticate once, and invoke documented actions against core CRM entities without maintaining custom OAuth refresh code.
- Authenticated Membrane session
- Agent-executable CRM actions mapped to your use case
Recommended Skills
Journey fit
Dynamics CRM access is classic Build-phase integration work when your product must sync with an existing enterprise sales stack. Membrane CLI actions against Dynamics entities fit the integrations subphase—not Validate scoping or Grow lifecycle campaigns.
How it compares
Skill package for Membrane-mediated CRM access—not a self-hosted MCP server you operate.
Common Questions / FAQ
Who is dynamics-crm for?
Indie developers and small teams who use Claude Code, Cursor, or similar agents to integrate with Dynamics 365 through Membrane instead of hand-rolling Microsoft identity flows.
When should I use dynamics-crm?
During Build integrations when syncing leads, updating opportunities, or building agent workflows that read Account and Contact records from a live Dynamics tenant.
Is dynamics-crm safe to install?
It requires network access and CRM credentials via Membrane; check this page’s Security Audits panel and your org’s data policies before granting agent access to production CRM.
SKILL.md
READMESKILL.md - Dynamics Crm
# Microsoft Dynamics 365 Microsoft Dynamics 365 is a suite of CRM and ERP applications used by businesses to manage customer relationships, sales, marketing, and operations. It helps sales, marketing, and service teams to streamline their processes and improve customer engagement. Think of it as a competitor to Salesforce. Official docs: https://learn.microsoft.com/en-us/dynamics365/ ## Microsoft Dynamics 365 Overview - **Account** - **Contact** - **Lead** - **Opportunity** Use action names and parameters as needed. ## Working with Microsoft Dynamics 365 This skill uses the Membrane CLI to interact with Microsoft Dynamics 365. Membrane handles authentication and credentials refresh automatically — so you can focus on the integration logic rather than auth plumbing. ### Install the CLI Install the Membrane CLI so you can run `membrane` from the terminal: ```bash npm install -g @membranehq/cli@latest ``` ### Authentication ```bash membrane login --tenant --clientName=<agentType> ``` This will either open a browser for authentication or print an authorization URL to the console, depending on whether interactive mode is available. **Headless environments:** The command will print an authorization URL. Ask the user to open it in a browser. When they see a code after completing login, finish with: ```bash membrane login complete <code> ``` Add `--json` to any command for machine-readable JSON output. **Agent Types** : claude, openclaw, codex, warp, windsurf, etc. Those will be used to adjust tooling to be used best with your harness ### Connecting to Microsoft Dynamics 365 Use `membrane connection ensure` to find or create a connection by app URL or domain: ```bash membrane connection ensure "https://dynamics.microsoft.com/crm" --json ``` The user completes authentication in the browser. The output contains the new connection id. This is the fastest way to get a connection. The URL is normalized to a domain and matched against known apps. If no app is found, one is created and a connector is built automatically. If the returned connection has `state: "READY"`, skip to **Step 2**. #### 1b. Wait for the connection to be ready If the connection is in `BUILDING` state, poll until it's ready: ```bash npx @membranehq/cli connection get <id> --wait --json ``` The `--wait` flag long-polls (up to `--timeout` seconds, default 30) until the state changes. Keep polling until `state` is no longer `BUILDING`. The resulting state tells you what to do next: - **`READY`** — connection is fully set up. Skip to **Step 2**. - **`CLIENT_ACTION_REQUIRED`** — the user or agent needs to do something. The `clientAction` object describes the required action: - `clientAction.type` — the kind of action needed: - `"connect"` — user needs to authenticate (OAuth, API key, etc.). This covers initial authentication and re-authentication for disconnected connections. - `"provide-input"` — more information is needed (e.g. which app to connect to). - `clientAction.description` — human-readable explanation of what's needed. - `clientAction.uiUrl` (optional) — URL to a pre-built UI where the user can complete the action. Show this to the user when present. - `clientAction.agentInstructions` (optional) — instructions for the AI agent on how to proceed programmatically. After the user completes the action (e.g. authenticates in the browser), poll again with `membrane connection get <id> --json` to check if the state moved to `READY`. - **`CONFIGURATION_ERROR`