@dav3/mcp-dynamics365-server
Version:
Generic MCP server for Dynamics 365 CRM operations (AI-generated side project with limited maintenance)
99 lines (98 loc) • 3.06 kB
JavaScript
export const queryTools = [
{
name: "execute_odata_query",
description: "Execute a custom OData query against Dynamics 365 Web API",
inputSchema: {
type: "object",
properties: {
query: {
type: "string",
description: 'Raw OData query (e.g., "contacts?$filter=statecode eq 0&$select=firstname,lastname")',
},
},
required: ["query"],
},
},
{
name: "execute_function",
description: "Execute a custom Dynamics 365 function or action",
inputSchema: {
type: "object",
properties: {
functionName: {
type: "string",
description: "The name of the function or action to execute",
},
parameters: {
type: "object",
description: "Parameters to pass to the function (optional)",
},
},
required: ["functionName"],
},
},
];
export async function handleQueryTools(name, args, apiClient) {
switch (name) {
case "execute_odata_query":
return await handleExecuteODataQuery(args, apiClient);
case "execute_function":
return await handleExecuteFunction(args, apiClient);
default:
throw new Error(`Unknown query tool: ${name}`);
}
}
async function handleExecuteODataQuery(args, apiClient) {
const { query } = args;
const result = await apiClient.executeCustomQuery(query);
if (!result.success) {
return {
content: [
{
type: "text",
text: `Error executing OData query: ${result.error}`,
},
],
};
}
return {
content: [
{
type: "text",
text: JSON.stringify(result.data, null, 2),
},
],
};
}
async function handleExecuteFunction(args, apiClient) {
const { functionName, parameters } = args;
// For now, we'll use the custom query method to execute functions
// In a more advanced implementation, this could be a separate method
let query = functionName;
if (parameters && Object.keys(parameters).length > 0) {
const params = new URLSearchParams();
for (const [key, value] of Object.entries(parameters)) {
params.append(key, String(value));
}
query += `?${params.toString()}`;
}
const result = await apiClient.executeCustomQuery(query);
if (!result.success) {
return {
content: [
{
type: "text",
text: `Error executing function: ${result.error}`,
},
],
};
}
return {
content: [
{
type: "text",
text: JSON.stringify(result.data, null, 2),
},
],
};
}