Skip to main content
Glama
rafteles2016

MCP Dynamics CRM Server

by rafteles2016

dynamics_create_column

Add custom fields to Dynamics CRM tables by defining column properties like data type, length, and validation rules for tailored data management.

Instructions

Cria uma nova coluna (campo/atributo) em uma tabela do Dynamics CRM

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
entityLogicalNameYesNome lógico da entidade
schemaNameYesNome do schema do campo (ex: new_MyField)
displayNameYesNome de exibição
attributeTypeYesTipo do atributo
descriptionNo
requiredLevelNoNone
maxLengthNoComprimento máximo (para String/Memo)
minValueNoValor mínimo (para numéricos)
maxValueNoValor máximo (para numéricos)
precisionNoPrecisão decimal
lookupTargetNoEntidade alvo (para Lookup)
optionSetValuesNoValores do OptionSet (para Picklist)
solutionUniqueNameNo

Implementation Reference

  • The handler for the "dynamics_create_column" tool, which constructs the attribute metadata and sends a POST request to the Dataverse API.
    server.tool(
      "dynamics_create_column",
      "Cria uma nova coluna (campo/atributo) em uma tabela do Dynamics CRM",
      CreateColumnSchema.shape,
      async (params: z.infer<typeof CreateColumnSchema>) => {
        const baseMetadata = ATTRIBUTE_TYPE_METADATA[params.attributeType] || {};
        const attrData: Record<string, unknown> = {
          ...baseMetadata,
          SchemaName: params.schemaName,
          DisplayName: {
            "@odata.type": "Microsoft.Dynamics.CRM.Label",
            LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: params.displayName, LanguageCode: 1046 }],
          },
          Description: {
            "@odata.type": "Microsoft.Dynamics.CRM.Label",
            LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: params.description || "", LanguageCode: 1046 }],
          },
          RequiredLevel: { Value: params.requiredLevel },
        };
    
        if (params.maxLength !== undefined) attrData.MaxLength = params.maxLength;
        if (params.minValue !== undefined) attrData.MinValue = params.minValue;
        if (params.maxValue !== undefined) attrData.MaxValue = params.maxValue;
        if (params.precision !== undefined) attrData.Precision = params.precision;
    
        if (params.attributeType === "Lookup" && params.lookupTarget) {
          attrData.Targets = [params.lookupTarget];
        }
    
        if (params.attributeType === "Picklist" && params.optionSetValues) {
          attrData.OptionSet = {
            IsGlobal: false,
            OptionSetType: "Picklist",
            Options: params.optionSetValues.map((opt) => ({
              Value: opt.value,
              Label: {
                LocalizedLabels: [{ Label: opt.label, LanguageCode: 1046 }],
              },
            })),
          };
        }
    
        let endpoint = `EntityDefinitions(LogicalName='${params.entityLogicalName}')/Attributes`;
        if (params.solutionUniqueName) {
          endpoint += `?SolutionUniqueName='${params.solutionUniqueName}'`;
        }
    
        const result = await client.post<{ MetadataId: string }>(endpoint, attrData);
    
        return {
          content: [
            {
              type: "text" as const,
              text: `Coluna criada com sucesso!\nMetadataId: ${result.MetadataId}\nSchema: ${params.schemaName}\nTipo: ${params.attributeType}\nEntidade: ${params.entityLogicalName}`,
            },
          ],
        };
      }
    );
  • The input schema definition for the "dynamics_create_column" tool.
    export const CreateColumnSchema = z.object({
      entityLogicalName: z.string().describe("Nome lógico da entidade"),
      schemaName: z.string().describe("Nome do schema do campo (ex: new_MyField)"),
      displayName: z.string().describe("Nome de exibição"),
      attributeType: AttributeTypeEnum,
      description: z.string().optional(),
      requiredLevel: z.enum(["None", "SystemRequired", "ApplicationRequired"]).default("None"),
      maxLength: z.number().optional().describe("Comprimento máximo (para String/Memo)"),
      minValue: z.number().optional().describe("Valor mínimo (para numéricos)"),
      maxValue: z.number().optional().describe("Valor máximo (para numéricos)"),
      precision: z.number().optional().describe("Precisão decimal"),
      lookupTarget: z.string().optional().describe("Entidade alvo (para Lookup)"),
      optionSetValues: z.array(z.object({
        label: z.string(),
        value: z.number(),
      })).optional().describe("Valores do OptionSet (para Picklist)"),
      solutionUniqueName: z.string().optional(),
    });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rafteles2016/mcpDynamics'

If you have feedback or need assistance with the MCP directory API, please join our Discord server