UNPKG

@dav3/mcp-dynamics365-server

Version:

Generic MCP server for Dynamics 365 CRM operations (AI-generated side project with limited maintenance)

244 lines (243 loc) 7.81 kB
export const entityTools = [ { name: "query_entities", description: "Query entities from Dynamics 365 with optional filtering, sorting, and pagination", inputSchema: { type: "object", properties: { entitySet: { type: "string", description: 'Entity set name (plural form, e.g., "contacts", "accounts", "opportunities") - NOT the entity logical name', }, select: { type: "string", description: 'Comma-separated list of fields to retrieve (e.g., "firstname,lastname,emailaddress1")', }, filter: { type: "string", description: 'OData filter expression (e.g., "statecode eq 0 and firstname eq \'John\'")', }, orderby: { type: "string", description: 'Order by clause (e.g., "createdon desc" or "lastname asc,firstname asc")', }, top: { type: "number", description: "Maximum number of records to return (default: 10, max: 5000)", }, }, required: ["entitySet"], }, }, { name: "get_entity", description: "Get a specific entity record by ID from Dynamics 365", inputSchema: { type: "object", properties: { entitySet: { type: "string", description: 'Entity set name (plural form, e.g., "contacts", "accounts", "opportunities")', }, entityId: { type: "string", description: "The unique identifier (GUID) of the entity record", }, select: { type: "string", description: 'Comma-separated list of fields to retrieve (e.g., "firstname,lastname,emailaddress1")', }, }, required: ["entitySet", "entityId"], }, }, { name: "create_entity", description: "Create a new entity record in Dynamics 365", inputSchema: { type: "object", properties: { entitySet: { type: "string", description: 'Entity set name (plural form, e.g., "contacts", "accounts", "opportunities")', }, data: { type: "object", description: "The data for the new entity record as key-value pairs", }, }, required: ["entitySet", "data"], }, }, { name: "update_entity", description: "Update an existing entity record in Dynamics 365", inputSchema: { type: "object", properties: { entitySet: { type: "string", description: 'Entity set name (plural form, e.g., "contacts", "accounts", "opportunities")', }, entityId: { type: "string", description: "The unique identifier (GUID) of the entity record to update", }, data: { type: "object", description: "The data to update as key-value pairs", }, }, required: ["entitySet", "entityId", "data"], }, }, { name: "delete_entity", description: "Delete an entity record from Dynamics 365", inputSchema: { type: "object", properties: { entitySet: { type: "string", description: 'Entity set name (plural form, e.g., "contacts", "accounts", "opportunities")', }, entityId: { type: "string", description: "The unique identifier (GUID) of the entity record to delete", }, }, required: ["entitySet", "entityId"], }, }, ]; export async function handleEntityTools(name, args, apiClient) { switch (name) { case "query_entities": return await handleQueryEntities(args, apiClient); case "get_entity": return await handleGetEntity(args, apiClient); case "create_entity": return await handleCreateEntity(args, apiClient); case "update_entity": return await handleUpdateEntity(args, apiClient); case "delete_entity": return await handleDeleteEntity(args, apiClient); default: throw new Error(`Unknown entity tool: ${name}`); } } async function handleQueryEntities(args, apiClient) { const { entitySet, select, filter, orderby, top } = args; const result = await apiClient.queryEntities(entitySet, { select, filter, orderby, top, }); if (!result.success) { return { content: [ { type: "text", text: `Error querying entities: ${result.error}`, }, ], }; } return { content: [ { type: "text", text: JSON.stringify(result.data, null, 2), }, ], }; } async function handleGetEntity(args, apiClient) { const { entitySet, entityId, select } = args; const result = await apiClient.getEntity(entitySet, entityId, select); if (!result.success) { return { content: [ { type: "text", text: `Error getting entity: ${result.error}`, }, ], }; } return { content: [ { type: "text", text: JSON.stringify(result.data, null, 2), }, ], }; } async function handleCreateEntity(args, apiClient) { const { entitySet, data } = args; const result = await apiClient.createEntity(entitySet, data); if (!result.success) { return { content: [ { type: "text", text: `Error creating entity: ${result.error}`, }, ], }; } return { content: [ { type: "text", text: JSON.stringify(result.data, null, 2), }, ], }; } async function handleUpdateEntity(args, apiClient) { const { entitySet, entityId, data } = args; const result = await apiClient.updateEntity(entitySet, entityId, data); if (!result.success) { return { content: [ { type: "text", text: `Error updating entity: ${result.error}`, }, ], }; } return { content: [ { type: "text", text: JSON.stringify(result.data, null, 2), }, ], }; } async function handleDeleteEntity(args, apiClient) { const { entitySet, entityId } = args; const result = await apiClient.deleteEntity(entitySet, entityId); if (!result.success) { return { content: [ { type: "text", text: `Error deleting entity: ${result.error}`, }, ], }; } return { content: [ { type: "text", text: "Entity deleted successfully", }, ], }; }