MCP Dynamics CRM Server
# MCP Dynamics CRM Server
Servidor MCP (Model Context Protocol) para automação do Microsoft Dynamics CRM e Power Platform.
## Funcionalidades
### 1. Plugins (C#)
- Geração de código C# para plugins com templates profissionais
- Registro e gerenciamento de steps de plugins
- Listagem de assemblies, tipos e steps
- Ativar/desativar steps
- Consulta de trace logs para diagnóstico
- Geração de projetos completos (.csproj + classes)
### 2. Web Resources
- Criação de web resources (JS, HTML, CSS, imagens, etc.)
- Templates com helpers para formulários Dynamics
- Atualização de conteúdo
- Publicação de web resources
- Leitura de conteúdo (decodificação Base64)
### 3. Schema (Tabelas, Campos, Formulários, Views)
- Criação de tabelas (entidades) customizadas
- Criação de colunas com todos os tipos suportados
- Gerenciamento de formulários (leitura e atualização de FormXML)
- Criação e listagem de views (system e personal)
- Criação de relacionamentos (1:N e N:N)
- Geração de FetchXML
- Publicação de customizações
### 4. Gestão de Soluções
- Criação de soluções e publicadores
- Adicionar/remover componentes
- Exportação (managed/unmanaged)
- Importação com acompanhamento de status
- Clone/patch de soluções
- Verificação de dependências
### 5. Telemetria e Performance
- Dashboard de saúde do sistema
- Análise de performance de plugins
- Identificação de plugins lentos
- Monitoramento de workflows e processos
- Análise por entidade
- Histórico de auditoria
- Monitoramento de system jobs
- Operações em massa
## Configuração
### Pré-requisitos
1. **Node.js** >= 18
2. **Azure AD App Registration** com permissões para Dynamics 365:
- `user_impersonation` no Dynamics CRM (delegated) ou
- Application permissions configuradas
### Variáveis de Ambiente
```bash
cp .env.example .env
```
Configure no `.env`:
| Variável | Descrição | Obrigatório |
|---|---|---|
| `DYNAMICS_TENANT_ID` | Azure AD Tenant ID | Sim |
| `DYNAMICS_CLIENT_ID` | App Registration Client ID | Sim |
| `DYNAMICS_CLIENT_SECRET` | Client Secret | Sim* |
| `DYNAMICS_ENVIRONMENT_URL` | URL do ambiente (ex: `https://org.crm.dynamics.com`) | Sim |
| `DYNAMICS_USERNAME` | Username (auth delegada) | Não |
| `DYNAMICS_PASSWORD` | Password (auth delegada) | Não |
*Obrigatório para autenticação app-only (recomendado).
### Instalação
```bash
npm install
npm run build
```
### Uso com Claude Desktop
Adicione ao seu `claude_desktop_config.json`:
```json
{
"mcpServers": {
"dynamics-crm": {
"command": "node",
"args": ["/caminho/para/mcp-dynamics-crm/dist/index.js"],
"env": {
"DYNAMICS_TENANT_ID": "seu-tenant-id",
"DYNAMICS_CLIENT_ID": "seu-client-id",
"DYNAMICS_CLIENT_SECRET": "seu-client-secret",
"DYNAMICS_ENVIRONMENT_URL": "https://seuorg.crm.dynamics.com"
}
}
}
}
```
### Uso com Claude Code
```json
{
"mcpServers": {
"dynamics-crm": {
"command": "node",
"args": ["dist/index.js"],
"cwd": "/caminho/para/mcp-dynamics-crm",
"env": {
"DYNAMICS_TENANT_ID": "seu-tenant-id",
"DYNAMICS_CLIENT_ID": "seu-client-id",
"DYNAMICS_CLIENT_SECRET": "seu-client-secret",
"DYNAMICS_ENVIRONMENT_URL": "https://seuorg.crm.dynamics.com"
}
}
}
}
```
## Tools Disponíveis
### Plugins
| Tool | Descrição |
|---|---|
| `dynamics_generate_plugin_code` | Gera código C# de plugin |
| `dynamics_list_plugin_assemblies` | Lista assemblies registrados |
| `dynamics_list_plugin_types` | Lista tipos (classes) de um assembly |
| `dynamics_list_plugin_steps` | Lista steps registrados |
| `dynamics_register_plugin_step` | Registra novo step |
| `dynamics_toggle_plugin_step` | Ativa/desativa step |
| `dynamics_delete_plugin_step` | Remove step |
| `dynamics_get_plugin_trace_logs` | Consulta logs de trace |
| `dynamics_generate_plugin_project` | Gera projeto completo |
### Web Resources
| Tool | Descrição |
|---|---|
| `dynamics_create_web_resource` | Cria web resource |
| `dynamics_update_web_resource` | Atualiza conteúdo |
| `dynamics_list_web_resources` | Lista com filtros |
| `dynamics_publish_web_resources` | Publica web resources |
| `dynamics_get_web_resource_content` | Lê conteúdo decodificado |
| `dynamics_generate_web_resource_code` | Gera código template |
| `dynamics_delete_web_resource` | Remove web resource |
### Schema
| Tool | Descrição |
|---|---|
| `dynamics_create_table` | Cria tabela (entidade) |
| `dynamics_create_column` | Cria coluna (atributo) |
| `dynamics_list_tables` | Lista tabelas |
| `dynamics_list_columns` | Lista colunas |
| `dynamics_get_forms` | Recupera formulários |
| `dynamics_update_form` | Atualiza formulário |
| `dynamics_get_views` | Recupera views |
| `dynamics_create_view` | Cria view |
| `dynamics_update_column` | Atualiza coluna |
| `dynamics_delete_column` | Remove coluna |
| `dynamics_create_relationship` | Cria relacionamento |
| `dynamics_publish_customizations` | Publica customizações |
| `dynamics_generate_fetchxml` | Gera FetchXML |
### Soluções
| Tool | Descrição |
|---|---|
| `dynamics_create_solution` | Cria solução |
| `dynamics_list_solutions` | Lista soluções |
| `dynamics_add_solution_component` | Adiciona componente |
| `dynamics_remove_solution_component` | Remove componente |
| `dynamics_list_solution_components` | Lista componentes |
| `dynamics_export_solution` | Exporta solução |
| `dynamics_import_solution` | Importa solução |
| `dynamics_get_import_job_status` | Status de importação |
| `dynamics_clone_solution` | Clona/patch solução |
| `dynamics_list_publishers` | Lista publicadores |
| `dynamics_create_publisher` | Cria publicador |
| `dynamics_delete_solution` | Remove solução |
| `dynamics_check_solution_dependencies` | Verifica dependências |
### Telemetria
| Tool | Descrição |
|---|---|
| `dynamics_get_plugin_performance` | Performance de plugins |
| `dynamics_get_workflow_performance` | Performance de workflows |
| `dynamics_get_active_processes` | Processos ativos |
| `dynamics_get_system_jobs` | Jobs do sistema |
| `dynamics_get_entity_analytics` | Análise por entidade |
| `dynamics_get_audit_history` | Histórico de auditoria |
| `dynamics_get_slow_plugins` | Plugins lentos |
| `dynamics_get_bulk_operations` | Operações em massa |
| `dynamics_system_health` | Dashboard de saúde |
## Exemplos de Uso
### Criar um plugin
```
"Crie um plugin PreOperation para validar o campo email na entidade contact"
```
### Criar uma tabela com campos
```
"Crie uma tabela new_projeto com campos nome, data_inicio (DateTime), status (Picklist com Aberto/Em Andamento/Concluído) e valor (Money)"
```
### Verificar saúde do sistema
```
"Mostre o dashboard de saúde do sistema e identifique plugins lentos"
```
### Gerenciar soluções
```
"Liste as soluções unmanaged e exporte a solução MinhaSolucao"
```
## Licença
MIT
TDQS
Scored across 51 tools
Most tools have distinct purposes with clear boundaries, such as dynamics_create_table versus dynamics_create_column, or dynamics_get_plugin_performance versus dynamics_get_slow_plugins. However, some overlap exists in monitoring tools like dynamics_get_system_jobs and dynamics_get_bulk_operations, which could cause minor confusion in selection.
All tool names follow a consistent snake_case pattern with a 'dynamics_' prefix and clear verb_noun structure, such as dynamics_create_solution, dynamics_list_tables, and dynamics_update_column. This predictability makes it easy for agents to understand and use the tools effectively.
With 51 tools, the count is excessive for a single server, leading to potential overwhelm and inefficiency. While the domain is broad, this many tools suggests poor scoping and could hinder agent performance due to complexity and decision fatigue.
The tool set provides comprehensive coverage for Dynamics CRM management, including CRUD operations for solutions, tables, columns, web resources, and plugins, along with monitoring, analytics, and system health tools. No significant gaps are apparent, supporting full lifecycle management.